o1js-pack 0.4.0 → 0.4.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 (79) hide show
  1. package/.husky/pre-commit +0 -0
  2. package/README.md +9 -30
  3. package/build/src/index.d.ts +5 -5
  4. package/build/src/index.js +5 -5
  5. package/build/src/lib/PackingPlant.d.ts +132 -140
  6. package/build/src/lib/PackingPlant.js +190 -191
  7. package/build/src/lib/PackingPlant.js.map +1 -1
  8. package/build/src/lib/packed-types/PackedBool.d.ts +85 -90
  9. package/build/src/lib/packed-types/PackedBool.js +49 -48
  10. package/build/src/lib/packed-types/PackedBool.js.map +1 -1
  11. package/build/src/lib/packed-types/PackedBool.test.d.ts +1 -1
  12. package/build/src/lib/packed-types/PackedBool.test.js +75 -75
  13. package/build/src/lib/packed-types/PackedString.d.ts +181 -92
  14. package/build/src/lib/packed-types/PackedString.js +127 -59
  15. package/build/src/lib/packed-types/PackedString.js.map +1 -1
  16. package/build/src/lib/packed-types/PackedString.test.d.ts +1 -1
  17. package/build/src/lib/packed-types/PackedString.test.js +100 -99
  18. package/build/src/lib/packed-types/PackedString.test.js.map +1 -1
  19. package/build/src/lib/packed-types/PackedUInt32.d.ts +85 -90
  20. package/build/src/lib/packed-types/PackedUInt32.js +49 -48
  21. package/build/src/lib/packed-types/PackedUInt32.js.map +1 -1
  22. package/build/src/lib/packed-types/PackedUInt32.test.d.ts +1 -1
  23. package/build/src/lib/packed-types/PackedUInt32.test.js +83 -83
  24. package/package.json +1 -1
  25. package/tests/provable/end_to_end.test.ts +2 -4
  26. package/tests/provable/example_packed_string_circuit.ts +3 -8
  27. package/tests/provable/example_packed_uint_circuit.ts +6 -12
  28. package/build/src/lib/packed-types/PackedCharacter.d.ts +0 -51
  29. package/build/src/lib/packed-types/PackedCharacter.js +0 -34
  30. package/build/src/lib/packed-types/PackedCharacter.js.map +0 -1
  31. package/build/src/lib/packed-types/PackedCharacter.test.d.ts +0 -1
  32. package/build/src/lib/packed-types/PackedCharacter.test.js +0 -31
  33. package/build/src/lib/packed-types/PackedCharacter.test.js.map +0 -1
  34. package/build/src/lib/scratch.d.ts +0 -1
  35. package/build/src/lib/scratch.js +0 -16
  36. package/build/src/lib/scratch.js.map +0 -1
  37. package/build/src/packed-types/PackedBool.d.ts +0 -51
  38. package/build/src/packed-types/PackedBool.js +0 -34
  39. package/build/src/packed-types/PackedBool.js.map +0 -1
  40. package/build/src/packed-types/PackedBool.test.d.ts +0 -1
  41. package/build/src/packed-types/PackedBool.test.js +0 -101
  42. package/build/src/packed-types/PackedBool.test.js.map +0 -1
  43. package/build/src/packed-types/PackedCharacter.d.ts +0 -51
  44. package/build/src/packed-types/PackedCharacter.js +0 -34
  45. package/build/src/packed-types/PackedCharacter.js.map +0 -1
  46. package/build/src/packed-types/PackedCharacter.test.d.ts +0 -1
  47. package/build/src/packed-types/PackedCharacter.test.js +0 -31
  48. package/build/src/packed-types/PackedCharacter.test.js.map +0 -1
  49. package/build/src/packed-types/PackedUInt32.d.ts +0 -51
  50. package/build/src/packed-types/PackedUInt32.js +0 -34
  51. package/build/src/packed-types/PackedUInt32.js.map +0 -1
  52. package/build/src/packed-types/PackedUInt32.test.d.ts +0 -1
  53. package/build/src/packed-types/PackedUInt32.test.js +0 -68
  54. package/build/src/packed-types/PackedUInt32.test.js.map +0 -1
  55. package/build/src/packed-types/PackingPlant.d.ts +0 -54
  56. package/build/src/packed-types/PackingPlant.js +0 -45
  57. package/build/src/packed-types/PackingPlant.js.map +0 -1
  58. package/build/src/packed-types/scratch.d.ts +0 -1
  59. package/build/src/packed-types/scratch.js +0 -5
  60. package/build/src/packed-types/scratch.js.map +0 -1
  61. package/coverage/clover.xml +0 -166
  62. package/coverage/coverage-final.json +0 -5
  63. package/coverage/lcov-report/PackedBool.ts.html +0 -268
  64. package/coverage/lcov-report/PackedUInt32.ts.html +0 -313
  65. package/coverage/lcov-report/base.css +0 -224
  66. package/coverage/lcov-report/block-navigation.js +0 -87
  67. package/coverage/lcov-report/favicon.png +0 -0
  68. package/coverage/lcov-report/index.html +0 -131
  69. package/coverage/lcov-report/lib/PackingPlant.ts.html +0 -478
  70. package/coverage/lcov-report/lib/index.html +0 -116
  71. package/coverage/lcov-report/lib/packed-types/PackedBool.ts.html +0 -238
  72. package/coverage/lcov-report/lib/packed-types/PackedString.ts.html +0 -364
  73. package/coverage/lcov-report/lib/packed-types/PackedUInt32.ts.html +0 -238
  74. package/coverage/lcov-report/lib/packed-types/index.html +0 -146
  75. package/coverage/lcov-report/prettify.css +0 -1
  76. package/coverage/lcov-report/prettify.js +0 -2
  77. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  78. package/coverage/lcov-report/sorter.js +0 -196
  79. package/coverage/lcov.info +0 -282
