@subsquid/evm-typegen 2.1.1 → 3.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/abi.support.d.ts +5 -5
- package/lib/abi.support.d.ts.map +1 -1
- package/lib/abi.support.js +12 -4
- package/lib/abi.support.js.map +1 -1
- package/lib/main.js +6 -7
- package/lib/main.js.map +1 -1
- package/lib/multicall.d.ts +1 -2
- package/lib/multicall.d.ts.map +1 -1
- package/lib/multicall.js +3 -3
- package/lib/multicall.js.map +1 -1
- package/lib/typegen.d.ts +4 -2
- package/lib/typegen.d.ts.map +1 -1
- package/lib/typegen.js +53 -13
- package/lib/typegen.js.map +1 -1
- package/lib/util/fetch.js +2 -2
- package/lib/util/fetch.js.map +1 -1
- package/lib/util/types.d.ts +5 -5
- package/lib/util/types.d.ts.map +1 -1
- package/lib/util/types.js +8 -2
- package/lib/util/types.js.map +1 -1
- package/package.json +12 -11
- package/src/abi.support.ts +16 -11
- package/src/main.ts +6 -7
- package/src/multicall.ts +4 -4
- package/src/typegen.ts +26 -17
- package/src/util/fetch.ts +1 -1
- package/src/util/types.ts +10 -7
package/lib/abi.support.d.ts
CHANGED
|
@@ -7,18 +7,18 @@ export declare class LogEvent<Args> {
|
|
|
7
7
|
private abi;
|
|
8
8
|
readonly topic: string;
|
|
9
9
|
private fragment;
|
|
10
|
-
constructor(abi: ethers.
|
|
10
|
+
constructor(abi: ethers.Interface, topic: string);
|
|
11
11
|
decode(rec: LogRecord): Args;
|
|
12
12
|
}
|
|
13
13
|
export declare class Func<Args extends any[], FieldArgs, Result> {
|
|
14
14
|
private abi;
|
|
15
15
|
readonly sighash: string;
|
|
16
16
|
private fragment;
|
|
17
|
-
constructor(abi: ethers.
|
|
18
|
-
decode(input: ethers.
|
|
17
|
+
constructor(abi: ethers.Interface, sighash: string);
|
|
18
|
+
decode(input: ethers.BytesLike): Args & FieldArgs;
|
|
19
19
|
encode(args: Args): string;
|
|
20
|
-
decodeResult(output: ethers.
|
|
21
|
-
tryDecodeResult(output: ethers.
|
|
20
|
+
decodeResult(output: ethers.BytesLike): Result;
|
|
21
|
+
tryDecodeResult(output: ethers.BytesLike): Result | undefined;
|
|
22
22
|
}
|
|
23
23
|
export declare function isFunctionResultDecodingError(val: unknown): val is Error & {
|
|
24
24
|
data: string;
|
package/lib/abi.support.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.support.d.ts","sourceRoot":"","sources":["../src/abi.support.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"abi.support.d.ts","sourceRoot":"","sources":["../src/abi.support.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAGhC,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACf;AAGD,qBAAa,QAAQ,CAAC,IAAI;IAGV,OAAO,CAAC,GAAG;aAAoC,KAAK,EAAE,MAAM;IAFxE,OAAO,CAAC,QAAQ,CAAsB;gBAElB,GAAG,EAAE,MAAM,CAAC,SAAS,EAAkB,KAAK,EAAE,MAAM;IAMxE,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;CAG/B;AAGD,qBAAa,IAAI,CAAC,IAAI,SAAS,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM;IAGvC,OAAO,CAAC,GAAG;aAAoC,OAAO,EAAE,MAAM;IAF1E,OAAO,CAAC,QAAQ,CAAyB;gBAErB,GAAG,EAAE,MAAM,CAAC,SAAS,EAAkB,OAAO,EAAE,MAAM;IAM1E,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,GAAG,IAAI,GAAG,SAAS;IAIjD,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAI1B,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM;IAK9C,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,GAAG,MAAM,GAAG,SAAS;CAOhE;AAGD,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,KAAK,GAAG;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CAOzF;AAGD,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,KAAK,CAAA;CAChB;AAGD,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,KAAK,CAAA;IACb,KAAK,EAAE,KAAK,CAAA;CACf;AAGD,MAAM,WAAW,KAAK;IAClB,MAAM,EAAE,MAAM,CAAA;CACjB;AAGD,MAAM,WAAW,KAAK;IAClB,MAAM,EAAG;QACL,IAAI,EAAE,CAAC,CAAC,GAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;KAClE,CAAA;CACJ;AAGD,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAO;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;gBAEZ,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM;gBAClC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM;IAetD,QAAQ,CAAC,IAAI,SAAS,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CAQ1H"}
|
package/lib/abi.support.js
CHANGED
|
@@ -22,14 +22,20 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
25
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
29
|
exports.ContractBase = exports.isFunctionResultDecodingError = exports.Func = exports.LogEvent = void 0;
|
|
30
|
+
const assert_1 = __importDefault(require("assert"));
|
|
27
31
|
const ethers = __importStar(require("ethers"));
|
|
28
32
|
class LogEvent {
|
|
29
33
|
constructor(abi, topic) {
|
|
30
34
|
this.abi = abi;
|
|
31
35
|
this.topic = topic;
|
|
32
|
-
|
|
36
|
+
let fragment = abi.getEvent(topic);
|
|
37
|
+
(0, assert_1.default)(fragment != null, 'Missing fragment');
|
|
38
|
+
this.fragment = fragment;
|
|
33
39
|
}
|
|
34
40
|
decode(rec) {
|
|
35
41
|
return this.abi.decodeEventLog(this.fragment, rec.data, rec.topics);
|
|
@@ -40,7 +46,9 @@ class Func {
|
|
|
40
46
|
constructor(abi, sighash) {
|
|
41
47
|
this.abi = abi;
|
|
42
48
|
this.sighash = sighash;
|
|
43
|
-
|
|
49
|
+
let fragment = abi.getFunction(sighash);
|
|
50
|
+
(0, assert_1.default)(fragment != null, 'Missing fragment');
|
|
51
|
+
this.fragment = fragment;
|
|
44
52
|
}
|
|
45
53
|
decode(input) {
|
|
46
54
|
return this.abi.decodeFunctionData(this.fragment, input);
|
|
@@ -77,14 +85,14 @@ class ContractBase {
|
|
|
77
85
|
this._chain = ctx._chain;
|
|
78
86
|
if (typeof blockOrAddress === 'string') {
|
|
79
87
|
this.blockHeight = ctx.block.height;
|
|
80
|
-
this.address = ethers.
|
|
88
|
+
this.address = ethers.getAddress(blockOrAddress);
|
|
81
89
|
}
|
|
82
90
|
else {
|
|
83
91
|
if (address == null) {
|
|
84
92
|
throw new Error('missing contract address');
|
|
85
93
|
}
|
|
86
94
|
this.blockHeight = blockOrAddress.height;
|
|
87
|
-
this.address = ethers.
|
|
95
|
+
this.address = ethers.getAddress(address);
|
|
88
96
|
}
|
|
89
97
|
}
|
|
90
98
|
async eth_call(func, args) {
|
package/lib/abi.support.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.support.js","sourceRoot":"","sources":["../src/abi.support.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"abi.support.js","sourceRoot":"","sources":["../src/abi.support.ts"],"names":[],"mappings":"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"}
|
package/lib/main.js
CHANGED
|
@@ -26,15 +26,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
const
|
|
30
|
-
const
|
|
29
|
+
const fs = __importStar(require("fs"));
|
|
30
|
+
const ethers = __importStar(require("ethers"));
|
|
31
|
+
const path_1 = __importDefault(require("path"));
|
|
32
|
+
const commander_1 = require("commander");
|
|
31
33
|
const logger_1 = require("@subsquid/logger");
|
|
32
34
|
const util_internal_1 = require("@subsquid/util-internal");
|
|
33
35
|
const util_internal_code_printer_1 = require("@subsquid/util-internal-code-printer");
|
|
34
36
|
const validator = __importStar(require("@subsquid/util-internal-commander"));
|
|
35
|
-
const commander_1 = require("commander");
|
|
36
|
-
const fs = __importStar(require("fs"));
|
|
37
|
-
const path_1 = __importDefault(require("path"));
|
|
38
37
|
const typegen_1 = require("./typegen");
|
|
39
38
|
const fetch_1 = require("./util/fetch");
|
|
40
39
|
const LOG = (0, logger_1.createLogger)('sqd:evm-typegen');
|
|
@@ -93,7 +92,7 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
|
|
|
93
92
|
for (let spec of specs) {
|
|
94
93
|
LOG.info(`processing ${spec.src}`);
|
|
95
94
|
let abi_json = await read(spec, opts);
|
|
96
|
-
let abi = new
|
|
95
|
+
let abi = new ethers.Interface(abi_json);
|
|
97
96
|
new typegen_1.Typegen(dest, abi, spec.name, LOG).generate();
|
|
98
97
|
}
|
|
99
98
|
}, err => LOG.fatal(err));
|
|
@@ -155,7 +154,7 @@ function specArgument(value, prev) {
|
|
|
155
154
|
function parseSpec(spec) {
|
|
156
155
|
let [src, fragment] = splitFragment(spec);
|
|
157
156
|
if (src.startsWith('0x')) {
|
|
158
|
-
if (!
|
|
157
|
+
if (!ethers.isAddress(src))
|
|
159
158
|
throw new commander_1.InvalidArgumentError('Invalid contract address');
|
|
160
159
|
return {
|
|
161
160
|
kind: 'address',
|
package/lib/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/lib/multicall.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as ethers from 'ethers';
|
|
2
1
|
import { ContractBase, Func } from './abi.support';
|
|
3
2
|
type AnyFunc = Func<any, {}, any>;
|
|
4
3
|
type Call = [address: string, bytes: string];
|
|
@@ -12,7 +11,7 @@ export type MulticallResult<T> = {
|
|
|
12
11
|
};
|
|
13
12
|
export declare class Multicall extends ContractBase {
|
|
14
13
|
static aggregate: Func<[calls: Call[]], {}, {
|
|
15
|
-
blockNumber:
|
|
14
|
+
blockNumber: bigint;
|
|
16
15
|
returnData: string[];
|
|
17
16
|
}>;
|
|
18
17
|
static try_aggregate: Func<[requireSuccess: boolean, calls: [target: string, callData: string][]], {}, {
|
package/lib/multicall.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"
|
|
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"}
|
package/lib/multicall.js
CHANGED
|
@@ -26,7 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.Multicall = void 0;
|
|
27
27
|
const ethers = __importStar(require("ethers"));
|
|
28
28
|
const abi_support_1 = require("./abi.support");
|
|
29
|
-
const abi = new ethers.
|
|
29
|
+
const abi = new ethers.Interface([
|
|
30
30
|
{
|
|
31
31
|
type: 'function',
|
|
32
32
|
name: 'aggregate',
|
|
@@ -73,8 +73,8 @@ const abi = new ethers.utils.Interface([
|
|
|
73
73
|
]
|
|
74
74
|
}
|
|
75
75
|
]);
|
|
76
|
-
const aggregate = new abi_support_1.Func(abi, abi.
|
|
77
|
-
const try_aggregate = new abi_support_1.Func(abi, abi.
|
|
76
|
+
const aggregate = new abi_support_1.Func(abi, abi.getFunction('aggregate').selector);
|
|
77
|
+
const try_aggregate = new abi_support_1.Func(abi, abi.getFunction('tryAggregate').selector);
|
|
78
78
|
class Multicall extends abi_support_1.ContractBase {
|
|
79
79
|
async aggregate(...args) {
|
|
80
80
|
let [calls, funcs, page] = this.makeCalls(args);
|
package/lib/multicall.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multicall.js","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAgC;AAChC,+CAAgD;AAGhD,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"multicall.js","sourceRoot":"","sources":["../src/multicall.ts"],"names":[],"mappings":"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"}
|
package/lib/typegen.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as ethers from 'ethers';
|
|
2
2
|
import { Logger } from '@subsquid/logger';
|
|
3
3
|
import { OutDir } from '@subsquid/util-internal-code-printer';
|
|
4
4
|
export declare class Typegen {
|
|
@@ -7,7 +7,7 @@ export declare class Typegen {
|
|
|
7
7
|
private basename;
|
|
8
8
|
private log;
|
|
9
9
|
private out;
|
|
10
|
-
constructor(dest: OutDir, abi: Interface, basename: string, log: Logger);
|
|
10
|
+
constructor(dest: OutDir, abi: ethers.Interface, basename: string, log: Logger);
|
|
11
11
|
generate(): void;
|
|
12
12
|
private writeAbi;
|
|
13
13
|
private generateEvents;
|
|
@@ -18,5 +18,7 @@ export declare class Typegen {
|
|
|
18
18
|
private getOverloads;
|
|
19
19
|
private functionOverloads;
|
|
20
20
|
private eventOverloads;
|
|
21
|
+
private getFunctions;
|
|
22
|
+
private getEvents;
|
|
21
23
|
}
|
|
22
24
|
//# sourceMappingURL=typegen.d.ts.map
|
package/lib/typegen.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typegen.d.ts","sourceRoot":"","sources":["../src/typegen.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"typegen.d.ts","sourceRoot":"","sources":["../src/typegen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAEvC,OAAO,EAAa,MAAM,EAAC,MAAM,sCAAsC,CAAA;AAIvE,qBAAa,OAAO;IAGJ,OAAO,CAAC,IAAI;IAAU,OAAO,CAAC,GAAG;IAAoB,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,GAAG;IAFtG,OAAO,CAAC,GAAG,CAAY;gBAEH,IAAI,EAAE,MAAM,EAAU,GAAG,EAAE,MAAM,CAAC,SAAS,EAAU,QAAQ,EAAE,MAAM,EAAU,GAAG,EAAE,MAAM;IAI9G,QAAQ,IAAI,IAAI;IAgBhB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,SAAS;CAGpB"}
|
package/lib/typegen.js
CHANGED
|
@@ -1,16 +1,39 @@
|
|
|
1
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
|
+
});
|
|
2
18
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
19
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
20
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
21
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
22
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
23
|
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
+
if (mod && mod.__esModule) return mod;
|
|
26
|
+
var result = {};
|
|
27
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
__setModuleDefault(result, mod);
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
8
31
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
32
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
33
|
};
|
|
11
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
35
|
exports.Typegen = void 0;
|
|
13
|
-
const
|
|
36
|
+
const ethers = __importStar(require("ethers"));
|
|
14
37
|
const util_internal_1 = require("@subsquid/util-internal");
|
|
15
38
|
const types_1 = require("./util/types");
|
|
16
39
|
class Typegen {
|
|
@@ -26,7 +49,7 @@ class Typegen {
|
|
|
26
49
|
this.out.line("import {LogEvent, Func, ContractBase} from './abi.support'");
|
|
27
50
|
this.out.line(`import {ABI_JSON} from './${this.basename}.abi'`);
|
|
28
51
|
this.out.line();
|
|
29
|
-
this.out.line("export const abi = new ethers.
|
|
52
|
+
this.out.line("export const abi = new ethers.Interface(ABI_JSON);");
|
|
30
53
|
this.generateEvents();
|
|
31
54
|
this.generateFunctions();
|
|
32
55
|
this.generateContract();
|
|
@@ -36,39 +59,38 @@ class Typegen {
|
|
|
36
59
|
}
|
|
37
60
|
writeAbi() {
|
|
38
61
|
let out = this.dest.file(this.basename + '.abi.ts');
|
|
39
|
-
let json = this.abi.
|
|
62
|
+
let json = this.abi.formatJson();
|
|
40
63
|
json = JSON.stringify(JSON.parse(json), null, 4);
|
|
41
64
|
out.line(`export const ABI_JSON = ${json}`);
|
|
42
65
|
out.write();
|
|
43
66
|
this.log.info(`saved ${out.file}`);
|
|
44
67
|
}
|
|
45
68
|
generateEvents() {
|
|
46
|
-
let events =
|
|
69
|
+
let events = this.getEvents();
|
|
47
70
|
if (events.length == 0) {
|
|
48
71
|
return;
|
|
49
72
|
}
|
|
50
73
|
this.out.line();
|
|
51
74
|
this.out.block(`export const events =`, () => {
|
|
52
75
|
for (let e of events) {
|
|
53
|
-
let topic = this.abi.getEventTopic(e);
|
|
54
76
|
this.out.line(`${this.getPropName(e)}: new LogEvent<${(0, types_1.getFullTupleType)(e.inputs)}>(`);
|
|
55
|
-
this.out.indentation(() => this.out.line(`abi, '${
|
|
77
|
+
this.out.indentation(() => this.out.line(`abi, '${e.topicHash}'`));
|
|
56
78
|
this.out.line('),');
|
|
57
79
|
}
|
|
58
80
|
});
|
|
59
81
|
}
|
|
60
82
|
generateFunctions() {
|
|
61
|
-
let functions =
|
|
83
|
+
let functions = this.getFunctions();
|
|
62
84
|
if (functions.length == 0) {
|
|
63
85
|
return;
|
|
64
86
|
}
|
|
65
87
|
this.out.line();
|
|
66
88
|
this.out.block(`export const functions =`, () => {
|
|
67
89
|
for (let f of functions) {
|
|
68
|
-
let sighash =
|
|
90
|
+
let sighash = f.selector;
|
|
69
91
|
let pArgs = (0, types_1.getTupleType)(f.inputs);
|
|
70
92
|
let pArgStruct = (0, types_1.getStructType)(f.inputs);
|
|
71
|
-
let pResult = (0, types_1.getReturnType)(f.outputs
|
|
93
|
+
let pResult = (0, types_1.getReturnType)(f.outputs);
|
|
72
94
|
this.out.line(`${this.getPropName(f)}: new Func<${pArgs}, ${pArgStruct}, ${pResult}>(`);
|
|
73
95
|
this.out.indentation(() => this.out.line(`abi, '${sighash}'`));
|
|
74
96
|
this.out.line('),');
|
|
@@ -78,7 +100,7 @@ class Typegen {
|
|
|
78
100
|
generateContract() {
|
|
79
101
|
this.out.line();
|
|
80
102
|
this.out.block(`export class Contract extends ContractBase`, () => {
|
|
81
|
-
let functions =
|
|
103
|
+
let functions = this.getFunctions();
|
|
82
104
|
for (let f of functions) {
|
|
83
105
|
if (f.constant && f.outputs?.length) {
|
|
84
106
|
this.out.line();
|
|
@@ -109,7 +131,7 @@ class Typegen {
|
|
|
109
131
|
}
|
|
110
132
|
}
|
|
111
133
|
getOverloads(item) {
|
|
112
|
-
if (item instanceof
|
|
134
|
+
if (item instanceof ethers.EventFragment) {
|
|
113
135
|
return this.eventOverloads()[item.name];
|
|
114
136
|
}
|
|
115
137
|
else {
|
|
@@ -118,18 +140,24 @@ class Typegen {
|
|
|
118
140
|
}
|
|
119
141
|
functionOverloads() {
|
|
120
142
|
let overloads = {};
|
|
121
|
-
for (let item of
|
|
143
|
+
for (let item of this.getFunctions()) {
|
|
122
144
|
overloads[item.name] = (overloads[item.name] || 0) + 1;
|
|
123
145
|
}
|
|
124
146
|
return overloads;
|
|
125
147
|
}
|
|
126
148
|
eventOverloads() {
|
|
127
149
|
let overloads = {};
|
|
128
|
-
for (let item of
|
|
150
|
+
for (let item of this.getEvents()) {
|
|
129
151
|
overloads[item.name] = (overloads[item.name] || 0) + 1;
|
|
130
152
|
}
|
|
131
153
|
return overloads;
|
|
132
154
|
}
|
|
155
|
+
getFunctions() {
|
|
156
|
+
return this.abi.fragments.filter(f => f.type === 'function');
|
|
157
|
+
}
|
|
158
|
+
getEvents() {
|
|
159
|
+
return this.abi.fragments.filter(f => f.type === 'event');
|
|
160
|
+
}
|
|
133
161
|
}
|
|
134
162
|
__decorate([
|
|
135
163
|
util_internal_1.def,
|
|
@@ -143,5 +171,17 @@ __decorate([
|
|
|
143
171
|
__metadata("design:paramtypes", []),
|
|
144
172
|
__metadata("design:returntype", Object)
|
|
145
173
|
], Typegen.prototype, "eventOverloads", null);
|
|
174
|
+
__decorate([
|
|
175
|
+
util_internal_1.def,
|
|
176
|
+
__metadata("design:type", Function),
|
|
177
|
+
__metadata("design:paramtypes", []),
|
|
178
|
+
__metadata("design:returntype", Array)
|
|
179
|
+
], Typegen.prototype, "getFunctions", null);
|
|
180
|
+
__decorate([
|
|
181
|
+
util_internal_1.def,
|
|
182
|
+
__metadata("design:type", Function),
|
|
183
|
+
__metadata("design:paramtypes", []),
|
|
184
|
+
__metadata("design:returntype", Array)
|
|
185
|
+
], Typegen.prototype, "getEvents", null);
|
|
146
186
|
exports.Typegen = Typegen;
|
|
147
187
|
//# sourceMappingURL=typegen.js.map
|
package/lib/typegen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typegen.js","sourceRoot":"","sources":["../src/typegen.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"typegen.js","sourceRoot":"","sources":["../src/typegen.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAgC;AAEhC,2DAA2C;AAE3C,wCAAkG;AAGlG,MAAa,OAAO;IAGhB,YAAoB,IAAY,EAAU,GAAqB,EAAU,QAAgB,EAAU,GAAW;QAA1F,SAAI,GAAJ,IAAI,CAAQ;QAAU,QAAG,GAAH,GAAG,CAAkB;QAAU,aAAQ,GAAR,QAAQ,CAAQ;QAAU,QAAG,GAAH,GAAG,CAAQ;QAC1G,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAA;IAC1C,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;QACjD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;QAC3E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,QAAQ,OAAO,CAAC,CAAA;QAChE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;QAEnE,IAAI,CAAC,cAAc,EAAE,CAAA;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAEvB,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;QAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3C,CAAC;IAEO,QAAQ;QACZ,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;QACnD,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAA;QAChC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAChD,GAAG,CAAC,IAAI,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAA;QAC3C,GAAG,CAAC,KAAK,EAAE,CAAA;QACX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IACtC,CAAC;IAEO,cAAc;QAClB,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC7B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YACpB,OAAM;SACT;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACzC,KAAK,IAAI,CAAC,IAAI,MAAM,EAAE;gBAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,IAAA,wBAAgB,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBACrF,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;gBAClE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACtB;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,iBAAiB;QACrB,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;QACnC,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;YACvB,OAAM;SACT;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAC5C,KAAK,IAAI,CAAC,IAAI,SAAS,EAAE;gBACrB,IAAI,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAA;gBACxB,IAAI,KAAK,GAAG,IAAA,oBAAY,EAAC,CAAC,CAAC,MAAM,CAAC,CAAA;gBAClC,IAAI,UAAU,GAAG,IAAA,qBAAa,EAAC,CAAC,CAAC,MAAM,CAAC,CAAA;gBACxC,IAAI,OAAO,GAAG,IAAA,qBAAa,EAAC,CAAC,CAAC,OAAO,CAAC,CAAA;gBACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,KAAK,KAAK,UAAU,KAAK,OAAO,IAAI,CAAC,CAAA;gBACvF,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,GAAG,CAAC,CAAC,CAAA;gBAC9D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACtB;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,gBAAgB;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,EAAE;YAC9D,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;YACnC,KAAK,IAAI,CAAC,IAAI,SAAS,EAAE;gBACrB,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE;oBACjC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;oBACf,IAAI,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC,CAAA;oBAC9D,IAAI,IAAI,GAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAA,eAAO,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBAClF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,cAAc,IAAA,qBAAa,EAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE;wBACzF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBAC/F,CAAC,CAAC,CAAA;iBACL;aACJ;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,MAAM,CAAC,IAAoD;QAC/D,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAChC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;YACf,OAAO,IAAI,GAAG,GAAG,CAAA;SACpB;aAAM;YACH,OAAO,GAAG,GAAG,GAAG,CAAA;SACnB;IACL,CAAC;IAEO,WAAW,CAAC,IAAoD;QACpE,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC,IAAI,CAAA;SACnB;aAAM;YACH,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAA;SACvC;IACL,CAAC;IAEO,YAAY,CAAC,IAAoD;QACrE,IAAI,IAAI,YAAY,MAAM,CAAC,aAAa,EAAE;YACtC,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;SAC1C;aAAM;YACH,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;SAC7C;IACL,CAAC;IAGO,iBAAiB;QACrB,IAAI,SAAS,GAA2B,EAAE,CAAA;QAC1C,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YAClC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;SACzD;QACD,OAAO,SAAS,CAAA;IACpB,CAAC;IAGO,cAAc;QAClB,IAAI,SAAS,GAA2B,EAAE,CAAA;QAC1C,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAC/B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;SACzD;QACD,OAAO,SAAS,CAAA;IACpB,CAAC;IAGO,YAAY;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAA8B,CAAA;IAC7F,CAAC;IAGO,SAAS;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAA2B,CAAA;IACvF,CAAC;CACJ;AA3BG;IAAC,mBAAG;;;;gDAOH;AAED;IAAC,mBAAG;;;;6CAOH;AAED;IAAC,mBAAG;;;;2CAGH;AAED;IAAC,mBAAG;;;;wCAGH;AAtIL,0BAuIC"}
|
package/lib/util/fetch.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GET = void 0;
|
|
4
4
|
const logger_1 = require("@subsquid/logger");
|
|
5
|
-
const
|
|
6
|
-
const http = new
|
|
5
|
+
const http_client_1 = require("@subsquid/http-client");
|
|
6
|
+
const http = new http_client_1.HttpClient({
|
|
7
7
|
log: (0, logger_1.createLogger)('sqd:evm-typegen:fetch'),
|
|
8
8
|
retryAttempts: 3
|
|
9
9
|
});
|
package/lib/util/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/util/fetch.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/util/fetch.ts"],"names":[],"mappings":";;;AAAA,6CAA6C;AAC7C,uDAAgD;AAGhD,MAAM,IAAI,GAAG,IAAI,wBAAU,CAAC;IACxB,GAAG,EAAE,IAAA,qBAAY,EAAC,uBAAuB,CAAC;IAC1C,aAAa,EAAE,CAAC;CACnB,CAAC,CAAA;AAGF,SAAgB,GAAG,CAAQ,GAAW;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAFD,kBAEC"}
|
package/lib/util/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { ParamType } from '
|
|
1
|
+
import type { ParamType } from 'ethers';
|
|
2
2
|
export declare function getType(param: ParamType): string;
|
|
3
|
-
export declare function getFullTupleType(params: ParamType
|
|
4
|
-
export declare function getTupleType(params: ParamType
|
|
5
|
-
export declare function getStructType(params: ParamType
|
|
6
|
-
export declare function getReturnType(outputs: ParamType
|
|
3
|
+
export declare function getFullTupleType(params: ReadonlyArray<ParamType>): string;
|
|
4
|
+
export declare function getTupleType(params: ReadonlyArray<ParamType>): string;
|
|
5
|
+
export declare function getStructType(params: ReadonlyArray<ParamType>): string;
|
|
6
|
+
export declare function getReturnType(outputs: ReadonlyArray<ParamType>): string;
|
|
7
7
|
//# sourceMappingURL=types.d.ts.map
|
package/lib/util/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/util/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/util/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,QAAQ,CAAA;AAIrC,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CA6BhD;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,CAQzE;AAGD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,CAIrE;AAID,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM,CAUtE;AAGD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,UAE9D"}
|
package/lib/util/types.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.getReturnType = exports.getStructType = exports.getTupleType = exports.getFullTupleType = exports.getType = void 0;
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
4
8
|
// taken from: https://github.com/ethers-io/ethers.js/blob/948f77050dae884fe88932fd88af75560aac9d78/packages/cli/src.ts/typescript.ts#L10
|
|
5
9
|
function getType(param) {
|
|
6
10
|
if (param.baseType === 'array') {
|
|
11
|
+
(0, assert_1.default)(param.arrayChildren != null, 'Missing children for array type');
|
|
7
12
|
return 'Array<' + getType(param.arrayChildren) + '>';
|
|
8
13
|
}
|
|
9
14
|
if (param.baseType === 'tuple') {
|
|
15
|
+
(0, assert_1.default)(param.components != null, 'Missing components for tuple type');
|
|
10
16
|
return getFullTupleType(param.components);
|
|
11
17
|
}
|
|
12
18
|
if (param.type === 'address' || param.type === 'string') {
|
|
@@ -17,7 +23,7 @@ function getType(param) {
|
|
|
17
23
|
}
|
|
18
24
|
let match = param.type.match(/^(u?int)([0-9]+)$/);
|
|
19
25
|
if (match) {
|
|
20
|
-
return parseInt(match[2]) < 53 ? 'number' : '
|
|
26
|
+
return parseInt(match[2]) < 53 ? 'number' : 'bigint';
|
|
21
27
|
}
|
|
22
28
|
if (param.type.substring(0, 5) === 'bytes') {
|
|
23
29
|
return 'string';
|
|
@@ -42,7 +48,7 @@ function getTupleType(params) {
|
|
|
42
48
|
}).join(', ') + ']';
|
|
43
49
|
}
|
|
44
50
|
exports.getTupleType = getTupleType;
|
|
45
|
-
// https://github.com/ethers-io/ethers.js/blob/
|
|
51
|
+
// https://github.com/ethers-io/ethers.js/blob/278f84174409b470fa7992e1f8b5693e6e5d2dac/src.ts/abi/coders/tuple.ts#L36
|
|
46
52
|
function getStructType(params) {
|
|
47
53
|
let array = [];
|
|
48
54
|
let counts = {};
|
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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@subsquid/evm-typegen",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.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,18 +16,19 @@
|
|
|
16
16
|
"squid-evm-typegen": "bin/run.js"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@
|
|
20
|
-
"@
|
|
21
|
-
"@subsquid/
|
|
22
|
-
"@subsquid/util-internal": "^1.
|
|
23
|
-
"@subsquid/util-internal-
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
"@subsquid/http-client": "^1.0.0",
|
|
20
|
+
"@subsquid/logger": "^1.0.0",
|
|
21
|
+
"@subsquid/util-internal": "^2.0.0",
|
|
22
|
+
"@subsquid/util-internal-code-printer": "^1.0.0",
|
|
23
|
+
"@subsquid/util-internal-commander": "^1.0.0",
|
|
24
|
+
"commander": "^10.0.1"
|
|
25
|
+
},
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"ethers": "^6.3.0"
|
|
27
28
|
},
|
|
28
29
|
"devDependencies": {
|
|
29
|
-
"@types/node": "^16.18.
|
|
30
|
-
"ethers": "^
|
|
30
|
+
"@types/node": "^16.18.25",
|
|
31
|
+
"ethers": "^6.3.0",
|
|
31
32
|
"typescript": "~4.9.5"
|
|
32
33
|
},
|
|
33
34
|
"scripts": {
|
package/src/abi.support.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import assert from 'assert'
|
|
1
2
|
import * as ethers from 'ethers'
|
|
2
3
|
|
|
3
4
|
|
|
@@ -8,10 +9,12 @@ export interface LogRecord {
|
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
export class LogEvent<Args> {
|
|
11
|
-
private fragment: ethers.
|
|
12
|
+
private fragment: ethers.EventFragment
|
|
12
13
|
|
|
13
|
-
constructor(private abi: ethers.
|
|
14
|
-
|
|
14
|
+
constructor(private abi: ethers.Interface, public readonly topic: string) {
|
|
15
|
+
let fragment = abi.getEvent(topic)
|
|
16
|
+
assert(fragment != null, 'Missing fragment')
|
|
17
|
+
this.fragment = fragment
|
|
15
18
|
}
|
|
16
19
|
|
|
17
20
|
decode(rec: LogRecord): Args {
|
|
@@ -21,13 +24,15 @@ export class LogEvent<Args> {
|
|
|
21
24
|
|
|
22
25
|
|
|
23
26
|
export class Func<Args extends any[], FieldArgs, Result> {
|
|
24
|
-
private fragment: ethers.
|
|
27
|
+
private fragment: ethers.FunctionFragment
|
|
25
28
|
|
|
26
|
-
constructor(private abi: ethers.
|
|
27
|
-
|
|
29
|
+
constructor(private abi: ethers.Interface, public readonly sighash: string) {
|
|
30
|
+
let fragment = abi.getFunction(sighash)
|
|
31
|
+
assert(fragment != null, 'Missing fragment')
|
|
32
|
+
this.fragment = fragment
|
|
28
33
|
}
|
|
29
34
|
|
|
30
|
-
decode(input: ethers.
|
|
35
|
+
decode(input: ethers.BytesLike): Args & FieldArgs {
|
|
31
36
|
return this.abi.decodeFunctionData(this.fragment, input) as any as Args & FieldArgs
|
|
32
37
|
}
|
|
33
38
|
|
|
@@ -35,12 +40,12 @@ export class Func<Args extends any[], FieldArgs, Result> {
|
|
|
35
40
|
return this.abi.encodeFunctionData(this.fragment, args)
|
|
36
41
|
}
|
|
37
42
|
|
|
38
|
-
decodeResult(output: ethers.
|
|
43
|
+
decodeResult(output: ethers.BytesLike): Result {
|
|
39
44
|
const decoded = this.abi.decodeFunctionResult(this.fragment, output)
|
|
40
45
|
return decoded.length > 1 ? decoded : decoded[0]
|
|
41
46
|
}
|
|
42
47
|
|
|
43
|
-
tryDecodeResult(output: ethers.
|
|
48
|
+
tryDecodeResult(output: ethers.BytesLike): Result | undefined {
|
|
44
49
|
try {
|
|
45
50
|
return this.decodeResult(output)
|
|
46
51
|
} catch(err: any) {
|
|
@@ -94,13 +99,13 @@ export class ContractBase {
|
|
|
94
99
|
this._chain = ctx._chain
|
|
95
100
|
if (typeof blockOrAddress === 'string') {
|
|
96
101
|
this.blockHeight = ctx.block.height
|
|
97
|
-
this.address = ethers.
|
|
102
|
+
this.address = ethers.getAddress(blockOrAddress)
|
|
98
103
|
} else {
|
|
99
104
|
if (address == null) {
|
|
100
105
|
throw new Error('missing contract address')
|
|
101
106
|
}
|
|
102
107
|
this.blockHeight = blockOrAddress.height
|
|
103
|
-
this.address = ethers.
|
|
108
|
+
this.address = ethers.getAddress(address)
|
|
104
109
|
}
|
|
105
110
|
}
|
|
106
111
|
|
package/src/main.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import * as fs from 'fs'
|
|
2
|
+
import * as ethers from 'ethers'
|
|
3
|
+
import path from 'path'
|
|
4
|
+
import {InvalidArgumentError, program} from 'commander'
|
|
3
5
|
import {createLogger} from '@subsquid/logger'
|
|
4
6
|
import {runProgram, wait} from '@subsquid/util-internal'
|
|
5
7
|
import {OutDir} from '@subsquid/util-internal-code-printer'
|
|
6
8
|
import * as validator from '@subsquid/util-internal-commander'
|
|
7
|
-
import {InvalidArgumentError, program} from 'commander'
|
|
8
|
-
import * as fs from 'fs'
|
|
9
|
-
import path from 'path'
|
|
10
9
|
import {Typegen} from './typegen'
|
|
11
10
|
import {GET} from './util/fetch'
|
|
12
11
|
|
|
@@ -88,7 +87,7 @@ squid-evm-typegen src/abi 0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413#contract
|
|
|
88
87
|
for (let spec of specs) {
|
|
89
88
|
LOG.info(`processing ${spec.src}`)
|
|
90
89
|
let abi_json = await read(spec, opts)
|
|
91
|
-
let abi = new Interface(abi_json)
|
|
90
|
+
let abi = new ethers.Interface(abi_json)
|
|
92
91
|
new Typegen(dest, abi, spec.name, LOG).generate()
|
|
93
92
|
}
|
|
94
93
|
}, err => LOG.fatal(err))
|
|
@@ -160,7 +159,7 @@ function specArgument(value: string, prev?: Spec[]): Spec[] {
|
|
|
160
159
|
function parseSpec(spec: string): Spec {
|
|
161
160
|
let [src, fragment] = splitFragment(spec)
|
|
162
161
|
if (src.startsWith('0x')) {
|
|
163
|
-
if (!isAddress(src)) throw new InvalidArgumentError('Invalid contract address')
|
|
162
|
+
if (!ethers.isAddress(src)) throw new InvalidArgumentError('Invalid contract address')
|
|
164
163
|
return {
|
|
165
164
|
kind: 'address',
|
|
166
165
|
src,
|
package/src/multicall.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as ethers from 'ethers'
|
|
|
2
2
|
import {ContractBase, Func} from './abi.support'
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
const abi = new ethers.
|
|
5
|
+
const abi = new ethers.Interface([
|
|
6
6
|
{
|
|
7
7
|
type: 'function',
|
|
8
8
|
name: 'aggregate',
|
|
@@ -55,13 +55,13 @@ type AnyFunc = Func<any, {}, any>
|
|
|
55
55
|
type Call = [address: string, bytes: string]
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
const aggregate = new Func<[calls: Call[]], {}, {blockNumber:
|
|
59
|
-
abi, abi.
|
|
58
|
+
const aggregate = new Func<[calls: Call[]], {}, {blockNumber: bigint, returnData: string[]}>(
|
|
59
|
+
abi, abi.getFunction('aggregate')!.selector
|
|
60
60
|
)
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
const try_aggregate = new Func<[requireSuccess: boolean, calls: Array<[target: string, callData: string]>], {}, Array<{success: boolean, returnData: string}>>(
|
|
64
|
-
abi, abi.
|
|
64
|
+
abi, abi.getFunction('tryAggregate')!.selector
|
|
65
65
|
)
|
|
66
66
|
|
|
67
67
|
|
package/src/typegen.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as ethers from 'ethers'
|
|
2
2
|
import {Logger} from '@subsquid/logger'
|
|
3
3
|
import {def} from '@subsquid/util-internal'
|
|
4
4
|
import {FileOutput, OutDir} from '@subsquid/util-internal-code-printer'
|
|
@@ -8,7 +8,7 @@ import {getFullTupleType, getReturnType, getStructType, getTupleType, getType} f
|
|
|
8
8
|
export class Typegen {
|
|
9
9
|
private out: FileOutput
|
|
10
10
|
|
|
11
|
-
constructor(private dest: OutDir, private abi: Interface, private basename: string, private log: Logger) {
|
|
11
|
+
constructor(private dest: OutDir, private abi: ethers.Interface, private basename: string, private log: Logger) {
|
|
12
12
|
this.out = dest.file(basename + '.ts')
|
|
13
13
|
}
|
|
14
14
|
|
|
@@ -17,7 +17,7 @@ export class Typegen {
|
|
|
17
17
|
this.out.line("import {LogEvent, Func, ContractBase} from './abi.support'")
|
|
18
18
|
this.out.line(`import {ABI_JSON} from './${this.basename}.abi'`)
|
|
19
19
|
this.out.line()
|
|
20
|
-
this.out.line("export const abi = new ethers.
|
|
20
|
+
this.out.line("export const abi = new ethers.Interface(ABI_JSON);")
|
|
21
21
|
|
|
22
22
|
this.generateEvents()
|
|
23
23
|
this.generateFunctions()
|
|
@@ -30,7 +30,7 @@ export class Typegen {
|
|
|
30
30
|
|
|
31
31
|
private writeAbi() {
|
|
32
32
|
let out = this.dest.file(this.basename + '.abi.ts')
|
|
33
|
-
let json = this.abi.
|
|
33
|
+
let json = this.abi.formatJson()
|
|
34
34
|
json = JSON.stringify(JSON.parse(json), null, 4)
|
|
35
35
|
out.line(`export const ABI_JSON = ${json}`)
|
|
36
36
|
out.write()
|
|
@@ -38,33 +38,32 @@ export class Typegen {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
private generateEvents() {
|
|
41
|
-
let events =
|
|
41
|
+
let events = this.getEvents()
|
|
42
42
|
if (events.length == 0) {
|
|
43
43
|
return
|
|
44
44
|
}
|
|
45
45
|
this.out.line()
|
|
46
46
|
this.out.block(`export const events =`, () => {
|
|
47
47
|
for (let e of events) {
|
|
48
|
-
let topic = this.abi.getEventTopic(e)
|
|
49
48
|
this.out.line(`${this.getPropName(e)}: new LogEvent<${getFullTupleType(e.inputs)}>(`)
|
|
50
|
-
this.out.indentation(() => this.out.line(`abi, '${
|
|
49
|
+
this.out.indentation(() => this.out.line(`abi, '${e.topicHash}'`))
|
|
51
50
|
this.out.line('),')
|
|
52
51
|
}
|
|
53
52
|
})
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
private generateFunctions() {
|
|
57
|
-
let functions =
|
|
56
|
+
let functions = this.getFunctions()
|
|
58
57
|
if (functions.length == 0) {
|
|
59
58
|
return
|
|
60
59
|
}
|
|
61
60
|
this.out.line()
|
|
62
61
|
this.out.block(`export const functions =`, () => {
|
|
63
62
|
for (let f of functions) {
|
|
64
|
-
let sighash =
|
|
63
|
+
let sighash = f.selector
|
|
65
64
|
let pArgs = getTupleType(f.inputs)
|
|
66
65
|
let pArgStruct = getStructType(f.inputs)
|
|
67
|
-
let pResult = getReturnType(f.outputs
|
|
66
|
+
let pResult = getReturnType(f.outputs)
|
|
68
67
|
this.out.line(`${this.getPropName(f)}: new Func<${pArgs}, ${pArgStruct}, ${pResult}>(`)
|
|
69
68
|
this.out.indentation(() => this.out.line(`abi, '${sighash}'`))
|
|
70
69
|
this.out.line('),')
|
|
@@ -75,7 +74,7 @@ export class Typegen {
|
|
|
75
74
|
private generateContract() {
|
|
76
75
|
this.out.line()
|
|
77
76
|
this.out.block(`export class Contract extends ContractBase`, () => {
|
|
78
|
-
let functions =
|
|
77
|
+
let functions = this.getFunctions()
|
|
79
78
|
for (let f of functions) {
|
|
80
79
|
if (f.constant && f.outputs?.length) {
|
|
81
80
|
this.out.line()
|
|
@@ -89,7 +88,7 @@ export class Typegen {
|
|
|
89
88
|
})
|
|
90
89
|
}
|
|
91
90
|
|
|
92
|
-
private getRef(item: EventFragment | FunctionFragment): string {
|
|
91
|
+
private getRef(item: ethers.EventFragment | ethers.FunctionFragment): string {
|
|
93
92
|
let key = this.getPropName(item)
|
|
94
93
|
if (key[0] == "'") {
|
|
95
94
|
return `[${key}]`
|
|
@@ -98,7 +97,7 @@ export class Typegen {
|
|
|
98
97
|
}
|
|
99
98
|
}
|
|
100
99
|
|
|
101
|
-
private getPropName(item: EventFragment | FunctionFragment): string {
|
|
100
|
+
private getPropName(item: ethers.EventFragment | ethers.FunctionFragment): string {
|
|
102
101
|
if (this.getOverloads(item) == 1) {
|
|
103
102
|
return item.name
|
|
104
103
|
} else {
|
|
@@ -106,8 +105,8 @@ export class Typegen {
|
|
|
106
105
|
}
|
|
107
106
|
}
|
|
108
107
|
|
|
109
|
-
private getOverloads(item: EventFragment | FunctionFragment): number {
|
|
110
|
-
if (item instanceof EventFragment) {
|
|
108
|
+
private getOverloads(item: ethers.EventFragment | ethers.FunctionFragment): number {
|
|
109
|
+
if (item instanceof ethers.EventFragment) {
|
|
111
110
|
return this.eventOverloads()[item.name]
|
|
112
111
|
} else {
|
|
113
112
|
return this.functionOverloads()[item.name]
|
|
@@ -117,7 +116,7 @@ export class Typegen {
|
|
|
117
116
|
@def
|
|
118
117
|
private functionOverloads(): Record<string, number> {
|
|
119
118
|
let overloads: Record<string, number> = {}
|
|
120
|
-
for (let item of
|
|
119
|
+
for (let item of this.getFunctions()) {
|
|
121
120
|
overloads[item.name] = (overloads[item.name] || 0) + 1
|
|
122
121
|
}
|
|
123
122
|
return overloads
|
|
@@ -126,9 +125,19 @@ export class Typegen {
|
|
|
126
125
|
@def
|
|
127
126
|
private eventOverloads(): Record<string, number> {
|
|
128
127
|
let overloads: Record<string, number> = {}
|
|
129
|
-
for (let item of
|
|
128
|
+
for (let item of this.getEvents()) {
|
|
130
129
|
overloads[item.name] = (overloads[item.name] || 0) + 1
|
|
131
130
|
}
|
|
132
131
|
return overloads
|
|
133
132
|
}
|
|
133
|
+
|
|
134
|
+
@def
|
|
135
|
+
private getFunctions(): ethers.FunctionFragment[] {
|
|
136
|
+
return this.abi.fragments.filter(f => f.type === 'function') as ethers.FunctionFragment[]
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@def
|
|
140
|
+
private getEvents(): ethers.EventFragment[] {
|
|
141
|
+
return this.abi.fragments.filter(f => f.type === 'event') as ethers.EventFragment[]
|
|
142
|
+
}
|
|
134
143
|
}
|
package/src/util/fetch.ts
CHANGED
package/src/util/types.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import assert from 'assert'
|
|
2
|
+
import type {ParamType} from 'ethers'
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
// taken from: https://github.com/ethers-io/ethers.js/blob/948f77050dae884fe88932fd88af75560aac9d78/packages/cli/src.ts/typescript.ts#L10
|
|
5
6
|
export function getType(param: ParamType): string {
|
|
6
7
|
if (param.baseType === 'array') {
|
|
8
|
+
assert(param.arrayChildren != null, 'Missing children for array type')
|
|
7
9
|
return 'Array<' + getType(param.arrayChildren) + '>'
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
if (param.baseType === 'tuple') {
|
|
13
|
+
assert(param.components != null, 'Missing components for tuple type')
|
|
11
14
|
return getFullTupleType(param.components)
|
|
12
15
|
}
|
|
13
16
|
|
|
@@ -21,7 +24,7 @@ export function getType(param: ParamType): string {
|
|
|
21
24
|
|
|
22
25
|
let match = param.type.match(/^(u?int)([0-9]+)$/)
|
|
23
26
|
if (match) {
|
|
24
|
-
return parseInt(match[2]) < 53 ? 'number' : '
|
|
27
|
+
return parseInt(match[2]) < 53 ? 'number' : 'bigint'
|
|
25
28
|
}
|
|
26
29
|
|
|
27
30
|
if (param.type.substring(0, 5) === 'bytes') {
|
|
@@ -32,7 +35,7 @@ export function getType(param: ParamType): string {
|
|
|
32
35
|
}
|
|
33
36
|
|
|
34
37
|
|
|
35
|
-
export function getFullTupleType(params: ParamType
|
|
38
|
+
export function getFullTupleType(params: ReadonlyArray<ParamType>): string {
|
|
36
39
|
let tuple = getTupleType(params)
|
|
37
40
|
let struct = getStructType(params)
|
|
38
41
|
if (struct == '{}') {
|
|
@@ -43,15 +46,15 @@ export function getFullTupleType(params: ParamType[]): string {
|
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
|
|
46
|
-
export function getTupleType(params: ParamType
|
|
49
|
+
export function getTupleType(params: ReadonlyArray<ParamType>): string {
|
|
47
50
|
return '[' + params.map(p => {
|
|
48
51
|
return p.name ? `${p.name}: ${getType(p)}` : `_: ${getType(p)}`
|
|
49
52
|
}).join(', ') + ']'
|
|
50
53
|
}
|
|
51
54
|
|
|
52
55
|
|
|
53
|
-
// https://github.com/ethers-io/ethers.js/blob/
|
|
54
|
-
export function getStructType(params: ParamType
|
|
56
|
+
// https://github.com/ethers-io/ethers.js/blob/278f84174409b470fa7992e1f8b5693e6e5d2dac/src.ts/abi/coders/tuple.ts#L36
|
|
57
|
+
export function getStructType(params: ReadonlyArray<ParamType>): string {
|
|
55
58
|
let array: any = []
|
|
56
59
|
let counts: Record<string, number> = {}
|
|
57
60
|
for (let p of params) {
|
|
@@ -64,6 +67,6 @@ export function getStructType(params: ParamType[]): string {
|
|
|
64
67
|
}
|
|
65
68
|
|
|
66
69
|
|
|
67
|
-
export function getReturnType(outputs: ParamType
|
|
70
|
+
export function getReturnType(outputs: ReadonlyArray<ParamType>) {
|
|
68
71
|
return outputs.length == 1 ? getType(outputs[0]) : getFullTupleType(outputs)
|
|
69
72
|
}
|