Skip to content

Commit

Permalink
Merge pull request #1743 from K-Lascar/master
Browse files Browse the repository at this point in the history
Update GMX V2 Volume and Swaps Tracking
  • Loading branch information
dtmkeng committed Aug 6, 2024
2 parents a8719c6 + d8c30fd commit 8df4f9a
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 120 deletions.
59 changes: 0 additions & 59 deletions dexs/gmx-v2/gmx-v2-trade/index.ts

This file was deleted.

141 changes: 81 additions & 60 deletions dexs/gmx-v2/index.ts
Original file line number Diff line number Diff line change
@@ -1,77 +1,98 @@
import { BreakdownAdapter, FetchOptions, FetchResultV2, FetchResultVolume } from "../../adapters/types";
import request, { gql } from "graphql-request";
import { BreakdownAdapter, Fetch, SimpleAdapter } from "../../adapters/types";
import { CHAIN } from "../../helpers/chains";
import { Chain } from "@defillama/sdk/build/general";
import { adapter_trade } from './gmx-v2-trade/index'
import { getUniqStartOfTodayTimestamp } from "../../helpers/getUniSubgraphVolume";


interface ILog {
data: string;
transactionHash: string;
topics: string[];
const endpoints: { [key: string]: string } = {
[CHAIN.ARBITRUM]: "https://subgraph.satsuma-prod.com/3b2ced13c8d9/gmx/synthetics-arbitrum-stats/api",
[CHAIN.AVAX]: "https://subgraph.satsuma-prod.com/3b2ced13c8d9/gmx/synthetics-avalanche-stats/api",
}

const topic0_ins = '0x137a44067c8961cd7e1d876f4754a5a3a75989b4552f1843fc69c3b372def160';
const topic1_ins = '0xf35c99b746450c623be607459294d15f458678f99d535718db6cfcbccb117c09';

interface IToken {
amount: number;
token: string;
}
const historicalDataSwap = gql`
query get_volume($period: String!, $id: String!) {
volumeInfos(where: {period: $period, id: $id}) {
swapVolumeUsd
}
}
`

type TChain = {
[s: Chain | string]: string;
}
const historicalDataDerivatives = gql`
query get_volume($period: String!, $id: String!) {
volumeInfos(where: {period: $period, id: $id}) {
marginVolumeUsd
}
}
`

const contract: TChain = {
[CHAIN.ARBITRUM]: '0xc8ee91a54287db53897056e12d9819156d3822fb',
[CHAIN.AVAX]: '0xdb17b211c34240b014ab6d61d4a31fa0c0e20c26'
interface IGraphResponse {
volumeInfos: Array<{
marginVolumeUsd: string,
swapVolumeUsd: string,
}>
}

const fetch = async (options: FetchOptions): Promise<FetchResultV2> => {
const dailyVolume = options.createBalances();
const swap_logs: ILog[] = await options.getLogs({
target: contract[options.chain],
topics: [topic0_ins, topic1_ins],
});
const raw_in = swap_logs.map((e: ILog) => {
const data = e.data.replace('0x', '');
const volume = Number('0x' + data.slice(53 * 64, (53 * 64) + 64));
const address = data.slice(27 * 64, (27 * 64) + 64);
const contract_address = '0x' + address.slice(24, address.length);
return {
amount: volume,
token: contract_address,
} as IToken
})

raw_in.map((e: IToken) => {
dailyVolume.add(e.token, e.amount)
})
const getFetch = (query: string)=> (chain: string): Fetch => async (timestamp: number) => {
const dayTimestamp = getUniqStartOfTodayTimestamp(new Date((timestamp * 1000)))
const dailyData: IGraphResponse = await request(endpoints[chain], query, {
id: '1d:' + chain === CHAIN.ARBITRUM
? String(dayTimestamp)
: String(dayTimestamp),
period: '1d',
})
const totalData: IGraphResponse = await request(endpoints[chain], query, {
id: 'total',
period: 'total',
})

return {
dailyVolume: dailyVolume,
}
return {
timestamp: dayTimestamp,
dailyVolume:
dailyData.volumeInfos.length == 1
? String(Number(Object.values(dailyData.volumeInfos[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30)
: undefined,
totalVolume:
totalData.volumeInfos.length == 1
? String(Number(Object.values(totalData.volumeInfos[0]).reduce((sum, element) => String(Number(sum) + Number(element)))) * 10 ** -30)
: undefined,
}
}

const startTimestamps: { [chain: string]: number } = {
[CHAIN.ARBITRUM]: 1630368000,
[CHAIN.AVAX]: 1640131200,
}

const adapter: any = {
adapter: {
[CHAIN.ARBITRUM]: {
fetch: fetch,
start: 1688428800,
},
[CHAIN.AVAX]: {
fetch: fetch,
start: 1688428800,
},
},
};
const methodology = {
dailyVolume:
"Sum of daily total volume for all markets on a given day.",
totalVolume:
"Sum of overall total volume for all markets since inception."
}

const adapters: BreakdownAdapter = {
const adapter: BreakdownAdapter = {
version: 2,
breakdown: {
"gmx-v2-swap": adapter["adapter"],
"gmx-v2-trade": adapter_trade["adapter"],
"swap": Object.keys(endpoints).reduce((acc, chain) => {
return {
...acc,
[chain]: {
fetch: getFetch(historicalDataSwap)(chain),
start: startTimestamps[chain],
meta: {methodology}
}
}
}, {}),
"derivatives": Object.keys(endpoints).reduce((acc, chain) => {
return {
...acc,
[chain]: {
fetch: getFetch(historicalDataDerivatives)(chain),
start: startTimestamps[chain],
meta: {methodology}
}
}
}, {})
}
}
export default adapters;

export default adapter;
7 changes: 6 additions & 1 deletion fees/radiant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ type TAddress = {
const address: TAddress = {
[CHAIN.ARBITRUM]: '0xE10997B8d5C6e8b660451f61accF4BBA00bc901f',
[CHAIN.BSC]: '0xcebdff400A23E5Ad1CDeB11AfdD0087d5E9dFed8',
[CHAIN.ETHEREUM]: '0x28E395a54a64284DBA39652921Cd99924f4e3797'
[CHAIN.ETHEREUM]: '0x28E395a54a64284DBA39652921Cd99924f4e3797',
[CHAIN.BASE]: '0xC49b4D1e6CbbF4cAEf542f297449696d8B47E411'
}

interface ITx {
Expand Down Expand Up @@ -86,6 +87,10 @@ const adapter: Adapter = {
fetch: fetch(CHAIN.ETHEREUM),
start: 1698796800,
},
[CHAIN.BASE]: {
fetch: fetch(CHAIN.BASE),
start: 1719592253,
},
}
}

Expand Down

0 comments on commit 8df4f9a

Please sign in to comment.