@@ -1,49 +1,50 @@
1
- import { Provable, UInt32 } from 'o1js';
2
- import { PackingPlant } from '../PackingPlant.js';
3
- const L = 7; // 7 32-bit uints fit in one Field
4
- const SIZE_IN_BITS = 32n;
5
- export function PackedUInt32Factory(l = L) {
6
- class PackedUInt32_ extends PackingPlant(UInt32, l, SIZE_IN_BITS) {
7
- static extractField(input) {
8
- return input.value;
9
- }
10
- static sizeInBits() {
11
- return SIZE_IN_BITS;
12
- }
13
- /**
14
- *
15
- * @param f Field, packed with the information, as returned by #pack
16
- * @returns Array of UInt32
17
- */
18
- static unpack(f) {
19
- const unpacked = Provable.witness(Provable.Array(UInt32, l), () => {
20
- const unpacked = this.unpackToBigints(f);
21
- return unpacked.map((x) => UInt32.from(x));
22
- });
23
- return unpacked;
24
- }
25
- /**
26
- *
27
- * @param uint32s Array of UInt32s to be packed
28
- * @returns Instance of the implementing class
29
- */
30
- static fromUInt32s(uint32s) {
31
- const packed = PackedUInt32_.pack(uint32s);
32
- return new PackedUInt32_(packed);
33
- }
34
- /**
35
- *
36
- * @param bigints Array of bigints to be packed
37
- * @returns Instance of the implementing class
38
- */
39
- static fromBigInts(bigints) {
40
- const uint32s = bigints.map((x) => UInt32.from(x));
41
- return PackedUInt32_.fromUInt32s(uint32s);
42
- }
43
- toBigInts() {
44
- return PackedUInt32_.unpack(this.packed).map((x) => x.toBigint());
45
- }
46
- }
47
- return PackedUInt32_;
48
- }
1
+ import { Provable, UInt32 } from 'o1js';
2
+ import { PackingPlant } from '../PackingPlant.js';
3
+ const L = 7; // 7 32-bit uints fit in one Field
4
+ const SIZE_IN_BITS = 32n;
5
+ export function PackedUInt32Factory(l = L) {
6
+ class PackedUInt32_ extends PackingPlant(UInt32, l, SIZE_IN_BITS) {
7
+ static extractField(input) {
8
+ return input.value;
9
+ }
10
+ static sizeInBits() {
11
+ return SIZE_IN_BITS;
12
+ }
13
+ /**
14
+ *
15
+ * @param f Field, packed with the information, as returned by #pack
16
+ * @returns Array of UInt32
17
+ */
18
+ static unpack(f) {
19
+ const unpacked = Provable.witness(Provable.Array(UInt32, l), () => {
20
+ const unpacked = this.unpackToBigints(f);
21
+ return unpacked.map((x) => UInt32.from(x));
22
+ });
23
+ f.assertEquals(PackedUInt32_.pack(unpacked));
24
+ return unpacked;
25
+ }
26
+ /**
27
+ *
28
+ * @param uint32s Array of UInt32s to be packed
29
+ * @returns Instance of the implementing class
30
+ */
31
+ static fromUInt32s(uint32s) {
32
+ const packed = PackedUInt32_.pack(uint32s);
33
+ return new PackedUInt32_(packed);
34
+ }
35
+ /**
36
+ *
37
+ * @param bigints Array of bigints to be packed
38
+ * @returns Instance of the implementing class
39
+ */
40
+ static fromBigInts(bigints) {
41
+ const uint32s = bigints.map((x) => UInt32.from(x));
42
+ return PackedUInt32_.fromUInt32s(uint32s);
43
+ }
44
+ toBigInts() {
45
+ return PackedUInt32_.unpack(this.packed).map((x) => x.toBigint());
46
+ }
47
+ }
48
+ return PackedUInt32_;
49
+ }
49
50
  //# sourceMappingURL=PackedUInt32.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PackedUInt32.js","sourceRoot":"","sources":["../../../../src/lib/packed-types/PackedUInt32.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,kCAAkC;AAC/C,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,MAAM,UAAU,mBAAmB,CAAC,IAAY,CAAC;IAC/C,MAAM,aAAc,SAAQ,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,YAAY,CAAC;QAC/D,MAAM,CAAC,YAAY,CAAC,KAAa;YAC/B,OAAO,KAAK,CAAC,KAAK,CAAC;QACrB,CAAC;QAED,MAAM,CAAC,UAAU;YACf,OAAO,YAAY,CAAC;QACtB,CAAC;QAED;;;;WAIG;QACH,MAAM,CAAC,MAAM,CAAC,CAAQ;YACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE;gBAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED;;;;WAIG;QACH,MAAM,CAAC,WAAW,CAAC,OAAsB;YACvC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED;;;;WAIG;QACH,MAAM,CAAC,WAAW,CAAC,OAAsB;YACvC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;QAED,SAAS;YACP,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;KACF;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"PackedUInt32.js","sourceRoot":"","sources":["../../../../src/lib/packed-types/PackedUInt32.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,kCAAkC;AAC/C,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,MAAM,UAAU,mBAAmB,CAAC,IAAY,CAAC;IAC/C,MAAM,aAAc,SAAQ,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,YAAY,CAAC;QAC/D,MAAM,CAAC,YAAY,CAAC,KAAa;YAC/B,OAAO,KAAK,CAAC,KAAK,CAAC;QACrB,CAAC;QAED,MAAM,CAAC,UAAU;YACf,OAAO,YAAY,CAAC;QACtB,CAAC;QAED;;;;WAIG;QACH,MAAM,CAAC,MAAM,CAAC,CAAQ;YACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE;gBAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7C,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED;;;;WAIG;QACH,MAAM,CAAC,WAAW,CAAC,OAAsB;YACvC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3C,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAED;;;;WAIG;QACH,MAAM,CAAC,WAAW,CAAC,OAAsB;YACvC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;QAED,SAAS;YACP,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;KACF;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1,84 +1,84 @@
