@qevm/abi 5.7.1

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.
Files changed (83) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +52 -0
  3. package/lib/_version.d.ts +2 -0
  4. package/lib/_version.d.ts.map +1 -0
  5. package/lib/_version.js +5 -0
  6. package/lib/_version.js.map +1 -0
  7. package/lib/abi-coder.d.ts +17 -0
  8. package/lib/abi-coder.d.ts.map +1 -0
  9. package/lib/abi-coder.js +99 -0
  10. package/lib/abi-coder.js.map +1 -0
  11. package/lib/coders/abstract-coder.d.ts +53 -0
  12. package/lib/coders/abstract-coder.d.ts.map +1 -0
  13. package/lib/coders/abstract-coder.js +153 -0
  14. package/lib/coders/abstract-coder.js.map +1 -0
  15. package/lib/coders/address.d.ts +8 -0
  16. package/lib/coders/address.d.ts.map +1 -0
  17. package/lib/coders/address.js +28 -0
  18. package/lib/coders/address.js.map +1 -0
  19. package/lib/coders/anonymous.d.ts +9 -0
  20. package/lib/coders/anonymous.d.ts.map +1 -0
  21. package/lib/coders/anonymous.js +22 -0
  22. package/lib/coders/anonymous.js.map +1 -0
  23. package/lib/coders/array.d.ts +14 -0
  24. package/lib/coders/array.d.ts.map +1 -0
  25. package/lib/coders/array.js +214 -0
  26. package/lib/coders/array.js.map +1 -0
  27. package/lib/coders/boolean.d.ts +8 -0
  28. package/lib/coders/boolean.d.ts.map +1 -0
  29. package/lib/coders/boolean.js +20 -0
  30. package/lib/coders/boolean.js.map +1 -0
  31. package/lib/coders/bytes.d.ts +12 -0
  32. package/lib/coders/bytes.d.ts.map +1 -0
  33. package/lib/coders/bytes.js +33 -0
  34. package/lib/coders/bytes.js.map +1 -0
  35. package/lib/coders/fixed-bytes.d.ts +10 -0
  36. package/lib/coders/fixed-bytes.d.ts.map +1 -0
  37. package/lib/coders/fixed-bytes.js +28 -0
  38. package/lib/coders/fixed-bytes.js.map +1 -0
  39. package/lib/coders/null.d.ts +8 -0
  40. package/lib/coders/null.d.ts.map +1 -0
  41. package/lib/coders/null.js +24 -0
  42. package/lib/coders/null.js.map +1 -0
  43. package/lib/coders/number.d.ts +11 -0
  44. package/lib/coders/number.d.ts.map +1 -0
  45. package/lib/coders/number.js +45 -0
  46. package/lib/coders/number.js.map +1 -0
  47. package/lib/coders/string.d.ts +9 -0
  48. package/lib/coders/string.d.ts.map +1 -0
  49. package/lib/coders/string.js +21 -0
  50. package/lib/coders/string.js.map +1 -0
  51. package/lib/coders/tuple.d.ts +11 -0
  52. package/lib/coders/tuple.d.ts.map +1 -0
  53. package/lib/coders/tuple.js +60 -0
  54. package/lib/coders/tuple.js.map +1 -0
  55. package/lib/fragments.d.ts +85 -0
  56. package/lib/fragments.d.ts.map +1 -0
  57. package/lib/fragments.js +863 -0
  58. package/lib/fragments.js.map +1 -0
  59. package/lib/index.d.ts +5 -0
  60. package/lib/index.d.ts.map +1 -0
  61. package/lib/index.js +21 -0
  62. package/lib/index.js.map +1 -0
  63. package/lib/interface.d.ts +89 -0
  64. package/lib/interface.d.ts.map +1 -0
  65. package/lib/interface.js +617 -0
  66. package/lib/interface.js.map +1 -0
  67. package/package.json +33 -0
  68. package/src.ts/_version.ts +1 -0
  69. package/src.ts/abi-coder.ts +123 -0
  70. package/src.ts/coders/abstract-coder.ts +207 -0
  71. package/src.ts/coders/address.ts +31 -0
  72. package/src.ts/coders/anonymous.ts +25 -0
  73. package/src.ts/coders/array.ts +236 -0
  74. package/src.ts/coders/boolean.ts +23 -0
  75. package/src.ts/coders/bytes.ts +38 -0
  76. package/src.ts/coders/fixed-bytes.ts +30 -0
  77. package/src.ts/coders/null.ts +24 -0
  78. package/src.ts/coders/number.ts +57 -0
  79. package/src.ts/coders/string.ts +25 -0
  80. package/src.ts/coders/tuple.ts +61 -0
  81. package/src.ts/fragments.ts +1070 -0
  82. package/src.ts/index.ts +34 -0
  83. package/src.ts/interface.ts +715 -0
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ import { arrayify, hexlify } from "@qevm/bytes";
4
+
5
+ import { Coder, Reader, Writer } from "./abstract-coder";
6
+
7
+ export class DynamicBytesCoder extends Coder {
8
+ constructor(type: string, localName: string) {
9
+ super(type, type, localName, true);
10
+ }
11
+
12
+ defaultValue(): string {
13
+ return "0x";
14
+ }
15
+
16
+ encode(writer: Writer, value: any): number {
17
+ value = arrayify(value);
18
+ let length = writer.writeValue(value.length);
19
+ length += writer.writeBytes(value);
20
+ return length;
21
+ }
22
+
23
+ decode(reader: Reader): any {
24
+ return reader.readBytes(reader.readValue().toNumber(), true);
25
+ }
26
+ }
27
+
28
+ export class BytesCoder extends DynamicBytesCoder {
29
+ constructor(localName: string) {
30
+ super("bytes", localName);
31
+ }
32
+
33
+ decode(reader: Reader): any {
34
+ return reader.coerce(this.name, hexlify(super.decode(reader)));
35
+ }
36
+ }
37
+
38
+
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ import { arrayify, BytesLike, hexlify } from "@qevm/bytes";
4
+
5
+ import { Coder, Reader, Writer } from "./abstract-coder";
6
+
7
+ // @TODO: Merge this with bytes
8
+ export class FixedBytesCoder extends Coder {
9
+ readonly size: number;
10
+
11
+ constructor(size: number, localName: string) {
12
+ let name = "bytes" + String(size);
13
+ super(name, name, localName, false);
14
+ this.size = size;
15
+ }
16
+
17
+ defaultValue(): string {
18
+ return ("0x0000000000000000000000000000000000000000000000000000000000000000").substring(0, 2 + this.size * 2);
19
+ }
20
+
21
+ encode(writer: Writer, value: BytesLike): number {
22
+ let data = arrayify(value);
23
+ if (data.length !== this.size) { this._throwError("incorrect data length", value); }
24
+ return writer.writeBytes(data);
25
+ }
26
+
27
+ decode(reader: Reader): any {
28
+ return reader.coerce(this.name, hexlify(reader.readBytes(this.size)));
29
+ }
30
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ import { Coder, Reader, Writer } from "./abstract-coder";
4
+
5
+ export class NullCoder extends Coder {
6
+
7
+ constructor(localName: string) {
8
+ super("null", "", localName, false);
9
+ }
10
+
11
+ defaultValue(): null {
12
+ return null;
13
+ }
14
+
15
+ encode(writer: Writer, value: any): number {
16
+ if (value != null) { this._throwError("not null", value); }
17
+ return writer.writeBytes([ ]);
18
+ }
19
+
20
+ decode(reader: Reader): any {
21
+ reader.readBytes(0);
22
+ return reader.coerce(this.name, null);
23
+ }
24
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ import { BigNumber, BigNumberish } from "@qevm/bignumber";
4
+ import { MaxUint256, NegativeOne, One, Zero } from "@qevm/constants";
5
+
6
+ import { Coder, Reader, Writer } from "./abstract-coder";
7
+
8
+ export class NumberCoder extends Coder {
9
+ readonly size: number;
10
+ readonly signed: boolean;
11
+
12
+ constructor(size: number, signed: boolean, localName: string) {
13
+ const name = ((signed ? "int": "uint") + (size * 8));
14
+ super(name, name, localName, false);
15
+
16
+ this.size = size;
17
+ this.signed = signed;
18
+ }
19
+
20
+ defaultValue(): number {
21
+ return 0;
22
+ }
23
+
24
+ encode(writer: Writer, value: BigNumberish): number {
25
+ let v = BigNumber.from(value);
26
+
27
+ // Check bounds are safe for encoding
28
+ let maxUintValue = MaxUint256.mask(writer.wordSize * 8);
29
+ if (this.signed) {
30
+ let bounds = maxUintValue.mask(this.size * 8 - 1);
31
+ if (v.gt(bounds) || v.lt(bounds.add(One).mul(NegativeOne))) {
32
+ this._throwError("value out-of-bounds", value);
33
+ }
34
+ } else if (v.lt(Zero) || v.gt(maxUintValue.mask(this.size * 8))) {
35
+ this._throwError("value out-of-bounds", value);
36
+ }
37
+
38
+ v = v.toTwos(this.size * 8).mask(this.size * 8);
39
+
40
+ if (this.signed) {
41
+ v = v.fromTwos(this.size * 8).toTwos(8 * writer.wordSize);
42
+ }
43
+
44
+ return writer.writeValue(v);
45
+ }
46
+
47
+ decode(reader: Reader): any {
48
+ let value = reader.readValue().mask(this.size * 8);
49
+
50
+ if (this.signed) {
51
+ value = value.fromTwos(this.size * 8);
52
+ }
53
+
54
+ return reader.coerce(this.name, value);
55
+ }
56
+ }
57
+
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ import { toUtf8Bytes, toUtf8String } from "@ethersproject/strings";
4
+
5
+ import { Reader, Writer } from "./abstract-coder";
6
+ import { DynamicBytesCoder } from "./bytes";
7
+
8
+ export class StringCoder extends DynamicBytesCoder {
9
+
10
+ constructor(localName: string) {
11
+ super("string", localName);
12
+ }
13
+
14
+ defaultValue(): string {
15
+ return "";
16
+ }
17
+
18
+ encode(writer: Writer, value: any): number {
19
+ return super.encode(writer, toUtf8Bytes(value));
20
+ }
21
+
22
+ decode(reader: Reader): any {
23
+ return toUtf8String(super.decode(reader));
24
+ }
25
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ import { Coder, Reader, Writer } from "./abstract-coder";
4
+ import { pack, unpack } from "./array";
5
+
6
+ export class TupleCoder extends Coder {
7
+ readonly coders: Array<Coder>;
8
+
9
+ constructor(coders: Array<Coder>, localName: string) {
10
+ let dynamic = false;
11
+ const types: Array<string> = [];
12
+ coders.forEach((coder) => {
13
+ if (coder.dynamic) { dynamic = true; }
14
+ types.push(coder.type);
15
+ });
16
+ const type = ("tuple(" + types.join(",") + ")");
17
+
18
+ super("tuple", type, localName, dynamic);
19
+ this.coders = coders;
20
+ }
21
+
22
+ defaultValue(): any {
23
+ const values: any = [ ];
24
+ this.coders.forEach((coder) => {
25
+ values.push(coder.defaultValue());
26
+ });
27
+
28
+ // We only output named properties for uniquely named coders
29
+ const uniqueNames = this.coders.reduce((accum, coder) => {
30
+ const name = coder.localName;
31
+ if (name) {
32
+ if (!accum[name]) { accum[name] = 0; }
33
+ accum[name]++;
34
+ }
35
+ return accum;
36
+ }, <{ [ name: string ]: number }>{ });
37
+
38
+ // Add named values
39
+ this.coders.forEach((coder: Coder, index: number) => {
40
+ let name = coder.localName;
41
+ if (!name || uniqueNames[name] !== 1) { return; }
42
+
43
+ if (name === "length") { name = "_length"; }
44
+
45
+ if (values[name] != null) { return; }
46
+
47
+ values[name] = values[index];
48
+ });
49
+
50
+ return Object.freeze(values);
51
+ }
52
+
53
+ encode(writer: Writer, value: Array<any> | { [ name: string ]: any }): number {
54
+ return pack(writer, this.coders, value);
55
+ }
56
+
57
+ decode(reader: Reader): any {
58
+ return reader.coerce(this.name, unpack(reader, this.coders));
59
+ }
60
+ }
61
+