@subsquid/evm-typegen 3.3.0 → 4.0.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
@@ -27,15 +27,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const fs = __importStar(require("fs"));
30
- const ethers = __importStar(require("ethers"));
31
30
  const path_1 = __importDefault(require("path"));
32
31
  const commander_1 = require("commander");
33
32
  const logger_1 = require("@subsquid/logger");
34
33
  const util_internal_1 = require("@subsquid/util-internal");
35
- const util_internal_code_printer_1 = require("@subsquid/util-internal-code-printer");
36
34
  const validator = __importStar(require("@subsquid/util-internal-commander"));
37
35
  const typegen_1 = require("./typegen");
38
36
  const fetch_1 = require("./util/fetch");
37
+ const util_internal_code_printer_1 = require("@subsquid/util-internal-code-printer");
39
38
  const LOG = (0, logger_1.createLogger)('sqd:evm-typegen');
40
39
  (0, util_internal_1.runProgram)(async function () {
41
40
  commander_1.program
@@ -83,8 +82,6 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
83
82
  LOG.warn('no ABI files given, nothing to generate');
84
83
  return;
85
84
  }
86
- dest.add('abi.support.ts', [__dirname, '../src/abi.support.ts']);
87
- LOG.info(`saved ${dest.path('abi.support.ts')}`);
88
85
  if (opts.multicall) {
89
86
  dest.add('multicall.ts', [__dirname, '../src/multicall.ts']);
90
87
  LOG.info(`saved ${dest.path('multicall.ts')}`);
@@ -92,10 +89,9 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
92
89
  for (let spec of specs) {
93
90
  LOG.info(`processing ${spec.src}`);
94
91
  let abi_json = await read(spec, opts);
95
- let abi = new ethers.Interface(abi_json);
96
- new typegen_1.Typegen(dest, abi, spec.name, LOG).generate();
92
+ await new typegen_1.Typegen(dest, abi_json, spec.name, LOG).generate();
97
93
  }
98
- }, err => LOG.fatal(err));
94
+ }, (err) => LOG.fatal(err));
99
95
  async function read(spec, options) {
100
96
  if (spec.kind == 'address') {
101
97
  return fetchFromEtherscan(spec.src, options?.etherscanApi, options?.etherscanApiKey);
@@ -128,7 +124,9 @@ async function fetchFromEtherscan(address, api, apiKey) {
128
124
  let attempts = 0;
129
125
  while (true) {
130
126
  response = await (0, fetch_1.GET)(url.toString());
131
- if (response.status == '0' && response.result.includes('rate limit') && attempts < 4) {
127
+ if (response.status == '0' &&
128
+ response.result.includes('rate limit') &&
129
+ attempts < 4) {
132
130
  attempts += 1;
133
131
  let timeout = attempts * 2;
134
132
  LOG.warn(`faced rate limit error while trying to fetch contract ABI. Trying again in ${timeout} seconds.`);
@@ -151,15 +149,18 @@ function specArgument(value, prev) {
151
149
  prev.push(spec);
152
150
  return prev;
153
151
  }
152
+ function isAddress(spec) {
153
+ return spec.match(/^0x[0-9a-fA-F]{40}$/) !== null;
154
+ }
154
155
  function parseSpec(spec) {
155
156
  let [src, fragment] = splitFragment(spec);
156
157
  if (src.startsWith('0x')) {
157
- if (!ethers.isAddress(src))
158
+ if (!isAddress(src))
158
159
  throw new commander_1.InvalidArgumentError('Invalid contract address');
159
160
  return {
160
161
  kind: 'address',
161
162
  src,
162
- name: fragment || src
163
+ name: fragment || src,
163
164
  };
164
165
  }
165
166
  else if (src.includes('://')) {
@@ -167,14 +168,14 @@ function parseSpec(spec) {
167
168
  return {
168
169
  kind: 'url',
169
170
  src,
170
- name: fragment || basename(u.pathname)
171
+ name: fragment || basename(u.pathname),
171
172
  };
172
173
  }
173
174
  else {
174
175
  return {
175
176
  kind: 'file',
176
177
  src,
177
- name: fragment || basename(src)
178
+ name: fragment || basename(src),
178
179
  };
179
180
  }
180
181
  }
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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"}
@@ -1,30 +1,216 @@
1
- import { ContractBase, Func } from './abi.support';
2
- type AnyFunc = Func<any, {}, any>;
3
- type Call = [address: string, bytes: string];
1
+ /**
2
+ * TODO migrate multicall
3
+ import * as ethers from 'ethers'
4
+ import {ContractBase, Func} from './abi.support'
5
+
6
+
7
+ const abi = new ethers.Interface([
8
+ {
9
+ type: 'function',
10
+ name: 'aggregate',
11
+ stateMutability: 'nonpayable',
12
+ inputs: [
13
+ {
14
+ name: 'calls',
15
+ type: 'tuple[]',
16
+ components: [
17
+ {name: 'target', type: 'address'},
18
+ {name: 'callData', type: 'bytes'},
19
+ ]
20
+ }
21
+ ],
22
+ outputs: [
23
+ {name: 'blockNumber', type: 'uint256'},
24
+ {name: 'returnData', type: 'bytes[]'},
25
+ ]
26
+ },
27
+ {
28
+ name: 'tryAggregate',
29
+ type: 'function',
30
+ stateMutability: 'nonpayable',
31
+ inputs: [
32
+ {name: 'requireSuccess', type: 'bool'},
33
+ {
34
+ name: 'calls',
35
+ type: 'tuple[]',
36
+ components: [
37
+ {name: 'target', type: 'address'},
38
+ {name: 'callData', type: 'bytes'},
39
+ ]
40
+ }
41
+ ],
42
+ outputs: [
43
+ {
44
+ name: 'returnData',
45
+ type: 'tuple[]',
46
+ components: [
47
+ {name: 'success', type: 'bool'},
48
+ {name: 'returnData', type: 'bytes'},
49
+ ]
50
+ },
51
+ ]
52
+ }
53
+ ])
54
+
55
+
56
+ type AnyFunc = Func<any, {}, any>
57
+ type Call = [address: string, bytes: string]
58
+
59
+
60
+ const aggregate = new Func<[calls: Call[]], {}, {blockNumber: bigint, returnData: string[]}>(
61
+ abi, abi.getFunction('aggregate')!.selector
62
+ )
63
+
64
+
65
+ const try_aggregate = new Func<[requireSuccess: boolean, calls: Array<[target: string, callData: string]>], {}, Array<{success: boolean, returnData: string}>>(
66
+ abi, abi.getFunction('tryAggregate')!.selector
67
+ )
68
+
69
+
4
70
  export type MulticallResult<T> = {
5
- success: true;
6
- value: T;
71
+ success: true
72
+ value: T
7
73
  } | {
8
- success: false;
9
- returnData?: string;
10
- value?: undefined;
11
- };
12
- export declare class Multicall extends ContractBase {
13
- static aggregate: Func<[calls: Call[]], {}, {
14
- blockNumber: bigint;
15
- returnData: string[];
16
- }>;
17
- static try_aggregate: Func<[requireSuccess: boolean, calls: [target: string, callData: string][]], {}, {
18
- success: boolean;
19
- returnData: string;
20
- }[]>;
21
- aggregate<Args extends any[], R>(func: Func<Args, {}, R>, address: string, calls: Args[], paging?: number): Promise<R[]>;
22
- aggregate<Args extends any[], R>(func: Func<Args, {}, R>, calls: [address: string, args: Args][], paging?: number): Promise<R[]>;
23
- aggregate(calls: [func: AnyFunc, address: string, args: any[]][], paging?: number): Promise<any[]>;
24
- tryAggregate<Args extends any[], R>(func: Func<Args, {}, R>, address: string, calls: Args[], paging?: number): Promise<MulticallResult<R>[]>;
25
- tryAggregate<Args extends any[], R>(func: Func<Args, {}, R>, calls: [address: string, args: Args][], paging?: number): Promise<MulticallResult<R>[]>;
26
- tryAggregate(calls: [func: AnyFunc, address: string, args: any[]][], paging?: number): Promise<MulticallResult<any>[]>;
27
- private makeCalls;
74
+ success: false
75
+ returnData?: string
76
+ value?: undefined
28
77
  }
29
- export {};
78
+
79
+
80
+ export class Multicall extends ContractBase {
81
+ static aggregate = aggregate
82
+ static try_aggregate = try_aggregate
83
+
84
+ aggregate<Args extends any[], R>(
85
+ func: Func<Args, {}, R>,
86
+ address: string,
87
+ calls: Args[],
88
+ paging?: number
89
+ ): Promise<R[]>
90
+
91
+ aggregate<Args extends any[], R>(
92
+ func: Func<Args, {}, R>,
93
+ calls: [address: string, args: Args][],
94
+ paging?: number
95
+ ): Promise<R[]>
96
+
97
+ aggregate(
98
+ calls: [func: AnyFunc, address: string, args: any[]][],
99
+ paging?: number
100
+ ): Promise<any[]>
101
+
102
+ async aggregate(...args: any[]): Promise<any[]> {
103
+ let [calls, funcs, page] = this.makeCalls(args)
104
+ let size = calls.length
105
+ let results = new Array(size)
106
+ for (let [from, to] of splitIntoPages(size, page)) {
107
+ let {returnData} = await this.eth_call(aggregate, [calls.slice(from, to)])
108
+ for (let i = from; i < to; i++) {
109
+ let data = returnData[i - from]
110
+ results[i] = funcs[i].decodeResult(data)
111
+ }
112
+ }
113
+ return results
114
+ }
115
+
116
+ tryAggregate<Args extends any[], R>(
117
+ func: Func<Args, {}, R>,
118
+ address: string,
119
+ calls: Args[],
120
+ paging?: number
121
+ ): Promise<MulticallResult<R>[]>
122
+
123
+ tryAggregate<Args extends any[], R>(
124
+ func: Func<Args, {}, R>,
125
+ calls: [address: string, args: Args][],
126
+ paging?: number
127
+ ): Promise<MulticallResult<R>[]>
128
+
129
+ tryAggregate(
130
+ calls: [func: AnyFunc, address: string, args: any[]][],
131
+ paging?: number
132
+ ): Promise<MulticallResult<any>[]>
133
+
134
+ async tryAggregate(...args: any[]): Promise<any[]> {
135
+ let [calls, funcs, page] = this.makeCalls(args)
136
+ let size = calls.length
137
+ let results = new Array(size)
138
+ for (let [from, to] of splitIntoPages(size, page)) {
139
+ let response = await this.eth_call(try_aggregate, [false, calls.slice(from, to)])
140
+ for (let i = from; i < to; i++) {
141
+ let res = response[i - from]
142
+ if (res.success) {
143
+ try {
144
+ results[i] = {
145
+ success: true,
146
+ value: funcs[i].decodeResult(res.returnData)
147
+ }
148
+ } catch(err: any) {
149
+ results[i] = {success: false, returnData: res.returnData}
150
+ }
151
+ } else {
152
+ results[i] = {success: false}
153
+ }
154
+ }
155
+ }
156
+ return results
157
+ }
158
+
159
+ private makeCalls(args: any[]): [calls: Call[], funcs: AnyFunc[], page: number] {
160
+ let page = typeof args[args.length-1] == 'number' ? args.pop()! : Number.MAX_SAFE_INTEGER
161
+ switch(args.length) {
162
+ case 1: {
163
+ let list: [func: AnyFunc, address: string, args: any[]][] = args[0]
164
+ let calls = new Array(list.length)
165
+ let funcs = new Array(list.length)
166
+ for (let i = 0; i < list.length; i++) {
167
+ let [func, address, args] = list[i]
168
+ calls[i] = [address, func.encode(args)]
169
+ funcs[i] = func
170
+ }
171
+ return [calls, funcs, page]
172
+ }
173
+ case 2: {
174
+ let func: AnyFunc = args[0]
175
+ let list: [address: string, args: any[]][] = args[1]
176
+ let calls = new Array(list.length)
177
+ let funcs = new Array(list.length)
178
+ for (let i = 0; i < list.length; i++) {
179
+ let [address, args] = list[i]
180
+ calls[i] = [address, func.encode(args)]
181
+ funcs[i] = func
182
+ }
183
+ return [calls, funcs, page]
184
+ }
185
+ case 3: {
186
+ let func: AnyFunc = args[0]
187
+ let address: string = args[1]
188
+ let list: any[][] = args[2]
189
+ let calls = new Array(list.length)
190
+ let funcs = new Array(list.length)
191
+ for (let i = 0; i < list.length; i++) {
192
+ let args = list[i]
193
+ calls[i] = [address, func.encode(args)]
194
+ funcs[i] = func
195
+ }
196
+ return [calls, funcs, page]
197
+ }
198
+ default:
199
+ throw new Error('unexpected number of arguments')
200
+ }
201
+ }
202
+ }
203
+
204
+
205
+ function* splitIntoPages(size: number, page: number): Iterable<[from: number, to: number]> {
206
+ let from = 0
207
+ while (size) {
208
+ let step = Math.min(page, size)
209
+ let to = from + step
210
+ yield [from, to]
211
+ size -= step
212
+ from = to
213
+ }
214
+ }
215
+ */
30
216
  //# sourceMappingURL=multicall.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAE,IAAI,EAAC,MAAM,eAAe,CAAA;AAoDhD,KAAK,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;AACjC,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AAa5C,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC7B,OAAO,EAAE,IAAI,CAAA;IACb,KAAK,EAAE,CAAC,CAAA;CACX,GAAG;IACA,OAAO,EAAE,KAAK,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;CACpB,CAAA;AAGD,qBAAa,SAAU,SAAQ,YAAY;IACvC,MAAM,CAAC,SAAS;;;OAAY;IAC5B,MAAM,CAAC,aAAa;;;SAAgB;IAEpC,SAAS,CAAC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC,EAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EACvB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,EAAE,CAAC;IAEf,SAAS,CAAC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC,EAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EACvB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EACtC,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,EAAE,CAAC;IAEf,SAAS,CACL,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EACtD,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,EAAE,CAAC;IAgBjB,YAAY,CAAC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC,EAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EACvB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhC,YAAY,CAAC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC,EAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EACvB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EACtC,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhC,YAAY,CACR,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EACtD,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;IA2BlC,OAAO,CAAC,SAAS;CA2CpB"}
1
+ {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsNE"}