@subsquid/evm-typegen 4.5.1 → 4.6.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/chainIds.d.ts +3 -0
- package/lib/chainIds.d.ts.map +1 -0
- package/lib/chainIds.js +268 -0
- package/lib/chainIds.js.map +1 -0
- package/lib/main.js +34 -9
- package/lib/main.js.map +1 -1
- package/package.json +3 -2
- package/src/chainIds.ts +315 -0
- package/src/main.ts +54 -20
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chainIds.d.ts","sourceRoot":"","sources":["../src/chainIds.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+R5C,CAAA;AAED,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoBlE"}
|
package/lib/chainIds.js
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.CHAIN_IDS = void 0;
|
|
27
|
+
exports.chainIdOption = chainIdOption;
|
|
28
|
+
const fastest_levenshtein_1 = require("fastest-levenshtein");
|
|
29
|
+
const validator = __importStar(require("@subsquid/util-internal-commander"));
|
|
30
|
+
const commander_1 = require("commander");
|
|
31
|
+
// ref: https://docs.etherscan.io/supported-chains
|
|
32
|
+
exports.CHAIN_IDS = {
|
|
33
|
+
// Ethereum Mainnet
|
|
34
|
+
'ethereum-mainnet': 1,
|
|
35
|
+
'mainnet': 1,
|
|
36
|
+
'ethereum': 1,
|
|
37
|
+
'eth': 1,
|
|
38
|
+
// Sepolia Testnet
|
|
39
|
+
'sepolia-testnet': 11155111,
|
|
40
|
+
'sepolia': 11155111,
|
|
41
|
+
// Holesky Testnet
|
|
42
|
+
'holesky-testnet': 17000,
|
|
43
|
+
'holesky': 17000,
|
|
44
|
+
// Hoodi Testnet
|
|
45
|
+
'hoodi-testnet': 560048,
|
|
46
|
+
'hoodi': 560048,
|
|
47
|
+
// BNB Smart Chain Mainnet
|
|
48
|
+
'bnb-smart-chain-mainnet': 56,
|
|
49
|
+
'bsc': 56,
|
|
50
|
+
'bnb': 56,
|
|
51
|
+
// BNB Smart Chain Testnet
|
|
52
|
+
'bnb-smart-chain-testnet': 97,
|
|
53
|
+
'bsc-testnet': 97,
|
|
54
|
+
// Polygon Mainnet
|
|
55
|
+
'polygon-mainnet': 137,
|
|
56
|
+
'polygon': 137,
|
|
57
|
+
'matic': 137,
|
|
58
|
+
// Polygon Amoy Testnet
|
|
59
|
+
'polygon-amoy-testnet': 80002,
|
|
60
|
+
'amoy': 80002,
|
|
61
|
+
'polygon-amoy': 80002,
|
|
62
|
+
// Base Mainnet
|
|
63
|
+
'base-mainnet': 8453,
|
|
64
|
+
'base': 8453,
|
|
65
|
+
// Base Sepolia Testnet
|
|
66
|
+
'base-sepolia-testnet': 84532,
|
|
67
|
+
'base-sepolia': 84532,
|
|
68
|
+
// Arbitrum One Mainnet
|
|
69
|
+
'arbitrum-one-mainnet': 42161,
|
|
70
|
+
'arbitrum': 42161,
|
|
71
|
+
'arb': 42161,
|
|
72
|
+
'arbitrum-one': 42161,
|
|
73
|
+
// Arbitrum Nova Mainnet
|
|
74
|
+
'arbitrum-nova-mainnet': 42170,
|
|
75
|
+
'arbitrum-nova': 42170,
|
|
76
|
+
'nova': 42170,
|
|
77
|
+
// Arbitrum Sepolia Testnet
|
|
78
|
+
'arbitrum-sepolia-testnet': 421614,
|
|
79
|
+
'arbitrum-sepolia': 421614,
|
|
80
|
+
'arb-sepolia': 421614,
|
|
81
|
+
// Linea Mainnet
|
|
82
|
+
'linea-mainnet': 59144,
|
|
83
|
+
'linea': 59144,
|
|
84
|
+
// Linea Sepolia Testnet
|
|
85
|
+
'linea-sepolia-testnet': 59141,
|
|
86
|
+
'linea-sepolia': 59141,
|
|
87
|
+
// Blast Mainnet
|
|
88
|
+
'blast-mainnet': 81457,
|
|
89
|
+
'blast': 81457,
|
|
90
|
+
// Blast Sepolia Testnet
|
|
91
|
+
'blast-sepolia-testnet': 168587773,
|
|
92
|
+
'blast-sepolia': 168587773,
|
|
93
|
+
// OP Mainnet
|
|
94
|
+
'op-mainnet': 10,
|
|
95
|
+
'optimism': 10,
|
|
96
|
+
'op': 10,
|
|
97
|
+
// OP Sepolia Testnet
|
|
98
|
+
'op-sepolia-testnet': 11155420,
|
|
99
|
+
'op-sepolia': 11155420,
|
|
100
|
+
'optimism-sepolia': 11155420,
|
|
101
|
+
// Avalanche C-Chain
|
|
102
|
+
'avalanche-c-chain': 43114,
|
|
103
|
+
'avalanche': 43114,
|
|
104
|
+
'avax': 43114,
|
|
105
|
+
// Avalanche Fuji Testnet
|
|
106
|
+
'avalanche-fuji-testnet': 43113,
|
|
107
|
+
'fuji': 43113,
|
|
108
|
+
'avalanche-fuji': 43113,
|
|
109
|
+
// BitTorrent Chain Mainnet
|
|
110
|
+
'bittorrent-chain-mainnet': 199,
|
|
111
|
+
'bittorrent': 199,
|
|
112
|
+
'btt': 199,
|
|
113
|
+
// BitTorrent Chain Testnet
|
|
114
|
+
'bittorrent-chain-testnet': 1029,
|
|
115
|
+
'bittorrent-testnet': 1029,
|
|
116
|
+
'btt-testnet': 1029,
|
|
117
|
+
// Celo Mainnet
|
|
118
|
+
'celo-mainnet': 42220,
|
|
119
|
+
'celo': 42220,
|
|
120
|
+
// Celo Sepolia Testnet
|
|
121
|
+
'celo-sepolia-testnet': 11142220,
|
|
122
|
+
'celo-sepolia': 11142220,
|
|
123
|
+
// Fraxtal Mainnet
|
|
124
|
+
'fraxtal-mainnet': 252,
|
|
125
|
+
'fraxtal': 252,
|
|
126
|
+
// Fraxtal Hoodi Testnet
|
|
127
|
+
'fraxtal-hoodi-testnet': 2523,
|
|
128
|
+
'fraxtal-hoodi': 2523,
|
|
129
|
+
// Gnosis
|
|
130
|
+
'gnosis': 100,
|
|
131
|
+
'gno': 100,
|
|
132
|
+
'xdai': 100,
|
|
133
|
+
// Mantle Mainnet
|
|
134
|
+
'mantle-mainnet': 5000,
|
|
135
|
+
'mantle': 5000,
|
|
136
|
+
// Mantle Sepolia Testnet
|
|
137
|
+
'mantle-sepolia-testnet': 5003,
|
|
138
|
+
'mantle-sepolia': 5003,
|
|
139
|
+
// Memecore Mainnet
|
|
140
|
+
'memecore-mainnet': 4352,
|
|
141
|
+
'memecore': 4352,
|
|
142
|
+
// Memecore Testnet
|
|
143
|
+
'memecore-testnet': 43521,
|
|
144
|
+
// Moonbeam Mainnet
|
|
145
|
+
'moonbeam-mainnet': 1284,
|
|
146
|
+
'moonbeam': 1284,
|
|
147
|
+
// Moonriver Mainnet
|
|
148
|
+
'moonriver-mainnet': 1285,
|
|
149
|
+
'moonriver': 1285,
|
|
150
|
+
// Moonbase Alpha Testnet
|
|
151
|
+
'moonbase-alpha-testnet': 1287,
|
|
152
|
+
'moonbase': 1287,
|
|
153
|
+
'moonbase-alpha': 1287,
|
|
154
|
+
// opBNB Mainnet
|
|
155
|
+
'opbnb-mainnet': 204,
|
|
156
|
+
'opbnb': 204,
|
|
157
|
+
// opBNB Testnet
|
|
158
|
+
'opbnb-testnet': 5611,
|
|
159
|
+
// Scroll Mainnet
|
|
160
|
+
'scroll-mainnet': 534352,
|
|
161
|
+
'scroll': 534352,
|
|
162
|
+
// Scroll Sepolia Testnet
|
|
163
|
+
'scroll-sepolia-testnet': 534351,
|
|
164
|
+
'scroll-sepolia': 534351,
|
|
165
|
+
// Taiko Mainnet
|
|
166
|
+
'taiko-mainnet': 167000,
|
|
167
|
+
'taiko': 167000,
|
|
168
|
+
// Taiko Hoodi
|
|
169
|
+
'taiko-hoodi': 167013,
|
|
170
|
+
// XDC Mainnet
|
|
171
|
+
'xdc-mainnet': 50,
|
|
172
|
+
'xdc': 50,
|
|
173
|
+
// XDC Apothem Testnet
|
|
174
|
+
'xdc-apothem-testnet': 51,
|
|
175
|
+
'xdc-apothem': 51,
|
|
176
|
+
'apothem': 51,
|
|
177
|
+
// ApeChain Mainnet
|
|
178
|
+
'apechain-mainnet': 33139,
|
|
179
|
+
'apechain': 33139,
|
|
180
|
+
'ape': 33139,
|
|
181
|
+
// ApeChain Curtis Testnet
|
|
182
|
+
'apechain-curtis-testnet': 33111,
|
|
183
|
+
'apechain-curtis': 33111,
|
|
184
|
+
'curtis': 33111,
|
|
185
|
+
// World Mainnet
|
|
186
|
+
'world-mainnet': 480,
|
|
187
|
+
'world': 480,
|
|
188
|
+
// World Sepolia Testnet
|
|
189
|
+
'world-sepolia-testnet': 4801,
|
|
190
|
+
'world-sepolia': 4801,
|
|
191
|
+
// Sonic Mainnet
|
|
192
|
+
'sonic-mainnet': 146,
|
|
193
|
+
'sonic': 146,
|
|
194
|
+
// Sonic Testnet
|
|
195
|
+
'sonic-testnet': 14601,
|
|
196
|
+
// Unichain Mainnet
|
|
197
|
+
'unichain-mainnet': 130,
|
|
198
|
+
'unichain': 130,
|
|
199
|
+
// Unichain Sepolia Testnet
|
|
200
|
+
'unichain-sepolia-testnet': 1301,
|
|
201
|
+
'unichain-sepolia': 1301,
|
|
202
|
+
// Abstract Mainnet
|
|
203
|
+
'abstract-mainnet': 2741,
|
|
204
|
+
'abstract': 2741,
|
|
205
|
+
// Abstract Sepolia Testnet
|
|
206
|
+
'abstract-sepolia-testnet': 11124,
|
|
207
|
+
'abstract-sepolia': 11124,
|
|
208
|
+
// Berachain Mainnet
|
|
209
|
+
'berachain-mainnet': 80094,
|
|
210
|
+
'berachain': 80094,
|
|
211
|
+
'bera': 80094,
|
|
212
|
+
// Berachain Bepolia Testnet
|
|
213
|
+
'berachain-bepolia-testnet': 80069,
|
|
214
|
+
'berachain-bepolia': 80069,
|
|
215
|
+
'bepolia': 80069,
|
|
216
|
+
// Swellchain Mainnet
|
|
217
|
+
'swellchain-mainnet': 1923,
|
|
218
|
+
'swellchain': 1923,
|
|
219
|
+
'swell': 1923,
|
|
220
|
+
// Swellchain Testnet
|
|
221
|
+
'swellchain-testnet': 1924,
|
|
222
|
+
'swell-testnet': 1924,
|
|
223
|
+
// Monad Mainnet
|
|
224
|
+
'monad-mainnet': 143,
|
|
225
|
+
'monad': 143,
|
|
226
|
+
// Monad Testnet
|
|
227
|
+
'monad-testnet': 10143,
|
|
228
|
+
// HyperEVM Mainnet
|
|
229
|
+
'hyperevm-mainnet': 999,
|
|
230
|
+
'hyperevm': 999,
|
|
231
|
+
// Katana Mainnet
|
|
232
|
+
'katana-mainnet': 747474,
|
|
233
|
+
'katana': 747474,
|
|
234
|
+
// Katana Bokuto
|
|
235
|
+
'katana-bokuto': 737373,
|
|
236
|
+
'bokuto': 737373,
|
|
237
|
+
// Sei Mainnet
|
|
238
|
+
'sei-mainnet': 1329,
|
|
239
|
+
'sei': 1329,
|
|
240
|
+
// Sei Testnet
|
|
241
|
+
'sei-testnet': 1328,
|
|
242
|
+
// Stable Mainnet
|
|
243
|
+
'stable-mainnet': 988,
|
|
244
|
+
'stable': 988,
|
|
245
|
+
// Stable Testnet
|
|
246
|
+
'stable-testnet': 2201,
|
|
247
|
+
// Plasma Mainnet
|
|
248
|
+
'plasma-mainnet': 9745,
|
|
249
|
+
'plasma': 9745,
|
|
250
|
+
// Plasma Testnet
|
|
251
|
+
'plasma-testnet': 9746,
|
|
252
|
+
};
|
|
253
|
+
function chainIdOption(chainId) {
|
|
254
|
+
if (chainId == null) {
|
|
255
|
+
return undefined;
|
|
256
|
+
}
|
|
257
|
+
// @ts-expect-error - chainId is a string
|
|
258
|
+
if (!isNaN(chainId)) {
|
|
259
|
+
return validator.positiveInt(chainId);
|
|
260
|
+
}
|
|
261
|
+
const normalizedChainId = chainId.toLowerCase();
|
|
262
|
+
if (normalizedChainId in exports.CHAIN_IDS) {
|
|
263
|
+
return exports.CHAIN_IDS[normalizedChainId];
|
|
264
|
+
}
|
|
265
|
+
const suggestion = (0, fastest_levenshtein_1.closest)(normalizedChainId, Object.keys(exports.CHAIN_IDS));
|
|
266
|
+
throw new commander_1.InvalidOptionArgumentError(`Unknown chain: "${chainId}". Did you mean "${suggestion}"? Alternatively, provide a numeric chain ID.`);
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=chainIds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chainIds.js","sourceRoot":"","sources":["../src/chainIds.ts"],"names":[],"mappings":"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"}
|
package/lib/main.js
CHANGED
|
@@ -35,7 +35,10 @@ const validator = __importStar(require("@subsquid/util-internal-commander"));
|
|
|
35
35
|
const typegen_1 = require("./typegen");
|
|
36
36
|
const fetch_1 = require("./util/fetch");
|
|
37
37
|
const util_internal_code_printer_1 = require("@subsquid/util-internal-code-printer");
|
|
38
|
+
const chainIds_1 = require("./chainIds");
|
|
38
39
|
const LOG = (0, logger_1.createLogger)('sqd:evm-typegen');
|
|
40
|
+
const PROXY_ETHERSCAN = 'https://cloud.sqd.dev/chains/api/v1/evm/abi';
|
|
41
|
+
const ORIGIN_ETHERSCAN = 'https://api.etherscan.io/v2/api';
|
|
39
42
|
(0, util_internal_1.runProgram)(async function () {
|
|
40
43
|
commander_1.program
|
|
41
44
|
.description(`
|
|
@@ -47,9 +50,10 @@ The generated facades are assumed to be used by "squids" indexing EVM data.
|
|
|
47
50
|
.argument('<output-dir>', 'output directory for generated definitions')
|
|
48
51
|
.argument('[abi...]', 'ABI file', specArgument)
|
|
49
52
|
.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:'])
|
|
53
|
+
.option('--etherscan-api <url>', 'etherscan API to fetch contract ABI by a known address\n(if no API token is provided, the default value equals to SQD Proxy service, otherwise equals to Etherscan API)', validator.Url(['http:', 'https:']))
|
|
51
54
|
.option('--etherscan-api-key <key>', 'etherscan API key')
|
|
52
|
-
.option('--
|
|
55
|
+
.option('--chain-id <id>', 'chain ID (numeric or named, e.g., "1" or "ethereum") to fetch the contract from', chainIds_1.chainIdOption, 1)
|
|
56
|
+
.option('--etherscan-chain-id <id>', 'DEPRECATED: use --chain-id instead. Chain ID (numeric or named, e.g., "1" or "ethereum") to fetch the contract from', chainIds_1.chainIdOption)
|
|
53
57
|
.option('--clean', 'delete output directory before run')
|
|
54
58
|
.addHelpText('afterAll', `
|
|
55
59
|
ABI file can be specified in three ways:
|
|
@@ -75,6 +79,14 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
|
|
|
75
79
|
let opts = commander_1.program.opts();
|
|
76
80
|
let dest = new util_internal_code_printer_1.OutDir(commander_1.program.processedArgs[0]);
|
|
77
81
|
let specs = commander_1.program.processedArgs[1];
|
|
82
|
+
if (opts.etherscanChainId) {
|
|
83
|
+
LOG.warn('Option --etherscan-chain-id is deprecated. Please use --chain-id instead');
|
|
84
|
+
if (opts.chainId) {
|
|
85
|
+
throw new commander_1.InvalidOptionArgumentError('Option --chain-id and --etherscan-chain-id cannot be used together');
|
|
86
|
+
}
|
|
87
|
+
opts.chainId = opts.etherscanChainId;
|
|
88
|
+
delete opts.etherscanChainId;
|
|
89
|
+
}
|
|
78
90
|
if (opts.clean && dest.exists()) {
|
|
79
91
|
LOG.info(`deleting ${dest.path()}`);
|
|
80
92
|
dest.del();
|
|
@@ -115,16 +127,13 @@ async function read(spec, options) {
|
|
|
115
127
|
}
|
|
116
128
|
}
|
|
117
129
|
async function fetchFromEtherscan(address, config) {
|
|
118
|
-
let
|
|
119
|
-
let url = new URL(api);
|
|
130
|
+
let url = new URL(config.api);
|
|
120
131
|
let params = new URLSearchParams({
|
|
121
132
|
module: 'contract',
|
|
122
133
|
action: 'getabi',
|
|
123
134
|
address,
|
|
135
|
+
chainid: config.chainId.toString(),
|
|
124
136
|
});
|
|
125
|
-
if (config.chainId) {
|
|
126
|
-
params.set('chainid', config.chainId);
|
|
127
|
-
}
|
|
128
137
|
if (config.apiKey) {
|
|
129
138
|
params.set('apiKey', config.apiKey);
|
|
130
139
|
}
|
|
@@ -205,10 +214,26 @@ function basename(file) {
|
|
|
205
214
|
throw new commander_1.InvalidArgumentError(`Can't derive target basename for output files. Use url fragment to specify it, e.g. #erc20`);
|
|
206
215
|
}
|
|
207
216
|
function getEtherscanAPIConfig(options) {
|
|
217
|
+
let api;
|
|
218
|
+
if (options.etherscanApi != null) {
|
|
219
|
+
api = normalizeEtherscanAPIUrl(options.etherscanApi);
|
|
220
|
+
}
|
|
221
|
+
else if (options.etherscanApiKey != null) {
|
|
222
|
+
api = ORIGIN_ETHERSCAN;
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
api = PROXY_ETHERSCAN;
|
|
226
|
+
}
|
|
208
227
|
return {
|
|
209
|
-
api
|
|
228
|
+
api,
|
|
210
229
|
apiKey: options.etherscanApiKey || undefined,
|
|
211
|
-
chainId: options.
|
|
230
|
+
chainId: options.chainId ?? 1,
|
|
212
231
|
};
|
|
213
232
|
}
|
|
233
|
+
function normalizeEtherscanAPIUrl(url) {
|
|
234
|
+
if (url.endsWith('/api')) {
|
|
235
|
+
return url;
|
|
236
|
+
}
|
|
237
|
+
return url.endsWith('/') ? url + 'api' : url + '/api';
|
|
238
|
+
}
|
|
214
239
|
//# 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,
|
|
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": "4.
|
|
3
|
+
"version": "4.6.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",
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
"@subsquid/util-internal-commander": "^1.4.0",
|
|
24
24
|
"@subsquid/evm-codec": "^0.3.0",
|
|
25
25
|
"@subsquid/evm-abi": "^0.3.1",
|
|
26
|
-
"commander": "^11.1.0"
|
|
26
|
+
"commander": "^11.1.0",
|
|
27
|
+
"fastest-levenshtein": "^1.0.16"
|
|
27
28
|
},
|
|
28
29
|
"devDependencies": {
|
|
29
30
|
"@types/node": "^18.18.14",
|
package/src/chainIds.ts
ADDED
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import {closest} from 'fastest-levenshtein'
|
|
2
|
+
import * as validator from '@subsquid/util-internal-commander'
|
|
3
|
+
import {InvalidOptionArgumentError} from 'commander'
|
|
4
|
+
|
|
5
|
+
// ref: https://docs.etherscan.io/supported-chains
|
|
6
|
+
export const CHAIN_IDS: Record<string, number> = {
|
|
7
|
+
// Ethereum Mainnet
|
|
8
|
+
'ethereum-mainnet': 1,
|
|
9
|
+
'mainnet': 1,
|
|
10
|
+
'ethereum': 1,
|
|
11
|
+
'eth': 1,
|
|
12
|
+
|
|
13
|
+
// Sepolia Testnet
|
|
14
|
+
'sepolia-testnet': 11155111,
|
|
15
|
+
'sepolia': 11155111,
|
|
16
|
+
|
|
17
|
+
// Holesky Testnet
|
|
18
|
+
'holesky-testnet': 17000,
|
|
19
|
+
'holesky': 17000,
|
|
20
|
+
|
|
21
|
+
// Hoodi Testnet
|
|
22
|
+
'hoodi-testnet': 560048,
|
|
23
|
+
'hoodi': 560048,
|
|
24
|
+
|
|
25
|
+
// BNB Smart Chain Mainnet
|
|
26
|
+
'bnb-smart-chain-mainnet': 56,
|
|
27
|
+
'bsc': 56,
|
|
28
|
+
'bnb': 56,
|
|
29
|
+
|
|
30
|
+
// BNB Smart Chain Testnet
|
|
31
|
+
'bnb-smart-chain-testnet': 97,
|
|
32
|
+
'bsc-testnet': 97,
|
|
33
|
+
|
|
34
|
+
// Polygon Mainnet
|
|
35
|
+
'polygon-mainnet': 137,
|
|
36
|
+
'polygon': 137,
|
|
37
|
+
'matic': 137,
|
|
38
|
+
|
|
39
|
+
// Polygon Amoy Testnet
|
|
40
|
+
'polygon-amoy-testnet': 80002,
|
|
41
|
+
'amoy': 80002,
|
|
42
|
+
'polygon-amoy': 80002,
|
|
43
|
+
|
|
44
|
+
// Base Mainnet
|
|
45
|
+
'base-mainnet': 8453,
|
|
46
|
+
'base': 8453,
|
|
47
|
+
|
|
48
|
+
// Base Sepolia Testnet
|
|
49
|
+
'base-sepolia-testnet': 84532,
|
|
50
|
+
'base-sepolia': 84532,
|
|
51
|
+
|
|
52
|
+
// Arbitrum One Mainnet
|
|
53
|
+
'arbitrum-one-mainnet': 42161,
|
|
54
|
+
'arbitrum': 42161,
|
|
55
|
+
'arb': 42161,
|
|
56
|
+
'arbitrum-one': 42161,
|
|
57
|
+
|
|
58
|
+
// Arbitrum Nova Mainnet
|
|
59
|
+
'arbitrum-nova-mainnet': 42170,
|
|
60
|
+
'arbitrum-nova': 42170,
|
|
61
|
+
'nova': 42170,
|
|
62
|
+
|
|
63
|
+
// Arbitrum Sepolia Testnet
|
|
64
|
+
'arbitrum-sepolia-testnet': 421614,
|
|
65
|
+
'arbitrum-sepolia': 421614,
|
|
66
|
+
'arb-sepolia': 421614,
|
|
67
|
+
|
|
68
|
+
// Linea Mainnet
|
|
69
|
+
'linea-mainnet': 59144,
|
|
70
|
+
'linea': 59144,
|
|
71
|
+
|
|
72
|
+
// Linea Sepolia Testnet
|
|
73
|
+
'linea-sepolia-testnet': 59141,
|
|
74
|
+
'linea-sepolia': 59141,
|
|
75
|
+
|
|
76
|
+
// Blast Mainnet
|
|
77
|
+
'blast-mainnet': 81457,
|
|
78
|
+
'blast': 81457,
|
|
79
|
+
|
|
80
|
+
// Blast Sepolia Testnet
|
|
81
|
+
'blast-sepolia-testnet': 168587773,
|
|
82
|
+
'blast-sepolia': 168587773,
|
|
83
|
+
|
|
84
|
+
// OP Mainnet
|
|
85
|
+
'op-mainnet': 10,
|
|
86
|
+
'optimism': 10,
|
|
87
|
+
'op': 10,
|
|
88
|
+
|
|
89
|
+
// OP Sepolia Testnet
|
|
90
|
+
'op-sepolia-testnet': 11155420,
|
|
91
|
+
'op-sepolia': 11155420,
|
|
92
|
+
'optimism-sepolia': 11155420,
|
|
93
|
+
|
|
94
|
+
// Avalanche C-Chain
|
|
95
|
+
'avalanche-c-chain': 43114,
|
|
96
|
+
'avalanche': 43114,
|
|
97
|
+
'avax': 43114,
|
|
98
|
+
|
|
99
|
+
// Avalanche Fuji Testnet
|
|
100
|
+
'avalanche-fuji-testnet': 43113,
|
|
101
|
+
'fuji': 43113,
|
|
102
|
+
'avalanche-fuji': 43113,
|
|
103
|
+
|
|
104
|
+
// BitTorrent Chain Mainnet
|
|
105
|
+
'bittorrent-chain-mainnet': 199,
|
|
106
|
+
'bittorrent': 199,
|
|
107
|
+
'btt': 199,
|
|
108
|
+
|
|
109
|
+
// BitTorrent Chain Testnet
|
|
110
|
+
'bittorrent-chain-testnet': 1029,
|
|
111
|
+
'bittorrent-testnet': 1029,
|
|
112
|
+
'btt-testnet': 1029,
|
|
113
|
+
|
|
114
|
+
// Celo Mainnet
|
|
115
|
+
'celo-mainnet': 42220,
|
|
116
|
+
'celo': 42220,
|
|
117
|
+
|
|
118
|
+
// Celo Sepolia Testnet
|
|
119
|
+
'celo-sepolia-testnet': 11142220,
|
|
120
|
+
'celo-sepolia': 11142220,
|
|
121
|
+
|
|
122
|
+
// Fraxtal Mainnet
|
|
123
|
+
'fraxtal-mainnet': 252,
|
|
124
|
+
'fraxtal': 252,
|
|
125
|
+
|
|
126
|
+
// Fraxtal Hoodi Testnet
|
|
127
|
+
'fraxtal-hoodi-testnet': 2523,
|
|
128
|
+
'fraxtal-hoodi': 2523,
|
|
129
|
+
|
|
130
|
+
// Gnosis
|
|
131
|
+
'gnosis': 100,
|
|
132
|
+
'gno': 100,
|
|
133
|
+
'xdai': 100,
|
|
134
|
+
|
|
135
|
+
// Mantle Mainnet
|
|
136
|
+
'mantle-mainnet': 5000,
|
|
137
|
+
'mantle': 5000,
|
|
138
|
+
|
|
139
|
+
// Mantle Sepolia Testnet
|
|
140
|
+
'mantle-sepolia-testnet': 5003,
|
|
141
|
+
'mantle-sepolia': 5003,
|
|
142
|
+
|
|
143
|
+
// Memecore Mainnet
|
|
144
|
+
'memecore-mainnet': 4352,
|
|
145
|
+
'memecore': 4352,
|
|
146
|
+
|
|
147
|
+
// Memecore Testnet
|
|
148
|
+
'memecore-testnet': 43521,
|
|
149
|
+
|
|
150
|
+
// Moonbeam Mainnet
|
|
151
|
+
'moonbeam-mainnet': 1284,
|
|
152
|
+
'moonbeam': 1284,
|
|
153
|
+
|
|
154
|
+
// Moonriver Mainnet
|
|
155
|
+
'moonriver-mainnet': 1285,
|
|
156
|
+
'moonriver': 1285,
|
|
157
|
+
|
|
158
|
+
// Moonbase Alpha Testnet
|
|
159
|
+
'moonbase-alpha-testnet': 1287,
|
|
160
|
+
'moonbase': 1287,
|
|
161
|
+
'moonbase-alpha': 1287,
|
|
162
|
+
|
|
163
|
+
// opBNB Mainnet
|
|
164
|
+
'opbnb-mainnet': 204,
|
|
165
|
+
'opbnb': 204,
|
|
166
|
+
|
|
167
|
+
// opBNB Testnet
|
|
168
|
+
'opbnb-testnet': 5611,
|
|
169
|
+
|
|
170
|
+
// Scroll Mainnet
|
|
171
|
+
'scroll-mainnet': 534352,
|
|
172
|
+
'scroll': 534352,
|
|
173
|
+
|
|
174
|
+
// Scroll Sepolia Testnet
|
|
175
|
+
'scroll-sepolia-testnet': 534351,
|
|
176
|
+
'scroll-sepolia': 534351,
|
|
177
|
+
|
|
178
|
+
// Taiko Mainnet
|
|
179
|
+
'taiko-mainnet': 167000,
|
|
180
|
+
'taiko': 167000,
|
|
181
|
+
|
|
182
|
+
// Taiko Hoodi
|
|
183
|
+
'taiko-hoodi': 167013,
|
|
184
|
+
|
|
185
|
+
// XDC Mainnet
|
|
186
|
+
'xdc-mainnet': 50,
|
|
187
|
+
'xdc': 50,
|
|
188
|
+
|
|
189
|
+
// XDC Apothem Testnet
|
|
190
|
+
'xdc-apothem-testnet': 51,
|
|
191
|
+
'xdc-apothem': 51,
|
|
192
|
+
'apothem': 51,
|
|
193
|
+
|
|
194
|
+
// ApeChain Mainnet
|
|
195
|
+
'apechain-mainnet': 33139,
|
|
196
|
+
'apechain': 33139,
|
|
197
|
+
'ape': 33139,
|
|
198
|
+
|
|
199
|
+
// ApeChain Curtis Testnet
|
|
200
|
+
'apechain-curtis-testnet': 33111,
|
|
201
|
+
'apechain-curtis': 33111,
|
|
202
|
+
'curtis': 33111,
|
|
203
|
+
|
|
204
|
+
// World Mainnet
|
|
205
|
+
'world-mainnet': 480,
|
|
206
|
+
'world': 480,
|
|
207
|
+
|
|
208
|
+
// World Sepolia Testnet
|
|
209
|
+
'world-sepolia-testnet': 4801,
|
|
210
|
+
'world-sepolia': 4801,
|
|
211
|
+
|
|
212
|
+
// Sonic Mainnet
|
|
213
|
+
'sonic-mainnet': 146,
|
|
214
|
+
'sonic': 146,
|
|
215
|
+
|
|
216
|
+
// Sonic Testnet
|
|
217
|
+
'sonic-testnet': 14601,
|
|
218
|
+
|
|
219
|
+
// Unichain Mainnet
|
|
220
|
+
'unichain-mainnet': 130,
|
|
221
|
+
'unichain': 130,
|
|
222
|
+
|
|
223
|
+
// Unichain Sepolia Testnet
|
|
224
|
+
'unichain-sepolia-testnet': 1301,
|
|
225
|
+
'unichain-sepolia': 1301,
|
|
226
|
+
|
|
227
|
+
// Abstract Mainnet
|
|
228
|
+
'abstract-mainnet': 2741,
|
|
229
|
+
'abstract': 2741,
|
|
230
|
+
|
|
231
|
+
// Abstract Sepolia Testnet
|
|
232
|
+
'abstract-sepolia-testnet': 11124,
|
|
233
|
+
'abstract-sepolia': 11124,
|
|
234
|
+
|
|
235
|
+
// Berachain Mainnet
|
|
236
|
+
'berachain-mainnet': 80094,
|
|
237
|
+
'berachain': 80094,
|
|
238
|
+
'bera': 80094,
|
|
239
|
+
|
|
240
|
+
// Berachain Bepolia Testnet
|
|
241
|
+
'berachain-bepolia-testnet': 80069,
|
|
242
|
+
'berachain-bepolia': 80069,
|
|
243
|
+
'bepolia': 80069,
|
|
244
|
+
|
|
245
|
+
// Swellchain Mainnet
|
|
246
|
+
'swellchain-mainnet': 1923,
|
|
247
|
+
'swellchain': 1923,
|
|
248
|
+
'swell': 1923,
|
|
249
|
+
|
|
250
|
+
// Swellchain Testnet
|
|
251
|
+
'swellchain-testnet': 1924,
|
|
252
|
+
'swell-testnet': 1924,
|
|
253
|
+
|
|
254
|
+
// Monad Mainnet
|
|
255
|
+
'monad-mainnet': 143,
|
|
256
|
+
'monad': 143,
|
|
257
|
+
|
|
258
|
+
// Monad Testnet
|
|
259
|
+
'monad-testnet': 10143,
|
|
260
|
+
|
|
261
|
+
// HyperEVM Mainnet
|
|
262
|
+
'hyperevm-mainnet': 999,
|
|
263
|
+
'hyperevm': 999,
|
|
264
|
+
|
|
265
|
+
// Katana Mainnet
|
|
266
|
+
'katana-mainnet': 747474,
|
|
267
|
+
'katana': 747474,
|
|
268
|
+
|
|
269
|
+
// Katana Bokuto
|
|
270
|
+
'katana-bokuto': 737373,
|
|
271
|
+
'bokuto': 737373,
|
|
272
|
+
|
|
273
|
+
// Sei Mainnet
|
|
274
|
+
'sei-mainnet': 1329,
|
|
275
|
+
'sei': 1329,
|
|
276
|
+
|
|
277
|
+
// Sei Testnet
|
|
278
|
+
'sei-testnet': 1328,
|
|
279
|
+
|
|
280
|
+
// Stable Mainnet
|
|
281
|
+
'stable-mainnet': 988,
|
|
282
|
+
'stable': 988,
|
|
283
|
+
|
|
284
|
+
// Stable Testnet
|
|
285
|
+
'stable-testnet': 2201,
|
|
286
|
+
|
|
287
|
+
// Plasma Mainnet
|
|
288
|
+
'plasma-mainnet': 9745,
|
|
289
|
+
'plasma': 9745,
|
|
290
|
+
|
|
291
|
+
// Plasma Testnet
|
|
292
|
+
'plasma-testnet': 9746,
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
export function chainIdOption(chainId?: string): number | undefined {
|
|
296
|
+
if (chainId == null) {
|
|
297
|
+
return undefined
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// @ts-expect-error - chainId is a string
|
|
301
|
+
if (!isNaN(chainId)) {
|
|
302
|
+
return validator.positiveInt(chainId)
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
const normalizedChainId = chainId.toLowerCase()
|
|
306
|
+
|
|
307
|
+
if (normalizedChainId in CHAIN_IDS) {
|
|
308
|
+
return CHAIN_IDS[normalizedChainId]
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
const suggestion = closest(normalizedChainId, Object.keys(CHAIN_IDS))
|
|
312
|
+
throw new InvalidOptionArgumentError(
|
|
313
|
+
`Unknown chain: "${chainId}". Did you mean "${suggestion}"? Alternatively, provide a numeric chain ID.`
|
|
314
|
+
)
|
|
315
|
+
}
|
package/src/main.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import * as fs from 'fs'
|
|
2
2
|
import path from 'path'
|
|
3
|
-
import { InvalidArgumentError, program } from 'commander'
|
|
3
|
+
import { InvalidArgumentError, InvalidOptionArgumentError, program } from 'commander'
|
|
4
4
|
import { createLogger } from '@subsquid/logger'
|
|
5
5
|
import { runProgram, wait } from '@subsquid/util-internal'
|
|
6
6
|
import * as validator from '@subsquid/util-internal-commander'
|
|
7
7
|
import { Typegen } from './typegen'
|
|
8
8
|
import { GET } from './util/fetch'
|
|
9
9
|
import { OutDir } from '@subsquid/util-internal-code-printer'
|
|
10
|
+
import {chainIdOption} from './chainIds'
|
|
10
11
|
|
|
11
12
|
const LOG = createLogger('sqd:evm-typegen')
|
|
13
|
+
const PROXY_ETHERSCAN = 'https://cloud.sqd.dev/chains/api/v1/evm/abi'
|
|
14
|
+
const ORIGIN_ETHERSCAN = 'https://api.etherscan.io/v2/api'
|
|
12
15
|
|
|
13
16
|
runProgram(
|
|
14
17
|
async function () {
|
|
@@ -26,15 +29,20 @@ The generated facades are assumed to be used by "squids" indexing EVM data.
|
|
|
26
29
|
.option('--multicall', 'generate facade for MakerDAO multicall contract')
|
|
27
30
|
.option(
|
|
28
31
|
'--etherscan-api <url>',
|
|
29
|
-
'etherscan API to fetch contract ABI by a known address',
|
|
32
|
+
'etherscan API to fetch contract ABI by a known address\n(if no API token is provided, the default value equals to SQD Proxy service, otherwise equals to Etherscan API)',
|
|
30
33
|
validator.Url(['http:', 'https:']),
|
|
31
|
-
'https://api.etherscan.io/v2'
|
|
32
34
|
)
|
|
33
35
|
.option('--etherscan-api-key <key>', 'etherscan API key')
|
|
34
36
|
.option(
|
|
35
|
-
'--
|
|
36
|
-
'
|
|
37
|
-
|
|
37
|
+
'--chain-id <id>',
|
|
38
|
+
'chain ID (numeric or named, e.g., "1" or "ethereum") to fetch the contract from',
|
|
39
|
+
chainIdOption,
|
|
40
|
+
1,
|
|
41
|
+
)
|
|
42
|
+
.option(
|
|
43
|
+
'--etherscan-chain-id <id>',
|
|
44
|
+
'DEPRECATED: use --chain-id instead. Chain ID (numeric or named, e.g., "1" or "ethereum") to fetch the contract from',
|
|
45
|
+
chainIdOption,
|
|
38
46
|
)
|
|
39
47
|
.option('--clean', 'delete output directory before run')
|
|
40
48
|
.addHelpText(
|
|
@@ -66,13 +74,23 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
|
|
|
66
74
|
let opts = program.opts() as {
|
|
67
75
|
clean?: boolean
|
|
68
76
|
multicall?: boolean
|
|
69
|
-
etherscanApi
|
|
77
|
+
etherscanApi?: string
|
|
70
78
|
etherscanApiKey?: string
|
|
71
|
-
|
|
79
|
+
chainId?: number
|
|
80
|
+
etherscanChainId?: number
|
|
72
81
|
}
|
|
73
82
|
let dest = new OutDir(program.processedArgs[0])
|
|
74
83
|
let specs = program.processedArgs[1] as Spec[]
|
|
75
84
|
|
|
85
|
+
if (opts.etherscanChainId) {
|
|
86
|
+
LOG.warn('Option --etherscan-chain-id is deprecated. Please use --chain-id instead')
|
|
87
|
+
if (opts.chainId) {
|
|
88
|
+
throw new InvalidOptionArgumentError('Option --chain-id and --etherscan-chain-id cannot be used together')
|
|
89
|
+
}
|
|
90
|
+
opts.chainId = opts.etherscanChainId
|
|
91
|
+
delete opts.etherscanChainId
|
|
92
|
+
}
|
|
93
|
+
|
|
76
94
|
if (opts.clean && dest.exists()) {
|
|
77
95
|
LOG.info(`deleting ${dest.path()}`)
|
|
78
96
|
dest.del()
|
|
@@ -100,8 +118,8 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
|
|
|
100
118
|
async function read(
|
|
101
119
|
spec: Spec,
|
|
102
120
|
options: {
|
|
103
|
-
etherscanApi
|
|
104
|
-
|
|
121
|
+
etherscanApi?: string;
|
|
122
|
+
chainId?: number
|
|
105
123
|
etherscanApiKey?: string,
|
|
106
124
|
},
|
|
107
125
|
): Promise<any> {
|
|
@@ -127,20 +145,19 @@ async function fetchFromEtherscan(
|
|
|
127
145
|
address: string,
|
|
128
146
|
config: EtherscanAPIConfig,
|
|
129
147
|
): Promise<any> {
|
|
130
|
-
let
|
|
131
|
-
let url = new URL(api)
|
|
148
|
+
let url = new URL(config.api)
|
|
132
149
|
|
|
133
150
|
let params = new URLSearchParams({
|
|
134
151
|
module: 'contract',
|
|
135
152
|
action: 'getabi',
|
|
136
153
|
address,
|
|
154
|
+
chainid: config.chainId.toString(),
|
|
137
155
|
})
|
|
138
|
-
|
|
139
|
-
params.set('chainid', config.chainId);
|
|
140
|
-
}
|
|
156
|
+
|
|
141
157
|
if (config.apiKey) {
|
|
142
158
|
params.set('apiKey', config.apiKey);
|
|
143
159
|
}
|
|
160
|
+
|
|
144
161
|
url.search = params.toString()
|
|
145
162
|
|
|
146
163
|
let response: { status: string; result: string }
|
|
@@ -234,18 +251,35 @@ function basename(file: string): string {
|
|
|
234
251
|
|
|
235
252
|
interface EtherscanAPIConfig {
|
|
236
253
|
api: string
|
|
254
|
+
chainId: number
|
|
237
255
|
apiKey?: string
|
|
238
|
-
chainId?: string
|
|
239
256
|
}
|
|
240
257
|
|
|
241
258
|
function getEtherscanAPIConfig(options: {
|
|
242
|
-
etherscanApi
|
|
259
|
+
etherscanApi?: string
|
|
243
260
|
etherscanApiKey?: string
|
|
244
|
-
|
|
261
|
+
chainId?: number
|
|
245
262
|
}): EtherscanAPIConfig {
|
|
263
|
+
let api: string
|
|
264
|
+
if (options.etherscanApi != null) {
|
|
265
|
+
api = normalizeEtherscanAPIUrl(options.etherscanApi)
|
|
266
|
+
} else if (options.etherscanApiKey != null) {
|
|
267
|
+
api = ORIGIN_ETHERSCAN
|
|
268
|
+
} else {
|
|
269
|
+
api = PROXY_ETHERSCAN
|
|
270
|
+
}
|
|
271
|
+
|
|
246
272
|
return {
|
|
247
|
-
api
|
|
273
|
+
api,
|
|
248
274
|
apiKey: options.etherscanApiKey || undefined,
|
|
249
|
-
chainId: options.
|
|
275
|
+
chainId: options.chainId ?? 1,
|
|
250
276
|
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function normalizeEtherscanAPIUrl(url: string) {
|
|
280
|
+
if (url.endsWith('/api')) {
|
|
281
|
+
return url
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
return url.endsWith('/') ? url + 'api' : url + '/api'
|
|
251
285
|
}
|