@subsquid/evm-typegen 4.4.0 → 4.5.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 +26 -10
- package/lib/main.js.map +1 -1
- package/package.json +2 -2
- package/src/main.ts +49 -15
package/lib/main.js
CHANGED
|
@@ -47,8 +47,9 @@ The generated facades are assumed to be used by "squids" indexing EVM data.
|
|
|
47
47
|
.argument('<output-dir>', 'output directory for generated definitions')
|
|
48
48
|
.argument('[abi...]', 'ABI file', specArgument)
|
|
49
49
|
.option('--multicall', 'generate facade for MakerDAO multicall contract')
|
|
50
|
-
.option('--etherscan-api <url>', 'etherscan API to fetch contract ABI by a known address', validator.Url(['http:', 'https:']))
|
|
50
|
+
.option('--etherscan-api <url>', 'etherscan API to fetch contract ABI by a known address', validator.Url(['http:', 'https:']), 'https://api.etherscan.io/v2')
|
|
51
51
|
.option('--etherscan-api-key <key>', 'etherscan API key')
|
|
52
|
+
.option('--etherscan-chain-id <id>', 'the id of the chain to fetch the contract from', validator.positiveInt)
|
|
52
53
|
.option('--clean', 'delete output directory before run')
|
|
53
54
|
.addHelpText('afterAll', `
|
|
54
55
|
ABI file can be specified in three ways:
|
|
@@ -94,7 +95,7 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
|
|
|
94
95
|
}, (err) => LOG.fatal(err));
|
|
95
96
|
async function read(spec, options) {
|
|
96
97
|
if (spec.kind == 'address') {
|
|
97
|
-
return fetchFromEtherscan(spec.src, options
|
|
98
|
+
return fetchFromEtherscan(spec.src, getEtherscanAPIConfig(options));
|
|
98
99
|
}
|
|
99
100
|
let abi;
|
|
100
101
|
if (spec.kind == 'url') {
|
|
@@ -113,13 +114,21 @@ async function read(spec, options) {
|
|
|
113
114
|
throw new Error('Unrecognized ABI format');
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
|
-
async function fetchFromEtherscan(address,
|
|
117
|
-
api = api
|
|
118
|
-
let url = new URL(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
117
|
+
async function fetchFromEtherscan(address, config) {
|
|
118
|
+
let api = config.api + (config.api.endsWith('/') ? '' : '/') + 'api';
|
|
119
|
+
let url = new URL(api);
|
|
120
|
+
let params = new URLSearchParams({
|
|
121
|
+
module: 'contract',
|
|
122
|
+
action: 'getabi',
|
|
123
|
+
address,
|
|
124
|
+
});
|
|
125
|
+
if (config.chainId) {
|
|
126
|
+
params.set('chainid', config.chainId);
|
|
127
|
+
}
|
|
128
|
+
if (config.apiKey) {
|
|
129
|
+
params.set('apiKey', config.apiKey);
|
|
130
|
+
}
|
|
131
|
+
url.search = params.toString();
|
|
123
132
|
let response;
|
|
124
133
|
let attempts = 0;
|
|
125
134
|
while (true) {
|
|
@@ -140,7 +149,7 @@ async function fetchFromEtherscan(address, api, apiKey) {
|
|
|
140
149
|
return JSON.parse(response.result);
|
|
141
150
|
}
|
|
142
151
|
else {
|
|
143
|
-
throw new Error(`Failed to fetch contract ABI from ${api}: ${response.result}`);
|
|
152
|
+
throw new Error(`Failed to fetch contract ABI from ${config.api}: ${response.result}`);
|
|
144
153
|
}
|
|
145
154
|
}
|
|
146
155
|
function specArgument(value, prev) {
|
|
@@ -195,4 +204,11 @@ function basename(file) {
|
|
|
195
204
|
return name;
|
|
196
205
|
throw new commander_1.InvalidArgumentError(`Can't derive target basename for output files. Use url fragment to specify it, e.g. #erc20`);
|
|
197
206
|
}
|
|
207
|
+
function getEtherscanAPIConfig(options) {
|
|
208
|
+
return {
|
|
209
|
+
api: options.etherscanApi || 'https://api.etherscan.io/v2',
|
|
210
|
+
apiKey: options.etherscanApiKey || undefined,
|
|
211
|
+
chainId: options.etherscanChainId || (options.etherscanApi ? undefined : '1'),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
198
214
|
//# sourceMappingURL=main.js.map
|
package/lib/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAwB;AACxB,gDAAuB;AACvB,yCAAyD;AACzD,6CAA+C;AAC/C,2DAA0D;AAC1D,6EAA8D;AAC9D,uCAAmC;AACnC,wCAAkC;AAClC,qFAA6D;AAE7D,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,iBAAiB,CAAC,CAAA;AAE3C,IAAA,0BAAU,EACR,KAAK;IACH,mBAAO;SACJ,WAAW,CACV;;;;KAIH,CAAC,IAAI,EAAE,CACL;SACA,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,CACL,uBAAuB,EACvB,wDAAwD,EACxD,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAwB;AACxB,gDAAuB;AACvB,yCAAyD;AACzD,6CAA+C;AAC/C,2DAA0D;AAC1D,6EAA8D;AAC9D,uCAAmC;AACnC,wCAAkC;AAClC,qFAA6D;AAE7D,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,iBAAiB,CAAC,CAAA;AAE3C,IAAA,0BAAU,EACR,KAAK;IACH,mBAAO;SACJ,WAAW,CACV;;;;KAIH,CAAC,IAAI,EAAE,CACL;SACA,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,CACL,uBAAuB,EACvB,wDAAwD,EACxD,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAClC,6BAA6B,CAC9B;SACA,MAAM,CAAC,2BAA2B,EAAE,mBAAmB,CAAC;SACxD,MAAM,CACL,2BAA2B,EAC3B,gDAAgD,EAChD,SAAS,CAAC,WAAW,CACtB;SACA,MAAM,CAAC,SAAS,EAAE,oCAAoC,CAAC;SACvD,WAAW,CACV,UAAU,EACV;;;;;;;;;;;;;;;;;;;SAmBC,CACF,CAAA;IAEH,mBAAO,CAAC,KAAK,EAAE,CAAA;IAEf,IAAI,IAAI,GAAG,mBAAO,CAAC,IAAI,EAMtB,CAAA;IACD,IAAI,IAAI,GAAG,IAAI,mCAAM,CAAC,mBAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,IAAI,KAAK,GAAG,mBAAO,CAAC,aAAa,CAAC,CAAC,CAAW,CAAA;IAE9C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAChC,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,EAAE,CAAA;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;QACnD,OAAM;IACR,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC,CAAA;QAC5D,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAClC,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrC,MAAM,IAAI,iBAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC9D,CAAC;AACH,CAAC,EACD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CACxB,CAAA;AAED,KAAK,UAAU,IAAI,CACjB,IAAU,EACV,OAIC;IAED,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QAC3B,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAA;IACrE,CAAC;IACD,IAAI,GAAQ,CAAA;IACZ,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,GAAG,GAAG,MAAM,IAAA,WAAG,EAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;IACtD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAA;IACZ,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,GAAG,CAAC,GAAG,CAAA;IAChB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,OAAe,EACf,MAA0B;IAE1B,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACpE,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;IAEtB,IAAI,MAAM,GAAG,IAAI,eAAe,CAAC;QAC/B,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;QAChB,OAAO;KACR,CAAC,CAAA;IACF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAA;IAE9B,IAAI,QAA4C,CAAA;IAChD,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,OAAO,IAAI,EAAE,CAAC;QACZ,QAAQ,GAAG,MAAM,IAAA,WAAG,EAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QACpC,IACE,QAAQ,CAAC,MAAM,IAAI,GAAG;YACtB,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;YACtC,QAAQ,GAAG,CAAC,EACZ,CAAC;YACD,QAAQ,IAAI,CAAC,CAAA;YACb,IAAI,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAA;YAC1B,GAAG,CAAC,IAAI,CACN,8EAA8E,OAAO,WAAW,CACjG,CAAA;YACD,MAAM,IAAA,oBAAI,EAAC,OAAO,GAAG,IAAI,CAAC,CAAA;QAC5B,CAAC;aAAM,CAAC;YACN,MAAK;QACP,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,qCAAqC,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,MAAM,EAAE,CACtE,CAAA;IACH,CAAC;AACH,CAAC;AAQD,SAAS,YAAY,CAAC,KAAa,EAAE,IAAa;IAChD,IAAI,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;IACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAA;AACnD,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACzC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACjB,MAAM,IAAI,gCAAoB,CAAC,0BAA0B,CAAC,CAAA;QAC5D,OAAO;YACL,IAAI,EAAE,SAAS;YACf,GAAG;YACH,IAAI,EAAE,QAAQ,IAAI,GAAG;SACtB,CAAA;IACH,CAAC;SAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACxD,OAAO;YACL,IAAI,EAAE,KAAK;YACX,GAAG;YACH,IAAI,EAAE,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;SACvC,CAAA;IACH,CAAC;SAAM,CAAC;QACN,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,GAAG;YACH,IAAI,EAAE,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC;SAChC,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC3B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;QAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAA;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACnB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,IAAI,GAAG,cAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA;IAChC,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA;IACrB,MAAM,IAAI,gCAAoB,CAC5B,4FAA4F,CAC7F,CAAA;AACH,CAAC;AAQD,SAAS,qBAAqB,CAAC,OAI9B;IACG,OAAO;QACH,GAAG,EAAE,OAAO,CAAC,YAAY,IAAI,6BAA6B;QAC1D,MAAM,EAAE,OAAO,CAAC,eAAe,IAAI,SAAS;QAC5C,OAAO,EAAE,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;KAChF,CAAA;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@subsquid/evm-typegen",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.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",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"squid-evm-typegen": "bin/run.js"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@subsquid/http-client": "^1.
|
|
19
|
+
"@subsquid/http-client": "^1.8.0",
|
|
20
20
|
"@subsquid/logger": "^1.4.0",
|
|
21
21
|
"@subsquid/util-internal": "^3.2.0",
|
|
22
22
|
"@subsquid/util-internal-code-printer": "^1.2.2",
|
package/src/main.ts
CHANGED
|
@@ -28,8 +28,14 @@ The generated facades are assumed to be used by "squids" indexing EVM data.
|
|
|
28
28
|
'--etherscan-api <url>',
|
|
29
29
|
'etherscan API to fetch contract ABI by a known address',
|
|
30
30
|
validator.Url(['http:', 'https:']),
|
|
31
|
+
'https://api.etherscan.io/v2'
|
|
31
32
|
)
|
|
32
33
|
.option('--etherscan-api-key <key>', 'etherscan API key')
|
|
34
|
+
.option(
|
|
35
|
+
'--etherscan-chain-id <id>',
|
|
36
|
+
'the id of the chain to fetch the contract from',
|
|
37
|
+
validator.positiveInt,
|
|
38
|
+
)
|
|
33
39
|
.option('--clean', 'delete output directory before run')
|
|
34
40
|
.addHelpText(
|
|
35
41
|
'afterAll',
|
|
@@ -60,8 +66,9 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
|
|
|
60
66
|
let opts = program.opts() as {
|
|
61
67
|
clean?: boolean
|
|
62
68
|
multicall?: boolean
|
|
63
|
-
etherscanApi
|
|
69
|
+
etherscanApi: string
|
|
64
70
|
etherscanApiKey?: string
|
|
71
|
+
etherscanChainId?: string
|
|
65
72
|
}
|
|
66
73
|
let dest = new OutDir(program.processedArgs[0])
|
|
67
74
|
let specs = program.processedArgs[1] as Spec[]
|
|
@@ -92,14 +99,14 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
|
|
|
92
99
|
|
|
93
100
|
async function read(
|
|
94
101
|
spec: Spec,
|
|
95
|
-
options
|
|
102
|
+
options: {
|
|
103
|
+
etherscanApi: string;
|
|
104
|
+
etherscanChainId?: string
|
|
105
|
+
etherscanApiKey?: string,
|
|
106
|
+
},
|
|
96
107
|
): Promise<any> {
|
|
97
108
|
if (spec.kind == 'address') {
|
|
98
|
-
return fetchFromEtherscan(
|
|
99
|
-
spec.src,
|
|
100
|
-
options?.etherscanApi,
|
|
101
|
-
options?.etherscanApiKey,
|
|
102
|
-
)
|
|
109
|
+
return fetchFromEtherscan(spec.src, getEtherscanAPIConfig(options))
|
|
103
110
|
}
|
|
104
111
|
let abi: any
|
|
105
112
|
if (spec.kind == 'url') {
|
|
@@ -118,15 +125,24 @@ async function read(
|
|
|
118
125
|
|
|
119
126
|
async function fetchFromEtherscan(
|
|
120
127
|
address: string,
|
|
121
|
-
|
|
122
|
-
apiKey?: string,
|
|
128
|
+
config: EtherscanAPIConfig,
|
|
123
129
|
): Promise<any> {
|
|
124
|
-
api = api
|
|
125
|
-
let url = new URL(
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
130
|
+
let api = config.api + (config.api.endsWith('/') ? '' : '/') + 'api'
|
|
131
|
+
let url = new URL(api)
|
|
132
|
+
|
|
133
|
+
let params = new URLSearchParams({
|
|
134
|
+
module: 'contract',
|
|
135
|
+
action: 'getabi',
|
|
136
|
+
address,
|
|
137
|
+
})
|
|
138
|
+
if (config.chainId) {
|
|
139
|
+
params.set('chainid', config.chainId);
|
|
140
|
+
}
|
|
141
|
+
if (config.apiKey) {
|
|
142
|
+
params.set('apiKey', config.apiKey);
|
|
129
143
|
}
|
|
144
|
+
url.search = params.toString()
|
|
145
|
+
|
|
130
146
|
let response: { status: string; result: string }
|
|
131
147
|
let attempts = 0
|
|
132
148
|
while (true) {
|
|
@@ -150,7 +166,7 @@ async function fetchFromEtherscan(
|
|
|
150
166
|
return JSON.parse(response.result)
|
|
151
167
|
} else {
|
|
152
168
|
throw new Error(
|
|
153
|
-
`Failed to fetch contract ABI from ${api}: ${response.result}`,
|
|
169
|
+
`Failed to fetch contract ABI from ${config.api}: ${response.result}`,
|
|
154
170
|
)
|
|
155
171
|
}
|
|
156
172
|
}
|
|
@@ -215,3 +231,21 @@ function basename(file: string): string {
|
|
|
215
231
|
`Can't derive target basename for output files. Use url fragment to specify it, e.g. #erc20`,
|
|
216
232
|
)
|
|
217
233
|
}
|
|
234
|
+
|
|
235
|
+
interface EtherscanAPIConfig {
|
|
236
|
+
api: string
|
|
237
|
+
apiKey?: string
|
|
238
|
+
chainId?: string
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function getEtherscanAPIConfig(options: {
|
|
242
|
+
etherscanApi: string
|
|
243
|
+
etherscanApiKey?: string
|
|
244
|
+
etherscanChainId?: string
|
|
245
|
+
}): EtherscanAPIConfig {
|
|
246
|
+
return {
|
|
247
|
+
api: options.etherscanApi || 'https://api.etherscan.io/v2',
|
|
248
|
+
apiKey: options.etherscanApiKey || undefined,
|
|
249
|
+
chainId: options.etherscanChainId || (options.etherscanApi ? undefined : '1'),
|
|
250
|
+
}
|
|
251
|
+
}
|