@subsquid/evm-typegen 2.0.4 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/main.js CHANGED
@@ -50,6 +50,7 @@ The generated facades are assumed to be used by "squids" indexing EVM data.
50
50
  .argument('[abi...]', 'ABI file', specArgument)
51
51
  .option('--multicall', 'generate facade for MakerDAO multicall contract')
52
52
  .option('--etherscan-api <url>', 'etherscan API to fetch contract ABI by a known address', validator.Url(['http:', 'https:']))
53
+ .option('--etherscan-api-key <key>', 'etherscan API key')
53
54
  .option('--clean', 'delete output directory before run')
54
55
  .addHelpText('afterAll', `
55
56
  ABI file can be specified in three ways:
@@ -98,7 +99,7 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
98
99
  }, err => LOG.fatal(err));
99
100
  async function read(spec, options) {
100
101
  if (spec.kind == 'address') {
101
- return fetchFromEtherscan(spec.src, options?.etherscanApi);
102
+ return fetchFromEtherscan(spec.src, options?.etherscanApi, options?.etherscanApiKey);
102
103
  }
103
104
  let abi;
104
105
  if (spec.kind == 'url') {
@@ -117,17 +118,22 @@ async function read(spec, options) {
117
118
  throw new Error('Unrecognized ABI format');
118
119
  }
119
120
  }
120
- async function fetchFromEtherscan(address, api) {
121
+ async function fetchFromEtherscan(address, api, apiKey) {
121
122
  api = api || 'https://api.etherscan.io/';
122
123
  let url = new URL('api?module=contract&action=getabi', api);
123
124
  url.searchParams.set('address', address);
125
+ if (apiKey) {
126
+ url.searchParams.set('apiKey', apiKey);
127
+ }
124
128
  let response;
125
- let attempts = 2;
129
+ let attempts = 0;
126
130
  while (true) {
127
131
  response = await (0, fetch_1.GET)(url.toString());
128
- if (response.status == '0' && response.result.includes('rate limit') && --attempts) {
129
- LOG.warn('faced rate limit error while trying to fetch contract ABI. Trying again in 2 seconds.');
130
- await (0, util_internal_1.wait)(2000);
132
+ if (response.status == '0' && response.result.includes('rate limit') && attempts < 4) {
133
+ attempts += 1;
134
+ let timeout = attempts * 2;
135
+ LOG.warn(`faced rate limit error while trying to fetch contract ABI. Trying again in ${timeout} seconds.`);
136
+ await (0, util_internal_1.wait)(timeout * 1000);
131
137
  }
132
138
  else {
133
139
  break;
package/lib/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@subsquid/evm-typegen",
3
- "version": "2.0.4",
3
+ "version": "2.1.0",
4
4
  "description": "CLI for generating typescript types and decode implementations for evm logs",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "repository": "git@github.com:subsquid/squid.git",
package/src/main.ts CHANGED
@@ -30,6 +30,10 @@ The generated facades are assumed to be used by "squids" indexing EVM data.
30
30
  'etherscan API to fetch contract ABI by a known address',
31
31
  validator.Url(['http:', 'https:'])
32
32
  )
33
+ .option(
34
+ '--etherscan-api-key <key>',
35
+ 'etherscan API key'
36
+ )
33
37
  .option('--clean', 'delete output directory before run')
34
38
  .addHelpText('afterAll', `
35
39
  ABI file can be specified in three ways:
@@ -58,6 +62,7 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
58
62
  clean?: boolean,
59
63
  multicall?: boolean,
60
64
  etherscanApi?: string
65
+ etherscanApiKey?: string
61
66
  }
62
67
  let dest = new OutDir(program.processedArgs[0])
63
68
  let specs = program.processedArgs[1] as Spec[]
@@ -89,9 +94,9 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
89
94
  }, err => LOG.fatal(err))
90
95
 
91
96
 
92
- async function read(spec: Spec, options?: {etherscanApi?: string}): Promise<any> {
97
+ async function read(spec: Spec, options?: {etherscanApi?: string, etherscanApiKey?: string}): Promise<any> {
93
98
  if (spec.kind == 'address') {
94
- return fetchFromEtherscan(spec.src, options?.etherscanApi)
99
+ return fetchFromEtherscan(spec.src, options?.etherscanApi, options?.etherscanApiKey)
95
100
  }
96
101
  let abi: any
97
102
  if (spec.kind == 'url') {
@@ -109,17 +114,22 @@ async function read(spec: Spec, options?: {etherscanApi?: string}): Promise<any>
109
114
  }
110
115
 
111
116
 
112
- async function fetchFromEtherscan(address: string, api?: string): Promise<any> {
117
+ async function fetchFromEtherscan(address: string, api?: string, apiKey?: string): Promise<any> {
113
118
  api = api || 'https://api.etherscan.io/'
114
119
  let url = new URL('api?module=contract&action=getabi', api)
115
120
  url.searchParams.set('address', address)
121
+ if (apiKey) {
122
+ url.searchParams.set('apiKey', apiKey)
123
+ }
116
124
  let response: {status: string, result: string}
117
- let attempts = 2
125
+ let attempts = 0
118
126
  while (true) {
119
127
  response = await GET(url.toString())
120
- if (response.status == '0' && response.result.includes('rate limit') && --attempts) {
121
- LOG.warn('faced rate limit error while trying to fetch contract ABI. Trying again in 2 seconds.')
122
- await wait(2000)
128
+ if (response.status == '0' && response.result.includes('rate limit') && attempts < 4) {
129
+ attempts += 1
130
+ let timeout = attempts * 2
131
+ LOG.warn(`faced rate limit error while trying to fetch contract ABI. Trying again in ${timeout} seconds.`)
132
+ await wait(timeout * 1000)
123
133
  } else {
124
134
  break
125
135
  }