From a3b892776bc4c98c2ad739abeebb1550823b0a48 Mon Sep 17 00:00:00 2001 From: Anukul Pandey Date: Thu, 8 Aug 2024 11:02:44 +0530 Subject: [PATCH 1/4] chore: cleanup --- src/pools/pools.ts | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/pools/pools.ts b/src/pools/pools.ts index 3e10981..041e9c8 100644 --- a/src/pools/pools.ts +++ b/src/pools/pools.ts @@ -86,25 +86,6 @@ export const loadPool = async ( }; }; -/*export const loadPools = async ( - tokens: Token[], - signer: Signer, - factoryAddress: string, -): Promise => { - const tokenCombinations = uniqueCombinations(tokens); - const pools: Pool[] = []; - for (let index = 0; index < tokenCombinations.length; index += 1) { - try { - const [token1, token2] = tokenCombinations[index]; - /!* eslint-disable no-await-in-loop *!/ - const pool = await loadPool(token1, token2, signer, factoryAddress); - /!* eslint-disable no-await-in-loop *!/ - pools.push(pool); - } catch (e) {} - } - return pools; -};*/ - const cachePool$: Map< string, Observable> From 733f37801c7aed182d026aa5c16fe08851e7a9b8 Mon Sep 17 00:00:00 2001 From: Anukul Pandey Date: Thu, 8 Aug 2024 12:24:51 +0530 Subject: [PATCH 2/4] feat: replaced loadpool with indexer calls --- src/pools/pools.ts | 66 +++++++++++++++++++++++++----------- test/pools/loadPools.test.ts | 28 +++++++++++++++ 2 files changed, 75 insertions(+), 19 deletions(-) create mode 100644 test/pools/loadPools.test.ts diff --git a/src/pools/pools.ts b/src/pools/pools.ts index 041e9c8..7665351 100644 --- a/src/pools/pools.ts +++ b/src/pools/pools.ts @@ -1,5 +1,5 @@ import { Signer } from "@reef-chain/evm-provider"; -import { Contract } from "ethers"; +import { BigNumber, Contract } from "ethers"; import { getReefswapFactory } from "../network/rpc"; import { EMPTY_ADDRESS, @@ -13,6 +13,7 @@ import { ReefswapPair } from "../token/abi/ReefswapPair"; import { catchError, combineLatest, + firstValueFrom, map, Observable, of, @@ -28,6 +29,10 @@ import { } from "../reefState/model/statusDataObject"; import { ensure } from "../utils/utils"; import { Signer as EthersSigner } from "@ethersproject/abstract-signer"; +import axios from "axios"; +import { getReefswapNetworkConfig } from "src/network"; +import { selectedNetwork$ } from "src/reefState"; +import { queryGql$ } from "src/graphql"; const findPoolTokenAddress = async ( address1: string, @@ -40,6 +45,19 @@ const findPoolTokenAddress = async ( return address; }; +const getPoolInfoQuery = (address: string, time: string) => ` +query PoolInfoQuery { + poolInfo(address: "${address}", fromTime: "${time}", signerAddress: "", toTime: "${time}") { + totalSupply + userSupply + reserves { + reserved1 + reserved2 + } + } +} +`; + export const loadPool = async ( token1: Token | TokenBalance, token2: Token, @@ -53,34 +71,44 @@ export const loadPool = async ( factoryAddress ); ensure(address !== EMPTY_ADDRESS, "Pool does not exist!"); - const contract = new Contract( - address, - ReefswapPair, - signer as unknown as EthersSigner - ); - const decimals = await contract.decimals(); - const reserves = await contract.getReserves(); - const totalSupply = await contract.totalSupply(); - const liquidity = await contract.balanceOf(await signer.getAddress()); + let date = new Date(); + date.setDate(date.getDate() - 2); + + const network = await firstValueFrom(selectedNetwork$); + + const dexHttpClient = axios.create({ + baseURL: getReefswapNetworkConfig(network).graphqlDexsUrl, + }); - const address1 = await contract.token1(); + let res = ( + await firstValueFrom( + queryGql$(dexHttpClient, { + query: getPoolInfoQuery(address, date.toISOString()), + variables: {}, + }) + ) + ).data.poolInfo; - const [finalReserve1, finalReserve2] = - token1.address !== address1 - ? [reserves[0], reserves[1]] - : [reserves[1], reserves[0]]; + const decimals = "18"; // not sure if it is always 18 or what + const liquidity = res.userSupply; + const totalSupply = res.totalSupply; - const tokenBalance1 = finalReserve1.mul(liquidity).div(totalSupply); - const tokenBalance2 = finalReserve2.mul(liquidity).div(totalSupply); + const tokenBalance1 = BigNumber.from(res.reserves.reserved1) + .mul(liquidity) + .div(totalSupply); + const tokenBalance2 = BigNumber.from(res.reserves.reserved2) + .mul(liquidity) + .div(totalSupply); return { poolAddress: address, decimals: parseInt(decimals, 10), - reserve1: finalReserve1.toString(), - reserve2: finalReserve2.toString(), + reserve1: res.reserves.reserved1, + reserve2: res.reserves.reserved2, totalSupply: totalSupply.toString(), userPoolBalance: liquidity.toString(), + //@ts-ignore token1: { ...token1, balance: tokenBalance1 }, token2: { ...token2, balance: tokenBalance2 }, }; diff --git a/test/pools/loadPools.test.ts b/test/pools/loadPools.test.ts new file mode 100644 index 0000000..48a2c27 --- /dev/null +++ b/test/pools/loadPools.test.ts @@ -0,0 +1,28 @@ +import { beforeAll, describe, it, expect } from "vitest"; +import { firstValueFrom, skip, skipWhile, tap } from "rxjs"; +import { initReefState, selectedPools_status$ } from "../../src/reefState"; +import { AVAILABLE_NETWORKS } from "../../src/network"; +import { fetchPools$, loadPool } from "../../src/pools/pools"; + +describe("pools", () => { + const signingKey = {}; + + beforeAll(async () => { + initReefState({ + network: AVAILABLE_NETWORKS.testnet, + jsonAccounts: { + accounts: [ + { + address: "5EnY9eFwEDcEJ62dJWrTXhTucJ4pzGym4WZ2xcDKiT3eJecP", + isSelected: true, + }, + ], + injectedSigner: signingKey, + }, + }); + }); + it("should load pool details", async () => { + const res = await firstValueFrom(selectedPools_status$.pipe(skip(1))); + expect(res.data.length).toBeGreaterThan(0); + }); +}); From 60c0539e23aebe60fb0c76d1d022e6c91792ec53 Mon Sep 17 00:00:00 2001 From: Anukul Pandey Date: Thu, 8 Aug 2024 12:30:54 +0530 Subject: [PATCH 3/4] feat: user supply --- src/pools/pools.ts | 21 +++++++++++++++++---- test/pools/loadPools.test.ts | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/pools/pools.ts b/src/pools/pools.ts index 7665351..d4ba0ac 100644 --- a/src/pools/pools.ts +++ b/src/pools/pools.ts @@ -31,7 +31,11 @@ import { ensure } from "../utils/utils"; import { Signer as EthersSigner } from "@ethersproject/abstract-signer"; import axios from "axios"; import { getReefswapNetworkConfig } from "src/network"; -import { selectedNetwork$ } from "src/reefState"; +import { + selectedAccount$, + selectedAddress$, + selectedNetwork$, +} from "src/reefState"; import { queryGql$ } from "src/graphql"; const findPoolTokenAddress = async ( @@ -45,9 +49,13 @@ const findPoolTokenAddress = async ( return address; }; -const getPoolInfoQuery = (address: string, time: string) => ` +const getPoolInfoQuery = ( + address: string, + time: string, + selectedAddress: string +) => ` query PoolInfoQuery { - poolInfo(address: "${address}", fromTime: "${time}", signerAddress: "", toTime: "${time}") { + poolInfo(address: "${address}", fromTime: "${time}", signerAddress: "${selectedAddress}", toTime: "${time}") { totalSupply userSupply reserves { @@ -76,6 +84,7 @@ export const loadPool = async ( date.setDate(date.getDate() - 2); const network = await firstValueFrom(selectedNetwork$); + const selectedAccount = await firstValueFrom(selectedAccount$); const dexHttpClient = axios.create({ baseURL: getReefswapNetworkConfig(network).graphqlDexsUrl, @@ -84,7 +93,11 @@ export const loadPool = async ( let res = ( await firstValueFrom( queryGql$(dexHttpClient, { - query: getPoolInfoQuery(address, date.toISOString()), + query: getPoolInfoQuery( + address, + date.toISOString(), + selectedAccount.evmAddress + ), variables: {}, }) ) diff --git a/test/pools/loadPools.test.ts b/test/pools/loadPools.test.ts index 48a2c27..adc215d 100644 --- a/test/pools/loadPools.test.ts +++ b/test/pools/loadPools.test.ts @@ -22,7 +22,7 @@ describe("pools", () => { }); }); it("should load pool details", async () => { - const res = await firstValueFrom(selectedPools_status$.pipe(skip(1))); + const res = await firstValueFrom(selectedPools_status$.pipe(skip(10))); expect(res.data.length).toBeGreaterThan(0); }); }); From 28f62a346704d9ed2558d3325963e08e31228a63 Mon Sep 17 00:00:00 2001 From: matjazonline Date: Thu, 10 Oct 2024 14:40:40 +0200 Subject: [PATCH 4/4] fix imports --- src/pools/pools.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pools/pools.ts b/src/pools/pools.ts index d4ba0ac..67d7a8c 100644 --- a/src/pools/pools.ts +++ b/src/pools/pools.ts @@ -30,13 +30,13 @@ import { import { ensure } from "../utils/utils"; import { Signer as EthersSigner } from "@ethersproject/abstract-signer"; import axios from "axios"; -import { getReefswapNetworkConfig } from "src/network"; +import { getReefswapNetworkConfig } from "../network"; import { selectedAccount$, selectedAddress$, selectedNetwork$, -} from "src/reefState"; -import { queryGql$ } from "src/graphql"; +} from "../reefState"; +import { queryGql$ } from "../graphql"; const findPoolTokenAddress = async ( address1: string,