Skip to content

Commit

Permalink
SOV-4539 fetch pool data from indexer (#1050)
Browse files Browse the repository at this point in the history
* chore: change bob sepolia rpc address

* feat: add indexer helper to sdk

* feat: bob pools

* chore: clean up ambient pool references

* fix: resolve comments

* Force rebuild

* fix: ambient pool issues.

* Force rebuild

* chore: adjust search for ambient pools

* fix: test timeouts

---------

Co-authored-by: Rick <[email protected]>
Co-authored-by: Tomas Tilnak <[email protected]>
  • Loading branch information
3 people authored Jan 28, 2025
1 parent c73f791 commit 36b941b
Show file tree
Hide file tree
Showing 79 changed files with 816 additions and 1,017 deletions.
5 changes: 5 additions & 0 deletions .changeset/lazy-adults-shake.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@sovryn/sdk': patch
---

SOV-4539: fetch pools from indexer
6 changes: 6 additions & 0 deletions .changeset/serious-llamas-protect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'frontend': patch
'@sovryn/sdex': patch
---

chore: change bob testnet rpc address
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import React, { FC, useEffect, useState } from 'react';

import { CrocEnv } from '@sovryn/sdex';
import { Pool } from '@sovryn/sdk';
import { Decimal } from '@sovryn/utils';

import { BOB_CHAIN_ID } from '../../../../config/chains';

import { AmountRenderer } from '../../../2_molecules/AmountRenderer/AmountRenderer';
import { AssetPairRenderer } from '../../../2_molecules/AssetPairRenderer/AssetPairRenderer';
import { loadIndexer } from '../../../../lib/indexer';
import { decimalic } from '../../../../utils/math';
import { AmbientLiquidityPool } from '../../MarketMakingPage/components/AmbientMarketMaking/utils/AmbientLiquidityPool';
import { AmbientLiquidityPoolDictionary } from '../../MarketMakingPage/components/AmbientMarketMaking/utils/AmbientLiquidityPoolDictionary';
import { Claim } from '../hooks/useClaimLp';

type ClaimableItemProps = {
Expand All @@ -18,7 +18,7 @@ type ClaimableItemProps = {

export const ClaimableItem: FC<ClaimableItemProps> = ({ item }) => {
const [loading, setLoading] = useState<boolean>(false);
const [pool, setPool] = useState<AmbientLiquidityPool | null>(null);
const [pool, setPool] = useState<Pool | null>(null);
const [liqBase, setLiqBase] = useState<Decimal>(Decimal.ZERO);
const [liqQuote, setLiqQuote] = useState<Decimal>(Decimal.ZERO);

Expand All @@ -27,14 +27,19 @@ export const ClaimableItem: FC<ClaimableItemProps> = ({ item }) => {
try {
setLoading(true);
const env = new CrocEnv(BOB_CHAIN_ID);
const amm = AmbientLiquidityPoolDictionary.list(BOB_CHAIN_ID).find(
p => p.lpTokenAddress?.toLowerCase() === item.token.toLowerCase(),
const pools = await loadIndexer(BOB_CHAIN_ID).pools.list();
const amm = pools.find(
p => p.extra.lpToken?.toLowerCase() === item.token.toLowerCase(),
);
setPool(amm!);
if (!amm) {
return;
}
const p = env.pool(amm.baseAddress, amm.quoteAddress, amm.poolIndex);
const p = env.pool(
amm.base.address,
amm.quote.address,
amm.extra.poolIdx,
);

const [spotPrice, baseDecimals, quoteDecimals] = await Promise.all([
p.spotPrice(),
Expand All @@ -47,6 +52,7 @@ export const ClaimableItem: FC<ClaimableItemProps> = ({ item }) => {
(Number(item.amount) * Math.sqrt(spotPrice)).toFixed(0),
).toUnits(baseDecimals),
);

setLiqQuote(
decimalic(
(Number(item.amount) / Math.sqrt(spotPrice)).toFixed(0),
Expand All @@ -69,16 +75,16 @@ export const ClaimableItem: FC<ClaimableItemProps> = ({ item }) => {
<div className="first:mt-4 mb-2 px-4 py-2 bg-gray-70 flex flex-row space-x-4 items-center justify-between text-xs rounded">
<div className="basis-1/3">
<AssetPairRenderer
asset1={pool?.quote}
asset2={pool?.base}
asset1={pool.quote.symbol}
asset2={pool.base.symbol}
chainId={BOB_CHAIN_ID}
/>
</div>
<div className="basis-1/3">
<AmountRenderer value={liqBase} suffix={pool?.base} />
<AmountRenderer value={liqBase} suffix={pool.base.symbol} />
</div>
<div className="basis-1/3">
<AmountRenderer value={liqQuote} suffix={pool?.quote} />
<AmountRenderer value={liqQuote} suffix={pool.quote.symbol} />
</div>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,35 @@ import { RSK_CHAIN_ID } from '../../../../../config/chains';

import { MarketMakingNetworkBanner } from '../../../../2_molecules/MarketMakingNetworkBanner/MarketMakingNetworkBanner';
import { BOB_STORAGE_KEY } from '../../../../2_molecules/MarketMakingNetworkBanner/MarketMakingNetworkBanner.constants';
import { useCacheCall } from '../../../../../hooks';
import { useCurrentChain } from '../../../../../hooks/useChainStore';
import { loadIndexer } from '../../../../../lib/indexer';
import { translations } from '../../../../../locales/i18n';
import { AmbientPoolsTable } from './components/AmbientPoolsTable/AmbientPoolsTable';
import { PoolListGroup } from './utils/AmbientLiquidityPool';
import { AmbientLiquidityPoolDictionary } from './utils/AmbientLiquidityPoolDictionary';

export const AmbientMarketMaking: FC = () => {
const chainId = useCurrentChain();
const newPools = useMemo(
() => AmbientLiquidityPoolDictionary.list(chainId, PoolListGroup.new),
const { value } = useCacheCall(
'mm',
chainId,
async () => {
return (await loadIndexer(chainId).pools.list()).sort((a, b) =>
a.base.symbol < b.base.symbol ? -1 : 1,
);
},
[chainId],
[],
);
const allPools = useMemo(
() => AmbientLiquidityPoolDictionary.list(chainId),
[chainId],

const newPools = useMemo(
() => (value ?? []).filter(pool => pool.featured),
[value],
);

const [searchInputValue, setSearchInputValue] = useState('');

const allPools = useMemo(() => value ?? [], [value]);

return (
<>
<Helmet>
Expand All @@ -45,6 +55,7 @@ export const AmbientMarketMaking: FC = () => {
requiredChainId={RSK_CHAIN_ID}
storageKey={BOB_STORAGE_KEY}
/>

<div className="text-gray-10 mt-6 mb-4 sm:mt-9">
<Heading className="text-center mb-1 lg:mb-3 text-base lg:text-2xl">
{t(translations.ambientMarketMaking.title)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ import React from 'react';

import { t } from 'i18next';

import { numberToChainId } from '@sovryn/ethers-provider';
import { Pool } from '@sovryn/sdk';
import { HelperButton } from '@sovryn/ui';

import { AmountRenderer } from '../../../../../../2_molecules/AmountRenderer/AmountRenderer';
import { TransactionIdRenderer } from '../../../../../../2_molecules/TransactionIdRenderer/TransactionIdRenderer';
import { translations } from '../../../../../../../locales/i18n';
import { AmbientPosition } from '../../AmbientMarketMaking.types';
import { AmbientLiquidityPool } from '../../utils/AmbientLiquidityPool';
import { AmbientPoolPositionClaimFees } from './components/AmbientPoolPositionClaimFees/AmbientPoolPositionClaimFees';
import { AmbientPoolPositionWithdraw } from './components/AmbientPoolPositionWithdraw/AmbientPoolPositionWithdraw';
import { AmbientPoolReposition } from './components/AmbientPoolReposition/AmbientPoolReposition';
Expand All @@ -17,14 +18,14 @@ import { AmbientPositionPrices } from './components/AmbientPositionPrices/Ambien
import { AmbientPositionStatus } from './components/AmbientPositionStatus/AmbientPositionStatus';
import { AmbientPositionValue } from './components/AmbientPositionValue/AmbientPositionValue';

export const COLUMNS_CONFIG = (pool: AmbientLiquidityPool) => [
export const COLUMNS_CONFIG = (pool: Pool) => [
{
id: 'positionID',
title: t(translations.ambientMarketMaking.positionsTable.positionID),
cellRenderer: (position: AmbientPosition) => (
<TransactionIdRenderer
hash={position.transactionHash}
chainId={pool.chainId}
chainId={numberToChainId(pool.chainId)}
/>
),
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ import React, { FC } from 'react';

import { t } from 'i18next';

import { numberToChainId } from '@sovryn/ethers-provider';
import { Pool } from '@sovryn/sdk';
import { HelperButton, SimpleTableRow, Table } from '@sovryn/ui';

import { AmountRenderer } from '../../../../../../2_molecules/AmountRenderer/AmountRenderer';
import { TransactionIdRenderer } from '../../../../../../2_molecules/TransactionIdRenderer/TransactionIdRenderer';
import { useIsMobile } from '../../../../../../../hooks/useIsMobile';
import { translations } from '../../../../../../../locales/i18n';
import { useGetAmbientPositions } from '../../hooks/useGetAmbientPositions';
import { AmbientLiquidityPool } from '../../utils/AmbientLiquidityPool';
import { COLUMNS_CONFIG } from './AmbientPoolPositions.constants';
import styles from './AmbientPoolPositions.module.css';
import { AmbientPoolPositionClaimFees } from './components/AmbientPoolPositionClaimFees/AmbientPoolPositionClaimFees';
Expand All @@ -20,7 +21,7 @@ import { AmbientPositionStatus } from './components/AmbientPositionStatus/Ambien
import { AmbientPositionValue } from './components/AmbientPositionValue/AmbientPositionValue';

type AmbientPoolPositionsProps = {
pool: AmbientLiquidityPool;
pool: Pool;
};

export const AmbientPoolPositions: FC<AmbientPoolPositionsProps> = ({
Expand All @@ -41,7 +42,7 @@ export const AmbientPoolPositions: FC<AmbientPoolPositionsProps> = ({
value={
<TransactionIdRenderer
hash={position.transactionHash}
chainId={pool.chainId}
chainId={numberToChainId(pool.chainId)}
/>
}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ import React, { FC, useCallback, useState } from 'react';

import { t } from 'i18next';

import { Pool } from '@sovryn/sdk';
import { ButtonSize, ButtonStyle, Button } from '@sovryn/ui';

import { useMaintenance } from '../../../../../../../../../hooks/useMaintenance';
import { translations } from '../../../../../../../../../locales/i18n';
import { BobClaimFeesModal } from '../../../../../BobClaimFeesModal/BobClaimFeesModal';
import { AmbientPosition } from '../../../../AmbientMarketMaking.types';
import { AmbientLiquidityPool } from '../../../../utils/AmbientLiquidityPool';

type AmbientPoolPositionClaimFeesProps = {
pool: AmbientLiquidityPool;
pool: Pool;
position: AmbientPosition;
className?: string;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ import React, { FC, useCallback, useState } from 'react';

import { t } from 'i18next';

import { Pool } from '@sovryn/sdk';
import { ButtonSize, ButtonStyle, Button } from '@sovryn/ui';

import { useMaintenance } from '../../../../../../../../../hooks/useMaintenance';
import { translations } from '../../../../../../../../../locales/i18n';
import { BobWithdrawModal } from '../../../../../BobWIthdrawModal/BobWithdrawModal';
import { AmbientPosition } from '../../../../AmbientMarketMaking.types';
import { AmbientLiquidityPool } from '../../../../utils/AmbientLiquidityPool';

type AmbientPoolPositionWithdrawProps = {
pool: AmbientLiquidityPool;
pool: Pool;
position: AmbientPosition;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@ import React, { FC, useCallback, useState } from 'react';

import { t } from 'i18next';

import { Pool } from '@sovryn/sdk';
import { ButtonSize, ButtonStyle, Button } from '@sovryn/ui';

import { useMaintenance } from '../../../../../../../../../hooks/useMaintenance';
import { translations } from '../../../../../../../../../locales/i18n';
import { DepositContextProvider } from '../../../../../BobDepositModal/contexts/BobDepositModalContext';
import { BobRepositionModal } from '../../../../../BobRepositionModal/BobRepositionModal';
import { AmbientPosition } from '../../../../AmbientMarketMaking.types';
import { AmbientLiquidityPool } from '../../../../utils/AmbientLiquidityPool';
import { usePositionStatus } from '../../hooks/usePositionStatus';

type AmbientPoolRepositionProps = {
pool: AmbientLiquidityPool;
pool: Pool;
position: AmbientPosition;
className?: string;
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
import React, { FC } from 'react';

import { numberToChainId } from '@sovryn/ethers-provider';
import { Pool } from '@sovryn/sdk';

import { AmountRenderer } from '../../../../../../../../2_molecules/AmountRenderer/AmountRenderer';
import { useIsMounted } from '../../../../../../../../../hooks/useIsMounted';
import { useTokenDetailsByAsset } from '../../../../../../../../../hooks/useTokenDetailsByAsset';
import { decimalic } from '../../../../../../../../../utils/math';
import { AmbientPosition } from '../../../../AmbientMarketMaking.types';
import { AmbientLiquidityPool } from '../../../../utils/AmbientLiquidityPool';
import { useAmbientPositionBalance } from '../../hooks/useAmbientPositionBalance';

type AmbientPositionBalanceProps = {
pool: AmbientLiquidityPool;
pool: Pool;
position: AmbientPosition;
};

Expand All @@ -18,8 +20,14 @@ export const AmbientPositionBalance: FC<AmbientPositionBalanceProps> = ({
pool,
}) => {
const isMounted = useIsMounted();
const baseToken = useTokenDetailsByAsset(pool.base, pool.chainId);
const quoteToken = useTokenDetailsByAsset(pool.quote, pool.chainId);
const baseToken = useTokenDetailsByAsset(
pool.base.symbol,
numberToChainId(pool.chainId),
);
const quoteToken = useTokenDetailsByAsset(
pool.quote.symbol,
numberToChainId(pool.chainId),
);
const result = useAmbientPositionBalance(pool, position);
if (!result || !isMounted()) {
return null;
Expand All @@ -31,13 +39,13 @@ export const AmbientPositionBalance: FC<AmbientPositionBalanceProps> = ({
value={decimalic(result?.positionLiqBase || '0').toUnits(
baseToken?.decimals,
)}
suffix={pool.base}
suffix={pool.base.symbol}
/>
<AmountRenderer
value={decimalic(result?.positionLiqQuote || '0').toUnits(
quoteToken?.decimals,
)}
suffix={pool.quote}
suffix={pool.quote.symbol}
/>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import React, { FC, useCallback, useMemo } from 'react';

import { MIN_TICK, MAX_TICK, tickToPrice, toDisplayPrice } from '@sovryn/sdex';
import { Pool } from '@sovryn/sdk';

import { AmountRenderer } from '../../../../../../../../2_molecules/AmountRenderer/AmountRenderer';
import { PoolPositionType } from '../../../../../../MarketMakingPage.types';
import { useGetPoolInfo } from '../../../../../BobDepositModal/hooks/useGetPoolInfo';
import { useGetTokenDecimals } from '../../../../../BobWIthdrawModal/hooks/useGetTokenDecimals';
import { AmbientPosition } from '../../../../AmbientMarketMaking.types';
import { AmbientLiquidityPool } from '../../../../utils/AmbientLiquidityPool';

type AmbientPositionPricesProps = {
pool: AmbientLiquidityPool;
pool: Pool;
position: AmbientPosition;
};

Expand All @@ -25,25 +23,19 @@ export const AmbientPositionPrices: FC<AmbientPositionPricesProps> = ({
[position],
);

const { poolTokens } = useGetPoolInfo(pool.base, pool.quote);
const { baseTokenDecimals, quoteTokenDecimals } = useGetTokenDecimals(
poolTokens?.tokenA,
poolTokens?.tokenB,
);

const renderAmountRenderer = useCallback(
(tick: number) => (
<AmountRenderer
value={toDisplayPrice(
tickToPrice(tick),
baseTokenDecimals,
quoteTokenDecimals,
pool.base.decimals,
pool.quote.decimals,
true,
)}
suffix={pool.quote}
suffix={pool.quote.symbol}
/>
),
[baseTokenDecimals, quoteTokenDecimals, pool.quote],
[pool.base.decimals, pool.quote.decimals, pool.quote.symbol],
);

if (isAmbient) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ import React, { FC, useMemo } from 'react';

import { t } from 'i18next';

import { Pool } from '@sovryn/sdk';

import { translations } from '../../../../../../../../../locales/i18n';
import { AmbientPosition } from '../../../../AmbientMarketMaking.types';
import { AmbientLiquidityPool } from '../../../../utils/AmbientLiquidityPool';
import { usePositionStatus } from '../../hooks/usePositionStatus';

type AmbientPositionStatusProps = {
pool: AmbientLiquidityPool;
pool: Pool;
position?: AmbientPosition;
className?: string;
};
Expand Down
Loading

0 comments on commit 36b941b

Please sign in to comment.