From 8e29e6baaacac05ec4c25b97cfd776bafed3e99d Mon Sep 17 00:00:00 2001 From: leifu Date: Tue, 10 Sep 2024 21:54:33 +0300 Subject: [PATCH 01/16] Update the arbitrum endpoint --- aggregator-derivatives/kwenta/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregator-derivatives/kwenta/index.ts b/aggregator-derivatives/kwenta/index.ts index 6166dc1e01..0e8c6309ea 100644 --- a/aggregator-derivatives/kwenta/index.ts +++ b/aggregator-derivatives/kwenta/index.ts @@ -29,7 +29,7 @@ const PROVIDER_CONFIG = { }, [CHAIN.ARBITRUM]: { startTimestamp: 1696032000, - endpoint: "https://subgraph.satsuma-prod.com/7ed49092fef1/equilibria/perennial-v2-arbitrum-new/api", + endpoint: "https://subgraph.perennial.finance/arbitrum", query: gql` query aggregateStats($startTimestamp: BigInt!, $endTimestamp: BigInt!) { marketAccumulations( From f90f467712962fac90c94460f40d169d21ff6b2a Mon Sep 17 00:00:00 2001 From: TerrenceAddison Date: Wed, 11 Sep 2024 11:33:37 +0700 Subject: [PATCH 02/16] update to allow backfill --- options/arrow-markets/index.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/options/arrow-markets/index.ts b/options/arrow-markets/index.ts index 2a1d0e51f1..a114287e11 100644 --- a/options/arrow-markets/index.ts +++ b/options/arrow-markets/index.ts @@ -15,7 +15,7 @@ export const v2_adapter: SimpleAdapter = { adapter: { [CHAIN.AVAX]: { fetch: fetchArrowMarketsVolumeData, - start: 1702630075 + start: 1707350400 }, }, }; @@ -24,8 +24,7 @@ export async function fetchArrowMarketsVolumeData( /** Timestamp representing the end of the 24 hour period */ timestamp: number ) { - let timestamp_in_ms = timestamp * 1000 - const ArrowMarketsVolumeData = await getArrowMarketsVolumeData(arrowMarketsVolumeEndpoint); + const ArrowMarketsVolumeData = await getArrowMarketsVolumeData(arrowMarketsVolumeEndpoint, timestamp); const dailyPremiumVolume = Number(ArrowMarketsVolumeData.daily_premium_volume).toFixed(2); const dailyNotionalVolume = Number(ArrowMarketsVolumeData.daily_notional_volume).toFixed(2); @@ -39,7 +38,10 @@ export async function fetchArrowMarketsVolumeData( }; } -async function getArrowMarketsVolumeData(endpoint: string): Promise { +async function getArrowMarketsVolumeData(endpoint: string, timestamp: number): Promise { + const url = new URL(endpoint); + url.searchParams.append('timestamp', timestamp.toString()); + return fetchURL(endpoint) } From 5e35fa1797cbd032f785b1f09352821333381eb6 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 11 Sep 2024 13:11:56 +0300 Subject: [PATCH 03/16] added wolfswap aggregator --- aggregators/wolfswap/index.ts | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 aggregators/wolfswap/index.ts diff --git a/aggregators/wolfswap/index.ts b/aggregators/wolfswap/index.ts new file mode 100644 index 0000000000..7a073b99ef --- /dev/null +++ b/aggregators/wolfswap/index.ts @@ -0,0 +1,38 @@ +import { ChainBlocks, FetchOptions } from "../../adapters/types"; + +const abis = { + "Swapped": "event Swapped(uint indexed id, address wallet, address sourceToken, address destinationToken, uint amountOut)", +} + +const contracts = { + polygon: '0x9fB5f7Bc34cEd4dE039405D7bE26CbF1D0a420d9', + cronos: '0xeC68090566397DCC37e54B30Cc264B2d68CF0489', + cronos_zkevm: '0x7c39eAcCd16cDAD8BFE05e1874da1BD315DB766F', + base: '0xE6174feAD698da575312ae85020A3224E556f8F9', + avax: '0x643dEB007DfA43c0D7BeA2155E97E61279d9a56F', + sei: '0x1AD805e80b59C802f9D8059f904DCA6AC153de30', + blast: '0xb86a6e5702C327c5C051Bf5323Cb2bAb5E628d0c', +} + +const fetch = async (timestamp: number, _: ChainBlocks, { createBalances, getLogs, chain, api }: FetchOptions) => { + const dailyVolume = createBalances() + const logs = await getLogs({ target: contracts[chain], eventAbi: abis.Swapped, }) + logs.forEach((log: any) => { + dailyVolume.add(log.destinationToken, log.amountOut) + }) + return { timestamp, dailyVolume } +}; + +const adapter: any = { + adapter: { + polygon: { fetch, start: 1710972000, }, + cronos: { fetch, start: 1711317600, }, + cronos_zkevm: { fetch, start: 1718830800, }, + base: { fetch, start: 1713128400, }, + avax: { fetch, start: 1717189200, }, + //sei: { fetch, start: 1717189200, }, + blast: { fetch, start: 1709848800, }, + }, +}; + +export default adapter; From a73d87a421955c804f7539639ced9ab9c7810434 Mon Sep 17 00:00:00 2001 From: nature Date: Thu, 12 Sep 2024 01:37:10 +0800 Subject: [PATCH 04/16] feat:add dailyFees/dailyRevenue for ref finance --- fees/ref-finance/index.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 fees/ref-finance/index.ts diff --git a/fees/ref-finance/index.ts b/fees/ref-finance/index.ts new file mode 100644 index 0000000000..4b49938874 --- /dev/null +++ b/fees/ref-finance/index.ts @@ -0,0 +1,21 @@ +import { SimpleAdapter } from "../../adapters/types"; +import { httpGet } from "../../utils/fetchURL"; +const api_fee = "https://api.ref.finance/get-total-fee" +const api_revenue = "https://api.ref.finance/get-total-revenue" +const adapter: SimpleAdapter = { + adapter: { + "near": { + start: 1725897600, + fetch: async () => { + const fee_result = await httpGet(api_fee); + const revenue_result = await httpGet(api_revenue); + return { + dailyFees: fee_result?.data?.total_fee || '0', + dailyRevenue: revenue_result?.data.total_revenue || '0', + } + } + } + } +}; + +export default adapter; From b11b6ca2477ae3ff3515bb394258d8e286b2cd09 Mon Sep 17 00:00:00 2001 From: tomshear32 Date: Wed, 11 Sep 2024 23:12:34 +0300 Subject: [PATCH 05/16] feat(Project): Add dHEDGE Fees --- fees/dhedge/index.ts | 141 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 fees/dhedge/index.ts diff --git a/fees/dhedge/index.ts b/fees/dhedge/index.ts new file mode 100644 index 0000000000..abe9c4d499 --- /dev/null +++ b/fees/dhedge/index.ts @@ -0,0 +1,141 @@ +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; +import { CHAIN } from "../../helpers/chains"; +import { gql, GraphQLClient } from "graphql-request"; + +const PROVIDER_CONFIG = { + [CHAIN.OPTIMISM]: { + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-optimism/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { daoFee, tokenPriceAtLastFeeMint } + }`, + managerFeeMintedEventsField: "managerFeeMinteds", + }, + [CHAIN.POLYGON]: { + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-polygon/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { daoFee, tokenPriceAtLastFeeMint } + }`, + managerFeeMintedEventsField: "managerFeeMinteds", + }, + [CHAIN.ARBITRUM]: { + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-arbitrum/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { daoFee, tokenPriceAtLastFeeMint } + }`, + managerFeeMintedEventsField: "managerFeeMinteds", + }, + [CHAIN.BASE]: { + startTimestamp: 1712227101, + endpoint: "https://api.studio.thegraph.com/query/48129/dhedge-v2-base-mainnet/version/latest", + feeMintedEventsQuery: gql` + query managerFeeMinteds($startTimestamp: BigInt!, $endTimestamp: BigInt!) { + managerFeeMinteds( + where: { daoFee_not: 0, blockTimestamp_gte: $startTimestamp, blockTimestamp_lte: $endTimestamp }, + first: 1000, orderBy: blockTimestamp, orderDirection: asc + ) { daoFee, tokenPriceAtLastFeeMint } + }`, + managerFeeMintedEventsField: "managerFeeMinteds", + }, +}; + +const fetchHistoricalFees = async (chainId: CHAIN, query: string, volumeField: string, startTimestamp: number, endTimestamp: number) => { + const { endpoint } = PROVIDER_CONFIG[chainId]; + + let allData = []; + let skip = 0; + const batchSize = 1000; + + while (true) { + try { + const data = await new GraphQLClient(endpoint).request(query, { + startTimestamp: startTimestamp.toString(), + endTimestamp: endTimestamp.toString(), + first: batchSize, + skip + }); + + const entries = data[volumeField]; + if (entries.length === 0) break; + allData = allData.concat(entries); + skip += batchSize; + + if (entries.length < batchSize) break; + + await sleep(500); + } catch (e) { + throw new Error(`Error fetching data for chain ${chainId}: ${e.message}`); + } + } + return allData; +}; + +const calculateFees = (data: any): number => + data.reduce((acc: number, item: any) => { + const daoFee = Number(item.daoFee); + const tokenPrice = Number(item.tokenPriceAtLastFeeMint); + const daoFeeInEth = daoFee / 1e18; + const tokenPriceInEth = tokenPrice / 1e18; + const result = daoFeeInEth * tokenPriceInEth; + return acc + result; + }, 0); + +const fetch = (chain) => { + return () => { + return async ({ endTimestamp, startTimestamp }: FetchOptions) => { + const config = PROVIDER_CONFIG[chain]; + if (!config) throw new Error(`Unsupported chain: ${chain}`); + + const [ + dailyFees + ] = await Promise.all([ + fetchHistoricalFees(chain as CHAIN, config.feeMintedEventsQuery, config.managerFeeMintedEventsField, startTimestamp, endTimestamp) + ]); + + return { + dailyFees: String(calculateFees(dailyFees)), + dailyRevenue: calculateFees(dailyFees), + timestamp: endTimestamp, + }; + } + } +}; + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +const adapter: SimpleAdapter = { + adapter: { + [CHAIN.OPTIMISM]: { + fetch: fetch(CHAIN.OPTIMISM)(), + start: 1638446653, + }, + [CHAIN.POLYGON]: { + fetch: fetch(CHAIN.POLYGON)(), + start: 1627560253, + }, + [CHAIN.ARBITRUM]: { + fetch: fetch(CHAIN.ARBITRUM)(), + start: 1679918653, + }, + [CHAIN.BASE]: { + fetch: fetch(CHAIN.BASE)(), + start: 1703073853, + }, + }, + version: 2 +} + +export default adapter; From 3a8138ce72c5f1a17ea03b96ecce12f84ac58e49 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Wed, 11 Sep 2024 22:58:39 +0100 Subject: [PATCH 06/16] protocols --- fees/dragonswap/index.ts | 21 ++------ fees/kyotoswap.ts | 10 +--- fees/nile-exchange/index.ts | 11 ++-- fees/nuri-exchange-v2/index.ts | 13 ++--- fees/pharaoh-exchange.ts | 11 ++-- fees/quickswap.ts | 66 +++++++++++------------- fees/ramses-exchange-v2/index.ts | 11 +--- fees/zyberswap.ts | 88 ++++++++++++++------------------ protocols/pancakeswap/index.ts | 30 ++--------- protocols/smbswap/index.ts | 25 ++------- protocols/uniswap/index.ts | 37 ++------------ 11 files changed, 98 insertions(+), 225 deletions(-) diff --git a/fees/dragonswap/index.ts b/fees/dragonswap/index.ts index 9648b3661c..e1ecef611e 100644 --- a/fees/dragonswap/index.ts +++ b/fees/dragonswap/index.ts @@ -1,7 +1,7 @@ import { Chain } from "@defillama/sdk/build/types"; -import { BaseAdapter, BreakdownAdapter, FetchOptions, IJSON } from "../../adapters/types"; +import { BaseAdapter, BreakdownAdapter, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; -import { getGraphDimensions } from "../../helpers/getUniSubgraph"; +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph"; const endpoints = { [CHAIN.KLAYTN]: "https://graph.dgswap.io/subgraphs/name/dragonswap/exchange-v2", @@ -11,8 +11,6 @@ const v3Endpoint = { [CHAIN.KLAYTN]: "https://graph.dgswap.io/subgraphs/name/dragonswap/exchange-v3", }; -const VOLUME_USD = "volumeUSD"; - const startTimes = { [CHAIN.KLAYTN]: 1707297572, } as IJSON; @@ -30,7 +28,7 @@ const methodology = { Fees: "All fees comes from the user." } -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, graphRequestHeaders: { [CHAIN.KLAYTN]: { @@ -40,9 +38,6 @@ const graphs = getGraphDimensions({ totalVolume: { factory: "pancakeFactories" }, - dailyVolume: { - factory: "pancakeDayData" - }, feesPercent: { type: "volume", Fees: 0.3, @@ -54,22 +49,14 @@ const graphs = getGraphDimensions({ } }); -const v3Graph = getGraphDimensions({ +const v3Graph = getGraphDimensions2({ graphUrls: v3Endpoint, totalVolume: { factory: "factories", }, - dailyVolume: { - factory: "pancakeDayData", - field: VOLUME_USD - }, totalFees: { factory: "factories", }, - dailyFees: { - factory: "pancakeDayData", - field: "feesUSD" - }, }); const adapter: BreakdownAdapter = { diff --git a/fees/kyotoswap.ts b/fees/kyotoswap.ts index 15ef9b3f38..2999b680ab 100644 --- a/fees/kyotoswap.ts +++ b/fees/kyotoswap.ts @@ -1,14 +1,11 @@ import * as sdk from "@defillama/sdk"; -import { getDexChainFees } from "../helpers/getUniSubgraphFees"; -import volumeAdapter from "../dexs/spookyswap"; import { Adapter, BaseAdapter, - BreakdownAdapter, IJSON, } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import { getGraphDimensions } from "../helpers/getUniSubgraph"; +import { getGraphDimensions, getGraphDimensions2 } from "../helpers/getUniSubgraph"; import { Chain } from "@defillama/sdk/build/general"; const endpoints = { @@ -16,14 +13,11 @@ const endpoints = { sdk.graph.modifyEndpoint('B1VWKexyptT1ixDdHsxj3EJnAxvuje7ANT39rnfq9rRG'), }; -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, totalVolume: { factory: "pancakeFactories", }, - dailyVolume: { - factory: "pancakeDayData", - }, feesPercent: { type: "volume", Fees: 0.25, diff --git a/fees/nile-exchange/index.ts b/fees/nile-exchange/index.ts index ea38c99ce3..84533903f2 100644 --- a/fees/nile-exchange/index.ts +++ b/fees/nile-exchange/index.ts @@ -1,10 +1,11 @@ import { Adapter, FetchOptions } from "../../adapters/types"; -import { ARBITRUM, CHAIN } from "../../helpers/chains"; +import { CHAIN } from "../../helpers/chains"; import { fees_bribes } from './bribes'; import { getGraphDimensions, DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, } from "../../helpers/getUniSubgraph" type TStartTime = { @@ -31,18 +32,12 @@ const v2Endpoints = { [CHAIN.LINEA]: "https://api.studio.thegraph.com/query/66247/nile-cl/version/latest/", }; -const VOLUME_USD = "volumeUSD"; - -const v2Graphs = getGraphDimensions({ +const v2Graphs = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", HoldersRevenue: 72, diff --git a/fees/nuri-exchange-v2/index.ts b/fees/nuri-exchange-v2/index.ts index ace7747bcb..798d67f7cd 100644 --- a/fees/nuri-exchange-v2/index.ts +++ b/fees/nuri-exchange-v2/index.ts @@ -1,10 +1,9 @@ import { Adapter, FetchOptions } from "../../adapters/types"; -import { ARBITRUM, CHAIN } from "../../helpers/chains"; +import { CHAIN } from "../../helpers/chains"; import { fees_bribes } from './bribes'; import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, } from "../../helpers/getUniSubgraph" type TStartTime = { @@ -31,18 +30,12 @@ const v2Endpoints = { [CHAIN.SCROLL]: "https://api.studio.thegraph.com/query/66247/nuri-cl/version/latest", }; -const VOLUME_USD = "volumeUSD"; - -const v2Graphs = getGraphDimensions({ +const v2Graphs = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", HoldersRevenue: 72, diff --git a/fees/pharaoh-exchange.ts b/fees/pharaoh-exchange.ts index e8c81e0de9..f3b464ec50 100644 --- a/fees/pharaoh-exchange.ts +++ b/fees/pharaoh-exchange.ts @@ -1,11 +1,10 @@ import * as sdk from "@defillama/sdk"; -import { SimpleAdapter, FetchResultFees, BaseAdapter } from "../adapters/types"; +import { SimpleAdapter } from "../adapters/types"; import { AVAX, CHAIN } from "../helpers/chains"; - import { - getGraphDimensions, DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, } from "../helpers/getUniSubgraph"; type TStartTime = { @@ -22,16 +21,12 @@ const v2Endpoints = { const VOLUME_USD = "volumeUSD"; -const v2Graphs = getGraphDimensions({ +const v2Graphs = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", HoldersRevenue: 72, diff --git a/fees/quickswap.ts b/fees/quickswap.ts index 006bb0dfd5..ee1dfa3122 100644 --- a/fees/quickswap.ts +++ b/fees/quickswap.ts @@ -2,16 +2,14 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { BreakdownAdapter, BaseAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import customBackfill from "../helpers/customBackfill"; - -import { - getGraphDimensions -} from "../helpers/getUniSubgraph" +import { getGraphDimensions2 } from "../helpers/getUniSubgraph"; const v2Endpoints = { - [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd'), -} -const v2Graph = getGraphDimensions({ + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint( + "FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd", + ), +}; +const v2Graph = getGraphDimensions2({ graphUrls: v2Endpoints, feesPercent: { type: "volume", @@ -20,41 +18,35 @@ const v2Graph = getGraphDimensions({ SupplySideRevenue: 0.3, HoldersRevenue: 0, Revenue: 0, - Fees: 0.3 - } + Fees: 0.3, + }, }); const v3Endpoints = { - [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint( + "CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7", + ), // [CHAIN.DOGECHAIN]: "https://graph-node.dogechain.dog/subgraphs/name/quickswap/dogechain-info", - [CHAIN.POLYGON_ZKEVM]:"https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7" -} + [CHAIN.POLYGON_ZKEVM]: + "https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7", +}; type TStartTime = { [s: string | Chain]: number; -} +}; const startTimeV3: TStartTime = { [CHAIN.POLYGON]: 1662425243, [CHAIN.POLYGON_ZKEVM]: 1679875200, [CHAIN.DOGECHAIN]: 1660694400, -} +}; -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "algebraDayData", - field: "volumeUSD", - dateField: "date" - }, - dailyFees: { - factory: "algebraDayData", - field: "feesUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 0, @@ -62,8 +54,8 @@ const v3Graphs = getGraphDimensions({ Fees: 0, UserFees: 100, // User fees are 100% of collected fees SupplySideRevenue: 100, // 100% of fees are going to LPs - Revenue: 0 // Revenue is 100% of collected fees - } + Revenue: 0, // Revenue is 100% of collected fees + }, }); const methodology = { @@ -72,8 +64,8 @@ const methodology = { Revenue: "Protocol have no revenue", ProtocolRevenue: "Protocol have no revenue.", SupplySideRevenue: "All user fees are distributed among LPs.", - HoldersRevenue: "Holders have no revenue." -} + HoldersRevenue: "Holders have no revenue.", +}; const adapter: BreakdownAdapter = { version: 2, @@ -83,7 +75,7 @@ const adapter: BreakdownAdapter = { fetch: v2Graph(CHAIN.POLYGON), start: 1602118043, meta: { - methodology + methodology, }, }, }, @@ -92,12 +84,12 @@ const adapter: BreakdownAdapter = { fetch: v3Graphs(chain as Chain), start: startTimeV3[chain], meta: { - methodology - } - } - return acc - }, {} as BaseAdapter) - } -} + methodology, + }, + }; + return acc; + }, {} as BaseAdapter), + }, +}; export default adapter; diff --git a/fees/ramses-exchange-v2/index.ts b/fees/ramses-exchange-v2/index.ts index 470ceb83be..d4d300ff43 100644 --- a/fees/ramses-exchange-v2/index.ts +++ b/fees/ramses-exchange-v2/index.ts @@ -3,9 +3,8 @@ import { Adapter, FetchOptions } from "../../adapters/types"; import { ARBITRUM, CHAIN } from "../../helpers/chains"; import { fees_bribes } from './bribes'; import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, + getGraphDimensions2, } from "../../helpers/getUniSubgraph" type TStartTime = { @@ -32,18 +31,12 @@ const v2Endpoints = { [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('G2tXDm6mgqBMuC7hq9GRVeTv5SRBAVnPFGcpGBab2cea'), }; -const VOLUME_USD = "volumeUSD"; - -const v2Graphs = getGraphDimensions({ +const v2Graphs = getGraphDimensions2({ graphUrls: v2Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", HoldersRevenue: 72, diff --git a/fees/zyberswap.ts b/fees/zyberswap.ts index f693284f26..4c2213ec4e 100644 --- a/fees/zyberswap.ts +++ b/fees/zyberswap.ts @@ -2,16 +2,14 @@ import * as sdk from "@defillama/sdk"; import { Chain } from "@defillama/sdk/build/general"; import { BreakdownAdapter, BaseAdapter } from "../adapters/types"; import { CHAIN } from "../helpers/chains"; -import customBackfill from "../helpers/customBackfill"; - -import { - getGraphDimensions -} from "../helpers/getUniSubgraph" +import { getGraphDimensions2 } from "../helpers/getUniSubgraph"; const v2Endpoints = { - [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R'), -} -const v2Graph = getGraphDimensions({ + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint( + "3g83GYhbyHtjy581vpTmN1AP9cB9MjWMh5TiuNpvTU4R", + ), +}; +const v2Graph = getGraphDimensions2({ graphUrls: v2Endpoints, feesPercent: { type: "volume", @@ -20,28 +18,21 @@ const v2Graph = getGraphDimensions({ SupplySideRevenue: 0.15, HoldersRevenue: 0, Revenue: 0.1, - Fees: 0.25 - } + Fees: 0.25, + }, }); const v3Endpoints = { - [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('7ZP9MeeuXno2y9pWR5LzA96UtYuZYWTA4WYZDZR7ghbN'), -} -const v3Graphs = getGraphDimensions({ + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint( + "7ZP9MeeuXno2y9pWR5LzA96UtYuZYWTA4WYZDZR7ghbN", + ), +}; +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: "totalVolumeUSD", }, - dailyVolume: { - factory: "algebraDayData", - field: "volumeUSD", - dateField: "date" - }, - dailyFees: { - factory: "algebraDayData", - field: "feesUSD", - }, feesPercent: { type: "fees", ProtocolRevenue: 10, @@ -49,25 +40,22 @@ const v3Graphs = getGraphDimensions({ Fees: 10, UserFees: 90, // User fees are 90% of collected fees SupplySideRevenue: 90, // 90% of fees are going to LPs - Revenue: 10 // Revenue is 10% of collected fees - } + Revenue: 10, // Revenue is 10% of collected fees + }, }); const endpointsStable = { - [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('H7QEsa69B3bbXZVtmqGaRZVUV8PCUqsKfqXGRb69LHa6') + [CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint( + "H7QEsa69B3bbXZVtmqGaRZVUV8PCUqsKfqXGRb69LHa6", + ), }; -const stableGraph = getGraphDimensions({ +const stableGraph = getGraphDimensions2({ graphUrls: endpointsStable, totalVolume: { factory: "tradeVolumes", field: "volume", }, - dailyVolume: { - factory: "dailyVolume", - field: "volume", - dateField: "timestamp" - }, feesPercent: { type: "volume", UserFees: 0.04, @@ -75,18 +63,19 @@ const stableGraph = getGraphDimensions({ SupplySideRevenue: 0.02, HoldersRevenue: 0, Revenue: 0.02, - Fees: 0.04 - } + Fees: 0.04, + }, }); const methodology = { UserFees: "User pays 0.25% fees on each swap.", Fees: "A 0.25% of each swap is collected as trading fees", - Revenue: "Protocol receives 0.1% on each swap. A part is used to buyback and burn and a part is used to buy WETH and distribute to stakers.", + Revenue: + "Protocol receives 0.1% on each swap. A part is used to buyback and burn and a part is used to buy WETH and distribute to stakers.", ProtocolRevenue: "Protocol receives 0.1% on each swap.", SupplySideRevenue: "All user fees are distributed among LPs.", - HoldersRevenue: "Stakers receive WETH a part of protocol revenue." -} + HoldersRevenue: "Stakers receive WETH a part of protocol revenue.", +}; const methodologyV3 = { UserFees: "User pays dynamic swap fee.", @@ -94,9 +83,9 @@ const methodologyV3 = { Revenue: "Protocol receives 10% of the dynamic swap fee", ProtocolRevenue: "Protocol receives 10% of the dynamic swap fee", SupplySideRevenue: "90% of the dynamic swap fee is distributed to LPs", - HoldersRevenue: "A portion of the protocol fees is used to purchase WETH and distribute to stakers." -} - + HoldersRevenue: + "A portion of the protocol fees is used to purchase WETH and distribute to stakers.", +}; const methodologyStable = { UserFees: "User pays a 0.04% fee on each swap.", @@ -104,8 +93,9 @@ const methodologyStable = { Revenue: "Protocol receives 0.02% of the swap fee", ProtocolRevenue: "Protocol receives 0.02% of the swap fee", SupplySideRevenue: "0.02% of the swap fee is distributed to LPs", - HoldersRevenue: "A portion of the protocol fees is used to purchase WETH and distribute to stakers." -} + HoldersRevenue: + "A portion of the protocol fees is used to purchase WETH and distribute to stakers.", +}; const adapter: BreakdownAdapter = { version: 2, @@ -115,7 +105,7 @@ const adapter: BreakdownAdapter = { fetch: v2Graph(CHAIN.ARBITRUM), start: 1674432000, meta: { - methodology + methodology, }, }, }, @@ -124,21 +114,21 @@ const adapter: BreakdownAdapter = { fetch: v3Graphs(chain as Chain), start: 1676887200, meta: { - methodology: methodologyV3 - } - } - return acc + methodology: methodologyV3, + }, + }; + return acc; }, {} as BaseAdapter), stable: { [CHAIN.ARBITRUM]: { fetch: stableGraph(CHAIN.ARBITRUM), start: 1676113200, meta: { - methodology: methodologyStable + methodology: methodologyStable, }, }, }, - } -} + }, +}; export default adapter; diff --git a/protocols/pancakeswap/index.ts b/protocols/pancakeswap/index.ts index df3848e389..750fbb0532 100644 --- a/protocols/pancakeswap/index.ts +++ b/protocols/pancakeswap/index.ts @@ -1,8 +1,7 @@ import { BaseAdapter, BreakdownAdapter, DISABLED_ADAPTER_KEY, FetchOptions, FetchV2, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; - -import { getGraphDimensions } from "../../helpers/getUniSubgraph" +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph" import * as sdk from "@defillama/sdk"; import { httpGet } from "../../utils/fetchURL"; import { getEnv } from "../../helpers/env"; @@ -34,9 +33,7 @@ const v3Endpoint = { [CHAIN.OP_BNB]: `${getEnv('PANCAKESWAP_OPBNB_SUBGRAPH')}/subgraphs/name/pancakeswap/exchange-v3` } -const VOLUME_USD = "volumeUSD"; - -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, graphRequestHeaders: { [CHAIN.BSC]: { @@ -46,9 +43,6 @@ const graphs = getGraphDimensions({ totalVolume: { factory: "pancakeFactories" }, - dailyVolume: { - factory: "pancakeDayData" - }, feesPercent: { type: "volume", Fees: 0.25, @@ -60,14 +54,11 @@ const graphs = getGraphDimensions({ } }); -const graphsStableSwap = getGraphDimensions({ +const graphsStableSwap = getGraphDimensions2({ graphUrls: stablesSwapEndpoints, totalVolume: { factory: "factories" }, - dailyVolume: { - factory: "pancakeDayData" - }, feesPercent: { type: "volume", Fees: 0.25, // 0.25% volume @@ -79,23 +70,14 @@ const graphsStableSwap = getGraphDimensions({ } }); -const v3Graph = getGraphDimensions({ +const v3Graph = getGraphDimensions2({ graphUrls: v3Endpoint, totalVolume: { factory: "factories", - - }, - dailyVolume: { - factory: "pancakeDayData", - field: VOLUME_USD }, totalFees: { factory: "factories", }, - dailyFees: { - factory: "pancakeDayData", - field: "feesUSD" - }, }); const startTimes = { @@ -162,9 +144,7 @@ const getResources = async (account: string): Promise => { return data } -const fetchVolume: FetchV2 = async ({ endTimestamp: timestamp, createBalances }) => { - const fromTimestamp = timestamp - 86400; - const toTimestamp = timestamp; +const fetchVolume: FetchV2 = async ({ fromTimestamp, toTimestamp, createBalances }) => { const account_resource: any[] = (await getResources(account)) const pools = account_resource.filter(e => e.type?.includes('swap::PairEventHolder')) .map((e: any) => { diff --git a/protocols/smbswap/index.ts b/protocols/smbswap/index.ts index 770fbf195b..5c49110140 100644 --- a/protocols/smbswap/index.ts +++ b/protocols/smbswap/index.ts @@ -3,8 +3,7 @@ import { Chain } from "@defillama/sdk/build/general"; import { BaseAdapter, BreakdownAdapter, DISABLED_ADAPTER_KEY, FetchOptions, IJSON } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import disabledAdapter from "../../helpers/disabledAdapter"; - -import { getGraphDimensions } from "../../helpers/getUniSubgraph" +import { getGraphDimensions2 } from "../../helpers/getUniSubgraph" const endpoints = { [CHAIN.BSC]: sdk.graph.modifyEndpoint('9BtGwsWynjj21VyrAtNfeKG5kMhcZ7Z12T53wo7PBTLj') @@ -18,14 +17,13 @@ const v3Endpoint = { [CHAIN.BSC]: sdk.graph.modifyEndpoint('8XiGZs3G3dDL3YQJx7CsMGXdn3CUBBC9CVpCe1xrsSA7') } -const VOLUME_USD = "volumeUSD"; const blackListedPairs = { [CHAIN.BSC]: [ "0x609f59c97ddf58475c7d3f3fc829c3ff9fc4f76f" ] } -const graphs = getGraphDimensions({ +const graphs = getGraphDimensions2({ graphUrls: endpoints, graphRequestHeaders: { [CHAIN.BSC]: { @@ -35,9 +33,6 @@ const graphs = getGraphDimensions({ totalVolume: { factory: "smbfactories" }, - dailyVolume: { - factory: "smbdayData" - }, feesPercent: { type: "volume", Fees: 0.25, @@ -50,14 +45,11 @@ const graphs = getGraphDimensions({ blacklistTokens: blackListedPairs }); -const graphsStableSwap = getGraphDimensions({ +const graphsStableSwap = getGraphDimensions2({ graphUrls: stablesSwapEndpoints, totalVolume: { factory: "factories" }, - dailyVolume: { - factory: "smbdayData" - }, feesPercent: { type: "volume", Fees: 0.25, // 0.25% volume @@ -69,23 +61,14 @@ const graphsStableSwap = getGraphDimensions({ } }); -const v3Graph = getGraphDimensions({ +const v3Graph = getGraphDimensions2({ graphUrls: v3Endpoint, totalVolume: { factory: "factories", - - }, - dailyVolume: { - factory: "smbdayData", - field: VOLUME_USD }, totalFees:{ factory: "factories", }, - dailyFees: { - factory: "smbdayData", - field: "feesUSD" - }, }); const startTimes = { diff --git a/protocols/uniswap/index.ts b/protocols/uniswap/index.ts index 10117aef27..810f010fb0 100644 --- a/protocols/uniswap/index.ts +++ b/protocols/uniswap/index.ts @@ -4,13 +4,7 @@ import { BreakdownAdapter, FetchResultGeneric, BaseAdapter, FetchOptions } from import { CHAIN } from "../../helpers/chains"; import { getStartTimestamp } from "../../helpers/getStartTimestamp"; import * as sdk from "@defillama/sdk"; -import {getUniV2LogAdapter} from "../../helpers/uniswap" - -import { - getGraphDimensions, - DEFAULT_DAILY_VOLUME_FACTORY, - DEFAULT_TOTAL_VOLUME_FIELD, -} from "../../helpers/getUniSubgraph" +import { DEFAULT_TOTAL_VOLUME_FIELD, getGraphDimensions2 } from "../../helpers/getUniSubgraph" import request, { gql } from 'graphql-request'; import { httpPost } from '../../utils/fetchURL'; @@ -79,18 +73,11 @@ const VOLUME_USD = "volumeUSD"; // fees results are in eth, needs to be converted to a balances objects const ETH_ADDRESS = "ethereum:" + ADDRESSES.null; -const v1Graph = getGraphDimensions({ +const v1Graph = getGraphDimensions2({ graphUrls: v1Endpoints, totalVolume: { factory: "uniswaps", }, - dailyVolume: { - field: "dailyVolumeInUSD", - }, - dailyFees: { - factory: "exchangeHistoricalData", - field: "feeInEth" - }, feesPercent: { type: "fees", UserFees: 100, @@ -102,7 +89,7 @@ const v1Graph = getGraphDimensions({ } }); -const v2Graph = getGraphDimensions({ +const v2Graph = getGraphDimensions2({ graphUrls: v2Endpoints, feesPercent: { type: "volume", @@ -116,16 +103,12 @@ const v2Graph = getGraphDimensions({ blacklistTokens: blacklisted }); -const v3Graphs = getGraphDimensions({ +const v3Graphs = getGraphDimensions2({ graphUrls: v3Endpoints, totalVolume: { factory: "factories", field: DEFAULT_TOTAL_VOLUME_FIELD, }, - dailyVolume: { - factory: DEFAULT_DAILY_VOLUME_FACTORY, - field: VOLUME_USD, - }, feesPercent: { type: "fees", ProtocolRevenue: 0, @@ -158,18 +141,6 @@ const startTimeV3:TStartTime = { [CHAIN.ERA]: 1693440000 } -const v2Deployments = { - // ethereum: '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f', - optimism: '0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf', - arbitrum: '0xf1D7CC64Fb4452F05c498126312eBE29f30Fbcf9', - avax: '0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C', - base: '0x8909dc15e40173ff4699343b6eb8132c65e18ec6', - bsc: '0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6', - polygon: '0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C', - //celo: '0x79a530c8e2fA8748B7B40dd3629C0520c2cCf03f', - zora: '0x0F797dC7efaEA995bB916f268D919d0a1950eE3C' -} - const chainv2mapping: any = { [CHAIN.ARBITRUM]: "ARBITRUM", [CHAIN.ETHEREUM]: "ETHEREUM", From 1f906eedfd4bd19878f0332f7d22ea9d62a5daa8 Mon Sep 17 00:00:00 2001 From: Tyler Tsai Date: Thu, 12 Sep 2024 16:47:21 +0800 Subject: [PATCH 07/16] feat: update lista fees --- fees/lista-lisusd/index.ts | 71 +++++++++++++++++++++++++++++++++---- fees/lista-slisbnb/index.ts | 4 +++ 2 files changed, 69 insertions(+), 6 deletions(-) diff --git a/fees/lista-lisusd/index.ts b/fees/lista-lisusd/index.ts index 047c1d45f5..1dfa647577 100644 --- a/fees/lista-lisusd/index.ts +++ b/fees/lista-lisusd/index.ts @@ -9,6 +9,10 @@ const treasury = "0x8d388136d578dCD791D081c6042284CED6d9B0c6"; * Fetches data from Lista DAO * @doc https://listaorg.notion.site/Profit-cfd754931df449eaa9a207e38d3e0a54 * @test npx ts-node --transpile-only cli/testAdapter.ts fees lista-lisusd + * + * @treasury + * https://bscscan.com/address/0x8d388136d578dcd791d081c6042284ced6d9b0c6#tokentxns + * https://bscscan.com/address/0x34b504a5cf0ff41f8a480580533b6dda687fa3da#tokentxns */ const HelioETHProvider = "0x0326c157bfF399e25dd684613aEF26DBb40D3BA4"; @@ -34,6 +38,7 @@ const fetch = async (options: FetchOptions) => { entireLog: true, }); + // enable later // const logs_fees_claim = await options.getLogs({ // target: MasterVault, // eventAbi: "event FeeClaimed(address receiver, uint256 amount)", @@ -44,7 +49,8 @@ const fetch = async (options: FetchOptions) => { eventAbi: "event Harvested(address to, uint256 amount)", }); - const logs_transfer = await options.getLogs({ + // CeETHVault + const eth_transfer1 = await options.getLogs({ target: eth, topics: [ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", @@ -53,7 +59,36 @@ const fetch = async (options: FetchOptions) => { ], }); - const logs_exit = await options.getLogs({ + const eth_transfer2 = await options.getLogs({ + target: eth, + topics: [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000a230805c28121cc97b348f8209c79bebea3839c0", + "0x00000000000000000000000034b504a5cf0ff41f8a480580533b6dda687fa3da", + ], + }); + + // flash loan + const lisusd_transfer1 = await options.getLogs({ + target: lisUSD, + topics: [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000a230805c28121cc97b348f8209c79bebea3839c0", + "0x0000000000000000000000008d388136d578dcd791d081c6042284ced6d9b0c6", + ], + }); + + const lisusd_transfer2 = await options.getLogs({ + target: lisUSD, + topics: [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000a230805c28121cc97b348f8209c79bebea3839c0", + "0x00000000000000000000000034b504a5cf0ff41f8a480580533b6dda687fa3da", + ], + }); + + // early exit + const logs_exit1 = await options.getLogs({ target: HayJoin, topics: [ "0x22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b299631", @@ -61,7 +96,16 @@ const fetch = async (options: FetchOptions) => { ], }); - const early_claim_penalty = await options.getLogs({ + const logs_exit2 = await options.getLogs({ + target: HayJoin, + topics: [ + "0x22d324652c93739755cf4581508b60875ebdd78c20c0cff5cf8e23452b299631", + "0x00000000000000000000000034b504a5cf0ff41f8a480580533b6dda687fa3da", + ], + }); + + // claim penalty + const early_claim_penalty1 = await options.getLogs({ target: lista, topics: [ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", @@ -70,7 +114,16 @@ const fetch = async (options: FetchOptions) => { ], }); - early_claim_penalty.forEach((log) => { + const early_claim_penalty2 = await options.getLogs({ + target: lista, + topics: [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x000000000000000000000000d0c380d31db43cd291e2bbe2da2fd6dc877b87b3", + "0x00000000000000000000000034b504a5cf0ff41f8a480580533b6dda687fa3da", + ], + }); + + [...early_claim_penalty1, ...early_claim_penalty2].forEach((log) => { const amount = Number(log.data); dailyFees.add(lista, amount); }); @@ -80,6 +133,7 @@ const fetch = async (options: FetchOptions) => { dailyFees.add(eth, amount); }); + // enable later // logs_fees_claim.forEach((log) => { // const amount = log.amount; // dailyFees.add(bnb, amount); @@ -90,12 +144,17 @@ const fetch = async (options: FetchOptions) => { dailyFees.add(slisBNB, amount); }); - logs_transfer.forEach((log) => { + [...eth_transfer1, ...eth_transfer2].forEach((log) => { const amount = Number(log.data); dailyFees.add(eth, amount); }); - logs_exit.forEach((log) => { + [...lisusd_transfer1, ...lisusd_transfer2].forEach((log) => { + const amount = Number(log.data); + dailyFees.add(lisUSD, amount); + }); + + [...logs_exit1, ...logs_exit2].forEach((log) => { dailyFees.add(lisUSD, Number(log.data)); }); diff --git a/fees/lista-slisbnb/index.ts b/fees/lista-slisbnb/index.ts index bec91e6669..508b0e6de6 100644 --- a/fees/lista-slisbnb/index.ts +++ b/fees/lista-slisbnb/index.ts @@ -7,6 +7,10 @@ const treasury = "0x8d388136d578dCD791D081c6042284CED6d9B0c6"; * Fetches data from Lista DAO * @doc https://listaorg.notion.site/Profit-cfd754931df449eaa9a207e38d3e0a54 * @test npx ts-node --transpile-only cli/testAdapter.ts fees lista-slisbnb + * + * @treasury + * https://bscscan.com/address/0x8d388136d578dcd791d081c6042284ced6d9b0c6#tokentxns + * https://bscscan.com/address/0x34b504a5cf0ff41f8a480580533b6dda687fa3da#tokentxns */ const ListaStakeManagerAddress = "0x1adB950d8bB3dA4bE104211D5AB038628e477fE6"; From 127caaa1d002edc31e9b251f393b578bdf8a051c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 12 Sep 2024 15:12:57 +0000 Subject: [PATCH 08/16] fix get event logs --- options/typus/getChainData.ts | 152 ++++++---------------------------- options/typus/index.ts | 26 ++---- 2 files changed, 32 insertions(+), 146 deletions(-) diff --git a/options/typus/getChainData.ts b/options/typus/getChainData.ts index 467782e345..0d27d879e2 100644 --- a/options/typus/getChainData.ts +++ b/options/typus/getChainData.ts @@ -1,152 +1,48 @@ -import * as sdk from "@defillama/sdk"; -import { httpPost } from "../../utils/fetchURL"; +import { queryEvents } from "../../helpers/sui"; +import { FetchOptions, FetchResult } from "../../adapters/types"; -interface ChainData { - totalPremiumVolume: { [key: string]: number }; - dailyPremiumVolume: { [key: string]: number }; - totalNotionalVolume: { [key: string]: number }; - dailyNotionalVolume: { [key: string]: number }; - timestamp: string; -} async function getChainData( - timestamp: string, - backFillTimestamp: string | undefined = undefined -): Promise { - let end_timestamp = Number(timestamp); - let start_timestamp = end_timestamp - 24 * 60 * 60; - - var response = await httpPost( - "https://fullnode.mainnet.sui.io:443", - { - jsonrpc: "2.0", - id: 1, - method: "suix_queryEvents", - params: { - query: { - MoveEventType: - "0x321848bf1ae327a9e022ccb3701940191e02fa193ab160d9c0e49cd3c003de3a::typus_dov_single::DeliveryEvent", - }, - descending_order: true, - }, - }, - { - headers: { - "Content-Type": "application/json", - }, - } - ); - - var data = response.result.data; - - if (backFillTimestamp) { - while (response.result.hasNextPage) { - response = await httpPost( - "https://fullnode.mainnet.sui.io:443", - { - jsonrpc: "2.0", - id: 1, - method: "suix_queryEvents", - params: { - query: { - MoveEventType: - "0x321848bf1ae327a9e022ccb3701940191e02fa193ab160d9c0e49cd3c003de3a::typus_dov_single::DeliveryEvent", - }, - descending_order: true, - cursor: response.result.nextCursor, - }, - }, - { - headers: { - "Content-Type": "application/json", - }, - } - ); - data = data.concat(response.result.data); - - const timestamp = Number(data.at(-1).timestampMs) / 1000; - if (timestamp <= Number(backFillTimestamp)) { - break; - } - } - } - - const acc: ChainData = { - timestamp, - totalNotionalVolume: {}, - dailyNotionalVolume: {}, - totalPremiumVolume: {}, - dailyPremiumVolume: {}, - }; - - for (const curr of data) { - const parsedJson = curr.parsedJson; - - let o_token_name: string; - let dailyNotionalVolume: number; - + options: FetchOptions, +): Promise { + const events = await queryEvents({eventType:"0x321848bf1ae327a9e022ccb3701940191e02fa193ab160d9c0e49cd3c003de3a::typus_dov_single::DeliveryEvent", options}) + const dailyNotionalVolume = options.createBalances(); + const dailyPremiumVolume = options.createBalances(); + for (const curr of events) { + const parsedJson = curr; if (parsedJson.o_token.name.endsWith("MFUD")) { - o_token_name = "sui:0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD"; - dailyNotionalVolume = Number(parsedJson.delivery_size) * 10 ** 5; + const o_token_name = "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD"; + dailyNotionalVolume.add(o_token_name, Number(parsedJson.delivery_size) * 10 ** 5); } else { - o_token_name = "sui:0x" + parsedJson.o_token.name; - dailyNotionalVolume = Number(parsedJson.delivery_size); + const o_token_name = "0x" + parsedJson.o_token.name; + dailyNotionalVolume.add(o_token_name, Number(parsedJson.delivery_size)); } - let b_token_name: string; - let dailyPremiumVolume: number; - if (parsedJson.b_token.name.endsWith("MFUD")) { - b_token_name = "sui:0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD"; - dailyPremiumVolume = + const b_token_name = "0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD"; + const _dailyPremiumVolume = (Number(parsedJson.bidder_bid_value) + Number(parsedJson.bidder_fee) + Number(parsedJson.incentive_bid_value) + Number(parsedJson.incentive_fee)) * 10 ** 5; + dailyPremiumVolume.add(b_token_name, _dailyPremiumVolume); } else { - b_token_name = "sui:0x" + parsedJson.b_token.name; - dailyPremiumVolume = + const b_token_name = "0x" + parsedJson.b_token.name; + const _dailyPremiumVolume = Number(parsedJson.bidder_bid_value) + Number(parsedJson.bidder_fee) + Number(parsedJson.incentive_bid_value) + Number(parsedJson.incentive_fee); - } - - if (o_token_name in acc.totalNotionalVolume) { - acc.totalNotionalVolume[o_token_name] += dailyNotionalVolume; - } else { - acc.totalNotionalVolume[o_token_name] = dailyNotionalVolume; - } - - if (b_token_name in acc.totalPremiumVolume) { - acc.totalPremiumVolume[b_token_name] += dailyPremiumVolume; - } else { - acc.totalPremiumVolume[b_token_name] = dailyPremiumVolume; - } - - const timestamp = Number(curr.timestampMs) / 1000; - if (timestamp > start_timestamp && timestamp <= end_timestamp) { - if (o_token_name in acc.dailyNotionalVolume) { - acc.dailyNotionalVolume[o_token_name] += dailyNotionalVolume; - } else { - acc.dailyNotionalVolume[o_token_name] = dailyNotionalVolume; - } - - if (b_token_name in acc.dailyPremiumVolume) { - acc.dailyPremiumVolume[b_token_name] += dailyPremiumVolume; - } else { - acc.dailyPremiumVolume[b_token_name] = dailyPremiumVolume; - } + dailyPremiumVolume.add(b_token_name, _dailyPremiumVolume); } } - acc.dailyNotionalVolume = (await sdk.Balances.getUSDString(acc.dailyNotionalVolume, end_timestamp)) as any; - acc.dailyPremiumVolume = (await sdk.Balances.getUSDString(acc.dailyPremiumVolume, end_timestamp)) as any; - acc.totalPremiumVolume = (await sdk.Balances.getUSDString(acc.totalPremiumVolume, end_timestamp)) as any; - acc.totalNotionalVolume = (await sdk.Balances.getUSDString(acc.totalNotionalVolume, end_timestamp)) as any; - - return acc; + return { + timestamp: options.endTimestamp, + dailyNotionalVolume, + dailyPremiumVolume, + }; } export default getChainData; diff --git a/options/typus/index.ts b/options/typus/index.ts index 84820c806b..ada4004015 100644 --- a/options/typus/index.ts +++ b/options/typus/index.ts @@ -1,24 +1,14 @@ import { CHAIN } from "../../helpers/chains"; -import { SimpleAdapter, ChainEndpoints } from "../../adapters/types"; +import { SimpleAdapter } from "../../adapters/types"; import getChainData from "./getChainData"; -const endpoints: ChainEndpoints = { - [CHAIN.SUI]: - "https://us-central1-aqueous-freedom-378103.cloudfunctions.net/mongodb", -}; - const adapter: SimpleAdapter = { - adapter: Object.keys(endpoints).reduce((acc, chain) => { - return { - ...acc, - [chain]: { - fetch: async (ts: string) => await getChainData(ts), - start: 1697700660, - customBackfill: async (ts: string) => - await getChainData(ts, "1697700660"), - }, - }; - }, {}), -}; + adapter: { + [CHAIN.SUI]: { + fetch: getChainData, + start: 1697700660, + } + } +} export default adapter; From e6e8febf71e9f0affe6131e129ac835314222ff9 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 12 Sep 2024 16:38:57 +0100 Subject: [PATCH 09/16] debug --- aggregators/1inch-agg/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aggregators/1inch-agg/index.ts b/aggregators/1inch-agg/index.ts index 6a569b161b..13ececa496 100644 --- a/aggregators/1inch-agg/index.ts +++ b/aggregators/1inch-agg/index.ts @@ -22,7 +22,7 @@ const fetch = const chainData = data.result.rows.find( (row: any) => chainsMap[row.blockchain] === chain ); - + if (!chainData) throw new Error(`Dune query failed: ${JSON.stringify(data)}`) return { dailyVolume: chainData.volume_24h, timestamp: unixTimestamp, From e119cd2ecc324c0558c98d04b17e4e91e1772508 Mon Sep 17 00:00:00 2001 From: waynebruce0x Date: Thu, 12 Sep 2024 17:03:14 +0100 Subject: [PATCH 10/16] quickswap --- dexs/quickswap/index.ts | 75 ++++++++++++++++++++------------- helpers/getUniSubgraph/index.ts | 2 +- helpers/getUniSubgraphVolume.ts | 8 ++-- 3 files changed, 50 insertions(+), 35 deletions(-) diff --git a/dexs/quickswap/index.ts b/dexs/quickswap/index.ts index 59d42de4d7..2430984f86 100644 --- a/dexs/quickswap/index.ts +++ b/dexs/quickswap/index.ts @@ -2,11 +2,19 @@ import * as sdk from "@defillama/sdk"; import { BreakdownAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import { getGraphDimensions } from "../../helpers/getUniSubgraph"; -import { DEFAULT_DAILY_VOLUME_FACTORY, DEFAULT_DAILY_VOLUME_FIELD, DEFAULT_TOTAL_VOLUME_FACTORY, DEFAULT_TOTAL_VOLUME_FIELD, getChainVolume } from "../../helpers/getUniSubgraphVolume"; -import fetchURL from "../../utils/fetchURL" +import { + DEFAULT_DAILY_VOLUME_FACTORY, + DEFAULT_DAILY_VOLUME_FIELD, + DEFAULT_TOTAL_VOLUME_FACTORY, + DEFAULT_TOTAL_VOLUME_FIELD, + getChainVolume, +} from "../../helpers/getUniSubgraphVolume"; +import fetchURL from "../../utils/fetchURL"; const endpoints = { - [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint( + "FUWdkXWpi8JyhAnhKL5pZcVshpxuaUQG8JHMDqNCxjPd", + ), }; const graphs = getChainVolume({ @@ -18,20 +26,27 @@ const graphs = getChainVolume({ dailyVolume: { factory: DEFAULT_DAILY_VOLUME_FACTORY, field: DEFAULT_DAILY_VOLUME_FIELD, - dateField: "date" + dateField: "date", }, + hasDailyVolume: true, }); const endpointsAlgebraV3 = { - [CHAIN.POLYGON]: sdk.graph.modifyEndpoint('CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7'), + [CHAIN.POLYGON]: sdk.graph.modifyEndpoint( + "CCFSaj7uS128wazXMdxdnbGA3YQnND9yBdHjPtvH7Bc7", + ), // [CHAIN.DOGECHAIN]: "https://graph-node.dogechain.dog/subgraphs/name/quickswap/dogechain-info", - [CHAIN.POLYGON_ZKEVM]:"https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7", - [CHAIN.MANTA]:"https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn" + [CHAIN.POLYGON_ZKEVM]: + "https://api.studio.thegraph.com/query/44554/quickswap-v3-02/0.0.7", + [CHAIN.MANTA]: + "https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn", }; const endpointsUniV3 = { - [CHAIN.MANTA]:"https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn", - [CHAIN.ASTAR_ZKEVM]:"https://api.studio.thegraph.com/query/44554/astar-quickswap/version/latest" + [CHAIN.MANTA]: + "https://api.goldsky.com/api/public/project_clo2p14by0j082owzfjn47bag/subgraphs/quickswap/prod/gn", + [CHAIN.ASTAR_ZKEVM]: + "https://api.studio.thegraph.com/query/44554/astar-quickswap/version/latest", }; const graphsAlgebraV3 = getChainVolume({ @@ -43,7 +58,7 @@ const graphsAlgebraV3 = getChainVolume({ dailyVolume: { factory: "algebraDayData", field: "volumeUSD", - dateField: "date" + dateField: "date", }, }); @@ -67,23 +82,23 @@ const v3GraphsUni = getGraphDimensions({ }, }); - const fetchLiquidityHub = async (timestamp: number) => { - let dailyResult = (await fetchURL('https://hub.orbs.network/analytics-daily/v1')); - - let rows = dailyResult.result.rows; - let lastDay = rows[rows.length - 1]; - let dailyVolume = lastDay.daily_total_calculated_value; - let totalVolume = (await fetchURL(`https://hub.orbs.network/analytics/v1`)).result.rows[0].total_calculated_value; - - return { - dailyVolume: `${dailyVolume}`, - totalVolume: `${totalVolume}`, - timestamp: timestamp, - }; + let dailyResult = await fetchURL( + "https://hub.orbs.network/analytics-daily/v1", + ); -} + let rows = dailyResult.result.rows; + let lastDay = rows[rows.length - 1]; + let dailyVolume = lastDay.daily_total_calculated_value; + let totalVolume = (await fetchURL(`https://hub.orbs.network/analytics/v1`)) + .result.rows[0].total_calculated_value; + return { + dailyVolume: `${dailyVolume}`, + totalVolume: `${totalVolume}`, + timestamp: timestamp, + }; +}; const adapter: BreakdownAdapter = { version: 1, @@ -91,13 +106,13 @@ const adapter: BreakdownAdapter = { v2: { [CHAIN.POLYGON]: { fetch: graphs(CHAIN.POLYGON), - start: 1602118043 + start: 1602118043, }, }, v3: { [CHAIN.POLYGON]: { fetch: graphsAlgebraV3(CHAIN.POLYGON), - start: 1662425243 + start: 1662425243, }, // [CHAIN.DOGECHAIN]: { // fetch: graphsV3(CHAIN.DOGECHAIN), @@ -105,17 +120,17 @@ const adapter: BreakdownAdapter = { // }, [CHAIN.POLYGON_ZKEVM]: { fetch: graphsAlgebraV3(CHAIN.POLYGON_ZKEVM), - start: 1679875200 + start: 1679875200, }, [CHAIN.MANTA]: { fetch: v3GraphsUni(CHAIN.MANTA), - start: 1697690974 - } + start: 1697690974, + }, }, liquidityHub: { [CHAIN.POLYGON]: { fetch: fetchLiquidityHub, - start: 1695042000 + start: 1695042000, }, }, }, diff --git a/helpers/getUniSubgraph/index.ts b/helpers/getUniSubgraph/index.ts index 8380cfdbdf..ad943c289e 100644 --- a/helpers/getUniSubgraph/index.ts +++ b/helpers/getUniSubgraph/index.ts @@ -198,7 +198,7 @@ function getGraphDimensions({ } ` : undefined; - return async (options: FetchOptions) => { + return async (_a: any, _b: any, options: FetchOptions) => { const { endTimestamp, getEndBlock } = options; // ts-node --transpile-only cli/testAdapter.ts protocols uniswap const customBlockFunc = getCustomBlock ? getCustomBlock : getEndBlock; diff --git a/helpers/getUniSubgraphVolume.ts b/helpers/getUniSubgraphVolume.ts index 91ebcb3c16..adcc6aba29 100644 --- a/helpers/getUniSubgraphVolume.ts +++ b/helpers/getUniSubgraphVolume.ts @@ -107,7 +107,7 @@ function getChainVolume({ const graphQueryDailyVolume = gql`${hasDailyVolume ? `query get_daily_volume($id: Int) { ${dailyVolumeQuery} }` : ""}`; return (chain: Chain) => { - return async (options: FetchOptions) => { + return async (_a: any, _b: any, options: FetchOptions) => { const { endTimestamp, getEndBlock, getFromBlock, getToBlock } = options; const customBlockFunc = getCustomBlock ? getCustomBlock : getEndBlock; const block = (await customBlockFunc(endTimestamp).catch((e: any) => @@ -259,12 +259,12 @@ function getChainVolumeWithGasToken({ }: IGetChainVolumeParams & {priceToken:string}) { const basic = getChainVolume({graphUrls, totalVolume, dailyVolume, customDailyVolume, hasDailyVolume, hasTotalVolume, getCustomBlock}) return (chain: Chain) => { - return async (options: FetchOptions) => { + return async (_a: any, _b: any, options: FetchOptions) => { const { block, totalVolume, dailyVolume, - } = await basic(chain)(options); + } = await basic(chain)(_a, _b, options); const timestamp = options.endTimestamp const balances = new Balances({ chain, timestamp }) @@ -373,7 +373,7 @@ function univ2Adapter2(endpoints: { dailyVolumeTimestampField = DEFAULT_DATE_FIELD, gasToken = null as string|null }) { - const graphs = (gasToken === null ? getChainVolume2 : getChainVolumeWithGasToken2 as typeof getChainVolume)({ + const graphs = (gasToken === null ? getChainVolume2 : getChainVolumeWithGasToken2 as typeof getChainVolume2)({ graphUrls: endpoints, totalVolume: { factory: factoriesName, From b2ee4c79b8e3c7d78dc1c9ab4968beb43427142c Mon Sep 17 00:00:00 2001 From: 0xgnek <0xgnek@gmail.com> Date: Thu, 12 Sep 2024 17:05:23 +0000 Subject: [PATCH 11/16] fix query --- options/arrow-markets/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/options/arrow-markets/index.ts b/options/arrow-markets/index.ts index a114287e11..f3d67bf4b6 100644 --- a/options/arrow-markets/index.ts +++ b/options/arrow-markets/index.ts @@ -1,4 +1,4 @@ -import { SimpleAdapter } from "../../adapters/types"; +import { FetchOptions, SimpleAdapter } from "../../adapters/types"; import fetchURL from "../../utils/fetchURL"; import { CHAIN } from "../../helpers/chains"; @@ -22,9 +22,11 @@ export const v2_adapter: SimpleAdapter = { export async function fetchArrowMarketsVolumeData( /** Timestamp representing the end of the 24 hour period */ - timestamp: number + timestamp: number, + _t: any, + options: FetchOptions ) { - const ArrowMarketsVolumeData = await getArrowMarketsVolumeData(arrowMarketsVolumeEndpoint, timestamp); + const ArrowMarketsVolumeData = await getArrowMarketsVolumeData(arrowMarketsVolumeEndpoint, options.startOfDay); const dailyPremiumVolume = Number(ArrowMarketsVolumeData.daily_premium_volume).toFixed(2); const dailyNotionalVolume = Number(ArrowMarketsVolumeData.daily_notional_volume).toFixed(2); @@ -39,10 +41,8 @@ export async function fetchArrowMarketsVolumeData( } async function getArrowMarketsVolumeData(endpoint: string, timestamp: number): Promise { - const url = new URL(endpoint); - url.searchParams.append('timestamp', timestamp.toString()); - - return fetchURL(endpoint) + const url = `${endpoint}?timestamp=${timestamp}`; + return fetchURL(url) } export default v2_adapter; From 073974c30982acb2831356d769c76f78c3069578 Mon Sep 17 00:00:00 2001 From: degencreator <156078277+degencreator@users.noreply.github.com> Date: Fri, 13 Sep 2024 01:27:05 +0400 Subject: [PATCH 12/16] chore: IntentX 0.8.3 subgraph migration --- fees/intent-x/index.tsx | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/fees/intent-x/index.tsx b/fees/intent-x/index.tsx index d8c9f93e8f..5241095985 100644 --- a/fees/intent-x/index.tsx +++ b/fees/intent-x/index.tsx @@ -5,12 +5,12 @@ import { CHAIN } from "../../helpers/chains"; const endpoint_0_8_0 = "https://api.studio.thegraph.com/query/62472/perpetuals-analytics_base/version/latest"; - const endpoint = - "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-base-analytics-082/latest/gn"; +const endpoint = + "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-base-analytics-083/latest/gn"; const endpoint_blast = "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-blast-analytics-083/latest/gn"; const endpoint_mantle = - "https://subgraph-api.mantle.xyz/subgraphs/name/mantle_intentx-analytics_082"; + "https://api.goldsky.com/api/public/project_cm0bho0j0ji6001t8e26s0wv8/subgraphs/intentx-mantle-analytics-083/latest/gn"; const query_0_8_0 = gql` query stats($from: String!, $to: String!) { @@ -132,9 +132,7 @@ const toString = (x: BigNumber) => { return x.toString(); }; -const fetchVolume = async ( - { endTimestamp, startTimestamp }: FetchOptions -) => { +const fetchVolume = async ({ endTimestamp, startTimestamp }: FetchOptions) => { const response_0_8_0: IGraphResponse = await request( endpoint_0_8_0, query_0_8_0, @@ -198,9 +196,10 @@ const fetchVolume = async ( }; }; -const fetchVolumeBlast = async ( - { endTimestamp, startTimestamp }: FetchOptions -) => { +const fetchVolumeBlast = async ({ + endTimestamp, + startTimestamp, +}: FetchOptions) => { let dailyFees = new BigNumber(0); let totalFees = new BigNumber(0); @@ -251,9 +250,10 @@ const fetchVolumeBlast = async ( }; }; -const fetchVolumeMantle = async ( - { endTimestamp, startTimestamp }: FetchOptions -) => { +const fetchVolumeMantle = async ({ + endTimestamp, + startTimestamp, +}: FetchOptions) => { let dailyFees = new BigNumber(0); let totalFees = new BigNumber(0); From b935018c2ccc2d370bcadf5eb7612ef1bd8c5a32 Mon Sep 17 00:00:00 2001 From: realdealshaman Date: Thu, 12 Sep 2024 23:44:19 +0100 Subject: [PATCH 13/16] add new protocol adapter --- protocols/dtx-v3.ts | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 protocols/dtx-v3.ts diff --git a/protocols/dtx-v3.ts b/protocols/dtx-v3.ts new file mode 100644 index 0000000000..8e089679e1 --- /dev/null +++ b/protocols/dtx-v3.ts @@ -0,0 +1,7 @@ +import { uniV3Exports } from "../helpers/uniswap"; + +export default uniV3Exports({ + taiko: { + factory: '0xfCA1AEf282A99390B62Ca8416a68F5747716260c', + } +}) \ No newline at end of file From 7e319868788bbc154288712fb814b25ce65c3de8 Mon Sep 17 00:00:00 2001 From: vulntor <22735155+algtm@users.noreply.github.com> Date: Fri, 13 Sep 2024 11:46:59 +0800 Subject: [PATCH 14/16] new stat fetch for bsc upgrade --- aggregators/udex-agg/index.ts | 43 +++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/aggregators/udex-agg/index.ts b/aggregators/udex-agg/index.ts index dd7081f0d8..5affcd1e1d 100644 --- a/aggregators/udex-agg/index.ts +++ b/aggregators/udex-agg/index.ts @@ -2,12 +2,14 @@ import { Chain } from "@defillama/sdk/build/general"; import { FetchResult, FetchResultV2, FetchV2, SimpleAdapter } from "../../adapters/types"; import { CHAIN } from "../../helpers/chains"; import customBackfill from "../../helpers/customBackfill"; +import fetchURL from "../../utils/fetchURL"; +import { getTimestampAtStartOfPreviousDayUTC } from "../../utils/date"; let abi = ["event Swap(address indexed payer,address indexed payee,address fromToken,address toToken,uint fromAmount,uint receivedAmount)"]; -let knownTokens=new Set(["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c","0x55d398326f99059fF775485246999027B3197955","0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"]) +let knownTokens = new Set(["0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", "0x55d398326f99059fF775485246999027B3197955", "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"]); type IContract = { [c: string | Chain]: string; -} +}; const contract: IContract = { [CHAIN.BSC]: '0xfCD555b55AA785d46E8c6e9bBB109b10602c431c', @@ -15,31 +17,42 @@ const contract: IContract = { [CHAIN.ETHEREUM]:'0x9556E8ce70ceA3c43e4A6c17ad2FAb258067b058', [CHAIN.BASE]:'0x334F493613c1dD33a364684802fB9C728dfcE1A5' -} - -const fetch: FetchV2 = async ({ getLogs, createBalances, chain, }): Promise => { +}; +const bscStatsApi = "https://public.udex.one/bsc/indexer/56/udex/daliyVolume?";//return max 24 hour volume +const fetch: FetchV2 = async ({ getLogs, createBalances, chain,fromTimestamp, toTimestamp }): Promise => { const dailyVolume = createBalances(); - const logs = (await getLogs({ target: contract[chain], eventAbi: abi[0] })) - logs.map((log: any) => { - if ( knownTokens.has(log.toToken)){ - dailyVolume.add(log.toToken, log.receivedAmount) - }else{ - dailyVolume.add(log.fromToken, log.fromAmount) + const reqUrl=bscStatsApi+`from_timestamp=${fromTimestamp}&to_timestamp=${toTimestamp}` + if (chain == CHAIN.BSC) { + let data = await fetchURL(reqUrl); + if (data.data) { + return { dailyVolume: data.data}; } + return { dailyVolume: 0 }; + } else { + const logs = (await getLogs({ target: contract[chain], eventAbi: abi[0] })); + logs.map((log: any) => { + if (knownTokens.has(log.toToken)) { + dailyVolume.add(log.toToken, log.receivedAmount); + } else { + dailyVolume.add(log.fromToken, log.fromAmount); + } }); - return { dailyVolume }; + return { dailyVolume }; + } + }; + const adapter: SimpleAdapter = { adapter: Object.keys(contract).reduce((acc, chain) => { return { ...acc, [chain]: { fetch, - start: 1701388800, - runAtCurrTime:false + start: 1724889600, + runAtCurrTime: false }, - } + }; }, {}), version: 2, }; From b9a1920e4b0d3aef555d88e6243bd0348219a372 Mon Sep 17 00:00:00 2001 From: g1ntoki <99907941+g1nt0ki@users.noreply.github.com> Date: Fri, 13 Sep 2024 11:58:20 +0200 Subject: [PATCH 15/16] fix primex --- dexs/primex-finance/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dexs/primex-finance/index.ts b/dexs/primex-finance/index.ts index 0c90241d69..060cacb316 100644 --- a/dexs/primex-finance/index.ts +++ b/dexs/primex-finance/index.ts @@ -12,7 +12,7 @@ const abi = { OpenPosition: "event OpenPosition(uint256 indexed positionId, address indexed trader, address indexed openedBy, (uint256 id, uint256 scaledDebtAmount, address bucket, address soldAsset, uint256 depositAmountInSoldAsset, address positionAsset, uint256 positionAmount, address trader, uint256 openBorrowIndex, uint256 createdAt, uint256 updatedConditionsAt, bytes extraParams) position, address feeToken, uint256 protocolFee, uint256 entryPrice, uint256 leverage, (uint256 managerType, bytes params)[] closeConditions)", OpenPositionV2: - "event OpenPosition( uint256 indexed positionId, address indexed trader, address indexed openedBy, PositionLibrary.Position position, uint256 entryPrice, uint256 leverage, LimitOrderLibrary.Condition[] closeConditions )", + "event OpenPosition( uint256 indexed positionId, address indexed trader, address indexed openedBy, (uint256 id, uint256 scaledDebtAmount, address bucket, address soldAsset, uint256 depositAmountInSoldAsset, address positionAsset, uint256 positionAmount, address trader, uint256 openBorrowIndex, uint256 createdAt, uint256 updatedConditionsAt, bytes extraParams) position, uint256 entryPrice, uint256 leverage, (uint256 managerType, bytes params)[] closeConditions)", ClosePosition: "event ClosePosition(uint256 indexed positionId, address indexed trader, address indexed closedBy, address bucketAddress, address soldAsset, address positionAsset, uint256 decreasePositionAmount, int256 profit, uint256 positionDebt, uint256 amountOut, uint8 reason)", PartialClosePosition: From bfd80dc9db6be0694f1072ee9b32ce4a86cdceaf Mon Sep 17 00:00:00 2001 From: lil-il <> Date: Fri, 13 Sep 2024 16:00:13 +0300 Subject: [PATCH 16/16] added all kiloex chains --- aggregator-derivatives/vooi/index.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/aggregator-derivatives/vooi/index.ts b/aggregator-derivatives/vooi/index.ts index 9d88e45ba5..02dcad1966 100644 --- a/aggregator-derivatives/vooi/index.ts +++ b/aggregator-derivatives/vooi/index.ts @@ -20,16 +20,20 @@ const fetchArbitrum = async (timestamp: number): Promise => { if (!synfuturesItem) { synfuturesItem = {dailyVolume: 0, totalVolume: 0} } - let kiloexItem = fetchData.find(((item) => item.protocol == "kiloex")) + let kiloexItem = fetchData.filter(((item) => item.protocol == "kiloex")) if (!kiloexItem) { kiloexItem = {dailyVolume: 0, totalVolume: 0} } - let dailyVolume = Number(orderlyItem.dailyVolume) + Number(kiloexItem.dailyVolume) - let totalVolume = Number(orderlyItem.totalVolume) + Number(kiloexItem.totalVolume) + let dailyVolume = Number(orderlyItem.dailyVolume) + let totalVolume = Number(orderlyItem.totalVolume) for (let i in synfuturesItem){ dailyVolume = Number(dailyVolume) + Number(synfuturesItem[i].dailyVolume) totalVolume = Number(totalVolume) + Number(synfuturesItem[i].totalVolume) } + for (let i in kiloexItem){ + dailyVolume = Number(dailyVolume) + Number(kiloexItem[i].dailyVolume) + totalVolume = Number(totalVolume) + Number(kiloexItem[i].totalVolume) + } return { dailyVolume, totalVolume,