@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/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
@@ -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
@@ -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":"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"}
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
+ }