@subsquid/evm-typegen 4.3.0 → 4.4.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/multicall.d.ts +6 -6
- package/lib/multicall.d.ts.map +1 -1
- package/lib/multicall.js +48 -45
- package/lib/multicall.js.map +1 -1
- package/lib/util/fetch.js +1 -2
- package/lib/util/fetch.js.map +1 -1
- package/lib/util/types.js +1 -2
- package/lib/util/types.js.map +1 -1
- package/package.json +5 -5
- package/src/multicall.ts +72 -64
package/lib/multicall.d.ts
CHANGED
|
@@ -39,12 +39,12 @@ export declare class Multicall extends ContractBase {
|
|
|
39
39
|
readonly success: boolean;
|
|
40
40
|
readonly returnData: string;
|
|
41
41
|
}[]>>;
|
|
42
|
-
aggregate<TF extends AnyFunc>(func: TF, address: string, calls: FunctionArguments<TF>[],
|
|
43
|
-
aggregate<TF extends AnyFunc>(func: TF, calls: (readonly [address: string, args: FunctionArguments<TF>])[],
|
|
44
|
-
aggregate(calls: AggregateTuple[],
|
|
45
|
-
tryAggregate<TF extends AnyFunc>(func: TF, address: string, calls: FunctionArguments<TF>[],
|
|
46
|
-
tryAggregate<TF extends AnyFunc>(func: TF, calls: (readonly [address: string, args: FunctionArguments<TF>])[],
|
|
47
|
-
tryAggregate(calls: AggregateTuple[],
|
|
42
|
+
aggregate<TF extends AnyFunc>(func: TF, address: string, calls: FunctionArguments<TF>[], pageSize?: number): Promise<FunctionReturn<TF>[]>;
|
|
43
|
+
aggregate<TF extends AnyFunc>(func: TF, calls: (readonly [address: string, args: FunctionArguments<TF>])[], pageSize?: number): Promise<FunctionReturn<TF>[]>;
|
|
44
|
+
aggregate(calls: AggregateTuple[], pageSize?: number): Promise<any[]>;
|
|
45
|
+
tryAggregate<TF extends AnyFunc>(func: TF, address: string, calls: FunctionArguments<TF>[], pageSize?: number): Promise<MulticallResult<TF>[]>;
|
|
46
|
+
tryAggregate<TF extends AnyFunc>(func: TF, calls: (readonly [address: string, args: FunctionArguments<TF>])[], pageSize?: number): Promise<MulticallResult<TF>[]>;
|
|
47
|
+
tryAggregate(calls: AggregateTuple[], pageSize?: number): Promise<MulticallResult<any>[]>;
|
|
48
48
|
private makeCalls;
|
|
49
49
|
}
|
|
50
50
|
export {};
|
package/lib/multicall.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,qBAAqB,CAAA;AACxC,OAAO,EAAM,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAC,MAAM,mBAAmB,CAAA;AAclH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI;IAC7D,OAAO,EAAE,IAAI,CAAA;IACb,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CACzB,GAAG;IACF,OAAO,EAAE,KAAK,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,KAAK,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AACpC,KAAK,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,SAAS,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAA;AAGrI,qBAAa,SAAU,SAAQ,YAAY;IACzC,MAAM,CAAC,SAAS;;;;;;;;;;;OAAY;IAC5B,MAAM,CAAC,YAAY;;;;;;;;;;;;;;;UAAe;IAElC,SAAS,CAAC,EAAE,SAAS,OAAO,EAC1B,IAAI,EAAE,EAAE,EACR,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAC9B,
|
|
1
|
+
{"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,qBAAqB,CAAA;AACxC,OAAO,EAAM,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAC,MAAM,mBAAmB,CAAA;AAclH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI;IAC7D,OAAO,EAAE,IAAI,CAAA;IACb,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CACzB,GAAG;IACF,OAAO,EAAE,KAAK,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED,KAAK,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AACpC,KAAK,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,SAAS,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAA;AAGrI,qBAAa,SAAU,SAAQ,YAAY;IACzC,MAAM,CAAC,SAAS;;;;;;;;;;;OAAY;IAC5B,MAAM,CAAC,YAAY;;;;;;;;;;;;;;;UAAe;IAElC,SAAS,CAAC,EAAE,SAAS,OAAO,EAC1B,IAAI,EAAE,EAAE,EACR,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;IAEhC,SAAS,CAAC,EAAE,SAAS,OAAO,EAC1B,IAAI,EAAE,EAAE,EACR,KAAK,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAClE,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;IAEhC,SAAS,CACP,KAAK,EAAE,cAAc,EAAE,EACvB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,EAAE,CAAC;IAiBjB,YAAY,CAAC,EAAE,SAAS,OAAO,EAC7B,IAAI,EAAE,EAAE,EACR,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC;IAEjC,YAAY,CAAC,EAAE,SAAS,OAAO,EAC7B,IAAI,EAAE,EAAE,EACR,KAAK,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAClE,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC;IAEjC,YAAY,CACV,KAAK,EAAE,cAAc,EAAE,EACvB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;IAiClC,OAAO,CAAC,SAAS;CAqClB"}
|
package/lib/multicall.js
CHANGED
|
@@ -38,45 +38,43 @@ const tryAggregate = (0, evm_abi_1.fun)('0xbce38bd7', "tryAggregate(bool,(addres
|
|
|
38
38
|
}, p.array(p.struct({ success: p.bool, returnData: p.bytes })));
|
|
39
39
|
class Multicall extends evm_abi_1.ContractBase {
|
|
40
40
|
async aggregate(...args) {
|
|
41
|
-
let [calls,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
}
|
|
41
|
+
let [calls, pageSize] = this.makeCalls(args);
|
|
42
|
+
if (calls.length === 0)
|
|
43
|
+
return [];
|
|
44
|
+
const pages = Array.from(splitArray(pageSize, calls));
|
|
45
|
+
const results = await Promise.all(pages.flatMap(async (page) => {
|
|
46
|
+
const { returnData } = await this.eth_call(aggregate, { calls: page });
|
|
47
|
+
return returnData.map((data, i) => page[i].func.decodeResult(data));
|
|
48
|
+
}));
|
|
51
49
|
return results;
|
|
52
50
|
}
|
|
53
51
|
async tryAggregate(...args) {
|
|
54
|
-
let [calls,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
let [calls, pageSize] = this.makeCalls(args);
|
|
53
|
+
if (calls.length === 0)
|
|
54
|
+
return [];
|
|
55
|
+
const pages = Array.from(splitArray(pageSize, calls));
|
|
56
|
+
const results = await Promise.all(pages.flatMap(async (page) => {
|
|
57
|
+
const response = await this.eth_call(tryAggregate, {
|
|
59
58
|
requireSuccess: false,
|
|
60
|
-
calls:
|
|
59
|
+
calls: page,
|
|
61
60
|
});
|
|
62
|
-
|
|
63
|
-
let res = response[i - from];
|
|
61
|
+
return response.map((res, i) => {
|
|
64
62
|
if (res.success) {
|
|
65
63
|
try {
|
|
66
|
-
|
|
64
|
+
return {
|
|
67
65
|
success: true,
|
|
68
|
-
value:
|
|
66
|
+
value: page[i].func.decodeResult(res.returnData)
|
|
69
67
|
};
|
|
70
68
|
}
|
|
71
69
|
catch (err) {
|
|
72
|
-
|
|
70
|
+
return { success: false, returnData: res.returnData };
|
|
73
71
|
}
|
|
74
72
|
}
|
|
75
73
|
else {
|
|
76
|
-
|
|
74
|
+
return { success: false };
|
|
77
75
|
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
76
|
+
});
|
|
77
|
+
}));
|
|
80
78
|
return results;
|
|
81
79
|
}
|
|
82
80
|
makeCalls(args) {
|
|
@@ -85,55 +83,60 @@ class Multicall extends evm_abi_1.ContractBase {
|
|
|
85
83
|
case 1: {
|
|
86
84
|
let list = args[0];
|
|
87
85
|
let calls = new Array(list.length);
|
|
88
|
-
let funcs = new Array(list.length);
|
|
89
86
|
for (let i = 0; i < list.length; i++) {
|
|
90
87
|
let [func, address, args] = list[i];
|
|
91
|
-
calls[i] = { target: address, callData: func.encode(args) };
|
|
92
|
-
funcs[i] = func;
|
|
88
|
+
calls[i] = { target: address, callData: func.encode(args), func };
|
|
93
89
|
}
|
|
94
|
-
return [calls,
|
|
90
|
+
return [calls, page];
|
|
95
91
|
}
|
|
96
92
|
case 2: {
|
|
97
93
|
let func = args[0];
|
|
98
94
|
let list = args[1];
|
|
99
95
|
let calls = new Array(list.length);
|
|
100
|
-
let funcs = new Array(list.length);
|
|
101
96
|
for (let i = 0; i < list.length; i++) {
|
|
102
97
|
let [address, args] = list[i];
|
|
103
|
-
calls[i] = { target: address, callData: func.encode(args) };
|
|
104
|
-
funcs[i] = func;
|
|
98
|
+
calls[i] = { target: address, callData: func.encode(args), func };
|
|
105
99
|
}
|
|
106
|
-
return [calls,
|
|
100
|
+
return [calls, page];
|
|
107
101
|
}
|
|
108
102
|
case 3: {
|
|
109
103
|
let func = args[0];
|
|
110
104
|
let address = args[1];
|
|
111
105
|
let list = args[2];
|
|
112
106
|
let calls = new Array(list.length);
|
|
113
|
-
let funcs = new Array(list.length);
|
|
114
107
|
for (let i = 0; i < list.length; i++) {
|
|
115
108
|
let args = list[i];
|
|
116
|
-
calls[i] = { target: address, callData: func.encode(args) };
|
|
117
|
-
funcs[i] = func;
|
|
109
|
+
calls[i] = { target: address, callData: func.encode(args), func };
|
|
118
110
|
}
|
|
119
|
-
return [calls,
|
|
111
|
+
return [calls, page];
|
|
120
112
|
}
|
|
121
113
|
default:
|
|
122
|
-
throw new Error(
|
|
114
|
+
throw new Error(`Unexpected number of arguments: ${args.length}`);
|
|
123
115
|
}
|
|
124
116
|
}
|
|
125
117
|
}
|
|
126
118
|
exports.Multicall = Multicall;
|
|
127
119
|
Multicall.aggregate = aggregate;
|
|
128
120
|
Multicall.tryAggregate = tryAggregate;
|
|
129
|
-
function*
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
let
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
121
|
+
function* splitSlice(maxSize, beg, end) {
|
|
122
|
+
maxSize = Math.max(1, maxSize);
|
|
123
|
+
end = end ?? Number.MAX_SAFE_INTEGER;
|
|
124
|
+
while (beg < end) {
|
|
125
|
+
let left = end - beg;
|
|
126
|
+
let splits = Math.ceil(left / maxSize);
|
|
127
|
+
let step = Math.round(left / splits);
|
|
128
|
+
yield [beg, beg + step];
|
|
129
|
+
beg += step;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function* splitArray(maxSize, arr) {
|
|
133
|
+
if (arr.length <= maxSize) {
|
|
134
|
+
yield arr;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
for (let [beg, end] of splitSlice(maxSize, 0, arr.length)) {
|
|
138
|
+
yield arr.slice(beg, end);
|
|
139
|
+
}
|
|
137
140
|
}
|
|
138
141
|
}
|
|
139
142
|
//# sourceMappingURL=multicall.js.map
|
package/lib/multicall.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multicall.js","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAwC;AACxC,+CAAkH;AAElH,MAAM,SAAS,GAAG,IAAA,aAAG,EAAC,YAAY,EAAE,8BAA8B,EAAE;IAClE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACtB,MAAM,EAAE,CAAC,CAAC,OAAO;QACjB,QAAQ,EAAE,CAAC,CAAC,KAAK;KAClB,CAAC,CAAC;CACJ,EAAE,EAAC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAC,CAAC,CAAA;AAE1D,MAAM,YAAY,GAAG,IAAA,aAAG,EAAC,YAAY,EAAE,sCAAsC,EAAE;IAC7E,cAAc,EAAE,CAAC,CAAC,IAAI;IACtB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC;CACjE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC,CAAA;AAe7D,MAAa,SAAU,SAAQ,sBAAY;IAsBzC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAW;QAC5B,IAAI,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"multicall.js","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"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"}
|
package/lib/util/fetch.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GET =
|
|
3
|
+
exports.GET = GET;
|
|
4
4
|
const logger_1 = require("@subsquid/logger");
|
|
5
5
|
const http_client_1 = require("@subsquid/http-client");
|
|
6
6
|
const http = new http_client_1.HttpClient({
|
|
@@ -10,5 +10,4 @@ const http = new http_client_1.HttpClient({
|
|
|
10
10
|
function GET(url) {
|
|
11
11
|
return http.get(url);
|
|
12
12
|
}
|
|
13
|
-
exports.GET = GET;
|
|
14
13
|
//# sourceMappingURL=fetch.js.map
|
package/lib/util/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/util/fetch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/util/fetch.ts"],"names":[],"mappings":";;AAQA,kBAEC;AAVD,6CAA+C;AAC/C,uDAAkD;AAElD,MAAM,IAAI,GAAG,IAAI,wBAAU,CAAC;IAC1B,GAAG,EAAE,IAAA,qBAAY,EAAC,uBAAuB,CAAC;IAC1C,aAAa,EAAE,CAAC;CACjB,CAAC,CAAA;AAEF,SAAgB,GAAG,CAAU,GAAW;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC"}
|
package/lib/util/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getType =
|
|
3
|
+
exports.getType = getType;
|
|
4
4
|
function isStaticArray(param) {
|
|
5
5
|
return param.type.match(/\[\d+]$/);
|
|
6
6
|
}
|
|
@@ -43,5 +43,4 @@ function getType(param, index) {
|
|
|
43
43
|
}
|
|
44
44
|
return `p.${param.type}`;
|
|
45
45
|
}
|
|
46
|
-
exports.getType = getType;
|
|
47
46
|
//# sourceMappingURL=types.js.map
|
package/lib/util/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/util/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/util/types.ts"],"names":[],"mappings":";;AAkBA,0BAmCC;AAnDD,SAAS,aAAa,CAAC,KAAwB;IAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AACpC,CAAC;AAED,SAAS,cAAc,CAAC,KAAwB;IAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAClC,CAAC;AAED,SAAS,aAAa,CAAC,KAAwB;IAC7C,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,KAAwB;IAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;AAC1C,CAAC;AAED,SAAgB,OAAO,CAAC,KAAwB,EAAE,KAAc;IAC9D,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,GAAG,KAAK,CAAA;IAExC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,IAAI,IAAI,MAAM,OAAO,CAAC,aAAoB,CAAC,EAAE,CAAA;IACtD,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,CAAA;IACjD,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,KAAK,CAAA;IAC5C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,WAAW,OAAO,CAAC,cAAqB,CAAC,GAAG,CAAA;IACrD,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;QACrC,OAAO,oBAAoB,OAAO,CAAC;YACjC,GAAG,KAAK;YACR,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC;SAC5B,CAAC,KAAK,QAAQ,GAAG,CAAA;IACpB,CAAC;IAED,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAW,OAAO,CAAC;YACxB,GAAG,KAAK;YACR,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC;SAC5B,CAAC,GAAG,CAAA;IACP,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,aAAc,KAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAuB,EAAE,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IAChI,CAAC;IAED,OAAO,KAAK,KAAK,CAAC,IAAI,EAAE,CAAA;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@subsquid/evm-typegen",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.4.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,19 +16,19 @@
|
|
|
16
16
|
"squid-evm-typegen": "bin/run.js"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@subsquid/http-client": "^1.
|
|
20
|
-
"@subsquid/logger": "^1.
|
|
19
|
+
"@subsquid/http-client": "^1.6.0",
|
|
20
|
+
"@subsquid/logger": "^1.4.0",
|
|
21
21
|
"@subsquid/util-internal": "^3.2.0",
|
|
22
22
|
"@subsquid/util-internal-code-printer": "^1.2.2",
|
|
23
23
|
"@subsquid/util-internal-commander": "^1.4.0",
|
|
24
24
|
"@subsquid/evm-codec": "^0.3.0",
|
|
25
|
-
"@subsquid/evm-abi": "^0.3.
|
|
25
|
+
"@subsquid/evm-abi": "^0.3.1",
|
|
26
26
|
"commander": "^11.1.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/node": "^18.18.14",
|
|
30
30
|
"abitype": "^1.0.4",
|
|
31
|
-
"typescript": "~5.
|
|
31
|
+
"typescript": "~5.5.4"
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
34
|
"build": "rm -rf lib && tsc"
|
package/src/multicall.ts
CHANGED
|
@@ -24,7 +24,7 @@ export type MulticallResult<T extends AbiFunction<any, any>> = {
|
|
|
24
24
|
|
|
25
25
|
type AnyFunc = AbiFunction<any, any>
|
|
26
26
|
type AggregateTuple<T extends AnyFunc = AnyFunc> = [func: T, address: string, args: T extends AnyFunc ? FunctionArguments<T> : never]
|
|
27
|
-
type Call = {target: string, callData: string}
|
|
27
|
+
type Call = {target: string, func: AnyFunc, callData: string}
|
|
28
28
|
|
|
29
29
|
export class Multicall extends ContractBase {
|
|
30
30
|
static aggregate = aggregate
|
|
@@ -34,31 +34,32 @@ export class Multicall extends ContractBase {
|
|
|
34
34
|
func: TF,
|
|
35
35
|
address: string,
|
|
36
36
|
calls: FunctionArguments<TF>[],
|
|
37
|
-
|
|
37
|
+
pageSize?: number
|
|
38
38
|
): Promise<FunctionReturn<TF>[]>
|
|
39
39
|
|
|
40
40
|
aggregate<TF extends AnyFunc>(
|
|
41
41
|
func: TF,
|
|
42
42
|
calls: (readonly [address: string, args: FunctionArguments<TF>])[],
|
|
43
|
-
|
|
43
|
+
pageSize?: number
|
|
44
44
|
): Promise<FunctionReturn<TF>[]>
|
|
45
45
|
|
|
46
46
|
aggregate(
|
|
47
47
|
calls: AggregateTuple[],
|
|
48
|
-
|
|
48
|
+
pageSize?: number
|
|
49
49
|
): Promise<any[]>
|
|
50
50
|
|
|
51
51
|
async aggregate(...args: any[]): Promise<any[]> {
|
|
52
|
-
let [calls,
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
52
|
+
let [calls, pageSize] = this.makeCalls(args)
|
|
53
|
+
if (calls.length === 0) return []
|
|
54
|
+
|
|
55
|
+
const pages = Array.from(splitArray(pageSize, calls))
|
|
56
|
+
const results = await Promise.all(
|
|
57
|
+
pages.flatMap(async (page) => {
|
|
58
|
+
const {returnData} = await this.eth_call(aggregate, {calls: page})
|
|
59
|
+
return returnData.map((data, i) => page[i].func.decodeResult(data))
|
|
60
|
+
})
|
|
61
|
+
)
|
|
62
|
+
|
|
62
63
|
return results
|
|
63
64
|
}
|
|
64
65
|
|
|
@@ -66,101 +67,108 @@ export class Multicall extends ContractBase {
|
|
|
66
67
|
func: TF,
|
|
67
68
|
address: string,
|
|
68
69
|
calls: FunctionArguments<TF>[],
|
|
69
|
-
|
|
70
|
+
pageSize?: number
|
|
70
71
|
): Promise<MulticallResult<TF>[]>
|
|
71
72
|
|
|
72
73
|
tryAggregate<TF extends AnyFunc>(
|
|
73
74
|
func: TF,
|
|
74
75
|
calls: (readonly [address: string, args: FunctionArguments<TF>])[],
|
|
75
|
-
|
|
76
|
+
pageSize?: number
|
|
76
77
|
): Promise<MulticallResult<TF>[]>
|
|
77
78
|
|
|
78
79
|
tryAggregate(
|
|
79
80
|
calls: AggregateTuple[],
|
|
80
|
-
|
|
81
|
+
pageSize?: number
|
|
81
82
|
): Promise<MulticallResult<any>[]>
|
|
82
83
|
|
|
83
84
|
async tryAggregate(...args: any[]): Promise<any[]> {
|
|
84
|
-
let [calls,
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
85
|
+
let [calls, pageSize] = this.makeCalls(args)
|
|
86
|
+
if (calls.length === 0) return []
|
|
87
|
+
|
|
88
|
+
const pages = Array.from(splitArray(pageSize, calls))
|
|
89
|
+
const results = await Promise.all(
|
|
90
|
+
pages.flatMap(async (page) => {
|
|
91
|
+
const response = await this.eth_call(tryAggregate, {
|
|
92
|
+
requireSuccess: false,
|
|
93
|
+
calls: page,
|
|
94
|
+
})
|
|
95
|
+
return response.map((res, i) => {
|
|
96
|
+
if (res.success) {
|
|
97
|
+
try {
|
|
98
|
+
return {
|
|
99
|
+
success: true,
|
|
100
|
+
value: page[i].func.decodeResult(res.returnData)
|
|
101
|
+
}
|
|
102
|
+
} catch (err: any) {
|
|
103
|
+
return {success: false, returnData: res.returnData}
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
return {success: false}
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
})
|
|
110
|
+
)
|
|
111
|
+
|
|
108
112
|
return results
|
|
109
113
|
}
|
|
110
114
|
|
|
111
|
-
private makeCalls(args: any[]): [calls: Call[],
|
|
115
|
+
private makeCalls(args: any[]): [calls: Call[], page: number] {
|
|
112
116
|
let page = typeof args[args.length - 1] == 'number' ? args.pop()! : Number.MAX_SAFE_INTEGER
|
|
113
117
|
switch (args.length) {
|
|
114
118
|
case 1: {
|
|
115
119
|
let list: AggregateTuple[] = args[0]
|
|
116
120
|
let calls: Call[] = new Array(list.length)
|
|
117
|
-
let funcs = new Array(list.length)
|
|
118
121
|
for (let i = 0; i < list.length; i++) {
|
|
119
122
|
let [func, address, args] = list[i]
|
|
120
|
-
calls[i] = {target: address, callData: func.encode(args)}
|
|
121
|
-
funcs[i] = func
|
|
123
|
+
calls[i] = {target: address, callData: func.encode(args), func}
|
|
122
124
|
}
|
|
123
|
-
return [calls,
|
|
125
|
+
return [calls, page]
|
|
124
126
|
}
|
|
125
127
|
case 2: {
|
|
126
128
|
let func: AnyFunc = args[0]
|
|
127
129
|
let list: [address: string, args: any][] = args[1]
|
|
128
130
|
let calls: Call[] = new Array(list.length)
|
|
129
|
-
let funcs = new Array(list.length)
|
|
130
131
|
for (let i = 0; i < list.length; i++) {
|
|
131
132
|
let [address, args] = list[i]
|
|
132
|
-
calls[i] = {target: address, callData: func.encode(args)}
|
|
133
|
-
funcs[i] = func
|
|
133
|
+
calls[i] = {target: address, callData: func.encode(args), func}
|
|
134
134
|
}
|
|
135
|
-
return [calls,
|
|
135
|
+
return [calls, page]
|
|
136
136
|
}
|
|
137
137
|
case 3: {
|
|
138
138
|
let func: AnyFunc = args[0]
|
|
139
139
|
let address: string = args[1]
|
|
140
140
|
let list: any = args[2]
|
|
141
141
|
let calls: Call[] = new Array(list.length)
|
|
142
|
-
let funcs = new Array(list.length)
|
|
143
142
|
for (let i = 0; i < list.length; i++) {
|
|
144
143
|
let args = list[i]
|
|
145
|
-
calls[i] = {target: address, callData: func.encode(args)}
|
|
146
|
-
funcs[i] = func
|
|
144
|
+
calls[i] = {target: address, callData: func.encode(args), func}
|
|
147
145
|
}
|
|
148
|
-
return [calls,
|
|
146
|
+
return [calls, page]
|
|
149
147
|
}
|
|
150
148
|
default:
|
|
151
|
-
throw new Error(
|
|
149
|
+
throw new Error(`Unexpected number of arguments: ${args.length}`)
|
|
152
150
|
}
|
|
153
151
|
}
|
|
154
152
|
}
|
|
155
153
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
while (
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
154
|
+
function* splitSlice(maxSize: number, beg: number, end?: number): Iterable<[beg: number, end: number]> {
|
|
155
|
+
maxSize = Math.max(1, maxSize)
|
|
156
|
+
end = end ?? Number.MAX_SAFE_INTEGER
|
|
157
|
+
while (beg < end) {
|
|
158
|
+
let left = end - beg
|
|
159
|
+
let splits = Math.ceil(left / maxSize)
|
|
160
|
+
let step = Math.round(left / splits)
|
|
161
|
+
yield [beg, beg + step]
|
|
162
|
+
beg += step
|
|
165
163
|
}
|
|
166
164
|
}
|
|
165
|
+
|
|
166
|
+
function* splitArray<T>(maxSize: number, arr: T[]): Iterable<T[]> {
|
|
167
|
+
if (arr.length <= maxSize) {
|
|
168
|
+
yield arr
|
|
169
|
+
} else {
|
|
170
|
+
for (let [beg, end] of splitSlice(maxSize, 0, arr.length)) {
|
|
171
|
+
yield arr.slice(beg, end)
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|