@subsquid/evm-typegen 2.0.3 → 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 +12 -6
- package/lib/main.js.map +1 -1
- package/package.json +2 -2
- package/src/main.ts +17 -7
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 =
|
|
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') &&
|
|
129
|
-
|
|
130
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA4C;AAC5C,oDAAgD;AAChD,6CAA6C;AAC7C,2DAAwD;AACxD,qFAA2D;AAC3D,6EAA8D;AAC9D,yCAAuD;AACvD,uCAAwB;AACxB,gDAAuB;AACvB,uCAAiC;AACjC,wCAAgC;AAGhC,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,iBAAiB,CAAC,CAAA;AAG3C,IAAA,0BAAU,EAAC,KAAK;IACZ,mBAAO;SACF,WAAW,CAAC;;;;KAIhB,CAAC,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,mBAAmB,CAAC;SACzB,QAAQ,CAAC,cAAc,EAAE,4CAA4C,CAAC;SACtE,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC;SAC9C,MAAM,CAAC,aAAa,EAAE,iDAAiD,CAAC;SACxE,MAAM,CACH,uBAAuB,EACvB,wDAAwD,EACxD,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CACrC;SACA,MAAM,CAAC,SAAS,EAAE,oCAAoC,CAAC;SACvD,WAAW,CAAC,UAAU,EAAE;;;;;;;;;;;;;;;;;;;SAmBxB,CAAC,CAAA;IAEN,mBAAO,CAAC,KAAK,EAAE,CAAA;IAEf,IAAI,IAAI,GAAG,mBAAO,CAAC,IAAI,
|
|
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
|
|
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",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@subsquid/util-internal": "^1.1.0",
|
|
23
23
|
"@subsquid/util-internal-code-printer": "^0.1.1",
|
|
24
24
|
"@subsquid/util-internal-commander": "^0.0.2",
|
|
25
|
-
"@subsquid/util-internal-http-client": "^0.0.
|
|
25
|
+
"@subsquid/util-internal-http-client": "^0.0.1",
|
|
26
26
|
"commander": "^10.0.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
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 =
|
|
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') &&
|
|
121
|
-
|
|
122
|
-
|
|
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
|
}
|