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
5209export default {
6- ... rest ,
7- adapter : breakdown [ ' classic' ] ,
8- }
210+ version : 2 ,
211+ adapter : classic ,
212+ }
0 commit comments