1
- import { Provable, UInt32 } from 'o1js';
2
- import { PackedUInt32Factory } from './PackedUInt32';
3
- describe('PackedUInt32', () => {
4
- class PackedUInt32 extends PackedUInt32Factory() {
5
- }
6
- describe('Outside of the circuit', () => {
7
- const bigints = [10n, 2n ** 32n - 1n, 0n, 10n, 2n ** 32n - 100n, 42n, 0n];
8
- const uints = bigints.map((x) => UInt32.from(x));
9
- it('#fromBigInts', () => {
10
- const myPackedUInt32 = PackedUInt32.fromBigInts(bigints);
11
- expect(myPackedUInt32.toBigInts()).toMatchObject(bigints);
12
- });
13
- it('#pack and #unPack', () => {
14
- const packed = PackedUInt32.pack(uints);
15
- const unpacked = PackedUInt32.unpack(packed);
16
- expect(unpacked.length).toBe(uints.length);
17
- expect(unpacked).toMatchObject(uints);
18
- });
19
- });
20
- describe('Provable Properties', () => {
21
- it('#sizeInFields', () => {
22
- class one extends PackedUInt32Factory(1) {
23
- }
24
- class seven extends PackedUInt32Factory(7) {
25
- }
26
- expect(one.sizeInFields()).toBe(1);
27
- expect(seven.sizeInFields()).toBe(1);
28
- });
29
- });
30
- describe('Defensive Cases', () => {
31
- it('throws for input >= 8 uints', () => {
32
- expect(() => PackedUInt32Factory(7)).not.toThrow();
33
- expect(() => PackedUInt32Factory(8)).toThrow();
34
- });
35
- it('initalizes with more input than allowed', () => {
36
- const bigints = [
37
- 10n,
38
- 2n ** 32n - 1n,
39
- 0n,
40
- 10n,
41
- 2n ** 32n - 100n,
42
- 42n,
43
- 0n,
44
- 0n,
45
- ];
46
- expect(() => {
47
- PackedUInt32.fromBigInts(bigints);
48
- }).toThrow();
49
- });
50
- it('initalizes with less input than specified', () => {
51
- const bigints = [10n];
52
- const expected = [10n, 0n, 0n, 0n, 0n, 0n, 0n];
53
- expect(PackedUInt32.fromBigInts(bigints).toBigInts()).toMatchObject(expected);
54
- });
55
- });
56
- describe('In the circuit', () => {
57
- const bigints = [10n, 2n ** 32n - 1n, 0n, 10n, 2n ** 32n - 100n, 42n, 0n];
58
- const outsidePackedUInt = PackedUInt32.fromBigInts(bigints);
59
- it('Initializes', () => {
60
- expect(() => {
61
- Provable.runAndCheck(() => {
62
- const packedUInt32 = new PackedUInt32(outsidePackedUInt.packed);
63
- PackedUInt32.check({ packed: packedUInt32.packed });
64
- });
65
- }).not.toThrow();
66
- });
67
- it('#assertEquals', () => {
68
- expect(() => {
69
- Provable.runAndCheck(() => {
70
- const packedUInt32 = new PackedUInt32(outsidePackedUInt.packed);
71
- packedUInt32.assertEquals(outsidePackedUInt);
72
- });
73
- }).not.toThrow();
74
- expect(() => {
75
- Provable.runAndCheck(() => {
76
- const fakePacked = outsidePackedUInt.packed.add(32);
77
- const packedUInt32 = new PackedUInt32(fakePacked);
78
- packedUInt32.assertEquals(outsidePackedUInt);
79
- });
80
- }).toThrow();
81
- });
82
- });
83
- });
1
+ import { Provable, UInt32 } from 'o1js';
2
+ import { PackedUInt32Factory } from './PackedUInt32';
3
+ describe('PackedUInt32', () => {
4
+ class PackedUInt32 extends PackedUInt32Factory() {
5
+ }
6
+ describe('Outside of the circuit', () => {
7
+ const bigints = [10n, 2n ** 32n - 1n, 0n, 10n, 2n ** 32n - 100n, 42n, 0n];
8
+ const uints = bigints.map((x) => UInt32.from(x));
9
+ it('#fromBigInts', () => {
10
+ const myPackedUInt32 = PackedUInt32.fromBigInts(bigints);
11
+ expect(myPackedUInt32.toBigInts()).toMatchObject(bigints);
12
+ });
13
+ it('#pack and #unPack', () => {
14
+ const packed = PackedUInt32.pack(uints);
15
+ const unpacked = PackedUInt32.unpack(packed);
16
+ expect(unpacked.length).toBe(uints.length);
17
+ expect(unpacked).toMatchObject(uints);
18
+ });
19
+ });
20
+ describe('Provable Properties', () => {
21
+ it('#sizeInFields', () => {
22
+ class one extends PackedUInt32Factory(1) {
23
+ }
24
+ class seven extends PackedUInt32Factory(7) {
25
+ }
26
+ expect(one.sizeInFields()).toBe(1);
27
+ expect(seven.sizeInFields()).toBe(1);
28
+ });
29
+ });
30
+ describe('Defensive Cases', () => {
31
+ it('throws for input >= 8 uints', () => {
32
+ expect(() => PackedUInt32Factory(7)).not.toThrow();
33
+ expect(() => PackedUInt32Factory(8)).toThrow();
34
+ });
35
+ it('initalizes with more input than allowed', () => {
36
+ const bigints = [
37
+ 10n,
38
+ 2n ** 32n - 1n,
39
+ 0n,
40
+ 10n,
41
+ 2n ** 32n - 100n,
42
+ 42n,
43
+ 0n,
44
+ 0n,
45
+ ];
46
+ expect(() => {
47
+ PackedUInt32.fromBigInts(bigints);
48
+ }).toThrow();
49
+ });
50
+ it('initalizes with less input than specified', () => {
51
+ const bigints = [10n];
52
+ const expected = [10n, 0n, 0n, 0n, 0n, 0n, 0n];
53
+ expect(PackedUInt32.fromBigInts(bigints).toBigInts()).toMatchObject(expected);
54
+ });
55
+ });
56
+ describe('In the circuit', () => {
57
+ const bigints = [10n, 2n ** 32n - 1n, 0n, 10n, 2n ** 32n - 100n, 42n, 0n];
58
+ const outsidePackedUInt = PackedUInt32.fromBigInts(bigints);
59
+ it('Initializes', () => {
60
+ expect(() => {
61
+ Provable.runAndCheck(() => {
62
+ const packedUInt32 = new PackedUInt32(outsidePackedUInt.packed);
63
+ PackedUInt32.check({ packed: packedUInt32.packed });
64
+ });
65
+ }).not.toThrow();
66
+ });
67
+ it('#assertEquals', () => {
68
+ expect(() => {
69
+ Provable.runAndCheck(() => {
70
+ const packedUInt32 = new PackedUInt32(outsidePackedUInt.packed);
71
+ packedUInt32.assertEquals(outsidePackedUInt);
72
+ });
73
+ }).not.toThrow();
74
+ expect(() => {
75
+ Provable.runAndCheck(() => {
76
+ const fakePacked = outsidePackedUInt.packed.add(32);
77
+ const packedUInt32 = new PackedUInt32(fakePacked);
78
+ packedUInt32.assertEquals(outsidePackedUInt);
79
+ });
80
+ }).toThrow();
81
+ });
82
+ });
83
+ });
84
84
  //# sourceMappingURL=PackedUInt32.test.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "o1js-pack",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "",
