@subsquid/evm-codec 0.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/README.md +3 -0
- package/lib/codec.d.ts +20 -0
- package/lib/codec.d.ts.map +1 -0
- package/lib/codec.js +5 -0
- package/lib/codec.js.map +1 -0
- package/lib/codecs/array.d.ts +22 -0
- package/lib/codecs/array.d.ts.map +1 -0
- package/lib/codecs/array.js +78 -0
- package/lib/codecs/array.js.map +1 -0
- package/lib/codecs/primitives.d.ts +70 -0
- package/lib/codecs/primitives.d.ts.map +1 -0
- package/lib/codecs/primitives.js +204 -0
- package/lib/codecs/primitives.js.map +1 -0
- package/lib/codecs/struct.d.ts +15 -0
- package/lib/codecs/struct.d.ts.map +1 -0
- package/lib/codecs/struct.js +65 -0
- package/lib/codecs/struct.js.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +23 -0
- package/lib/index.js.map +1 -0
- package/lib/sink.d.ts +42 -0
- package/lib/sink.d.ts.map +1 -0
- package/lib/sink.js +194 -0
- package/lib/sink.js.map +1 -0
- package/lib/src.d.ts +30 -0
- package/lib/src.d.ts.map +1 -0
- package/lib/src.js +141 -0
- package/lib/src.js.map +1 -0
- package/package.json +26 -0
- package/src/codec.ts +21 -0
- package/src/codecs/array.ts +83 -0
- package/src/codecs/primitives.ts +225 -0
- package/src/codecs/struct.ts +74 -0
- package/src/index.ts +4 -0
- package/src/sink.ts +213 -0
- package/src/src.ts +158 -0
package/lib/sink.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
var _Sink_instances, _Sink_u64, _Sink_u128;
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.Sink = void 0;
|
|
13
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
14
|
+
const codec_1 = require("./codec");
|
|
15
|
+
class Sink {
|
|
16
|
+
constructor(fields, capacity = 1280) {
|
|
17
|
+
_Sink_instances.add(this);
|
|
18
|
+
this.pos = 0;
|
|
19
|
+
this.stack = [];
|
|
20
|
+
this.stack.push({
|
|
21
|
+
start: 0,
|
|
22
|
+
jumpBackPtr: 0,
|
|
23
|
+
size: fields * codec_1.WORD_SIZE,
|
|
24
|
+
});
|
|
25
|
+
this.buf = Buffer.alloc(capacity);
|
|
26
|
+
this.view = new DataView(this.buf.buffer, this.buf.byteOffset, this.buf.byteLength);
|
|
27
|
+
}
|
|
28
|
+
result() {
|
|
29
|
+
(0, node_assert_1.default)(this.stack.length === 1, 'Cannot get result during dynamic encoding');
|
|
30
|
+
return this.buf.subarray(0, this.size());
|
|
31
|
+
}
|
|
32
|
+
toString() {
|
|
33
|
+
return '0x' + this.result().toString('hex');
|
|
34
|
+
}
|
|
35
|
+
reserve(additional) {
|
|
36
|
+
if (this.buf.length - this.pos < additional) {
|
|
37
|
+
this._allocate(this.pos + additional);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
size() {
|
|
41
|
+
return this.stack[this.stack.length - 1].size;
|
|
42
|
+
}
|
|
43
|
+
_allocate(cap) {
|
|
44
|
+
cap = Math.max(cap, this.buf.length * 2);
|
|
45
|
+
let buf = Buffer.alloc(cap);
|
|
46
|
+
buf.set(this.buf);
|
|
47
|
+
this.buf = buf;
|
|
48
|
+
this.view = new DataView(this.buf.buffer, this.buf.byteOffset, this.buf.byteLength);
|
|
49
|
+
}
|
|
50
|
+
u8(val) {
|
|
51
|
+
this.reserve(codec_1.WORD_SIZE);
|
|
52
|
+
this.pos += codec_1.WORD_SIZE - 1;
|
|
53
|
+
this.view.setUint8(this.pos, val);
|
|
54
|
+
this.pos += 1;
|
|
55
|
+
}
|
|
56
|
+
i8(val) {
|
|
57
|
+
this.i256(BigInt(val));
|
|
58
|
+
}
|
|
59
|
+
u16(val) {
|
|
60
|
+
this.reserve(codec_1.WORD_SIZE);
|
|
61
|
+
this.pos += codec_1.WORD_SIZE - 2;
|
|
62
|
+
this.view.setUint16(this.pos, val, false);
|
|
63
|
+
this.pos += 2;
|
|
64
|
+
}
|
|
65
|
+
i16(val) {
|
|
66
|
+
this.i256(BigInt(val));
|
|
67
|
+
}
|
|
68
|
+
u32(val) {
|
|
69
|
+
this.reserve(codec_1.WORD_SIZE);
|
|
70
|
+
this.pos += codec_1.WORD_SIZE - 4;
|
|
71
|
+
this.view.setUint32(this.pos, val, false);
|
|
72
|
+
this.pos += 4;
|
|
73
|
+
}
|
|
74
|
+
i32(val) {
|
|
75
|
+
this.i256(BigInt(val));
|
|
76
|
+
}
|
|
77
|
+
u64(val) {
|
|
78
|
+
this.reserve(codec_1.WORD_SIZE);
|
|
79
|
+
this.pos += codec_1.WORD_SIZE - 8;
|
|
80
|
+
this.view.setBigUint64(this.pos, val, false);
|
|
81
|
+
this.pos += 8;
|
|
82
|
+
}
|
|
83
|
+
i64(val) {
|
|
84
|
+
this.i256(val);
|
|
85
|
+
}
|
|
86
|
+
u128(val) {
|
|
87
|
+
this.reserve(codec_1.WORD_SIZE);
|
|
88
|
+
this.pos += codec_1.WORD_SIZE - 16;
|
|
89
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u64).call(this, val & 0xffffffffffffffffn);
|
|
90
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u64).call(this, val >> 64n);
|
|
91
|
+
}
|
|
92
|
+
i128(val) {
|
|
93
|
+
this.i256(BigInt(val));
|
|
94
|
+
}
|
|
95
|
+
u256(val) {
|
|
96
|
+
this.reserve(codec_1.WORD_SIZE);
|
|
97
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u128).call(this, val >> 128n);
|
|
98
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u128).call(this, val & (2n ** 128n - 1n));
|
|
99
|
+
}
|
|
100
|
+
i256(val) {
|
|
101
|
+
let base = 2n ** 256n;
|
|
102
|
+
val = (val + base) % base;
|
|
103
|
+
this.u256(val);
|
|
104
|
+
}
|
|
105
|
+
bytes(val) {
|
|
106
|
+
const size = Buffer.byteLength(val);
|
|
107
|
+
this.u32(size);
|
|
108
|
+
const wordsCount = Math.ceil(size / codec_1.WORD_SIZE);
|
|
109
|
+
const reservedSize = codec_1.WORD_SIZE * wordsCount;
|
|
110
|
+
this.reserve(reservedSize);
|
|
111
|
+
this.buf.set(val, this.pos);
|
|
112
|
+
this.pos += reservedSize;
|
|
113
|
+
this.increaseCurrentDataAreaSize(reservedSize + codec_1.WORD_SIZE);
|
|
114
|
+
}
|
|
115
|
+
staticBytes(len, val) {
|
|
116
|
+
if (len > 32) {
|
|
117
|
+
throw new Error(`bytes${len} is not a valid type`);
|
|
118
|
+
}
|
|
119
|
+
const size = Buffer.byteLength(val);
|
|
120
|
+
if (size > len) {
|
|
121
|
+
throw new Error(`invalid data size for bytes${len}`);
|
|
122
|
+
}
|
|
123
|
+
this.reserve(codec_1.WORD_SIZE);
|
|
124
|
+
this.buf.set(val, this.pos);
|
|
125
|
+
this.pos += codec_1.WORD_SIZE;
|
|
126
|
+
}
|
|
127
|
+
address(val) {
|
|
128
|
+
this.u256(BigInt(val));
|
|
129
|
+
}
|
|
130
|
+
string(val) {
|
|
131
|
+
const size = Buffer.byteLength(val);
|
|
132
|
+
this.u32(size);
|
|
133
|
+
const wordsCount = Math.ceil(size / codec_1.WORD_SIZE);
|
|
134
|
+
const reservedSize = codec_1.WORD_SIZE * wordsCount;
|
|
135
|
+
this.reserve(reservedSize);
|
|
136
|
+
this.buf.write(val, this.pos);
|
|
137
|
+
this.pos += reservedSize;
|
|
138
|
+
this.increaseCurrentDataAreaSize(reservedSize + codec_1.WORD_SIZE);
|
|
139
|
+
}
|
|
140
|
+
bool(val) {
|
|
141
|
+
this.u8(val ? 1 : 0);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* @example
|
|
145
|
+
* @link [Solidity docs](https://docs.soliditylang.org/en/latest/abi-spec.html#use-of-dynamic-types)
|
|
146
|
+
*/
|
|
147
|
+
newStaticDataArea(slotsCount = 0) {
|
|
148
|
+
const offset = this.size();
|
|
149
|
+
this.u32(offset);
|
|
150
|
+
const dataAreaStart = this.currentDataAreaStart();
|
|
151
|
+
this.pushDataArea(dataAreaStart + offset, slotsCount);
|
|
152
|
+
this.pos = dataAreaStart + offset;
|
|
153
|
+
}
|
|
154
|
+
// Adds elements count before the data area in an additional slot
|
|
155
|
+
newDynamicDataArea(slotsCount) {
|
|
156
|
+
const offset = this.size();
|
|
157
|
+
this.u32(offset);
|
|
158
|
+
const dataAreaStart = this.currentDataAreaStart();
|
|
159
|
+
this.pushDataArea(dataAreaStart + offset + codec_1.WORD_SIZE, slotsCount);
|
|
160
|
+
this.pos = dataAreaStart + offset;
|
|
161
|
+
this.u32(slotsCount);
|
|
162
|
+
}
|
|
163
|
+
currentDataAreaStart() {
|
|
164
|
+
return this.stack[this.stack.length - 1].start;
|
|
165
|
+
}
|
|
166
|
+
increaseCurrentDataAreaSize(amount) {
|
|
167
|
+
this.stack[this.stack.length - 1].size += amount;
|
|
168
|
+
}
|
|
169
|
+
pushDataArea(dataAreaStart, slotsCount) {
|
|
170
|
+
const size = slotsCount * codec_1.WORD_SIZE;
|
|
171
|
+
this.reserve(dataAreaStart + size);
|
|
172
|
+
this.stack.push({
|
|
173
|
+
start: dataAreaStart,
|
|
174
|
+
jumpBackPtr: this.pos,
|
|
175
|
+
size,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
endCurrentDataArea() {
|
|
179
|
+
(0, node_assert_1.default)(this.stack.length > 1, 'No dynamic encoding started');
|
|
180
|
+
const { jumpBackPtr, size } = this.stack.pop();
|
|
181
|
+
this.increaseCurrentDataAreaSize(size);
|
|
182
|
+
this.pos = jumpBackPtr;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
exports.Sink = Sink;
|
|
186
|
+
_Sink_instances = new WeakSet(), _Sink_u64 = function _Sink_u64(val) {
|
|
187
|
+
this.view.setBigUint64(this.pos, val, false);
|
|
188
|
+
this.pos += 8;
|
|
189
|
+
}, _Sink_u128 = function _Sink_u128(val) {
|
|
190
|
+
this.reserve(codec_1.WORD_SIZE);
|
|
191
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u64).call(this, val >> 64n);
|
|
192
|
+
__classPrivateFieldGet(this, _Sink_instances, "m", _Sink_u64).call(this, val & 0xffffffffffffffffn);
|
|
193
|
+
};
|
|
194
|
+
//# sourceMappingURL=sink.js.map
|
package/lib/sink.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sink.js","sourceRoot":"","sources":["../src/sink.ts"],"names":[],"mappings":"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"}
|
package/lib/src.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare class Src {
|
|
2
|
+
#private;
|
|
3
|
+
private buf;
|
|
4
|
+
private view;
|
|
5
|
+
private pos;
|
|
6
|
+
private oldPos;
|
|
7
|
+
constructor(buf: Uint8Array);
|
|
8
|
+
slice(start: number, end?: number): Src;
|
|
9
|
+
u8(): number;
|
|
10
|
+
i8(): number;
|
|
11
|
+
u16(): number;
|
|
12
|
+
i16(): number;
|
|
13
|
+
u32(): number;
|
|
14
|
+
i32(): number;
|
|
15
|
+
u64(): bigint;
|
|
16
|
+
i64(): bigint;
|
|
17
|
+
u128(): bigint;
|
|
18
|
+
i128(): bigint;
|
|
19
|
+
u256(): bigint;
|
|
20
|
+
i256(): bigint;
|
|
21
|
+
address(): string;
|
|
22
|
+
bytes(): Uint8Array;
|
|
23
|
+
staticBytes(len: number): Uint8Array;
|
|
24
|
+
string(): string;
|
|
25
|
+
bool(): boolean;
|
|
26
|
+
private assertLength;
|
|
27
|
+
safeJump(pos: number): void;
|
|
28
|
+
jumpBack(): void;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=src.d.ts.map
|
package/lib/src.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src.d.ts","sourceRoot":"","sources":["../src/src.ts"],"names":[],"mappings":"AAEA,qBAAa,GAAG;;IAIF,OAAO,CAAC,GAAG;IAHvB,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,GAAG,CAAI;IACf,OAAO,CAAC,MAAM,CAAI;gBACE,GAAG,EAAE,UAAU;IAInC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG;IAIvC,EAAE,IAAI,MAAM;IAOZ,EAAE,IAAI,MAAM;IAIZ,GAAG,IAAI,MAAM;IAOb,GAAG,IAAI,MAAM;IAIb,GAAG,IAAI,MAAM;IAOb,GAAG,IAAI,MAAM;IAIb,GAAG,IAAI,MAAM;IAWb,GAAG,IAAI,MAAM;IAWb,IAAI,IAAI,MAAM;IAWd,IAAI,IAAI,MAAM;IAWd,IAAI,IAAI,MAAM;IAMd,IAAI,IAAI,MAAM;IAMd,OAAO,IAAI,MAAM;IAIjB,KAAK,IAAI,UAAU;IAUnB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;IASpC,MAAM,IAAI,MAAM;IAUhB,IAAI,IAAI,OAAO;IAIf,OAAO,CAAC,YAAY;IAMb,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQ3B,QAAQ,IAAI,IAAI;CAGxB"}
|
package/lib/src.js
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var _Src_instances, _Src_u64, _Src_i64, _Src_u128, _Src_i128;
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.Src = void 0;
|
|
10
|
+
const codec_1 = require("./codec");
|
|
11
|
+
class Src {
|
|
12
|
+
constructor(buf) {
|
|
13
|
+
_Src_instances.add(this);
|
|
14
|
+
this.buf = buf;
|
|
15
|
+
this.pos = 0;
|
|
16
|
+
this.oldPos = 0;
|
|
17
|
+
this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
18
|
+
}
|
|
19
|
+
slice(start, end) {
|
|
20
|
+
return new Src(this.buf.subarray(start, end));
|
|
21
|
+
}
|
|
22
|
+
u8() {
|
|
23
|
+
this.pos += codec_1.WORD_SIZE - 1;
|
|
24
|
+
let val = this.view.getUint8(this.pos);
|
|
25
|
+
this.pos += 1;
|
|
26
|
+
return val;
|
|
27
|
+
}
|
|
28
|
+
i8() {
|
|
29
|
+
return Number(this.i256());
|
|
30
|
+
}
|
|
31
|
+
u16() {
|
|
32
|
+
this.pos += codec_1.WORD_SIZE - 2;
|
|
33
|
+
let val = this.view.getUint16(this.pos, false);
|
|
34
|
+
this.pos += 2;
|
|
35
|
+
return val;
|
|
36
|
+
}
|
|
37
|
+
i16() {
|
|
38
|
+
return Number(this.i256());
|
|
39
|
+
}
|
|
40
|
+
u32() {
|
|
41
|
+
this.pos += codec_1.WORD_SIZE - 4;
|
|
42
|
+
let val = this.view.getUint32(this.pos, false);
|
|
43
|
+
this.pos += 4;
|
|
44
|
+
return val;
|
|
45
|
+
}
|
|
46
|
+
i32() {
|
|
47
|
+
return Number(this.i256());
|
|
48
|
+
}
|
|
49
|
+
u64() {
|
|
50
|
+
this.pos += codec_1.WORD_SIZE - 8;
|
|
51
|
+
return __classPrivateFieldGet(this, _Src_instances, "m", _Src_u64).call(this);
|
|
52
|
+
}
|
|
53
|
+
i64() {
|
|
54
|
+
this.pos += codec_1.WORD_SIZE - 8;
|
|
55
|
+
return __classPrivateFieldGet(this, _Src_instances, "m", _Src_i64).call(this);
|
|
56
|
+
}
|
|
57
|
+
u128() {
|
|
58
|
+
this.pos += codec_1.WORD_SIZE - 16;
|
|
59
|
+
return __classPrivateFieldGet(this, _Src_instances, "m", _Src_u128).call(this);
|
|
60
|
+
}
|
|
61
|
+
i128() {
|
|
62
|
+
this.pos += codec_1.WORD_SIZE - 16;
|
|
63
|
+
return __classPrivateFieldGet(this, _Src_instances, "m", _Src_i128).call(this);
|
|
64
|
+
}
|
|
65
|
+
u256() {
|
|
66
|
+
let hi = __classPrivateFieldGet(this, _Src_instances, "m", _Src_u128).call(this);
|
|
67
|
+
let lo = __classPrivateFieldGet(this, _Src_instances, "m", _Src_u128).call(this);
|
|
68
|
+
return lo + (hi << 128n);
|
|
69
|
+
}
|
|
70
|
+
i256() {
|
|
71
|
+
let hi = __classPrivateFieldGet(this, _Src_instances, "m", _Src_i128).call(this);
|
|
72
|
+
let lo = __classPrivateFieldGet(this, _Src_instances, "m", _Src_u128).call(this);
|
|
73
|
+
return lo + (hi << 128n);
|
|
74
|
+
}
|
|
75
|
+
address() {
|
|
76
|
+
return '0x' + this.u256().toString(16).padStart(40, '0');
|
|
77
|
+
}
|
|
78
|
+
bytes() {
|
|
79
|
+
const ptr = this.u32();
|
|
80
|
+
this.safeJump(ptr);
|
|
81
|
+
const len = this.u32();
|
|
82
|
+
this.assertLength(len);
|
|
83
|
+
const val = this.buf.subarray(this.pos, this.pos + len);
|
|
84
|
+
this.jumpBack();
|
|
85
|
+
return val;
|
|
86
|
+
}
|
|
87
|
+
staticBytes(len) {
|
|
88
|
+
if (len > 32) {
|
|
89
|
+
throw new Error(`bytes${len} is not a valid type`);
|
|
90
|
+
}
|
|
91
|
+
const val = this.buf.subarray(this.pos, this.pos + len);
|
|
92
|
+
this.pos += codec_1.WORD_SIZE;
|
|
93
|
+
return val;
|
|
94
|
+
}
|
|
95
|
+
string() {
|
|
96
|
+
const ptr = this.u32();
|
|
97
|
+
this.safeJump(ptr);
|
|
98
|
+
const len = this.u32();
|
|
99
|
+
this.assertLength(len);
|
|
100
|
+
const val = Buffer.from(this.buf.buffer, this.buf.byteOffset + this.pos, len).toString('utf-8');
|
|
101
|
+
this.jumpBack();
|
|
102
|
+
return val;
|
|
103
|
+
}
|
|
104
|
+
bool() {
|
|
105
|
+
return !!this.u8();
|
|
106
|
+
}
|
|
107
|
+
assertLength(len) {
|
|
108
|
+
if (this.buf.length - this.pos < len) {
|
|
109
|
+
throw new RangeError('Unexpected end of input');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
safeJump(pos) {
|
|
113
|
+
if (pos < 0 || pos >= this.buf.length) {
|
|
114
|
+
throw new RangeError(`Unexpected pointer location: 0x${pos.toString(16)}`);
|
|
115
|
+
}
|
|
116
|
+
this.oldPos = this.pos;
|
|
117
|
+
this.pos = pos;
|
|
118
|
+
}
|
|
119
|
+
jumpBack() {
|
|
120
|
+
this.pos = this.oldPos;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.Src = Src;
|
|
124
|
+
_Src_instances = new WeakSet(), _Src_u64 = function _Src_u64() {
|
|
125
|
+
let val = this.view.getBigUint64(this.pos, false);
|
|
126
|
+
this.pos += 8;
|
|
127
|
+
return val;
|
|
128
|
+
}, _Src_i64 = function _Src_i64() {
|
|
129
|
+
let val = this.view.getBigInt64(this.pos, false);
|
|
130
|
+
this.pos += 8;
|
|
131
|
+
return val;
|
|
132
|
+
}, _Src_u128 = function _Src_u128() {
|
|
133
|
+
let hi = __classPrivateFieldGet(this, _Src_instances, "m", _Src_u64).call(this);
|
|
134
|
+
let lo = __classPrivateFieldGet(this, _Src_instances, "m", _Src_u64).call(this);
|
|
135
|
+
return lo + (hi << 64n);
|
|
136
|
+
}, _Src_i128 = function _Src_i128() {
|
|
137
|
+
let hi = __classPrivateFieldGet(this, _Src_instances, "m", _Src_i64).call(this);
|
|
138
|
+
let lo = __classPrivateFieldGet(this, _Src_instances, "m", _Src_u64).call(this);
|
|
139
|
+
return lo + (hi << 64n);
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=src.js.map
|
package/lib/src.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src.js","sourceRoot":"","sources":["../src/src.ts"],"names":[],"mappings":";;;;;;;;;AAAA,mCAAmC;AAEnC,MAAa,GAAG;IAId,YAAoB,GAAe;;QAAf,QAAG,GAAH,GAAG,CAAY;QAF3B,QAAG,GAAG,CAAC,CAAA;QACP,WAAM,GAAG,CAAC,CAAA;QAEhB,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,GAAY;QAC/B,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,EAAE;QACA,IAAI,CAAC,GAAG,IAAI,iBAAS,GAAG,CAAC,CAAA;QACzB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QACb,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,EAAE;QACA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,GAAG;QACD,IAAI,CAAC,GAAG,IAAI,iBAAS,GAAG,CAAC,CAAA;QACzB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC9C,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QACb,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,GAAG;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,GAAG;QACD,IAAI,CAAC,GAAG,IAAI,iBAAS,GAAG,CAAC,CAAA;QACzB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC9C,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QACb,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,GAAG;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,GAAG;QACD,IAAI,CAAC,GAAG,IAAI,iBAAS,GAAG,CAAC,CAAA;QACzB,OAAO,uBAAA,IAAI,gCAAK,MAAT,IAAI,CAAO,CAAA;IACpB,CAAC;IAQD,GAAG;QACD,IAAI,CAAC,GAAG,IAAI,iBAAS,GAAG,CAAC,CAAA;QACzB,OAAO,uBAAA,IAAI,gCAAK,MAAT,IAAI,CAAO,CAAA;IACpB,CAAC;IAQD,IAAI;QACF,IAAI,CAAC,GAAG,IAAI,iBAAS,GAAG,EAAE,CAAA;QAC1B,OAAO,uBAAA,IAAI,iCAAM,MAAV,IAAI,CAAQ,CAAA;IACrB,CAAC;IAQD,IAAI;QACF,IAAI,CAAC,GAAG,IAAI,iBAAS,GAAG,EAAE,CAAA;QAC1B,OAAO,uBAAA,IAAI,iCAAM,MAAV,IAAI,CAAQ,CAAA;IACrB,CAAC;IAQD,IAAI;QACF,IAAI,EAAE,GAAG,uBAAA,IAAI,iCAAM,MAAV,IAAI,CAAQ,CAAA;QACrB,IAAI,EAAE,GAAG,uBAAA,IAAI,iCAAM,MAAV,IAAI,CAAQ,CAAA;QACrB,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,IAAI;QACF,IAAI,EAAE,GAAG,uBAAA,IAAI,iCAAM,MAAV,IAAI,CAAQ,CAAA;QACrB,IAAI,EAAE,GAAG,uBAAA,IAAI,iCAAM,MAAV,IAAI,CAAQ,CAAA;QACrB,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,sBAAsB,CAAC,CAAA;QACpD,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;QACvD,IAAI,CAAC,GAAG,IAAI,iBAAS,CAAA;QACrB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,MAAM;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QACtB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC/F,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI;QACF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAA;IACpB,CAAC;IAEO,YAAY,CAAC,GAAW;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,yBAAyB,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IAEM,QAAQ,CAAC,GAAW;QACzB,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,UAAU,CAAC,kCAAkC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QAC5E,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAA;QACtB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA;IACxB,CAAC;CACF;AA3JD,kBA2JC;;IAxGG,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACjD,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IACb,OAAO,GAAG,CAAA;AACZ,CAAC;IAQC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAChD,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IACb,OAAO,GAAG,CAAA;AACZ,CAAC;IAQC,IAAI,EAAE,GAAG,uBAAA,IAAI,gCAAK,MAAT,IAAI,CAAO,CAAA;IACpB,IAAI,EAAE,GAAG,uBAAA,IAAI,gCAAK,MAAT,IAAI,CAAO,CAAA;IACpB,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAA;AACzB,CAAC;IAQC,IAAI,EAAE,GAAG,uBAAA,IAAI,gCAAK,MAAT,IAAI,CAAO,CAAA;IACpB,IAAI,EAAE,GAAG,uBAAA,IAAI,gCAAK,MAAT,IAAI,CAAO,CAAA;IACpB,OAAO,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAA;AACzB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@subsquid/evm-codec",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "EVM encoder/decoder tools",
|
|
5
|
+
"license": "GPL-3.0-or-later",
|
|
6
|
+
"repository": "git@github.com:subsquid/squid.git",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"main": "lib/index.js",
|
|
11
|
+
"files": [
|
|
12
|
+
"lib",
|
|
13
|
+
"src"
|
|
14
|
+
],
|
|
15
|
+
"dependencies": {},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@types/node": "^18.18.14",
|
|
18
|
+
"ethers": "^5.7.2",
|
|
19
|
+
"typescript": "~5.3.2",
|
|
20
|
+
"viem": "^2.8.14",
|
|
21
|
+
"vitest": "^1.4.0"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "rm -rf lib && tsc -p tsconfig.build.json"
|
|
25
|
+
}
|
|
26
|
+
}
|
package/src/codec.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Sink } from './sink'
|
|
2
|
+
import type { Src } from './src'
|
|
3
|
+
|
|
4
|
+
export const WORD_SIZE = 32
|
|
5
|
+
|
|
6
|
+
export interface Codec<T> {
|
|
7
|
+
encode(sink: Sink, val: T): void
|
|
8
|
+
decode(src: Src): T
|
|
9
|
+
isDynamic: boolean
|
|
10
|
+
slotsCount?: number
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type Struct = {
|
|
14
|
+
[key: string]: Codec<any>
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type Pretty<T> = { [K in keyof T]: T[K] } & unknown
|
|
18
|
+
|
|
19
|
+
export type StructTypes<T extends Struct> = Pretty<{
|
|
20
|
+
[K in keyof T]: T[K] extends Codec<infer U> ? U : never
|
|
21
|
+
}>
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Codec, WORD_SIZE } from '../codec'
|
|
2
|
+
import { Sink } from '../sink'
|
|
3
|
+
import { Src } from '../src'
|
|
4
|
+
|
|
5
|
+
export class ArrayCodec<const T> implements Codec<readonly T[]> {
|
|
6
|
+
public readonly isDynamic = true
|
|
7
|
+
|
|
8
|
+
constructor(public readonly item: Codec<T>) {}
|
|
9
|
+
|
|
10
|
+
encode(sink: Sink, val: T[]) {
|
|
11
|
+
sink.newDynamicDataArea(val.length)
|
|
12
|
+
for (let i = 0; i < val.length; i++) {
|
|
13
|
+
this.item.encode(sink, val[i])
|
|
14
|
+
}
|
|
15
|
+
sink.increaseCurrentDataAreaSize(WORD_SIZE)
|
|
16
|
+
sink.endCurrentDataArea()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
decode(src: Src): T[] {
|
|
20
|
+
const offset = src.u32()
|
|
21
|
+
|
|
22
|
+
src.safeJump(offset)
|
|
23
|
+
const len = src.u32()
|
|
24
|
+
|
|
25
|
+
const tmpSrc = src.slice(offset + WORD_SIZE)
|
|
26
|
+
const val = new Array(len)
|
|
27
|
+
for (let i = 0; i < val.length; i++) {
|
|
28
|
+
val[i] = this.item.decode(tmpSrc)
|
|
29
|
+
}
|
|
30
|
+
src.jumpBack()
|
|
31
|
+
return val
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class FixedSizeArrayCodec<const T> implements Codec<readonly T[]> {
|
|
36
|
+
public isDynamic: boolean
|
|
37
|
+
public slotsCount: number
|
|
38
|
+
constructor(public readonly item: Codec<T>, public readonly size: number) {
|
|
39
|
+
this.isDynamic = item.isDynamic && size > 0
|
|
40
|
+
this.slotsCount = this.isDynamic ? 1 : size
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
encode(sink: Sink, val: T[]) {
|
|
44
|
+
if (val.length !== this.size) {
|
|
45
|
+
throw new Error(`invalid array length: ${val.length}. Expected: ${this.size}`)
|
|
46
|
+
}
|
|
47
|
+
if (this.isDynamic) {
|
|
48
|
+
return this.encodeDynamic(sink, val)
|
|
49
|
+
}
|
|
50
|
+
for (let i = 0; i < this.size; i++) {
|
|
51
|
+
this.item.encode(sink, val[i])
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private encodeDynamic(sink: Sink, val: T[]) {
|
|
56
|
+
sink.newStaticDataArea(this.size)
|
|
57
|
+
for (let i = 0; i < val.length; i++) {
|
|
58
|
+
this.item.encode(sink, val[i])
|
|
59
|
+
}
|
|
60
|
+
sink.endCurrentDataArea()
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
decode(src: Src): T[] {
|
|
64
|
+
if (this.isDynamic) {
|
|
65
|
+
return this.decodeDynamic(src)
|
|
66
|
+
}
|
|
67
|
+
let val = new Array(this.size)
|
|
68
|
+
for (let i = 0; i < val.length; i++) {
|
|
69
|
+
val[i] = this.item.decode(src)
|
|
70
|
+
}
|
|
71
|
+
return val
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
private decodeDynamic(src: Src): T[] {
|
|
75
|
+
const offset = src.u32()
|
|
76
|
+
const tmpSrc = src.slice(offset)
|
|
77
|
+
let val = new Array(this.size)
|
|
78
|
+
for (let i = 0; i < val.length; i++) {
|
|
79
|
+
val[i] = this.item.decode(tmpSrc)
|
|
80
|
+
}
|
|
81
|
+
return val
|
|
82
|
+
}
|
|
83
|
+
}
|