Sub-Adapters 1
Preview and test each sub adapter.
Arbitrum One (arbitrum-one)
Metadata
- ID
- arbitrum-one
- name
"Arbitrum One"
- icon
- category
"l2"
- description
"Arbitrum One is an optimistic-rollup scaling solution built on Ethereum."
- feeDescription
"Transaction fees are paid to sequencers."
- blockchain
"Arbitrum One"
- source
"The Graph Protocol"
- website
"https://arbitrum.io"
- protocolLaunch
"2021-08-11"
Queries
Adapter Code
Check the entire code written for the Adapter.
Source code
Showing TS source.
1export const name = 'Arbitrum Fees - Clone';
2export const version = '0.3.0';
3export const license = 'MIT';
4export const description = 'Tracks the fee collector add';
5
6const SEQUENCER_FEES = '0x18A08f3CA72DC4B5928c26648958655690b215ac'
7const NETWORK_INFRA_FEES = '0x582A62dB643BCFF3B0Bf1DA45f812e3a354d7518'
8const CONGESTION_FEES = '0xb04D2C62c0Cd8cec5691Cefd2E7CF041EBD26382'
9const SEQUENCER_FEES_NITRO = '0xa4b1e63cb4901e327597bc35d36fe8a23e4c253f'
10const NETWORK_INFRA_FEES_NITRO = '0xD345e41aE2cb00311956aA7109fC801Ae8c81a52'
11const CONGESTION_FEES_NITRO = '0xa4B00000000000000000000000000000000000F6'
12
13const SEC_IN_DAY = 86400;
14
15export function setup(sdk: Context) {
16 const getTotalETHSentOnDay = async (address: string, date: string) => {
17 const [startblock, endblock] = await Promise.all([
18 sdk.chainData.getBlockNumber(date, 'arbitrum-one'),
19 sdk.chainData.getBlockNumber(sdk.date.offsetDaysFormatted(date, 1), 'arbitrum-one'),
20 ]);
21
22 const withdrawalTxs = await sdk.etherscan.query({
23 module: 'account',
24 action: 'txlist',
25 address,
26 startblock,
27 endblock,
28 }, 'arbitrum').catch(() => []);
29
30 let totalWithdrawn = 0;
31 for (const tx of withdrawalTxs) {
32 totalWithdrawn += tx.value / 1e18;
33 }
34 return totalWithdrawn;
35 }
36
37 const getArbitrumFee = async (date: string): Promise<number> => {
38 const startDateId = Math.floor(sdk.date.dateToTimestamp(date) / SEC_IN_DAY);
39 const endDateId = startDateId + 1;
40
41 const query = `query txFees($startDateId: String!, $endDateId: String!){
42 startOfDay: fee(id: $startDateId) {
43 totalFeesETH
44 }
45 endOfDay: fee(id: $endDateId) {
46 totalFeesETH
47 }
48 }`;
49
50 const data = await sdk.graph.query('dmihal/arbitrum-fees-collected', query, {
51 variables: {
52 startDateId: startDateId.toString(),
53 endDateId: endDateId.toString(),
54 },
55 });
56
57 // Get withdrawan ETH from Etherscan
58
59 const [sequencerWithdrawn, infraWithdrawn, congestionWithdrawn,
60 sequencerWithdrawnNitro, infraWithdrawnNitro, congestionWithdrawnNitro,] = await Promise.all([
61 getTotalETHSentOnDay(SEQUENCER_FEES, date),
62 getTotalETHSentOnDay(NETWORK_INFRA_FEES, date),
63 getTotalETHSentOnDay(CONGESTION_FEES, date),
64 getTotalETHSentOnDay(SEQUENCER_FEES_NITRO, date),
65 getTotalETHSentOnDay(NETWORK_INFRA_FEES_NITRO, date),
66 getTotalETHSentOnDay(CONGESTION_FEES_NITRO, date),
67 ]);
68 const totalWithdrawn = sequencerWithdrawn + infraWithdrawn + congestionWithdrawn + sequencerWithdrawnNitro + infraWithdrawnNitro + congestionWithdrawnNitro;
69
70 const feesETH = data.endOfDay.totalFeesETH - data.startOfDay.totalFeesETH + totalWithdrawn;
71
72 const ethPrice = await sdk.coinGecko.getHistoricalPrice('ethereum', date);
73
74 return feesETH * ethPrice;
75 }
76
77 sdk.register({
78 id: 'arbitrum-one',
79 queries: {
80 oneDayTotalFees: getArbitrumFee,
81 },
82 metadata: {
83 name: 'Arbitrum One',
84 icon: sdk.ipfs.getDataURILoader('QmeRunQGxv3haLoMfgwD2VjKwScf7gDQiA1DCYd1HNBCG6', 'image/svg+xml'),
85 category: 'l2',
86 description: 'Arbitrum One is an optimistic-rollup scaling solution built on Ethereum.',
87 feeDescription: 'Transaction fees are paid to sequencers.',
88 blockchain: 'Arbitrum One',
89 source: 'The Graph Protocol',
90 website: 'https://arbitrum.io',
91 // The day that the BalanceChecker contract (0x153b436e5ea474f155f9a494ee954cd8d5be3247) was deployed
92 protocolLaunch: '2021-08-11',
93 },
94 })
95}
It's something off?
Report it to the discussion board on Discord, we will take care of it.