5
5
  "author": "45930",
6
6
  "license": "Apache-2.0",
@@ -56,12 +56,10 @@ describe('End to End Text Input Test', () => {
56
56
  const p1 = await TextInputProgram.changeFirstLetter(
57
57
  proofTextInput,
58
58
  initProof,
59
- TextInput.unpack(new TextInput(initProof.publicInput.packed).packed),
59
+ TextInput.unpack(initProof.publicInput.packed),
60
60
  Character.fromString('Z')
61
61
  );
62
- Poseidon.hash(proofTextInput.packed).assertEquals(
63
- Poseidon.hash(p1.publicInput.packed)
64
- );
62
+ proofTextInput.assertEquals(p1.publicInput);
65
63
  });
66
64
  });
67
65
  });
@@ -6,10 +6,9 @@ import {
6
6
  Provable,
7
7
  Field,
8
8
  } from 'o1js';
9
- import { PackedStringFactory } from '../../src/lib/packed-types/PackedString';
9
+ import { MultiPackedStringFactory } from '../../src/lib/packed-types/PackedString';
10
10
 
11
- const MAX_LENGTH = 32;
12
- export class TextInput extends PackedStringFactory(MAX_LENGTH) {}
11
+ export class TextInput extends MultiPackedStringFactory(3) {}
13
12
 
