Adapter

Arbitrum Fees

Tracks the fee collector add

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';
2export const version = '0.2.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'
9
10const SEC_IN_DAY = 86400;
11
12export function setup(sdk: Context) {
13  const getTotalETHSentOnDay = async (address: string, date: string) => {
14    const [startblock, endblock] = await Promise.all([
15      sdk.chainData.getBlockNumber(date, 'arbitrum-one'),
16      sdk.chainData.getBlockNumber(sdk.date.offsetDaysFormatted(date, 1), 'arbitrum-one'),
17    ]);
18
19    const withdrawalTxs = await sdk.etherscan.query({
20      module: 'account',
21      action: 'txlist',
22      address,
23      startblock,
24      endblock,
25    }, 'arbitrum').catch(() => []);
26
27    let totalWithdrawn = 0;
28    for (const tx of withdrawalTxs) {
29      totalWithdrawn += tx.value / 1e18;
30    }
31    return totalWithdrawn;
32  }
33
34  const getArbitrumFee = async (date: string): Promise<number> => {
35    const startDateId = Math.floor(sdk.date.dateToTimestamp(date) / SEC_IN_DAY);
36    const endDateId = startDateId + 1;
37    
38    const query = `query txFees($startDateId: String!, $endDateId: String!){
39      startOfDay: fee(id: $startDateId) {
40        totalFeesETH
41      }
42      endOfDay: fee(id: $endDateId) {
43        totalFeesETH
44      }
45    }`;
46
47    const data = await sdk.graph.query('dmihal/arbitrum-fees-collected', query, {
48      variables: {
49        startDateId: startDateId.toString(),
50        endDateId: endDateId.toString(),
51      },
52    });
53
54    // Get withdrawan ETH from Etherscan
55
56    const [sequencerWithdrawn, infraWithdrawn, congestionWithdrawn] = await Promise.all([
57      getTotalETHSentOnDay(SEQUENCER_FEES, date),
58      getTotalETHSentOnDay(NETWORK_INFRA_FEES, date),
59      getTotalETHSentOnDay(CONGESTION_FEES, date),
60    ]);
61    const totalWithdrawn = sequencerWithdrawn + infraWithdrawn + congestionWithdrawn;
62
63    const feesETH = data.endOfDay.totalFeesETH - data.startOfDay.totalFeesETH + totalWithdrawn;
64
65    const ethPrice = await sdk.coinGecko.getHistoricalPrice('ethereum', date);
66
67    return feesETH * ethPrice;
68  }
69
70  sdk.register({
71    id: 'arbitrum-one',
72    queries: {
73      oneDayTotalFees: getArbitrumFee,
74    },
75    metadata: {
76      name: 'Arbitrum One',
77      icon: sdk.ipfs.getDataURILoader('QmeRunQGxv3haLoMfgwD2VjKwScf7gDQiA1DCYd1HNBCG6', 'image/svg+xml'),
78      category: 'l2',
79      description: 'Arbitrum One is an optimistic-rollup scaling solution built on Ethereum.',
80      feeDescription: 'Transaction fees are paid to sequencers.',
81      blockchain: 'Arbitrum One',
82      source: 'The Graph Protocol',
83      website: 'https://arbitrum.io',
84      // The day that the BalanceChecker contract (0x153b436e5ea474f155f9a494ee954cd8d5be3247) was deployed
85      protocolLaunch: '2021-08-11',
86    },
87  })
88}

It's something off?

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

Adapter Info

Version

0.2.0

License

MIT

IPFS CID

QmNPbNx2sehTc2rSrEqujveb9xFsKWqWKQ8SicSeugaXZy

CID (source)

QmR5aQ78SCfATpzz4QcCW4UGSx83mkLut4wTC5ArZZtpCN

Collections

fees

Author

mihal.eth