o1js-pack 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,7 +9,7 @@ on: [push, pull_request]
9
9
  jobs:
10
10
  test:
11
11
  runs-on: ubuntu-latest
12
- timeout-minutes: 10
12
+ timeout-minutes: 40
13
13
  steps:
14
14
  - name: Set up NodeJS
15
15
  uses: actions/setup-node@v2
@@ -1,9 +1,8 @@
1
1
  import { Field, InferProvable } from 'o1js';
2
- export declare function PackingPlant<A, T extends InferProvable<A> = InferProvable<A>>(elementType: A, l: number, bitSize: bigint): (abstract new (packed: Field, aux: Array<T>) => {
3
- packed: Field;
4
- aux: Array<T>;
2
+ export declare function PackingPlant<A, T extends InferProvable<A> = InferProvable<A>>(elementType: A, l: number, bitSize: bigint): (abstract new (packed: Field) => {
5
3
  bitSize: bigint;
6
4
  assertEquals(other: any): void;
5
+ packed: import("o1js/dist/node/lib/field").Field;
7
6
  }) & {
8
7
  type: import("o1js/dist/node/bindings/lib/provable-snarky").ProvableExtended<{
9
8
  packed: import("o1js/dist/node/lib/field").Field;
@@ -11,15 +10,38 @@ export declare function PackingPlant<A, T extends InferProvable<A> = InferProvab
11
10
  packed: string;
12
11
  }>;
13
12
  l: number;
14
- toAuxiliary(value?: {
15
- packed: Field;
16
- } | undefined): Array<T>;
17
- pack(aux: Array<T>): Field;
18
- unpack(f: Field): T[];
19
- _isStruct: true;
13
+ extractField(input: T): Field;
14
+ sizeInBits(): bigint;
15
+ unpack(f: Field): Array<T>;
16
+ /**
17
+ *
18
+ * @param unpacked Array of the implemented packed type
19
+ * @throws if the length of the array is longer than the length of the implementing factory config
20
+ */
21
+ checkPack(unpacked: Array<T>): void;
22
+ /**
23
+ *
24
+ * @param unpacked Array of the implemented packed type, must be shorter than the max allowed, which varies by type, will throw if the input is too long
25
+ * @returns Field, packed with the information from the unpacked input
26
+ */
27
+ pack(unpacked: Array<T>): Field;
28
+ /**
29
+ *
30
+ * @param f Field, packed with the information, as returned by #pack
31
+ * @returns Array of bigints, which can be decoded by the implementing class into the final type
32
+ */
33
+ unpackToBigints(f: Field): Array<bigint>;
34
+ _isStruct: true; /**
35
+ *
36
+ * @param fields Array of Fields, packed such that each Field has as much information as possible, as returned in #pack
37
+ * @returns Array of bigints, which can be decoded by the implementing class into the final type
38
+ */
20
39
  toFields: (value: {
21
40
  packed: import("o1js/dist/node/lib/field").Field;
22
41
  }) => import("o1js/dist/node/lib/field").Field[];
42
+ toAuxiliary: (value?: {
43
+ packed: import("o1js/dist/node/lib/field").Field;
44
+ } | undefined) => any[];
23
45
  fromFields: (fields: import("o1js/dist/node/lib/field").Field[]) => {
24
46
  packed: import("o1js/dist/node/lib/field").Field;
25
47
  };
@@ -44,11 +66,10 @@ export declare function PackingPlant<A, T extends InferProvable<A> = InferProvab
44
66
  packed: import("o1js/dist/node/lib/field").Field;
45
67
  };
46
68
  };
47
- export declare function MultiPackingPlant<A, T extends InferProvable<A> = InferProvable<A>>(elementType: A, l: number, bitSize: bigint): (abstract new (packed: Array<Field>, aux: Array<T>) => {
48
- packed: Array<Field>;
49
- aux: Array<T>;
69
+ export declare function MultiPackingPlant<A, T extends InferProvable<A> = InferProvable<A>>(elementType: A, l: number, bitSize: bigint): (abstract new (packed: Array<Field>) => {
50
70
  bitSize: bigint;
51
71
  assertEquals(other: any): void;
72
+ packed: import("o1js/dist/node/lib/field").Field[];
52
73
  }) & {
53
74
  type: import("o1js/dist/node/bindings/lib/provable-snarky").ProvableExtended<{
54
75
  packed: import("o1js/dist/node/lib/field").Field[];
@@ -57,15 +78,42 @@ export declare function MultiPackingPlant<A, T extends InferProvable<A> = InferP
57
78
  }>;
58
79
  l: number;
59
80
  n: number;
60
- toAuxiliary(value?: {
61
- packed: Array<Field>;
62
- } | undefined): Array<T>;
63
- pack(aux: Array<T>): Array<Field>;
64
- unpack(fields: Array<Field>): T[];
65
- _isStruct: true;
81
+ extractField(input: T | undefined): Field;
82
+ sizeInBits(): bigint;
83
+ elementsPerField(): number;
84
+ unpack(fields: Array<Field>): Array<T>;
85
+ /**
86
+ *
87
+ * @param unpacked Array of the implemented packed type
88
+ * @throws if the length of the array is longer than the length of the implementing factory config
89
+ */
90
+ checkPack(unpacked: Array<T>): void;
91
+ /**
92
+ *
93
+ * @param unpacked Array of the implemented packed type, must be shorter than the max allowed, which varies by type, will throw if the input is too long
94
+ * @returns Array of Fields, packed such that each Field has as much information as possible
95
+ *
96
+ * e.g. 15 Characters pack into 1 Field. 15 or fewer Characters will return an array of 1 Field
97
+ * 30 of fewer Characters will return an aray of 2 Fields
98
+ */
99
+ pack(unpacked: Array<T>): Array<Field>;
100
+ /**
101
+ *
102
+ * @param fields Array of Fields, packed such that each Field has as much information as possible, as returned in #pack
103
+ * @returns Array of bigints, which can be decoded by the implementing class into the final type
104
+ */
105
+ unpackToBigints(fields: Array<Field>): Array<bigint>;
106
+ _isStruct: true; /**
107
+ *
108
+ * @param fields Array of Fields, packed such that each Field has as much information as possible, as returned in #pack
109
+ * @returns Array of bigints, which can be decoded by the implementing class into the final type
110
+ */
66
111
  toFields: (value: {
67
112
  packed: import("o1js/dist/node/lib/field").Field[];
68
113
  }) => import("o1js/dist/node/lib/field").Field[];
114
+ toAuxiliary: (value?: {
115
+ packed: import("o1js/dist/node/lib/field").Field[];
116
+ } | undefined) => any[];
69
117
  fromFields: (fields: import("o1js/dist/node/lib/field").Field[]) => {
70
118
  packed: import("o1js/dist/node/lib/field").Field[];
71
119
  };
@@ -1,4 +1,4 @@
1
- import { Field, Struct, Poseidon, provable, Provable, } from 'o1js';
1
+ import { Field, Struct, provable, Provable, } from 'o1js';
2
2
  const MAX_BITS_PER_FIELD = 254n;
3
3
  export function PackingPlant(elementType, l, bitSize) {
4
4
  if (bitSize * BigInt(l) > MAX_BITS_PER_FIELD) {
@@ -7,25 +7,66 @@ export function PackingPlant(elementType, l, bitSize) {
7
7
  class Packed_ extends Struct({
8
8
  packed: Field,
9
9
  }) {
10
- constructor(packed, aux) {
11
- if (aux.length > l) {
12
- throw new Error(`Length of aux data is too long, input of size ${aux.length} is larger than max allowed ${l}`);
13
- }
10
+ constructor(packed) {
14
11
  super({ packed });
15
12
  this.bitSize = bitSize;
16
- this.aux = aux;
17
13
  }
18
- static toAuxiliary(value) {
19
- throw new Error('Must implement toAuxiliary');
20
- return [];
14
+ // Must implement these in type-specific implementation
15
+ static extractField(input) {
16
+ throw new Error('Must implement extractField');
21
17
  }
22
- static pack(aux) {
23
- throw new Error('Must implement pack');
24
- let f = Field(0);
25
- return f;
18
+ static sizeInBits() {
19
+ throw new Error('Must implement sizeInBits');
26
20
  }
27
21
  static unpack(f) {
28
- return this.toAuxiliary({ packed: f });
22
+ throw new Error('Must implement unpack');
23
+ }
24
+ // End
25
+ /**
26
+ *
27
+ * @param unpacked Array of the implemented packed type
28
+ * @throws if the length of the array is longer than the length of the implementing factory config
29
+ */
30
+ static checkPack(unpacked) {
31
+ if (unpacked.length > l) {
32
+ throw new Error(`Input of size ${unpacked.length} is larger than expected size of ${l}`);
33
+ }
34
+ }
35
+ /**
36
+ *
37
+ * @param unpacked Array of the implemented packed type, must be shorter than the max allowed, which varies by type, will throw if the input is too long
38
+ * @returns Field, packed with the information from the unpacked input
39
+ */
40
+ static pack(unpacked) {
41
+ this.checkPack(unpacked);
42
+ let f = this.extractField(unpacked[0]);
43
+ const n = Math.min(unpacked.length, l);
44
+ for (let i = 1; i < n; i++) {
45
+ const c = Field((2n ** this.sizeInBits()) ** BigInt(i));
46
+ f = f.add(this.extractField(unpacked[i]).mul(c));
47
+ }
48
+ return f;
49
+ }
50
+ /**
51
+ *
52
+ * @param f Field, packed with the information, as returned by #pack
53
+ * @returns Array of bigints, which can be decoded by the implementing class into the final type
54
+ */
55
+ static unpackToBigints(f) {
56
+ let unpacked = new Array(l);
57
+ unpacked.fill(0n);
58
+ let packedN;
59
+ if (f) {
60
+ packedN = f.toBigInt();
61
+ }
62
+ else {
63
+ throw new Error('No Packed Value Provided');
64
+ }
65
+ for (let i = 0; i < l; i++) {
66
+ unpacked[i] = packedN & ((1n << this.sizeInBits()) - 1n);
67
+ packedN >>= this.sizeInBits();
68
+ }
69
+ return unpacked;
29
70
  }
30
71
  assertEquals(other) {
31
72
  this.packed.assertEquals(other.packed);
@@ -43,28 +84,104 @@ export function MultiPackingPlant(elementType, l, bitSize) {
43
84
  class Packed_ extends Struct({
44
85
  packed: Provable.Array(Field, n),
45
86
  }) {
46
- constructor(packed, aux) {
47
- if (aux.length > l) {
48
- throw new Error('Length of aux data is too long');
49
- }
87
+ constructor(packed) {
50
88
  super({ packed });
51
89
  this.bitSize = bitSize;
52
- this.aux = aux;
53
90
  }
54
- static toAuxiliary(value) {
55
- throw new Error('Must implement toAuxiliary');
56
- return [];
91
+ // Must implement these in type-specific implementation
92
+ static extractField(input) {
93
+ throw new Error('Must implement extractField');
57
94
  }
58
- static pack(aux) {
59
- throw new Error('Must implement pack');
60
- let f = [Field(0)];
61
- return f;
95
+ static sizeInBits() {
96
+ throw new Error('Must implement sizeInBits');
97
+ }
98
+ static elementsPerField() {
99
+ throw new Error('Must implement elementsPerField');
62
100
  }
63
101
  static unpack(fields) {
64
- return this.toAuxiliary({ packed: fields });
102
+ throw new Error('Must implement unpack');
103
+ }
104
+ // End
105
+ /**
106
+ *
107
+ * @param unpacked Array of the implemented packed type
108
+ * @throws if the length of the array is longer than the length of the implementing factory config
109
+ */
110
+ static checkPack(unpacked) {
111
+ if (unpacked.length > l) {
112
+ throw new Error(`Input of size ${unpacked.length} is larger than expected size of ${l}`);
113
+ }
114
+ }
115
+ /**
116
+ *
117
+ * @param unpacked Array of the implemented packed type, must be shorter than the max allowed, which varies by type, will throw if the input is too long
118
+ * @returns Array of Fields, packed such that each Field has as much information as possible
119
+ *
120
+ * e.g. 15 Characters pack into 1 Field. 15 or fewer Characters will return an array of 1 Field
121
+ * 30 of fewer Characters will return an aray of 2 Fields
122
+ */
123
+ static pack(unpacked) {
124
+ this.checkPack(unpacked);
125
+ let fields = [];
126
+ let mutableUnpacked = [...unpacked];
127
+ while (mutableUnpacked.length > 0) {
128
+ let f = this.extractField(mutableUnpacked.shift());
129
+ if (!f) {
130
+ throw new Error('Unexpected Array Length');
131
+ }
132
+ // f = f.value is the same as f = 0; f += char.value * c^0;
133
+ // If f is initialized as 0, then it is a "constant" field and can't be added to a "variable" field in a proof
134
+ const n = Math.min(mutableUnpacked.length + 1, this.elementsPerField());
135
+ for (let i = 1; i < n; i++) {
136
+ let value = this.extractField(mutableUnpacked.shift());
137
+ if (!value) {
138
+ throw new Error('Unexpected Array Length');
139
+ }
140
+ value = value || Field(0);
141
+ const c = Field((2n ** this.sizeInBits()) ** BigInt(i));
142
+ f = f.add(value.mul(c));
143
+ }
144
+ fields.push(f);
145
+ }
146
+ return fields;
147
+ }
148
+ /**
149
+ *
150
+ * @param fields Array of Fields, packed such that each Field has as much information as possible, as returned in #pack
151
+ * @returns Array of bigints, which can be decoded by the implementing class into the final type
152
+ */
153
+ static unpackToBigints(fields) {
154
+ let uints_ = new Array(l);
155
+ uints_.fill(0n);
156
+ let packedNs = new Array(this.n);
157
+ packedNs.fill(0n);
158
+ const packedArg = new Array(this.n);
159
+ packedArg.fill(Field(0), 0, this.n);
160
+ for (let i = 0; i < this.n; i++) {
161
+ if (fields[i]) {
162
+ packedArg[i] = fields[i];
163
+ }
164
+ }
165
+ if (packedArg.length !== this.n) {
166
+ throw new Error(`Packed value must be exactly ${this.n} in length`);
167
+ }
168
+ for (let i = 0; i < this.n; i++) {
169
+ packedNs[i] = packedArg[i].toConstant().toBigInt();
170
+ }
171
+ for (let i = 0; i < packedNs.length; i++) {
172
+ let packedN = packedNs[i];
173
+ for (let j = 0; j < this.elementsPerField(); j++) {
174
+ const k = i * this.elementsPerField() + j;
175
+ uints_[k] = packedN & ((1n << this.sizeInBits()) - 1n);
176
+ packedN >>= this.sizeInBits();
177
+ }
178
+ }
179
+ return uints_;
65
180
  }
66
181
  assertEquals(other) {
67
- Poseidon.hash(this.packed).assertEquals(Poseidon.hash(other.packed));
182
+ for (let x = 0; x < n; x++) {
183
+ this.packed[x].assertEquals(other.packed[x]);
184
+ }
68
185
  }
69
186
  }
70
187
  Packed_.type = provable({ packed: Provable.Array(Field, n) }, {});
@@ -1 +1 @@
1
- {"version":3,"file":"PackingPlant.js","sourceRoot":"","sources":["../../../src/lib/PackingPlant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PackingPlant.js","sourceRoot":"","sources":["../../../src/lib/PackingPlant.ts"],"names":[],"mappings":"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"}
@@ -1,44 +1,52 @@
1
1
  import { Field, Bool } from 'o1js';
2
- export declare function PackedBoolFactory(l: number): {
3
- new (packed: import("o1js/dist/node/lib/field.js").Field, aux: import("o1js/dist/node/lib/bool.js").Bool[]): {
2
+ export declare function PackedBoolFactory(l?: number): {
3
+ new (packed: import("o1js/dist/node/lib/field.js").Field): {
4
4
  toBooleans(): Array<boolean>;
5
- packed: import("o1js/dist/node/lib/field.js").Field;
6
- aux: import("o1js/dist/node/lib/bool.js").Bool[];
7
5
  bitSize: bigint;
8
6
  assertEquals(other: {
9
- packed: import("o1js/dist/node/lib/field.js").Field;
10
- aux: import("o1js/dist/node/lib/bool.js").Bool[];
11
7
  bitSize: bigint;
12
8
  assertEquals(other: any): void;
9
+ packed: import("o1js/dist/node/lib/field.js").Field;
13
10
  }): void;
11
+ packed: import("o1js/dist/node/lib/field.js").Field;
14
12
  };
15
- toAuxiliary(value?: {
16
- packed: Field;
17
- } | undefined): Array<Bool>;
18
- pack(aux: Array<Bool>): Field;
19
- fromAuxiliary(aux: Array<Bool>): {
13
+ extractField(input: Bool): Field;
14
+ sizeInBits(): bigint;
15
+ /**
16
+ *
17
+ * @param f Field, packed with the information, as returned by #pack
18
+ * @returns Array of Bool
19
+ */
20
+ unpack(f: Field): Bool[];
21
+ /**
22
+ *
23
+ * @param bools Array of Bools to be packed
24
+ * @returns Instance of the implementing class
25
+ */
26
+ fromBools(bools: Array<Bool>): {
20
27
  toBooleans(): Array<boolean>;
21
- packed: import("o1js/dist/node/lib/field.js").Field;
22
- aux: import("o1js/dist/node/lib/bool.js").Bool[];
23
28
  bitSize: bigint;
24
29
  assertEquals(other: {
25
- packed: import("o1js/dist/node/lib/field.js").Field;
26
- aux: import("o1js/dist/node/lib/bool.js").Bool[];
27
30
  bitSize: bigint;
28
31
  assertEquals(other: any): void;
32
+ packed: import("o1js/dist/node/lib/field.js").Field;
29
33
  }): void;
34
+ packed: import("o1js/dist/node/lib/field.js").Field;
30
35
  };
31
- fromBooleans(bigints: Array<boolean>): {
36
+ /**
37
+ *
38
+ * @param booleans Array of booleans to be packed
39
+ * @returns Instance of the implementing class
40
+ */
41
+ fromBooleans(booleans: Array<boolean>): {
32
42
  toBooleans(): Array<boolean>;
33
- packed: import("o1js/dist/node/lib/field.js").Field;
34
- aux: import("o1js/dist/node/lib/bool.js").Bool[];
35
43
  bitSize: bigint;
36
44
  assertEquals(other: {
37
- packed: import("o1js/dist/node/lib/field.js").Field;
38
- aux: import("o1js/dist/node/lib/bool.js").Bool[];
39
45
  bitSize: bigint;
40
46
  assertEquals(other: any): void;
47
+ packed: import("o1js/dist/node/lib/field.js").Field;
41
48
  }): void;
49
+ packed: import("o1js/dist/node/lib/field.js").Field;
42
50
  };
43
51
  type: import("o1js/dist/node/bindings/lib/provable-snarky.js").ProvableExtended<{
44
52
  packed: import("o1js/dist/node/lib/field.js").Field;
@@ -46,11 +54,16 @@ export declare function PackedBoolFactory(l: number): {
46
54
  packed: string;
47
55
  }>;
48
56
  l: number;
49
- unpack(f: import("o1js/dist/node/lib/field.js").Field): import("o1js/dist/node/lib/bool.js").Bool[];
57
+ checkPack(unpacked: import("o1js/dist/node/lib/bool.js").Bool[]): void;
58
+ pack(unpacked: import("o1js/dist/node/lib/bool.js").Bool[]): import("o1js/dist/node/lib/field.js").Field;
59
+ unpackToBigints(f: import("o1js/dist/node/lib/field.js").Field): bigint[];
50
60
  _isStruct: true;
51
61
  toFields: (value: {
52
62
  packed: import("o1js/dist/node/lib/field.js").Field;
53
63
  }) => import("o1js/dist/node/lib/field.js").Field[];
64
+ toAuxiliary: (value?: {
65
+ packed: import("o1js/dist/node/lib/field.js").Field;
66
+ } | undefined) => any[];
54
67
  fromFields: (fields: import("o1js/dist/node/lib/field.js").Field[]) => {
55
68
  packed: import("o1js/dist/node/lib/field.js").Field;
56
69
  };
@@ -1,43 +1,44 @@
1
- import { Field, Provable, Bool } from 'o1js';
1
+ import { Provable, Bool } from 'o1js';
2
2
  import { PackingPlant } from '../PackingPlant.js';
3
+ const L = 254; // 254 1-bit booleans fit in one Field
3
4
  const SIZE_IN_BITS = 1n;
4
- export function PackedBoolFactory(l) {
5
+ export function PackedBoolFactory(l = L) {
5
6
  class PackedBool_ extends PackingPlant(Bool, l, SIZE_IN_BITS) {
6
- static toAuxiliary(value) {
7
- const auxiliary = Provable.witness(Provable.Array(Bool, l), () => {
8
- let bools_ = new Array(l);
9
- bools_.fill(0n);
10
- let packedN;
11
- if (value && value.packed) {
12
- packedN = value.packed.toBigInt();
13
- }
14
- else {
15
- throw new Error('No Packed Value Provided');
16
- }
17
- for (let i = 0; i < l; i++) {
18
- bools_[i] = packedN & ((1n << SIZE_IN_BITS) - 1n);
19
- packedN >>= SIZE_IN_BITS;
20
- }
21
- return bools_.map((x) => Bool.fromJSON(Boolean(x)));
22
- });
23
- return auxiliary;
7
+ static extractField(input) {
8
+ return input.toField();
9
+ }
10
+ static sizeInBits() {
11
+ return SIZE_IN_BITS;
24
12
  }
25
- static pack(aux) {
26
- let f = aux[0].toField();
27
- const n = Math.min(aux.length, l);
28
- for (let i = 1; i < n; i++) {
29
- const c = Field((2n ** SIZE_IN_BITS) ** BigInt(i));
30
- f = f.add(aux[i].toField().mul(c));
31
- }
32
- return f;
13
+ /**
14
+ *
15
+ * @param f Field, packed with the information, as returned by #pack
16
+ * @returns Array of Bool
17
+ */
18
+ static unpack(f) {
19
+ const unpacked = Provable.witness(Provable.Array(Bool, l), () => {
20
+ const unpacked = this.unpackToBigints(f);
21
+ return unpacked.map((x) => Bool.fromJSON(Boolean(x)));
22
+ });
23
+ return unpacked;
33
24
  }
34
- static fromAuxiliary(aux) {
35
- const packed = PackedBool_.pack(aux);
36
- return new PackedBool_(packed, aux);
25
+ /**
26
+ *
27
+ * @param bools Array of Bools to be packed
28
+ * @returns Instance of the implementing class
29
+ */
30
+ static fromBools(bools) {
31
+ const packed = PackedBool_.pack(bools);
32
+ return new PackedBool_(packed);
37
33
  }
38
- static fromBooleans(bigints) {
39
- const uint32s = bigints.map((x) => Bool(x));
40
- return this.fromAuxiliary(uint32s);
34
+ /**
35
+ *
36
+ * @param booleans Array of booleans to be packed
37
+ * @returns Instance of the implementing class
38
+ */
39
+ static fromBooleans(booleans) {
40
+ const bools = booleans.map((x) => Bool(x));
41
+ return PackedBool_.fromBools(bools);
41
42
  }
42
43
  toBooleans() {
43
44
  return PackedBool_.unpack(this.packed).map((x) => x.toBoolean());
@@ -1 +1 @@
1
- {"version":3,"file":"PackedBool.js","sourceRoot":"","sources":["../../../../src/lib/packed-types/PackedBool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,MAAM,WAAY,SAAQ,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC;QAC3D,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,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,IAAI,OAAO,CAAC;gBACZ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;oBACzB,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;iBACnC;qBAAM;oBACL,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;iBAC7C;gBACD,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,GAAgB;YAC1B,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAClC,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;QAED,MAAM,CAAC,aAAa,CAAC,GAAgB;YACnC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrC,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,OAAuB;YACzC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,UAAU;YACR,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACnE,CAAC;KACF;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"PackedBool.js","sourceRoot":"","sources":["../../../../src/lib/packed-types/PackedBool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,sCAAsC;AACrD,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,MAAM,UAAU,iBAAiB,CAAC,IAAY,CAAC;IAC7C,MAAM,WAAY,SAAQ,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC;QAC3D,MAAM,CAAC,YAAY,CAAC,KAAW;YAC7B,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;QACzB,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,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE;gBAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED;;;;WAIG;QACH,MAAM,CAAC,SAAS,CAAC,KAAkB;YACjC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAED;;;;WAIG;QACH,MAAM,CAAC,YAAY,CAAC,QAAwB;YAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,UAAU;YACR,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACnE,CAAC;KACF;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { Bool, Provable } from 'o1js';
2
2
  import { PackedBoolFactory } from './PackedBool';
3
3
  describe('PackedBool', () => {
4
- class PackedBool extends PackedBoolFactory(254) {
5
- }
6
4
  const booleans = new Array(127).fill([true, false]).flat();
7
5
  const bools = booleans.map((x) => Bool(x));
6
+ class PackedBool extends PackedBoolFactory() {
7
+ }
8
8
  describe('Outside of the circuit', () => {
9
9
  it('#fromBooleans', () => {
10
10
  const myPackedBool = PackedBool.fromBooleans(booleans);
@@ -51,7 +51,7 @@ describe('PackedBool', () => {
51
51
  it('Initializes', () => {
52
52
  expect(() => {
53
53
  Provable.runAndCheck(() => {
54
- const packedBool = new PackedBool(outsidePackedBool.packed, outsidePackedBool.aux);
54
+ const packedBool = new PackedBool(outsidePackedBool.packed);
55
55
  PackedBool.check({ packed: packedBool.packed });
56
56
  });
57
57
  }).not.toThrow();
@@ -59,14 +59,14 @@ describe('PackedBool', () => {
59
59
  it('#assertEquals', () => {
60
60
  expect(() => {
61
61
  Provable.runAndCheck(() => {
62
- const packedBool = new PackedBool(outsidePackedBool.packed, outsidePackedBool.aux);
62
+ const packedBool = new PackedBool(outsidePackedBool.packed);
63
63
  packedBool.assertEquals(outsidePackedBool);
64
64
  });
65
65
  }).not.toThrow();
66
66
  expect(() => {
67
67
  Provable.runAndCheck(() => {
68
68
  const fakePacked = outsidePackedBool.packed.add(32);
69
- const packedBool = new PackedBool(fakePacked, outsidePackedBool.aux);
69
+ const packedBool = new PackedBool(fakePacked);
70
70
  packedBool.assertEquals(outsidePackedBool);
71
71
  });
72
72
  }).toThrow();
@@ -1 +1 @@
1
- {"version":3,"file":"PackedBool.test.js","sourceRoot":"","sources":["../../../../src/lib/packed-types/PackedBool.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PackedBool.test.js","sourceRoot":"","sources":["../../../../src/lib/packed-types/PackedBool.test.ts"],"names":[],"mappings":"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"}