@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/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;IAOd,EAAE,CAAC,GAAG,EAAE,MAAM;IAId,GAAG,CAAC,GAAG,EAAE,MAAM;IAOf,GAAG,CAAC,GAAG,EAAE,MAAM;IAIf,GAAG,CAAC,GAAG,EAAE,MAAM;IAOf,GAAG,CAAC,GAAG,EAAE,MAAM;IAIf,GAAG,CAAC,GAAG,EAAE,MAAM;IAOf,GAAG,CAAC,GAAG,EAAE,MAAM;IASf,IAAI,CAAC,GAAG,EAAE,MAAM;IAOhB,IAAI,CAAC,GAAG,EAAE,MAAM;IAUhB,IAAI,CAAC,GAAG,EAAE,MAAM;IAMhB,IAAI,CAAC,GAAG,EAAE,MAAM;IAMhB,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"}
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.i256(BigInt(val));
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.i256(BigInt(val));
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.i256(BigInt(val));
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.i256(val);
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.i256(BigInt(val));
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
- let base = 2n ** 256n;
102
- val = (val + base) % base;
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":"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"}
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.0.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": "^5.7.2",
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<T> {
7
- encode(sink: Sink, val: T): void
8
- decode(src: Src): T
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 StructTypes<T extends Struct> = Pretty<{
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
  }>
@@ -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 T> implements Codec<readonly T[]> {
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<T>) {}
8
+ constructor(public readonly item: Codec<TIn, TOut>) {}
9
9
 
10
- encode(sink: Sink, val: T[]) {
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): T[] {
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 T> implements Codec<readonly T[]> {
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<T>, public readonly size: number) {
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: T[]) {
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: T[]) {
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): T[] {
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): T[] {
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)
@@ -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: number) {
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: number) {
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: number) {
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: number) {
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: number) {
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: number) {
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: bigint) {
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: bigint) {
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: bigint) {
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: bigint) {
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: bigint) {
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: bigint) {
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
- export const bytes = <const>{
150
- encode(sink: Sink, val: Uint8Array) {
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): Uint8Array {
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): Uint8Array {
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 = <T>(item: Codec<T>, size: number): Codec<T[]> => new FixedSizeArrayCodec(item, size)
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 = <T>(item: Codec<T>): Codec<T[]> => new ArrayCodec(item)
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
+
@@ -1,4 +1,4 @@
1
- import { Codec, Struct, StructTypes } from '../codec'
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<StructTypes<T>> {
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: StructTypes<T>): void {
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: StructTypes<T>): void {
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): StructTypes<T> {
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): StructTypes<T> {
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
@@ -1,4 +1,4 @@
1
1
  export { Src } from './src'
2
2
  export { Sink } from './sink'
3
- export type { Codec, Struct, StructTypes } from './codec'
3
+ export type { Codec, Struct, DecodedStruct, EncodedStruct } from './codec'
4
4
  export * from './codecs/primitives'
@@ -0,0 +1,6 @@
1
+ export function safeToNumber(value: number | bigint): number {
2
+ if (!Number.isSafeInteger(value)) {
3
+ throw new Error(`${value} is not a safe integer`)
4
+ }
5
+ return Number(value)
6
+ }