Sub-Adapters 6
Preview and test each sub adapter.
Uniswap - V1 (uniswap-v1)
Uniswap - V2 (uniswap-v2)
Uniswap - V3 (uniswap-v3)
Uniswap - Optimism (uniswap-optimism)
Uniswap - Arbitrum One (uniswap-arbitrum)
Uniswap - Polygon (uniswap-polygon)
Adapter Code
Check the entire code written for the Adapter.
Source code
Showing TS source.
1export const name = 'Uniswap Fees & Volume';
2export const version = '1.0.3';
3export const license = 'MIT';
4export const description = 'Get total trading fees and volume across various Uniswap deployments from The Graph';
5
6const blacklistAddresses = [
7 '0x7d7e813082ef6c143277c71786e5be626ec77b20',
8 '0xe5ffe183ae47f1a0e4194618d34c5b05b98953a8',
9 '0xf9c1fa7d41bf44ade1dd08d37cc68f67ae75bf92',
10 '0x23fe4ee3bd9bfd1152993a7954298bb4d426698f',
11 '0x382a9a8927f97f7489af3f0c202b23ed1eb772b5',
12];
13
14const SEC_IN_DAY = 86400;
15
16export function setup(sdk: Context) {
17 const uniV3Adapter = (subgraph: string, getFees?: boolean) => async (date: string): Promise<number> => {
18 const dateId = Math.floor(sdk.date.dateToTimestamp(date) / SEC_IN_DAY);
19
20 const graphQuery = `query fees($dateId: Int!, $nextDay: Int!) {
21 uniswapDayData(id: $dateId) {
22 feesUSD
23 volumeUSD
24 }
25 nextDay: uniswapDayData(id: $nextDay) {
26 feesUSD
27 volumeUSD
28 }
29 }`;
30
31 const data = await sdk.graph.query(
32 subgraph,
33 graphQuery,
34 { dateId, nextDay: dateId + 1 },
35 );
36
37 if (!data.nextDay) {
38 return null;
39 }
40
41 return parseFloat(getFees ? data.uniswapDayData.feesUSD : data.uniswapDayData.volumeUSD);
42 };
43
44 const getUniswapV2 = (getFees?: boolean) => async (date: string): Promise<number> => {
45 const dateId = Math.floor(sdk.date.dateToTimestamp(date) / SEC_IN_DAY);
46
47 const graphQuery = `query fees($date: Int!, $dateId: Int!, $nextDay: Int!, $blacklistAddresses: [Bytes!]!) {
48 uniswapDayData(id: $dateId) {
49 dailyVolumeUSD
50 }
51 nextDay: uniswapDayData(id: $nextDay) {
52 dailyVolumeUSD
53 }
54 blacklist: pairDayDatas(where: { pairAddress_in: $blacklistAddresses, date: $date }) {
55 dailyVolumeUSD
56 }
57 }`;
58
59 const data = await sdk.graph.query(
60 'uniswap/uniswap-v2',
61 graphQuery,
62 {
63 date: sdk.date.dateToTimestamp(date),
64 blacklistAddresses,
65 dateId,
66 nextDay: dateId + 1,
67 },
68 );
69
70 if (!data.nextDay) {
71 return null;
72 }
73
74 const blacklistVolume = data.blacklist.reduce(
75 (total: number, day: any) => total + parseFloat(day.dailyVolumeUSD),
76 0
77 );
78
79 const oneDayVolume = parseFloat(data.uniswapDayData.dailyVolumeUSD) - blacklistVolume;
80
81 return getFees ? oneDayVolume * 0.003 : oneDayVolume;
82 };
83
84 const getUniswapV1 = (getFees?: boolean) => async (date: string): Promise<number> => {
85 const dateId = Math.floor(sdk.date.dateToTimestamp(date) / SEC_IN_DAY);
86
87 const graphQuery = `query fees($dateId: Int!, $nextDay: Int!) {
88 uniswapDayData(id: $dateId) {
89 dailyVolumeInUSD
90 }
91 nextDay: uniswapDayData(id: $nextDay) {
92 dailyVolumeInUSD
93 }
94 }`;
95
96 const data = await sdk.graph.query('graphprotocol/uniswap', graphQuery, { dateId, nextDay: dateId + 1});
97
98 if (!data.nextDay) {
99 return null;
100 }
101
102 const oneDayVolume = parseFloat(data.uniswapDayData.dailyVolumeInUSD);
103
104 return getFees ? oneDayVolume * 0.003 : oneDayVolume;
105 };
106
107 const metadata = {
108 icon: sdk.ipfs.getDataURILoader('QmPXoiG66a9gCDX1NX51crWV7UAijoFd5wycHrfRKM6Y1n', 'image/svg+xml'),
109 name: 'Uniswap',
110 bundle: 'uniswap',
111 category: 'dex',
112 description: 'Uniswap is a permissionless, decentralized exchange',
113 feeDescription: 'Trading fees are paid by traders to liquidity providers',
114 website: 'https://uniswap.org',
115 blockchain: 'Ethereum',
116 source: 'The Graph Protocol',
117 tokenTicker: 'UNI',
118 tokenCoingecko: 'uniswap',
119 tokenLaunch: '2020-09-14',
120 protocolLaunch: '2020-11-02',
121 };
122
123 sdk.register({
124 id: 'uniswap-v1',
125 bundle: 'uniswap',
126 queries: {
127 oneDayTotalFees: getUniswapV1(true),
128 oneDayTotalVolumeUSD: getUniswapV1(),
129 },
130 metadata: {
131 ...metadata,
132 icon: sdk.ipfs.getDataURILoader('QmQZhDfjDjT1Tv9xfaWYcRkywD4GCavkhge7Yi4A74rJ4b', 'image/png'),
133 subtitle: 'V1',
134 protocolLaunch: '2020-11-02',
135 },
136 });
137
138 sdk.register({
139 id: 'uniswap-v2',
140 bundle: 'uniswap',
141 queries: {
142 oneDayTotalFees: getUniswapV2(true),
143 oneDayTotalVolumeUSD: getUniswapV2(),
144 },
145 metadata: {
146 ...metadata,
147 subtitle: 'V2',
148 protocolLaunch: '2020-05-04',
149 },
150 });
151
152 sdk.register({
153 id: 'uniswap-v3',
154 bundle: 'uniswap',
155 queries: {
156 oneDayTotalFees: uniV3Adapter('uniswap/uniswap-v3', true),
157 oneDayTotalVolumeUSD: uniV3Adapter('uniswap/uniswap-v3'),
158 },
159 metadata: {
160 ...metadata,
161 subtitle: 'V3',
162 protocolLaunch: '2021-05-05',
163 },
164 });
165
166 sdk.register({
167 id: 'uniswap-optimism',
168 bundle: 'uniswap',
169 queries: {
170 oneDayTotalFees: uniV3Adapter('ianlapham/optimism-post-regenesis', true),
171 oneDayTotalVolumeUSD: uniV3Adapter('ianlapham/optimism-post-regenesis'),
172 },
173 metadata: {
174 ...metadata,
175 subtitle: 'Optimism',
176 blockchain: 'Optimism',
177 protocolLaunch: '2021-11-11',
178 },
179 });
180
181 sdk.register({
182 id: 'uniswap-arbitrum',
183 bundle: 'uniswap',
184 queries: {
185 oneDayTotalFees: uniV3Adapter('ianlapham/arbitrum-minimal', true),
186 oneDayTotalVolumeUSD: uniV3Adapter('ianlapham/arbitrum-minimal'),
187 },
188 metadata: {
189 ...metadata,
190 subtitle: 'Arbitrum One',
191 blockchain: 'Arbitrum One',
192 protocolLaunch: '2021-08-31',
193 },
194 });
195
196 sdk.register({
197 id: 'uniswap-polygon',
198 bundle: 'uniswap',
199 queries: {
200 oneDayTotalFees: uniV3Adapter('ianlapham/uniswap-v3-polygon', true),
201 oneDayTotalVolumeUSD: uniV3Adapter('ianlapham/uniswap-v3-polygon'),
202 },
203 metadata: {
204 ...metadata,
205 subtitle: 'Polygon',
206 blockchain: 'Polygon',
207 protocolLaunch: '2021-12-21',
208 },
209 });
210
211 sdk.registerBundle('uniswap', metadata);
212}
213
It's something off?
Report it to the discussion board on Discord, we will take care of it.