Sub-Adapters 4

Preview and test each sub adapter.

Hop Protocol - Optimism (hop-optimism)

Hop Protocol - Gnosis Chain (hop-gnosis-chain)

Hop Protocol - Arbitrum One (hop-arbitrum)

Hop Protocol - Polygon (hop-polygon)

Adapter Code

Check the entire code written for the Adapter.

Source code

Showing TS source.
1export const name = 'Hop Protocol Fees';
2export const version = '0.1.2';
3export const license = 'MIT';
4
5export function setup(sdk: Context) {
6  const getHopFeeHandler = (network: string, subgraph: string) => async (date: string): Promise<number> => {
7    const startOfDayBlock = await sdk.chainData.getBlockNumber(date, network);
8    const nextDayDate = sdk.date.offsetDaysFormatted(date, 1);
9    const endOfDayBlock = await sdk.chainData.getBlockNumber(nextDayDate, network);
10
11    const data = await sdk.graph.query(
12      subgraph,
13      `query txFees($startOfDay: Int!, $endOfDay: Int!){
14        startOfDayAMM: ammFees(block: {number: $startOfDay}) {
15          token
16          amount
17        }
18        startOfDayBonder: bonderFees(block: {number: $startOfDay}) {
19          token
20          amount
21        }
22        endOfDayAMM: ammFees(block: {number: $endOfDay}) {
23          token
24          amount
25        }
26        endOfDayBonder: bonderFees(block: {number: $endOfDay}) {
27          token
28          amount
29        }
30      }`,
31      {
32        variables: {
33          startOfDay: startOfDayBlock,
34          endOfDay: endOfDayBlock,
35        },
36      },
37    );
38
39    let startOfDayTotal = 0;
40    let startOfDayETH = 0;
41
42    const startOfDayFees = [...data.startOfDayAMM, ...data.startOfDayBonder];
43    // @ts-ignore
44    console.log(data);
45    for (const day of startOfDayFees) {
46      if (day.token === 'USDC' || day.token === 'USDT') {
47        startOfDayTotal += day.amount / 1e6;
48      } else if (day.token === 'ETH') {
49        startOfDayETH += day.amount / 1e18;
50      } else {
51        // Warn: unknown pool
52      }
53    }
54
55    let endOfDayTotal = 0;
56    let endOfDayETH = 0;
57
58    const endOfDayFees = [...data.endOfDayAMM, ...data.endOfDayBonder];
59    for (const day of endOfDayFees) {
60      if (day.token === 'USDC' || day.token === 'USDT') {
61        endOfDayTotal += day.amount / 1e6;
62      } else if (day.token === 'ETH') {
63        endOfDayETH += day.amount / 1e18;
64      } else {
65        // Warn: unknown pool
66      }
67    }
68
69    const totalStables = endOfDayTotal - startOfDayTotal;
70    const totalETH = endOfDayETH - startOfDayETH;
71
72    const ethPrice = totalETH > 0
73      ? await sdk.coinGecko.getHistoricalPrice('ethereum', date)
74      : 0;
75
76    return totalStables + (totalETH * ethPrice);
77  }
78
79  const metadata = {
80    name: 'Hop Protocol',
81    category: 'xchain',
82    description: 'Hop protocol is a decentralized token bridge between Ethereum scaling solutions.',
83    feeDescription: 'Trading fees are paid to liquidity providers and bonder fees are paid to cross-chain bonders',
84    source: 'The Graph Protocol',
85    website: 'https://hop.exchange',
86    protocolLaunch: '2020-09-09',
87    icon: sdk.ipfs.getDataURILoader('Qma6xqAk9BksRvPZvTtJZs1BrPaAxAEyeY7ufWvAmteKso', 'image/svg+xml'),
88  };
89
90  sdk.registerBundle('hop', metadata);
91
92  sdk.register({
93    id: 'hop-optimism',
94    bundle: 'hop',
95    queries: {
96      oneDayTotalFees: getHopFeeHandler('optimism', 'hop-protocol/hop-optimism'),
97    },
98    metadata: {
99      ...metadata,
100      subtitle: 'Optimism',
101      blockchain: 'Optimism',
102      protocolLaunch: '2021-08-24',
103    },
104  });
105
106  sdk.register({
107    id: 'hop-gnosis-chain',
108    bundle: 'hop',
109    queries: {
110      oneDayTotalFees: getHopFeeHandler('xdai', 'hop-protocol/hop-xdai'),
111    },
112    metadata: {
113      ...metadata,
114      subtitle: 'Gnosis Chain',
115      blockchain: 'Gnosis Chain',
116    },
117  });
118
119  sdk.register({
120    id: 'hop-arbitrum',
121    bundle: 'hop',
122    queries: {
123      oneDayTotalFees: getHopFeeHandler('arbitrum-one', 'hop-protocol/hop-arbitrum'),
124    },
125    metadata: {
126      ...metadata,
127      subtitle: 'Arbitrum One',
128      blockchain: 'Arbitrum One',
129      protocolLaunch: '2021-09-01',
130    },
131  });
132
133  sdk.register({
134    id: 'hop-polygon',
135    bundle: 'hop',
136    queries: {
137      oneDayTotalFees: getHopFeeHandler('polygon', 'hop-protocol/hop-polygon'),
138    },
139    metadata: {
140      ...metadata,
141      subtitle: 'Polygon',
142      blockchain: 'Polygon',
143    },
144  });
145}
146

It's something off?

Report it to the discussion board on Discord, we will take care of it.

Adapter Info

Version

0.1.2

License

MIT

IPFS CID

QmPPTbZM9AJW5Yace8kMDcg7cNVwgYxZeNkwv8w2FJmGyK

CID (source)

QmYhEvoWihsWMv9nsiYnX5AsfzE8DVjNpa9xS3HQHb8ZZu

Collections

Author

mihal.eth