@subsquid/evm-codec 0.0.0 → 0.2.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/codec.d.ts +8 -5
- package/lib/codec.d.ts.map +1 -1
- package/lib/codecs/array.d.ts +10 -10
- package/lib/codecs/array.d.ts.map +1 -1
- package/lib/codecs/array.js.map +1 -1
- package/lib/codecs/primitives.d.ts +101 -52
- package/lib/codecs/primitives.d.ts.map +1 -1
- package/lib/codecs/primitives.js +81 -17
- package/lib/codecs/primitives.js.map +1 -1
- package/lib/codecs/struct.d.ts +4 -4
- package/lib/codecs/struct.d.ts.map +1 -1
- package/lib/codecs/struct.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/safeToNumber.d.ts +2 -0
- package/lib/safeToNumber.d.ts.map +1 -0
- package/lib/safeToNumber.js +11 -0
- package/lib/safeToNumber.js.map +1 -0
- package/lib/sink.d.ts +1 -0
- package/lib/sink.d.ts.map +1 -1
- package/lib/sink.js +30 -9
- package/lib/sink.js.map +1 -1
- package/package.json +7 -4
- package/src/codec.ts +9 -5
- package/src/codecs/array.ts +10 -10
- package/src/codecs/primitives.ts +116 -48
- package/src/codecs/struct.ts +6 -6
- package/src/index.ts +1 -1
- package/src/safeToNumber.ts +6 -0
- package/src/sink.ts +35 -7
package/lib/sink.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sink.d.ts","sourceRoot":"","sources":["../src/sink.ts"],"names":[],"mappings":";AAGA,qBAAa,IAAI;;IACf,OAAO,CAAC,GAAG,CAAI;IACf,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,KAAK,CAA6D;gBAC9D,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa;IAUnD,MAAM,IAAI,MAAM;IAKhB,QAAQ;IAIR,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMjC,IAAI;IAIJ,OAAO,CAAC,SAAS;IAQjB,EAAE,CAAC,GAAG,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"sink.d.ts","sourceRoot":"","sources":["../src/sink.ts"],"names":[],"mappings":";AAGA,qBAAa,IAAI;;IACf,OAAO,CAAC,GAAG,CAAI;IACf,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,KAAK,CAA6D;gBAC9D,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa;IAUnD,MAAM,IAAI,MAAM;IAKhB,QAAQ;IAIR,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAMjC,IAAI;IAIJ,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,iBAAiB;IAMzB,EAAE,CAAC,GAAG,EAAE,MAAM;IAQd,EAAE,CAAC,GAAG,EAAE,MAAM;IAKd,GAAG,CAAC,GAAG,EAAE,MAAM;IAQf,GAAG,CAAC,GAAG,EAAE,MAAM;IAKf,GAAG,CAAC,GAAG,EAAE,MAAM;IAQf,GAAG,CAAC,GAAG,EAAE,MAAM;IAKf,GAAG,CAAC,GAAG,EAAE,MAAM;IAQf,GAAG,CAAC,GAAG,EAAE,MAAM;IAUf,IAAI,CAAC,GAAG,EAAE,MAAM;IAQhB,IAAI,CAAC,GAAG,EAAE,MAAM;IAWhB,IAAI,CAAC,GAAG,EAAE,MAAM;IAOhB,IAAI,CAAC,GAAG,EAAE,MAAM;IAiBhB,KAAK,CAAC,GAAG,EAAE,UAAU;IAWrB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU;IAaxC,OAAO,CAAC,GAAG,EAAE,MAAM;IAInB,MAAM,CAAC,GAAG,EAAE,MAAM;IAWlB,IAAI,CAAC,GAAG,EAAE,OAAO;IAIjB;;;OAGG;IACH,iBAAiB,CAAC,UAAU,SAAI;IAShC,kBAAkB,CAAC,UAAU,EAAE,MAAM;IASrC,OAAO,CAAC,oBAAoB;IAIrB,2BAA2B,CAAC,MAAM,EAAE,MAAM;IAIjD,OAAO,CAAC,YAAY;IAUb,kBAAkB;CAM1B"}
|
package/lib/sink.js
CHANGED
|
@@ -7,7 +7,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
7
7
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
8
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
9
|
};
|
|
10
|
-
var _Sink_instances, _Sink_u64, _Sink_u128;
|
|
10
|
+
var _Sink_instances, _Sink_u64, _Sink_u128, _Sink_i256;
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.Sink = void 0;
|
|
13
13
|
const node_assert_1 = __importDefault(require("node:assert"));
|
|
@@ -47,60 +47,75 @@ class Sink {
|
|
|
47
47
|
this.buf = buf;
|
|
48
48
|
this.view = new DataView(this.buf.buffer, this.buf.byteOffset, this.buf.byteLength);
|
|
49
49
|
}
|
|
50
|
+
checkNumberBounds(val, min, max, typeName) {
|
|
51
|
+
if (val < min || val > max) {
|
|
52
|
+
throw new Error(`${val} is out of bounds for ${typeName}[${min}, ${max}]`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
50
55
|
u8(val) {
|
|
56
|
+
this.checkNumberBounds(val, 0n, 255n, 'uint8');
|
|
51
57
|
this.reserve(codec_1.WORD_SIZE);
|
|
52
58
|
this.pos += codec_1.WORD_SIZE - 1;
|
|
53
59
|
this.view.setUint8(this.pos, val);
|
|
54
60
|
this.pos += 1;
|
|
55
61
|
}
|
|
56
62
|
i8(val) {
|
|
57
|
-
this.
|
|
63
|
+
this.checkNumberBounds(val, -128n, 127n, 'int8');
|
|
64
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_i256).call(this, BigInt(val));
|
|
58
65
|
}
|
|
59
66
|
u16(val) {
|
|
67
|
+
this.checkNumberBounds(val, 0n, 65535n, 'uint16');
|
|
60
68
|
this.reserve(codec_1.WORD_SIZE);
|
|
61
69
|
this.pos += codec_1.WORD_SIZE - 2;
|
|
62
70
|
this.view.setUint16(this.pos, val, false);
|
|
63
71
|
this.pos += 2;
|
|
64
72
|
}
|
|
65
73
|
i16(val) {
|
|
66
|
-
this.
|
|
74
|
+
this.checkNumberBounds(val, -32768n, 32767n, 'int16');
|
|
75
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_i256).call(this, BigInt(val));
|
|
67
76
|
}
|
|
68
77
|
u32(val) {
|
|
78
|
+
this.checkNumberBounds(val, 0n, 4294967295n, 'uint32');
|
|
69
79
|
this.reserve(codec_1.WORD_SIZE);
|
|
70
80
|
this.pos += codec_1.WORD_SIZE - 4;
|
|
71
81
|
this.view.setUint32(this.pos, val, false);
|
|
72
82
|
this.pos += 4;
|
|
73
83
|
}
|
|
74
84
|
i32(val) {
|
|
75
|
-
this.
|
|
85
|
+
this.checkNumberBounds(val, -2147483648n, 2147483647n, 'int32');
|
|
86
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_i256).call(this, BigInt(val));
|
|
76
87
|
}
|
|
77
88
|
u64(val) {
|
|
89
|
+
this.checkNumberBounds(val, 0n, 18446744073709551615n, 'uint64');
|
|
78
90
|
this.reserve(codec_1.WORD_SIZE);
|
|
79
91
|
this.pos += codec_1.WORD_SIZE - 8;
|
|
80
92
|
this.view.setBigUint64(this.pos, val, false);
|
|
81
93
|
this.pos += 8;
|
|
82
94
|
}
|
|
83
95
|
i64(val) {
|
|
84
|
-
this.
|
|
96
|
+
this.checkNumberBounds(val, -9223372036854775808n, 9223372036854775807n, 'int64');
|
|
97
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_i256).call(this, val);
|
|
85
98
|
}
|
|
86
99
|
u128(val) {
|
|
100
|
+
this.checkNumberBounds(val, 0n, 340282366920938463463374607431768211455n, 'uint128');
|
|
87
101
|
this.reserve(codec_1.WORD_SIZE);
|
|
88
102
|
this.pos += codec_1.WORD_SIZE - 16;
|
|
89
103
|
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u64).call(this, val & 0xffffffffffffffffn);
|
|
90
104
|
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u64).call(this, val >> 64n);
|
|
91
105
|
}
|
|
92
106
|
i128(val) {
|
|
93
|
-
this.
|
|
107
|
+
this.checkNumberBounds(val, -170141183460469231731687303715884105728n, 170141183460469231731687303715884105727n, 'int128');
|
|
108
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_i256).call(this, val);
|
|
94
109
|
}
|
|
95
110
|
u256(val) {
|
|
111
|
+
this.checkNumberBounds(val, 0n, 115792089237316195423570985008687907853269984665640564039457584007913129639935n, 'uint256');
|
|
96
112
|
this.reserve(codec_1.WORD_SIZE);
|
|
97
113
|
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u128).call(this, val >> 128n);
|
|
98
114
|
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u128).call(this, val & (2n ** 128n - 1n));
|
|
99
115
|
}
|
|
100
116
|
i256(val) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
this.u256(val);
|
|
117
|
+
this.checkNumberBounds(val, -57896044618658097711785492504343953926634992332820282019728792003956564819968n, 57896044618658097711785492504343953926634992332820282019728792003956564819967n, 'int256');
|
|
118
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_i256).call(this, val);
|
|
104
119
|
}
|
|
105
120
|
bytes(val) {
|
|
106
121
|
const size = Buffer.byteLength(val);
|
|
@@ -190,5 +205,11 @@ _Sink_instances = new WeakSet(), _Sink_u64 = function _Sink_u64(val) {
|
|
|
190
205
|
this.reserve(codec_1.WORD_SIZE);
|
|
191
206
|
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u64).call(this, val >> 64n);
|
|
192
207
|
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u64).call(this, val & 0xffffffffffffffffn);
|
|
208
|
+
}, _Sink_i256 = function _Sink_i256(val) {
|
|
209
|
+
let base = 2n ** 256n;
|
|
210
|
+
const uval = (val + base) % base;
|
|
211
|
+
this.reserve(codec_1.WORD_SIZE);
|
|
212
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u128).call(this, uval >> 128n);
|
|
213
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u128).call(this, uval & (2n ** 128n - 1n));
|
|
193
214
|
};
|
|
194
215
|
//# sourceMappingURL=sink.js.map
|
package/lib/sink.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sink.js","sourceRoot":"","sources":["../src/sink.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8DAAgC;AAChC,mCAAmC;AAEnC,MAAa,IAAI;IAKf,YAAY,MAAc,EAAE,WAAmB,IAAI;;QAJ3C,QAAG,GAAG,CAAC,CAAA;QAGP,UAAK,GAA2D,EAAE,CAAA;QAExE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,CAAC;YACR,WAAW,EAAE,CAAC;YACd,IAAI,EAAE,MAAM,GAAG,iBAAS;SACzB,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACrF,CAAC;IAED,MAAM;QACJ,IAAA,qBAAM,EAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,2CAA2C,CAAC,CAAA;QAC5E,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,CAAC;IAED,OAAO,CAAC,UAAkB;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,UAAU,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;IAC/C,CAAC;IAEO,SAAS,CAAC,GAAW;QAC3B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACxC,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC3B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACrF,CAAC;IAED,EAAE,CAAC,GAAW;QACZ,IAAI,CAAC,OAAO,CAAC,iBAAS,CAAC,CAAA;QACvB,IAAI,CAAC,GAAG,IAAI,iBAAS,GAAG,CAAC,CAAA;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IACf,CAAC;IAED,EAAE,CAAC,GAAW;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"sink.js","sourceRoot":"","sources":["../src/sink.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@subsquid/evm-codec",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "EVM encoder/decoder tools",
|
|
5
5
|
"license": "GPL-3.0-or-later",
|
|
6
6
|
"repository": "git@github.com:subsquid/squid.git",
|
|
@@ -12,15 +12,18 @@
|
|
|
12
12
|
"lib",
|
|
13
13
|
"src"
|
|
14
14
|
],
|
|
15
|
-
"dependencies": {
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@subsquid/util-internal-hex": "^1.2.2"
|
|
17
|
+
},
|
|
16
18
|
"devDependencies": {
|
|
17
19
|
"@types/node": "^18.18.14",
|
|
18
|
-
"ethers": "^
|
|
20
|
+
"ethers": "^6.9.0",
|
|
19
21
|
"typescript": "~5.3.2",
|
|
20
22
|
"viem": "^2.8.14",
|
|
21
23
|
"vitest": "^1.4.0"
|
|
22
24
|
},
|
|
23
25
|
"scripts": {
|
|
24
|
-
"build": "rm -rf lib && tsc -p tsconfig.build.json"
|
|
26
|
+
"build": "rm -rf lib && tsc -p tsconfig.build.json",
|
|
27
|
+
"test": "vitest --run"
|
|
25
28
|
}
|
|
26
29
|
}
|
package/src/codec.ts
CHANGED
|
@@ -3,9 +3,9 @@ import type { Src } from './src'
|
|
|
3
3
|
|
|
4
4
|
export const WORD_SIZE = 32
|
|
5
5
|
|
|
6
|
-
export interface Codec<
|
|
7
|
-
encode(sink: Sink, val:
|
|
8
|
-
decode(src: Src):
|
|
6
|
+
export interface Codec<TIn, TOut = TIn> {
|
|
7
|
+
encode(sink: Sink, val: TIn): void
|
|
8
|
+
decode(src: Src): TOut
|
|
9
9
|
isDynamic: boolean
|
|
10
10
|
slotsCount?: number
|
|
11
11
|
}
|
|
@@ -16,6 +16,10 @@ export type Struct = {
|
|
|
16
16
|
|
|
17
17
|
type Pretty<T> = { [K in keyof T]: T[K] } & unknown
|
|
18
18
|
|
|
19
|
-
export type
|
|
20
|
-
[K in keyof T]: T[K] extends Codec<infer U> ? U : never
|
|
19
|
+
export type DecodedStruct<T extends Struct> = Pretty<{
|
|
20
|
+
[K in keyof T]: T[K] extends Codec<any, infer U> ? U : never
|
|
21
|
+
}>
|
|
22
|
+
|
|
23
|
+
export type EncodedStruct<T extends Struct> = Pretty<{
|
|
24
|
+
[K in keyof T]: T[K] extends Codec<infer U, any> ? U : never
|
|
21
25
|
}>
|
package/src/codecs/array.ts
CHANGED
|
@@ -2,12 +2,12 @@ import { Codec, WORD_SIZE } from '../codec'
|
|
|
2
2
|
import { Sink } from '../sink'
|
|
3
3
|
import { Src } from '../src'
|
|
4
4
|
|
|
5
|
-
export class ArrayCodec<const
|
|
5
|
+
export class ArrayCodec<const TIn, const TOut> implements Codec<readonly TIn[], readonly TOut[]> {
|
|
6
6
|
public readonly isDynamic = true
|
|
7
7
|
|
|
8
|
-
constructor(public readonly item: Codec<
|
|
8
|
+
constructor(public readonly item: Codec<TIn, TOut>) {}
|
|
9
9
|
|
|
10
|
-
encode(sink: Sink, val:
|
|
10
|
+
encode(sink: Sink, val: TIn[]) {
|
|
11
11
|
sink.newDynamicDataArea(val.length)
|
|
12
12
|
for (let i = 0; i < val.length; i++) {
|
|
13
13
|
this.item.encode(sink, val[i])
|
|
@@ -16,7 +16,7 @@ export class ArrayCodec<const T> implements Codec<readonly T[]> {
|
|
|
16
16
|
sink.endCurrentDataArea()
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
decode(src: Src):
|
|
19
|
+
decode(src: Src): TOut[] {
|
|
20
20
|
const offset = src.u32()
|
|
21
21
|
|
|
22
22
|
src.safeJump(offset)
|
|
@@ -32,15 +32,15 @@ export class ArrayCodec<const T> implements Codec<readonly T[]> {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export class FixedSizeArrayCodec<const
|
|
35
|
+
export class FixedSizeArrayCodec<const TIn, const TOut> implements Codec<readonly TIn[], readonly TOut[]> {
|
|
36
36
|
public isDynamic: boolean
|
|
37
37
|
public slotsCount: number
|
|
38
|
-
constructor(public readonly item: Codec<
|
|
38
|
+
constructor(public readonly item: Codec<TIn, TOut>, public readonly size: number) {
|
|
39
39
|
this.isDynamic = item.isDynamic && size > 0
|
|
40
40
|
this.slotsCount = this.isDynamic ? 1 : size
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
encode(sink: Sink, val:
|
|
43
|
+
encode(sink: Sink, val: TIn[]) {
|
|
44
44
|
if (val.length !== this.size) {
|
|
45
45
|
throw new Error(`invalid array length: ${val.length}. Expected: ${this.size}`)
|
|
46
46
|
}
|
|
@@ -52,7 +52,7 @@ export class FixedSizeArrayCodec<const T> implements Codec<readonly T[]> {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
private encodeDynamic(sink: Sink, val:
|
|
55
|
+
private encodeDynamic(sink: Sink, val: TIn[]) {
|
|
56
56
|
sink.newStaticDataArea(this.size)
|
|
57
57
|
for (let i = 0; i < val.length; i++) {
|
|
58
58
|
this.item.encode(sink, val[i])
|
|
@@ -60,7 +60,7 @@ export class FixedSizeArrayCodec<const T> implements Codec<readonly T[]> {
|
|
|
60
60
|
sink.endCurrentDataArea()
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
decode(src: Src):
|
|
63
|
+
decode(src: Src): TOut[] {
|
|
64
64
|
if (this.isDynamic) {
|
|
65
65
|
return this.decodeDynamic(src)
|
|
66
66
|
}
|
|
@@ -71,7 +71,7 @@ export class FixedSizeArrayCodec<const T> implements Codec<readonly T[]> {
|
|
|
71
71
|
return val
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
private decodeDynamic(src: Src):
|
|
74
|
+
private decodeDynamic(src: Src): TOut[] {
|
|
75
75
|
const offset = src.u32()
|
|
76
76
|
const tmpSrc = src.slice(offset)
|
|
77
77
|
let val = new Array(this.size)
|
package/src/codecs/primitives.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { decodeHex, isHex, toHex } from '@subsquid/util-internal-hex'
|
|
1
2
|
import { Codec } from '../codec'
|
|
2
3
|
import { Sink } from '../sink'
|
|
3
4
|
import { Src } from '../src'
|
|
4
5
|
import { ArrayCodec, FixedSizeArrayCodec } from './array'
|
|
5
6
|
import { StructCodec } from './struct'
|
|
7
|
+
import { safeToNumber } from '../safeToNumber'
|
|
8
|
+
|
|
9
|
+
type Numberish = number | bigint
|
|
6
10
|
|
|
7
11
|
export const bool: Codec<boolean> = {
|
|
8
12
|
encode: function (sink: Sink, val: boolean) {
|
|
@@ -14,9 +18,9 @@ export const bool: Codec<boolean> = {
|
|
|
14
18
|
isDynamic: false,
|
|
15
19
|
}
|
|
16
20
|
|
|
17
|
-
export const uint8: Codec<number> = {
|
|
18
|
-
encode(sink: Sink, val:
|
|
19
|
-
sink.u8(val)
|
|
21
|
+
export const uint8: Codec<Numberish, number> = {
|
|
22
|
+
encode(sink: Sink, val: Numberish) {
|
|
23
|
+
sink.u8(safeToNumber(val))
|
|
20
24
|
},
|
|
21
25
|
decode(src: Src): number {
|
|
22
26
|
return src.u8()
|
|
@@ -24,9 +28,9 @@ export const uint8: Codec<number> = {
|
|
|
24
28
|
isDynamic: false,
|
|
25
29
|
}
|
|
26
30
|
|
|
27
|
-
export const int8: Codec<number> = {
|
|
28
|
-
encode(sink: Sink, val:
|
|
29
|
-
sink.i8(val)
|
|
31
|
+
export const int8: Codec<Numberish, number> = {
|
|
32
|
+
encode(sink: Sink, val: Numberish) {
|
|
33
|
+
sink.i8(safeToNumber(val))
|
|
30
34
|
},
|
|
31
35
|
decode(src: Src): number {
|
|
32
36
|
return src.i8()
|
|
@@ -34,9 +38,9 @@ export const int8: Codec<number> = {
|
|
|
34
38
|
isDynamic: false,
|
|
35
39
|
}
|
|
36
40
|
|
|
37
|
-
export const uint16: Codec<number> = {
|
|
38
|
-
encode(sink: Sink, val:
|
|
39
|
-
sink.u16(val)
|
|
41
|
+
export const uint16: Codec<Numberish, number> = {
|
|
42
|
+
encode(sink: Sink, val: Numberish) {
|
|
43
|
+
sink.u16(safeToNumber(val))
|
|
40
44
|
},
|
|
41
45
|
decode(src: Src): number {
|
|
42
46
|
return src.u16()
|
|
@@ -44,9 +48,9 @@ export const uint16: Codec<number> = {
|
|
|
44
48
|
isDynamic: false,
|
|
45
49
|
}
|
|
46
50
|
|
|
47
|
-
export const int16: Codec<number> = {
|
|
48
|
-
encode(sink: Sink, val:
|
|
49
|
-
sink.i16(val)
|
|
51
|
+
export const int16: Codec<Numberish, number> = {
|
|
52
|
+
encode(sink: Sink, val: Numberish) {
|
|
53
|
+
sink.i16(safeToNumber(val))
|
|
50
54
|
},
|
|
51
55
|
decode(src: Src): number {
|
|
52
56
|
return src.i16()
|
|
@@ -54,9 +58,9 @@ export const int16: Codec<number> = {
|
|
|
54
58
|
isDynamic: false,
|
|
55
59
|
}
|
|
56
60
|
|
|
57
|
-
export const uint32: Codec<number> = {
|
|
58
|
-
encode(sink: Sink, val:
|
|
59
|
-
sink.u32(val)
|
|
61
|
+
export const uint32: Codec<Numberish, number> = {
|
|
62
|
+
encode(sink: Sink, val: Numberish) {
|
|
63
|
+
sink.u32(safeToNumber(val))
|
|
60
64
|
},
|
|
61
65
|
decode(src: Src): number {
|
|
62
66
|
return src.u32()
|
|
@@ -64,9 +68,9 @@ export const uint32: Codec<number> = {
|
|
|
64
68
|
isDynamic: false,
|
|
65
69
|
}
|
|
66
70
|
|
|
67
|
-
export const int32: Codec<number> = {
|
|
68
|
-
encode(sink: Sink, val:
|
|
69
|
-
sink.i32(val)
|
|
71
|
+
export const int32: Codec<Numberish, number> = {
|
|
72
|
+
encode(sink: Sink, val: Numberish) {
|
|
73
|
+
sink.i32(safeToNumber(val))
|
|
70
74
|
},
|
|
71
75
|
decode(src: Src): number {
|
|
72
76
|
return src.i32()
|
|
@@ -74,9 +78,9 @@ export const int32: Codec<number> = {
|
|
|
74
78
|
isDynamic: false,
|
|
75
79
|
}
|
|
76
80
|
|
|
77
|
-
export const uint64: Codec<bigint> = {
|
|
78
|
-
encode(sink: Sink, val:
|
|
79
|
-
sink.u64(val)
|
|
81
|
+
export const uint64: Codec<Numberish, bigint> = {
|
|
82
|
+
encode(sink: Sink, val: Numberish) {
|
|
83
|
+
sink.u64(BigInt(val))
|
|
80
84
|
},
|
|
81
85
|
decode(src: Src): bigint {
|
|
82
86
|
return src.u64()
|
|
@@ -84,9 +88,9 @@ export const uint64: Codec<bigint> = {
|
|
|
84
88
|
isDynamic: false,
|
|
85
89
|
}
|
|
86
90
|
|
|
87
|
-
export const int64: Codec<bigint> = {
|
|
88
|
-
encode(sink: Sink, val:
|
|
89
|
-
sink.i64(val)
|
|
91
|
+
export const int64: Codec<Numberish, bigint> = {
|
|
92
|
+
encode(sink: Sink, val: Numberish) {
|
|
93
|
+
sink.i64(BigInt(val))
|
|
90
94
|
},
|
|
91
95
|
decode(src: Src): bigint {
|
|
92
96
|
return src.i64()
|
|
@@ -94,9 +98,9 @@ export const int64: Codec<bigint> = {
|
|
|
94
98
|
isDynamic: false,
|
|
95
99
|
}
|
|
96
100
|
|
|
97
|
-
export const uint128: Codec<bigint> = {
|
|
98
|
-
encode(sink: Sink, val:
|
|
99
|
-
sink.u128(val)
|
|
101
|
+
export const uint128: Codec<Numberish, bigint> = {
|
|
102
|
+
encode(sink: Sink, val: Numberish) {
|
|
103
|
+
sink.u128(BigInt(val))
|
|
100
104
|
},
|
|
101
105
|
decode(src: Src): bigint {
|
|
102
106
|
return src.u128()
|
|
@@ -104,9 +108,9 @@ export const uint128: Codec<bigint> = {
|
|
|
104
108
|
isDynamic: false,
|
|
105
109
|
}
|
|
106
110
|
|
|
107
|
-
export const int128: Codec<bigint> = {
|
|
108
|
-
encode(sink: Sink, val:
|
|
109
|
-
sink.i128(val)
|
|
111
|
+
export const int128: Codec<Numberish, bigint> = {
|
|
112
|
+
encode(sink: Sink, val: Numberish) {
|
|
113
|
+
sink.i128(BigInt(val))
|
|
110
114
|
},
|
|
111
115
|
decode(src: Src): bigint {
|
|
112
116
|
return src.i128()
|
|
@@ -114,9 +118,9 @@ export const int128: Codec<bigint> = {
|
|
|
114
118
|
isDynamic: false,
|
|
115
119
|
}
|
|
116
120
|
|
|
117
|
-
export const uint256: Codec<bigint> = {
|
|
118
|
-
encode(sink: Sink, val:
|
|
119
|
-
sink.u256(val)
|
|
121
|
+
export const uint256: Codec<Numberish, bigint> = {
|
|
122
|
+
encode(sink: Sink, val: Numberish) {
|
|
123
|
+
sink.u256(BigInt(val))
|
|
120
124
|
},
|
|
121
125
|
decode(src: Src): bigint {
|
|
122
126
|
return src.u256()
|
|
@@ -124,9 +128,9 @@ export const uint256: Codec<bigint> = {
|
|
|
124
128
|
isDynamic: false,
|
|
125
129
|
}
|
|
126
130
|
|
|
127
|
-
export const int256: Codec<bigint> = {
|
|
128
|
-
encode(sink: Sink, val:
|
|
129
|
-
sink.i256(val)
|
|
131
|
+
export const int256: Codec<Numberish, bigint> = {
|
|
132
|
+
encode(sink: Sink, val: Numberish) {
|
|
133
|
+
sink.i256(BigInt(val))
|
|
130
134
|
},
|
|
131
135
|
decode(src: Src): bigint {
|
|
132
136
|
return src.i256()
|
|
@@ -146,24 +150,34 @@ export const string = <const>{
|
|
|
146
150
|
isDynamic: true,
|
|
147
151
|
}
|
|
148
152
|
|
|
149
|
-
|
|
150
|
-
|
|
153
|
+
function toBuffer(val: Uint8Array | string): Uint8Array {
|
|
154
|
+
if (val instanceof Uint8Array) {
|
|
155
|
+
return val
|
|
156
|
+
}
|
|
157
|
+
if (!isHex(val)) {
|
|
158
|
+
throw new Error(`Expected hex string or buffer, got: ${val}`)
|
|
159
|
+
}
|
|
160
|
+
return decodeHex(val)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export const bytes: Codec<Uint8Array | string, string> = <const>{
|
|
164
|
+
encode(sink: Sink, val: Uint8Array | string) {
|
|
151
165
|
sink.newStaticDataArea()
|
|
152
|
-
sink.bytes(val)
|
|
166
|
+
sink.bytes(toBuffer(val))
|
|
153
167
|
sink.endCurrentDataArea()
|
|
154
168
|
},
|
|
155
|
-
decode(src: Src):
|
|
156
|
-
return src.bytes()
|
|
169
|
+
decode(src: Src): string {
|
|
170
|
+
return toHex(src.bytes())
|
|
157
171
|
},
|
|
158
172
|
isDynamic: true,
|
|
159
173
|
}
|
|
160
174
|
|
|
161
|
-
const bytesN = (size: number): Codec<Uint8Array> => ({
|
|
162
|
-
encode(sink: Sink, val: Uint8Array) {
|
|
163
|
-
sink.staticBytes(size, val)
|
|
175
|
+
const bytesN = (size: number): Codec<Uint8Array | string, string> => ({
|
|
176
|
+
encode(sink: Sink, val: Uint8Array | string) {
|
|
177
|
+
sink.staticBytes(size, toBuffer(val))
|
|
164
178
|
},
|
|
165
|
-
decode(src: Src):
|
|
166
|
-
return src.staticBytes(size)
|
|
179
|
+
decode(src: Src): string {
|
|
180
|
+
return toHex(src.staticBytes(size))
|
|
167
181
|
},
|
|
168
182
|
isDynamic: false,
|
|
169
183
|
})
|
|
@@ -212,9 +226,9 @@ export const address: Codec<string> = {
|
|
|
212
226
|
isDynamic: false,
|
|
213
227
|
}
|
|
214
228
|
|
|
215
|
-
export const fixedSizeArray = <
|
|
229
|
+
export const fixedSizeArray = <TIn, TOut>(item: Codec<TIn, TOut>, size: number): Codec<TIn[], TOut[]> => new FixedSizeArrayCodec(item, size)
|
|
216
230
|
|
|
217
|
-
export const array = <
|
|
231
|
+
export const array = <TIn, TOut>(item: Codec<TIn, TOut>): Codec<TIn[], TOut[]> => new ArrayCodec(item)
|
|
218
232
|
|
|
219
233
|
type Struct = {
|
|
220
234
|
[key: string]: Codec<any>
|
|
@@ -223,3 +237,57 @@ type Struct = {
|
|
|
223
237
|
export const struct = <const T extends Struct>(components: T) => new StructCodec<T>(components)
|
|
224
238
|
|
|
225
239
|
export const tuple = struct
|
|
240
|
+
|
|
241
|
+
export const uint24 = uint32
|
|
242
|
+
export const int24 = int32
|
|
243
|
+
export const uint40 = uint64
|
|
244
|
+
export const int40 = int64
|
|
245
|
+
export const uint48 = uint64
|
|
246
|
+
export const int48 = int64
|
|
247
|
+
export const uint56 = uint64
|
|
248
|
+
export const int56 = int64
|
|
249
|
+
export const uint72 = uint128
|
|
250
|
+
export const int72 = int128
|
|
251
|
+
export const uint80 = uint128
|
|
252
|
+
export const int80 = int128
|
|
253
|
+
export const uint88 = uint128
|
|
254
|
+
export const int88 = int128
|
|
255
|
+
export const uint96 = uint128
|
|
256
|
+
export const int96 = int128
|
|
257
|
+
export const uint104 = uint128
|
|
258
|
+
export const int104 = int128
|
|
259
|
+
export const uint112 = uint128
|
|
260
|
+
export const int112 = int128
|
|
261
|
+
export const uint120 = uint128
|
|
262
|
+
export const int120 = int128
|
|
263
|
+
export const uint136 = uint256
|
|
264
|
+
export const int136 = int256
|
|
265
|
+
export const uint144 = uint256
|
|
266
|
+
export const int144 = int256
|
|
267
|
+
export const uint152 = uint256
|
|
268
|
+
export const int152 = int256
|
|
269
|
+
export const uint160 = uint256
|
|
270
|
+
export const int160 = int256
|
|
271
|
+
export const uint168 = uint256
|
|
272
|
+
export const int168 = int256
|
|
273
|
+
export const uint176 = uint256
|
|
274
|
+
export const int176 = int256
|
|
275
|
+
export const uint184 = uint256
|
|
276
|
+
export const int184 = int256
|
|
277
|
+
export const uint192 = uint256
|
|
278
|
+
export const int192 = int256
|
|
279
|
+
export const uint200 = uint256
|
|
280
|
+
export const int200 = int256
|
|
281
|
+
export const uint208 = uint256
|
|
282
|
+
export const int208 = int256
|
|
283
|
+
export const uint216 = uint256
|
|
284
|
+
export const int216 = int256
|
|
285
|
+
export const uint224 = uint256
|
|
286
|
+
export const int224 = int256
|
|
287
|
+
export const uint232 = uint256
|
|
288
|
+
export const int232 = int256
|
|
289
|
+
export const uint240 = uint256
|
|
290
|
+
export const int240 = int256
|
|
291
|
+
export const uint248 = uint256
|
|
292
|
+
export const int248 = int256
|
|
293
|
+
|
package/src/codecs/struct.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {Codec, Struct, DecodedStruct, EncodedStruct} from '../codec'
|
|
2
2
|
import { Sink } from '../sink'
|
|
3
3
|
import { Src } from '../src'
|
|
4
4
|
|
|
@@ -10,7 +10,7 @@ function slotsCount(codecs: readonly Codec<any>[]) {
|
|
|
10
10
|
return count
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export class StructCodec<const T extends Struct> implements Codec<
|
|
13
|
+
export class StructCodec<const T extends Struct> implements Codec<EncodedStruct<T>, DecodedStruct<T>> {
|
|
14
14
|
public readonly isDynamic: boolean
|
|
15
15
|
public readonly slotsCount: number
|
|
16
16
|
private readonly childrenSlotsCount: number
|
|
@@ -28,7 +28,7 @@ export class StructCodec<const T extends Struct> implements Codec<StructTypes<T>
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
public encode(sink: Sink, val:
|
|
31
|
+
public encode(sink: Sink, val: EncodedStruct<T>): void {
|
|
32
32
|
if (this.isDynamic) {
|
|
33
33
|
this.encodeDynamic(sink, val)
|
|
34
34
|
return
|
|
@@ -39,7 +39,7 @@ export class StructCodec<const T extends Struct> implements Codec<StructTypes<T>
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
private encodeDynamic(sink: Sink, val:
|
|
42
|
+
private encodeDynamic(sink: Sink, val: EncodedStruct<T>): void {
|
|
43
43
|
sink.newStaticDataArea(this.childrenSlotsCount)
|
|
44
44
|
for (let i in this.components) {
|
|
45
45
|
let prop = this.components[i]
|
|
@@ -48,7 +48,7 @@ export class StructCodec<const T extends Struct> implements Codec<StructTypes<T>
|
|
|
48
48
|
sink.endCurrentDataArea()
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
public decode(src: Src):
|
|
51
|
+
public decode(src: Src): DecodedStruct<T> {
|
|
52
52
|
if (this.isDynamic) {
|
|
53
53
|
return this.decodeDynamic(src)
|
|
54
54
|
}
|
|
@@ -60,7 +60,7 @@ export class StructCodec<const T extends Struct> implements Codec<StructTypes<T>
|
|
|
60
60
|
return result
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
private decodeDynamic(src: Src):
|
|
63
|
+
private decodeDynamic(src: Src): DecodedStruct<T> {
|
|
64
64
|
let result: any = {}
|
|
65
65
|
|
|
66
66
|
const offset = src.u32()
|
package/src/index.ts
CHANGED