14
13
  export const TextInputProgram = Experimental.ZkProgram({
15
14
  publicInput: TextInput,
@@ -23,11 +22,7 @@ export const TextInputProgram = Experimental.ZkProgram({
23
22
  },
24
23
  },
25
24
  changeFirstLetter: {
26
- privateInputs: [
27
- SelfProof,
28
- Provable.Array(Character, MAX_LENGTH),
29
- Character,
30
- ],
25
+ privateInputs: [SelfProof, Provable.Array(Character, 45), Character],
31
26
  method(
32
27
  newState: TextInput,
33
28
  oldProof: SelfProof<TextInput, TextInput>,
@@ -18,24 +18,18 @@ export const VotesProgram = Experimental.ZkProgram({
18
18
  privateInputs: [SelfProof],
19
19
  method(newState: Votes, oldProof: SelfProof<Votes, Votes>) {
20
20
  oldProof.verify();
21
- const expectedUnpacked = Votes.unpack(oldProof.publicInput.packed);
22
- oldProof.publicInput.packed.assertEquals(
23
- Votes.fromUInt32s(expectedUnpacked).packed
24
- );
25
- expectedUnpacked[0] = expectedUnpacked[0].add(1);
26
- newState.assertEquals(Votes.fromUInt32s(expectedUnpacked));
21
+ const unpacked = Votes.unpack(oldProof.publicInput.packed);
22
+ unpacked[0] = unpacked[0].add(1);
23
+ newState.assertEquals(Votes.fromUInt32s(unpacked));
27
24
  },
28
25
  },
29
26
  incrementIndex1: {
30
27
  privateInputs: [SelfProof],
31
28
  method(newState: Votes, oldProof: SelfProof<Votes, Votes>) {
32
29
  oldProof.verify();
33
- const expectedUnpacked = Votes.unpack(oldProof.publicInput.packed);
34
- oldProof.publicInput.packed.assertEquals(
35
- Votes.fromUInt32s(expectedUnpacked).packed
36
- );
37
- expectedUnpacked[1] = expectedUnpacked[1].add(1);
38
- newState.assertEquals(Votes.fromUInt32s(expectedUnpacked));
30
+ const unpacked = Votes.unpack(oldProof.publicInput.packed);
31
+ unpacked[1] = unpacked[1].add(1);
32
+ newState.assertEquals(Votes.fromUInt32s(unpacked));
39
33
  },
40
34
  },
41
35
  },
@@ -1,51 +0,0 @@
1
- import { Field, Character } from 'snarkyjs';
2
- export declare function PackedCharacterFactory(l: number): {
3
- new (packed: import("snarkyjs/dist/node/lib/field.js").Field, aux: Character[]): {
4
- packed: import("snarkyjs/dist/node/lib/field.js").Field;
5
- aux: Character[];
6
- bitSize: bigint;
7
- };
8
- /**
9
- * Unpacks a Field into its component Character parts
10
- * @param value
11
- * @returns the unpacked auxilliary data used to pack the value
12
- */
13
- toAuxiliary(value?: {
14
- packed: Field;
15
- } | undefined): Character[];
16
- pack(aux: Character[]): Field;
17
- type: import("snarkyjs/dist/node/bindings/lib/provable-snarky.js").ProvableExtended<{
18
- packed: import("snarkyjs/dist/node/lib/field.js").Field;
19
- }, {
20
- packed: string;
21
- }>;
22
- l: number;
23
- unpack(f: import("snarkyjs/dist/node/lib/field.js").Field): Character[];
24
- check(value: {
25
- packed: import("snarkyjs/dist/node/lib/field.js").Field;
26
- }): void;
27
- _isStruct: true;
28
- toFields: (value: {
29
- packed: import("snarkyjs/dist/node/lib/field.js").Field;
30
- }) => import("snarkyjs/dist/node/lib/field.js").Field[];
31
- fromFields: (fields: import("snarkyjs/dist/node/lib/field.js").Field[]) => {
32
- packed: import("snarkyjs/dist/node/lib/field.js").Field;
33
- };
34
- sizeInFields(): number;
35
- toInput: (x: {
36
- packed: import("snarkyjs/dist/node/lib/field.js").Field;
37
- }) => {
38
- fields?: import("snarkyjs/dist/node/lib/field.js").Field[] | undefined;
39
- packed?: [import("snarkyjs/dist/node/lib/field.js").Field, number][] | undefined;
40
- };
41
- toJSON: (x: {
42
- packed: import("snarkyjs/dist/node/lib/field.js").Field;
43
- }) => {
44
- packed: string;
45
- };
46
- fromJSON: (x: {
47
- packed: string;
48
- }) => {
49
- packed: import("snarkyjs/dist/node/lib/field.js").Field;
50
- };
51
- };
@@ -1,34 +0,0 @@
1
- import { Field, Provable, Character } from 'snarkyjs';
2
- import { PackingPlant } from '../PackingPlant.js';
3
- const SIZE_IN_BITS = 16n;
4
- export function PackedCharacterFactory(l) {
5
- class PackedCharacter_ extends PackingPlant(Character, l, SIZE_IN_BITS) {
6
- /**
7
- * Unpacks a Field into its component Character parts
8
- * @param value
9
- * @returns the unpacked auxilliary data used to pack the value
10
- */
11
- static toAuxiliary(value) {
12
- const auxiliary = Provable.witness(Provable.Array(Character, l), () => {
13
- let uints_ = [];
14
- let packedN = value?.packed.toBigInt() || 0n;
15
- for (let i = 0; i < l; i++) {
16
- uints_[i] = packedN & ((1n << SIZE_IN_BITS) - 1n);
17
- packedN >>= SIZE_IN_BITS;
18
- }
19
- return uints_.map((x) => Character.fromString(String.fromCharCode(Number(x))));
20
- });
21
- return auxiliary;
22
- }
23
- static pack(aux) {
24
- let f = Field(0);
25
- for (let i = 0; i < l; i++) {
26
- const c = Field((2n ** SIZE_IN_BITS) ** BigInt(i));
27
- f = f.add(aux[i].value.mul(c));
28
- }
29
- return f;
30
- }
31
- }
32
- return PackedCharacter_;
33
- }
34
- //# sourceMappingURL=PackedCharacter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PackedCharacter.js","sourceRoot":"","sources":["../../../../src/lib/packed-types/PackedCharacter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,YAAY,GAAG,GAAG,CAAC;AAEzB,MAAM,UAAU,sBAAsB,CAAC,CAAS;IAC9C,MAAM,gBAAiB,SAAQ,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,YAAY,CAAC;QACrE;;;;WAIG;QACH,MAAM,CAAC,WAAW,CAAC,KAAqC;YACtD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE;gBACpE,IAAI,MAAM,GAAa,EAAE,CAAC;gBAC1B,IAAI,OAAO,GAAG,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;oBAClD,OAAO,KAAK,YAAY,CAAC;iBAC1B;gBACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACtB,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACrD,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAgB;YAC1B,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAChC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;KACF;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,31 +0,0 @@
1
- import { Character } from 'snarkyjs';
2
- import { PackedCharacterFactory } from './PackedCharacter';
3
- describe('PackedCharacter', () => {
4
- it('packs and unpacks a string of length < 16', async () => {
5
- const myString = 'This is a test!';
6
- let myCharacters = [];
7
- for (let i = 0; i < myString.length; i++) {
8
- myCharacters.push(Character.fromString(myString[i]));
9
- }
10
- const PackedCharacter_15 = PackedCharacterFactory(15);
11
- const packedCharacter_15 = new PackedCharacter_15(PackedCharacter_15.pack(myCharacters), myCharacters);
12
- const f = packedCharacter_15.packed;
13
- const unpacked = PackedCharacter_15.unpack(f);
14
- const unpackedStr = unpacked.map((x) => x.toString()).join('');
15
- expect(unpackedStr).toBe(myString);
16
- });
17
- it('is one field in size', async () => {
18
- const myString = 'This is a test!';
19
- let myCharacters = [];
20
- for (let i = 0; i < myString.length; i++) {
21
- myCharacters.push(Character.fromString(myString[i]));
22
- }
23
- const PackedCharacter_15 = PackedCharacterFactory(15);
24
- expect(PackedCharacter_15.sizeInFields()).toBe(1);
25
- });
26
- it('throws for input >= 16 chars', () => {
27
- expect(() => PackedCharacterFactory(15)).not.toThrow();
28
- expect(() => PackedCharacterFactory(16)).toThrow();
29
- });
30
- });
31
- //# sourceMappingURL=PackedCharacter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PackedCharacter.test.js","sourceRoot":"","sources":["../../../../src/lib/packed-types/PackedCharacter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACnC,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtD;QAED,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAEtD,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAC/C,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,EACrC,YAAY,CACb,CAAC;QACF,MAAM,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC;QACpC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE9C,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE/D,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACnC,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtD;QAED,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAEtD,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACvD,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,16 +0,0 @@
1
- import { Character } from 'snarkyjs';
2
- import { PackedStringFactory } from './packed-types/PackedString';
3
- const main = () => {
4
- const vitalik_dot_eth = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
5
- // length = 42 ~ 3 ZkStringFragments
6
- console.log(vitalik_dot_eth, vitalik_dot_eth.length);
7
- let myCharacters = [];
8
- for (let i = 0; i < vitalik_dot_eth.length; i++) {
9
- myCharacters.push(Character.fromString(vitalik_dot_eth[i]));
10
- }
11
- const EthAddressString = PackedStringFactory(42);
12
- const myEthAddress = new EthAddressString(EthAddressString.pack(myCharacters), myCharacters);
13
- console.log(EthAddressString.unpack(myEthAddress.packed).toString());
14
- };
15
- main();
16
- //# sourceMappingURL=scratch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scratch.js","sourceRoot":"","sources":["../../../src/lib/scratch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,IAAI,GAAG,GAAG,EAAE;IAChB,MAAM,eAAe,GAAG,4CAA4C,CAAC;IAErE,oCAAoC;IACpC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAErD,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/C,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7D;IAED,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,IAAI,gBAAgB,CACvC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,EACnC,YAAY,CACb,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACvE,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC"}
@@ -1,51 +0,0 @@
1
- import { Field, Bool } from 'snarkyjs';
2
- export declare function PackedBoolFactory(l: number): {
3
- new (packed: import("snarkyjs/dist/node/lib/field").Field, aux: import("snarkyjs/dist/node/lib/bool").Bool[]): {
4
- packed: import("snarkyjs/dist/node/lib/field").Field;
5
- aux: import("snarkyjs/dist/node/lib/bool").Bool[];
6
- bitSize: bigint;
7
- };
8
- /**
9
- * Unpacks a Field into its component Bool parts
10
- * @param value
11
- * @returns the unpacked auxilliary data used to pack the value
12
- */
13
- toAuxiliary(value?: {
14
- packed: Field;
15
- } | undefined): Bool[];
16
- pack(aux: Bool[]): Field;
17
- type: import("snarkyjs/dist/node/bindings/lib/provable-snarky").ProvableExtended<{
18
- packed: import("snarkyjs/dist/node/lib/field").Field;
19
- }, {
20
- packed: string;
21
- }>;
22
- l: number;
23
- unpack(f: import("snarkyjs/dist/node/lib/field").Field): import("snarkyjs/dist/node/lib/bool").Bool[];
24
- check(value: {
25
- packed: import("snarkyjs/dist/node/lib/field").Field;
26
- }): void;
27
- _isStruct: true;
28
- toFields: (value: {
29
- packed: import("snarkyjs/dist/node/lib/field").Field;
30
- }) => import("snarkyjs/dist/node/lib/field").Field[];
31
- fromFields: (fields: import("snarkyjs/dist/node/lib/field").Field[]) => {
32
- packed: import("snarkyjs/dist/node/lib/field").Field;
33
- };
34
- sizeInFields(): number;
35
- toInput: (x: {
36
- packed: import("snarkyjs/dist/node/lib/field").Field;
37
- }) => {
38
- fields?: import("snarkyjs/dist/node/lib/field").Field[] | undefined;
39
- packed?: [import("snarkyjs/dist/node/lib/field").Field, number][] | undefined;
40
- };
41
- toJSON: (x: {
42
- packed: import("snarkyjs/dist/node/lib/field").Field;
43
- }) => {
44
- packed: string;
45
- };
46
- fromJSON: (x: {
47
- packed: string;
48
- }) => {
49
- packed: import("snarkyjs/dist/node/lib/field").Field;
50
- };
51
- };
@@ -1,34 +0,0 @@
1
- import { Field, Provable, Bool } from 'snarkyjs';
2
- import { PackingPlant } from './PackingPlant';
3
- const SIZE_IN_BITS = 1n;
4
- export function PackedBoolFactory(l) {
5
- class PackedBool_ extends PackingPlant(Bool, l, SIZE_IN_BITS) {
6
- /**
7
- * Unpacks a Field into its component Bool parts
8
- * @param value
9
- * @returns the unpacked auxilliary data used to pack the value
10
- */
11
- static toAuxiliary(value) {
12
- const auxiliary = Provable.witness(Provable.Array(Bool, l), () => {
13
- let bools_ = [];
14
- let packedN = value?.packed.toBigInt() || 0n;
15
- for (let i = 0; i < l; i++) {
16
- bools_[i] = packedN & ((1n << SIZE_IN_BITS) - 1n);
17
- packedN >>= SIZE_IN_BITS;
18
- }
19
- return bools_.map((x) => Bool.fromJSON(Boolean(x)));
20
- });
21
- return auxiliary;
22
- }
23
- static pack(aux) {
24
- let f = Field(0);
25
- for (let i = 0; i < l; i++) {
26
- const c = Field((2n ** SIZE_IN_BITS) ** BigInt(i));
27
- f = f.add(aux[i].toField().mul(c));
28
- }
29
- return f;
30
- }
31
- }
32
- return PackedBool_;
33
- }
34
- //# sourceMappingURL=PackedBool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PackedBool.js","sourceRoot":"","sources":["../../../src/packed-types/PackedBool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,MAAM,WAAY,SAAQ,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC;QAC3D;;;;WAIG;QACH,MAAM,CAAC,WAAW,CAAC,KAAqC;YACtD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE;gBAC/D,IAAI,MAAM,GAAa,EAAE,CAAC;gBAC1B,IAAI,OAAO,GAAG,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;oBAClD,OAAO,KAAK,YAAY,CAAC;iBAC1B;gBACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAW;YACrB,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACpC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;KACF;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -1 +0,0 @@
1
- export {};