Skip to content

Commit f2bdd43

Browse files
authored
update sushiswap adapters (DefiLlama#3699)
* add sushi classic user fees * fix * split classic to file * update sushiswap adapter * add supplySide revenue * update sushi fees adapters
1 parent 8e3ea28 commit f2bdd43

File tree

13 files changed

+976
-1000
lines changed

13 files changed

+976
-1000
lines changed

aggregators/sushiswap-agg.ts

Lines changed: 513 additions & 5 deletions
Large diffs are not rendered by default.

dexs/sushiswap-classic.ts

Lines changed: 209 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,212 @@
1+
import * as sdk from "@defillama/sdk";
2+
import { Chain } from "../adapters/types";
3+
import { CHAIN } from "../helpers/chains";
4+
import { getGraphDimensions2 } from "../helpers/getUniSubgraph";
5+
import { getChainVolumeWithGasToken2 } from "../helpers/getUniSubgraphVolume";
6+
import { FetchOptions } from "../adapters/types";
7+
import { getUniV2LogAdapter } from "../helpers/uniswap";
18

2-
import adapter from './sushiswap'
3-
const { breakdown, ...rest } = adapter
9+
const blacklistTokens = {
10+
[CHAIN.ARBITRUM]: [
11+
"0xb1bc3f4eacc69c663d289516034981c5272e7fa1",//CPT
12+
"0xfbef65afa44faa7b69c8779d42ffb5d661ac8b25",//ACID
13+
"0x134781f5ab6014c9d75cbd87bb1654ab7e6bb432",//CPT
14+
"0x947d54973d908dc76ff415895bf29108d71ceba3",//ACID
15+
"0xbbb930795e2a974fd95064fa46a5525a7d447fa7",//ACID
16+
"0xb94ea12476c2591b8f7a1070a7db8e3b0722e00d",//ACID
17+
"0x7d823eefa4f801b0b9455ebd4fcbacb154e63b22",//CPT
18+
"0xaa4d8ab8aeafa2273d670d11acc46785346e5cb9",//GPT
19+
"0x2c347d1c20caebf45908b5f55841b25fd0c943d3",//GPT
20+
"0x04845e2af405063a6f3590efea87d418ad92ccc4",//ACID
21+
"0x29c170dfe9994a113fac69bb77708d90bd3d867e",//ACID
22+
"0xe41ce5d4aa167de4d59f54a5bb984139207c274d",//GPT
23+
"0xc09d04c474e78b130a8cb636a5132760bece5edf",//CPT
24+
"0xdc0b4039a0b358eec18dd6be01f690556098582b",//ARBPAD
25+
"0xb370f370780def161125afdd944e2d26e04e0178",//MZR
26+
"0xe167cb54d03ab5692e8d917b07f72bb1b177f652",//SPOOL
27+
"0x312ca799e46b58768aa64d209ae84b7ab5fcbfa1",//MZR Token
28+
"0x47480a09b270c559e78d30d63b31e694e091614a",//ARBK
29+
"0x29c170dfe9994a113fac69bb77708d90bd3d867e",//ACID,
30+
"0xcCbb8003C66BAa30406f08C52E4beE8ab102f65B", // RAM SCAM,
31+
"0xcdde1105161f32636982e875a608878e3c3c2059", // DZOO,
32+
"0x19b3a789f07b53F50c59A602B93c32bb5628D4C4", // DAO
33+
"0x703051e52b999920af1558541efecf2ba0afc690", // RAM SCAM
34+
"0x3c04d54fb2fded5a046be86dd546befe24abd75d", // RAM SCAM
35+
"0x28703c9d4bd6d9e1202c7c228b240310b44832b0", // RAM SCAM
36+
"0xcaf35894504aebd2ea1014a4f73b2c45d3ee12bb", // RAM SCAM
37+
"0x4e1f0ff2679a16f8c2fcdec5b018b74b71b680c7", // RAM SCAM
38+
"0xac385feff7633b644aa1e10781d041456e74c876", // RAM SCAM
39+
"0x45462873fc22842acecf4e165302fefe1d38bdc1", // RAM SCAM
40+
"0xDC29348A45b9cbEa574ce680bAEE4bf58Dd5B5fD", // RAM SCAM
41+
"0x02e93ecc531fa25ffcd9b96734813b25f80376f1", // ETHFAI
42+
"0x82F9C30A8295fD34437C204D388b659FE61cAf90", // ORO
43+
"0xf842a419bad027e962918ab795964f169f4c1692", // COCO
44+
"0x52d8ca895d215843886324899d8855a95e60456c", // ARB SCAM
45+
"0xde204d12c04188c5b069887fc4aed5a61df51496" // MEEET
46+
],
47+
[CHAIN.ETHEREUM]: [
48+
"0xcbaf9d3e0cae494cd77e49621995062107848a5b"
49+
]
50+
}
51+
52+
const endpointsClassic = {
53+
[CHAIN.ETHEREUM]: sdk.graph.modifyEndpoint('GyZ9MgVQkTWuXGMSd3LXESvpevE8S8aD3uktJh7kbVmc'),
54+
// [CHAIN.BSC]: sdk.graph.modifyEndpoint('GPRigpbNuPkxkwpSbDuYXbikodNJfurc1LCENLzboWer'),
55+
[CHAIN.POLYGON]: sdk.graph.modifyEndpoint('8NiXkxLRT3R22vpwLB4DXttpEf3X1LrKhe4T1tQ3jjbP'),
56+
//[CHAIN.FANTOM]: sdk.graph.modifyEndpoint('3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK'),
57+
[CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('8nFDCAhdnJQEhQF3ZRnfWkJ6FkRsfAiiVabVn4eGoAZH'),
58+
// [CHAIN.CELO]: sdk.graph.modifyEndpoint('8roCC7H2tsGYGvxD52QQbUoHXXx77H9tPhNn1qcjB5yj'),
59+
// [CHAIN.AVAX]: sdk.graph.modifyEndpoint('6VAhbtW5u2sPYkJKAcMsxgqTBu4a1rqmbiVQWgtNjrvT'),
60+
// [CHAIN.HARMONY]: sdk.graph.modifyEndpoint('FrcJBCCKCYGTLLXJmhppXfPKsNoyod4zqNLjHfXj1KHg'), // index error
61+
// [CHAIN.MOONRIVER]: sdk.graph.modifyEndpoint('5skUrJzgVm6vXAmdKN7gw4CjYx3pgLDeUeUqVzqLXkWT'),
62+
// [CHAIN.XDAI]: sdk.graph.modifyEndpoint('4a8hcsttqsmycmmeFcpffGMZhBDU4NhHfyHH6YNcnu7b'),
63+
// [CHAIN.MOONBEAM]: sdk.graph.modifyEndpoint('3tNHz9aTBa2KUthYZiZZxayYYpxXACverKRrkafhoBru'),
64+
// [CHAIN.BOBA]: sdk.graph.modifyEndpoint('EC3ZtCpCaV5GyyhyPNHs584wdGA72nud7qcuxWNTfPr4'),
65+
// [CHAIN.FUSE]: sdk.graph.modifyEndpoint('DcaAUrnx2mWKVQNsVJiuz7zhjoLkvtDUcoq73NdBvbTo'), // index error
66+
[CHAIN.CORE]: 'https://thegraph.coredao.org/subgraphs/name/sushi-v2/sushiswap-core',
67+
[CHAIN.BLAST]: 'https://api.goldsky.com/api/public/project_clslspm3c0knv01wvgfb2fqyq/subgraphs/sushiswap/sushiswap-blast/gn',
68+
[CHAIN.KATANA]: sdk.graph.modifyEndpoint('FYBTPY5uYPZ3oXpEriw9Pzn8RH9S1m7tpNwBwaNMuTNq')
69+
};
70+
71+
const VOLUME_FIELD = "volumeUSD";
72+
73+
const feesPercent = {
74+
type: "volume" as "volume",
75+
Fees: 0.3,
76+
UserFees: 0.3,
77+
Revenue: 0.05,
78+
HoldersRevenue: 0.05,
79+
ProtocolRevenue: 0,
80+
SupplySideRevenue: 0.25
81+
}
82+
83+
const graphsClassic = getGraphDimensions2({
84+
graphUrls: endpointsClassic,
85+
totalVolume: {
86+
factory: "factories",
87+
field: VOLUME_FIELD,
88+
},
89+
feesPercent,
90+
blacklistTokens
91+
});
92+
93+
const graphsClassicBoba = getGraphDimensions2({
94+
graphUrls: endpointsClassic,
95+
totalVolume: {
96+
factory: "factories",
97+
field: VOLUME_FIELD,
98+
},
99+
feesPercent
100+
});
101+
102+
const graphsClassicETH = getGraphDimensions2({
103+
graphUrls: endpointsClassic,
104+
totalVolume: {
105+
factory: "uniswapFactories",
106+
field: 'totalVolumeUSD',
107+
},
108+
feesPercent
109+
});
110+
111+
const classic = Object.keys(endpointsClassic).reduce(
112+
(acc, chain) => ({
113+
...acc,
114+
[chain]: {
115+
fetch: async (options: FetchOptions) => {
116+
try {
117+
const call = chain === CHAIN.BOBA ? graphsClassicBoba : [CHAIN.ETHEREUM, CHAIN.KATANA].includes(chain as CHAIN) ? graphsClassicETH : graphsClassic;
118+
const values = (await call(chain as Chain)(options));
119+
const result = {
120+
dailyVolume: values?.dailyVolume || 0,
121+
dailyFees: values?.dailyFees || 0,
122+
dailyUserFees: values?.dailyUserFees || 0,
123+
dailyProtocolRevenue: values?.dailyProtocolRevenue || 0,
124+
dailySupplySideRevenue: values?.dailySupplySideRevenue || 0,
125+
dailyHoldersRevenue: values?.dailyHoldersRevenue || 0,
126+
dailyRevenue: values?.dailyRevenue || 0,
127+
};
128+
129+
Object.entries(result).forEach(([key, value]) => {
130+
if (Number(value) < 0) throw new Error(`${key} cannot be negative. Current value: ${value}`);
131+
});
132+
133+
return result;
134+
} catch {
135+
return {
136+
dailyVolume: 0,
137+
dailyFees: 0,
138+
dailyUserFees: 0,
139+
dailyProtocolRevenue: 0,
140+
dailySupplySideRevenue: 0,
141+
dailyHoldersRevenue: 0,
142+
dailyRevenue: 0,
143+
}
144+
}
145+
},
146+
start: '2024-04-01',
147+
meta: {
148+
methodology: {
149+
Fees: "SushiSwap charges a flat 0.3% fee",
150+
UserFees: "Users pay a 0.3% fee on each trade",
151+
Revenue: "A 0.05% of each trade goes to treasury",
152+
HoldersRevenue: "Share of swap fee goes to xSUSHI stakers.",
153+
ProtocolRevenue: "Treasury receives a share of the fees",
154+
SupplySideRevenue: "Liquidity providers get 5/6 of all trades in their pools"
155+
}
156+
}
157+
},
158+
}),
159+
{}
160+
) as any;
161+
162+
// const fantomGraphs = getChainVolumeWithGasToken2({
163+
// graphUrls: {
164+
// [CHAIN.FANTOM]: sdk.graph.modifyEndpoint('3nozHyFKUhxnEvekFg5G57bxPC5V63eiWbwmgA35N5VK')
165+
// },
166+
// totalVolume: {
167+
// factory: "factories",
168+
// field: 'volumeETH',
169+
// },
170+
// priceToken: "coingecko:fantom"
171+
// } as any);
172+
173+
// classic[CHAIN.FANTOM] = {
174+
// fetch: async (options: FetchOptions) => {
175+
// const values = await fantomGraphs(CHAIN.FANTOM)(options);
176+
// const vol = Number(values.dailyVolume);
177+
// if (vol < 0) throw new Error(`Volume cannot be negative. Current value: ${vol}`);
178+
179+
// const result = {
180+
// ...values,
181+
// dailyFees: vol * 0.003,
182+
// dailyUserFees: vol * 0.003,
183+
// dailyProtocolRevenue: vol * 0.0005,
184+
// dailySupplySideRevenue: vol * 0.0025,
185+
// dailyHoldersRevenue: 0,
186+
// dailyRevenue: vol * 0.003,
187+
// };
188+
189+
// Object.entries(result).forEach(([key, value]) => {
190+
// if (Number(value) < 0) throw new Error(`${key} cannot be negative. Current value: ${value}`);
191+
// });
192+
193+
// return result;
194+
// },
195+
// }
196+
197+
const getUniV2LogAdapterConfig = {
198+
userFeesRatio: 1,
199+
revenueRatio: 1/6,
200+
protocolRevenueRatio: 0,
201+
holdersRevenueRatio: 1/6,
202+
}
203+
204+
classic[CHAIN.FANTOM] = { fetch: getUniV2LogAdapter({ factory: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4', ...getUniV2LogAdapterConfig }) }
205+
classic[CHAIN.AVAX] = { fetch: getUniV2LogAdapter({ factory: '0xc35dadb65012ec5796536bd9864ed8773abc74c4', ...getUniV2LogAdapterConfig }) }
206+
classic[CHAIN.FUSE] = { fetch: getUniV2LogAdapter({ factory: '0x43eA90e2b786728520e4f930d2A71a477BF2737C', ...getUniV2LogAdapterConfig }) }
207+
classic[CHAIN.HARMONY] = { fetch: getUniV2LogAdapter({ factory: '0xc35DADB65012eC5796536bD9864eD8773aBc74C4', ...getUniV2LogAdapterConfig }) }
4208

5209
export default {
6-
...rest,
7-
adapter: breakdown['classic'],
8-
}
210+
version: 2,
211+
adapter: classic,
212+
}

dexs/sushiswap-trident.ts

Lines changed: 89 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,92 @@
1+
import * as sdk from "@defillama/sdk";
2+
import request, { gql } from "graphql-request";
3+
import { CHAIN } from "../helpers/chains";
4+
import { FetchOptions } from "../adapters/types";
15

2-
import adapter from './sushiswap'
3-
const { breakdown, ...rest } = adapter
6+
const endpointsTrident: Record<string, string> = {
7+
[CHAIN.POLYGON]: sdk.graph.modifyEndpoint('BSdbRfU6PjWSdKjhpfUQ6EgUpzMxgpf5c1ugaVwBJFsQ'),
8+
[CHAIN.OPTIMISM]: sdk.graph.modifyEndpoint('FEgRuH9zeTRMZgpVv5YavoFEcisoK6KHk3zgQRRBqt51'),
9+
//[CHAIN.KAVA]: 'https://pvt.graph.kava.io/subgraphs/name/sushi-v2/trident-kava',
10+
// [CHAIN.METIS]: 'https://andromeda.thegraph.metis.io/subgraphs/name/sushi-v2/trident-metis',
11+
// [CHAIN.BITTORRENT]: 'https://subgraphs.sushi.com/subgraphs/name/sushi-v2/trident-bttc',
12+
[CHAIN.ARBITRUM]: sdk.graph.modifyEndpoint('4x8H6ZoGfJykyZqAe2Kx2g5afsp17S9pn8GroRkpezhx'),
13+
[CHAIN.BSC]: sdk.graph.modifyEndpoint('9TQaBw1sU3wi2kdevuygKhfhjP3STnwBe1jUnKxmNhmn'),
14+
[CHAIN.AVAX]: sdk.graph.modifyEndpoint('NNTV3MgqSGtHMBGdMVLXzzDbKDKmsY87k3PsQ2knmC1'),
15+
}
16+
17+
const VOLUME_FIELD = "volumeUSD";
18+
19+
const startTimeQueryTrident = {
20+
endpoints: endpointsTrident,
21+
dailyDataField: "factoryDaySnapshots",
22+
volumeField: VOLUME_FIELD,
23+
};
24+
25+
const tridentQuery = gql`
26+
query trident($number: Int) {
27+
factory(
28+
id: "ALL"
29+
block: { number: $number }
30+
) {
31+
volumeUSD
32+
feesUSD
33+
}
34+
}
35+
`
36+
37+
const trident = Object.keys(endpointsTrident).reduce(
38+
(acc, chain) => ({
39+
...acc,
40+
[chain]: {
41+
fetch: async ({ getStartBlock, getEndBlock }: FetchOptions) => {
42+
const [startBlock, endBlock] = await Promise.all([
43+
getStartBlock(),
44+
getEndBlock()
45+
])
46+
try {
47+
const beforeRes = await request(endpointsTrident[chain], tridentQuery, {
48+
number: startBlock,
49+
});
50+
const afterRes = await await request(endpointsTrident[chain], tridentQuery, {
51+
number: endBlock,
52+
});
53+
54+
const result = {
55+
totalVolume: afterRes.factory.volumeUSD,
56+
totalFees: afterRes.factory.feesUSD,
57+
totalUserFees: afterRes.factory.feesUSD,
58+
dailyVolume: afterRes.factory.volumeUSD - beforeRes.factory.volumeUSD,
59+
dailyFees: afterRes.factory.feesUSD - beforeRes.factory.feesUSD,
60+
dailyUserFees: afterRes.factory.feesUSD - beforeRes.factory.feesUSD
61+
};
62+
63+
Object.entries(result).forEach(([key, value]) => {
64+
if (Number(value) < 0) throw new Error(`${key} cannot be negative. Current value: ${value}`);
65+
});
66+
67+
return result;
68+
} catch {
69+
return {
70+
dailyVolume: 0,
71+
dailyFees: 0,
72+
dailyUserFees: 0
73+
}
74+
}
75+
76+
},
77+
start: '2024-04-01',
78+
meta: {
79+
methodology: {
80+
Fees: "Trading fees paid by users",
81+
UserFees: "Trading fees paid by users",
82+
}
83+
}
84+
},
85+
}),
86+
{}
87+
);
488

589
export default {
6-
...rest,
7-
adapter: breakdown['trident'],
8-
}
90+
version: 2,
91+
adapter: trident,
92+
}

0 commit comments

Comments
 (0)