@aztec/foundation 0.16.1 → 0.16.3
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/dest/abi/function_selector.d.ts.map +1 -1
- package/dest/abi/function_selector.js +5 -1
- package/dest/crypto/index.d.ts +7 -0
- package/dest/crypto/index.d.ts.map +1 -1
- package/dest/crypto/index.js +11 -1
- package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
- package/dest/crypto/pedersen/pedersen.wasm.js +4 -7
- package/dest/fields/fields.d.ts.map +1 -1
- package/dest/fields/fields.js +8 -3
- package/dest/index.d.ts +2 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +3 -1
- package/dest/testing/index.d.ts +2 -0
- package/dest/testing/index.d.ts.map +1 -0
- package/dest/testing/index.js +2 -0
- package/dest/testing/test_data.d.ts +12 -0
- package/dest/testing/test_data.d.ts.map +1 -0
- package/dest/testing/test_data.js +30 -0
- package/dest/trees/index.d.ts +48 -0
- package/dest/trees/index.d.ts.map +1 -0
- package/dest/trees/index.js +2 -0
- package/package.json +5 -3
- package/src/abi/function_selector.ts +4 -0
- package/src/crypto/index.ts +12 -0
- package/src/crypto/pedersen/pedersen.wasm.ts +3 -7
- package/src/fields/fields.ts +7 -2
- package/src/index.ts +2 -0
- package/src/testing/index.ts +1 -0
- package/src/testing/test_data.ts +36 -0
- package/src/trees/index.ts +48 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function_selector.d.ts","sourceRoot":"","sources":["../../src/abi/function_selector.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAA2B,MAAM,uBAAuB,CAAC;AAG9E,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D;;GAEG;AACH,qBAAa,gBAAgB;IAMyC,KAAK,EAAE,MAAM;IALjF;;OAEG;IACH,OAAc,IAAI,SAAK;gBAEX,gDAAgD,CAAQ,KAAK,EAAE,MAAM;IAMjF;;;OAGG;IACI,OAAO,IAAI,OAAO;IAIzB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,SAAwB,GAAG,MAAM;IAIpD;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO;IAIxC;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,gBAAgB;IAMlE;;;;OAIG;IACI,OAAO;IAId;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,gBAAgB;IAI1C;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB;
|
|
1
|
+
{"version":3,"file":"function_selector.d.ts","sourceRoot":"","sources":["../../src/abi/function_selector.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAA2B,MAAM,uBAAuB,CAAC;AAG9E,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D;;GAEG;AACH,qBAAa,gBAAgB;IAMyC,KAAK,EAAE,MAAM;IALjF;;OAEG;IACH,OAAc,IAAI,SAAK;gBAEX,gDAAgD,CAAQ,KAAK,EAAE,MAAM;IAMjF;;;OAGG;IACI,OAAO,IAAI,OAAO;IAIzB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,SAAwB,GAAG,MAAM;IAIpD;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO;IAIxC;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,gBAAgB;IAMlE;;;;OAIG;IACI,OAAO;IAId;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,gBAAgB;IAI1C;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB;IAQzD;;;;;OAKG;IACH,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE;IAQrE;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM;IAQlC;;;OAGG;IACH,MAAM,CAAC,KAAK,IAAI,gBAAgB;CAGjC"}
|
|
@@ -75,6 +75,10 @@ export class FunctionSelector {
|
|
|
75
75
|
* @returns Function selector.
|
|
76
76
|
*/
|
|
77
77
|
static fromSignature(signature) {
|
|
78
|
+
// throw if signature contains whitespace
|
|
79
|
+
if (/\s/.test(signature)) {
|
|
80
|
+
throw new Error('Function Signature cannot contain whitespace');
|
|
81
|
+
}
|
|
78
82
|
return FunctionSelector.fromBuffer(keccak(Buffer.from(signature)).subarray(0, FunctionSelector.SIZE));
|
|
79
83
|
}
|
|
80
84
|
/**
|
|
@@ -117,4 +121,4 @@ export class FunctionSelector {
|
|
|
117
121
|
* The size of the function selector in bytes.
|
|
118
122
|
*/
|
|
119
123
|
FunctionSelector.SIZE = 4;
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25fc2VsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWJpL2Z1bmN0aW9uX3NlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQU0zQixZQUFZLGdEQUFnRCxDQUFRLEtBQWE7UUFBYixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQy9FLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsZ0JBQWdCLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQztTQUNsRjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsSUFBSTtRQUN6QyxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFD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
|
package/dest/crypto/index.d.ts
CHANGED
|
@@ -2,4 +2,11 @@ export * from './keccak/index.js';
|
|
|
2
2
|
export * from './random/index.js';
|
|
3
3
|
export * from './sha256/index.js';
|
|
4
4
|
export * from './pedersen/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Init the bb singleton. This constructs (if not already) the barretenberg sync api within bb.js itself.
|
|
7
|
+
* It takes about 100-200ms to initialize. It may not seem like much, but when in conjunction with many other things
|
|
8
|
+
* initializing, developers may want to pick precisely when to incur this cost.
|
|
9
|
+
* If in a test environment, we'll just do it on module load.
|
|
10
|
+
*/
|
|
11
|
+
export declare function init(): Promise<void>;
|
|
5
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAEA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AAEpC;;;;;GAKG;AACH,wBAAsB,IAAI,kBAEzB"}
|
package/dest/crypto/index.js
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
|
+
import { BarretenbergSync } from '@aztec/bb.js';
|
|
1
2
|
export * from './keccak/index.js';
|
|
2
3
|
export * from './random/index.js';
|
|
3
4
|
export * from './sha256/index.js';
|
|
4
5
|
export * from './pedersen/index.js';
|
|
5
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Init the bb singleton. This constructs (if not already) the barretenberg sync api within bb.js itself.
|
|
8
|
+
* It takes about 100-200ms to initialize. It may not seem like much, but when in conjunction with many other things
|
|
9
|
+
* initializing, developers may want to pick precisely when to incur this cost.
|
|
10
|
+
* If in a test environment, we'll just do it on module load.
|
|
11
|
+
*/
|
|
12
|
+
export async function init() {
|
|
13
|
+
await BarretenbergSync.initSingleton();
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3J5cHRvL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVoRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBRXBDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxJQUFJO0lBQ3hCLE1BQU0sZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDekMsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pedersen.wasm.d.ts","sourceRoot":"","sources":["../../../src/crypto/pedersen/pedersen.wasm.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"pedersen.wasm.d.ts","sourceRoot":"","sources":["../../../src/crypto/pedersen/pedersen.wasm.ts"],"names":[],"mappings":";AAEA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,YAS7C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,SAAI,UAatD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,UAE1D"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { BarretenbergSync, Fr } from '@aztec/bb.js';
|
|
2
|
-
// Get the singleton. This constructs (if not already) the barretenberg sync api within bb.js itself.
|
|
3
|
-
// This can be called from multiple other modules as needed, and it ensures it's only constructed once.
|
|
4
|
-
const api = await BarretenbergSync.getSingleton();
|
|
5
2
|
/**
|
|
6
3
|
* Create a pedersen commitment (point) from an array of input fields.
|
|
7
4
|
* Left pads any inputs less than 32 bytes.
|
|
@@ -11,7 +8,7 @@ export function pedersenCommit(input) {
|
|
|
11
8
|
throw new Error('All input buffers must be <= 32 bytes.');
|
|
12
9
|
}
|
|
13
10
|
input = input.map(i => (i.length < 32 ? Buffer.concat([Buffer.alloc(32 - i.length, 0), i]) : i));
|
|
14
|
-
const point =
|
|
11
|
+
const point = BarretenbergSync.getSingleton().pedersenCommit(input.map(i => new Fr(i)));
|
|
15
12
|
// toBuffer returns Uint8Arrays (browser/worker-boundary friendly).
|
|
16
13
|
// TODO: rename toTypedArray()?
|
|
17
14
|
return [Buffer.from(point.x.toBuffer()), Buffer.from(point.y.toBuffer())];
|
|
@@ -25,7 +22,7 @@ export function pedersenHash(input, index = 0) {
|
|
|
25
22
|
throw new Error('All input buffers must be <= 32 bytes.');
|
|
26
23
|
}
|
|
27
24
|
input = input.map(i => (i.length < 32 ? Buffer.concat([Buffer.alloc(32 - i.length, 0), i]) : i));
|
|
28
|
-
return Buffer.from(
|
|
25
|
+
return Buffer.from(BarretenbergSync.getSingleton()
|
|
29
26
|
.pedersenHash(input.map(i => new Fr(i)), index)
|
|
30
27
|
.toBuffer());
|
|
31
28
|
}
|
|
@@ -33,6 +30,6 @@ export function pedersenHash(input, index = 0) {
|
|
|
33
30
|
* Create a pedersen hash from an arbitrary length buffer.
|
|
34
31
|
*/
|
|
35
32
|
export function pedersenHashBuffer(input, index = 0) {
|
|
36
|
-
return Buffer.from(
|
|
33
|
+
return Buffer.from(BarretenbergSync.getSingleton().pedersenHashBuffer(input, index).toBuffer());
|
|
37
34
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVkZXJzZW4ud2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jcnlwdG8vcGVkZXJzZW4vcGVkZXJzZW4ud2FzbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXBEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBZTtJQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUU7UUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0tBQzNEO0lBQ0QsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLG1FQUFtRTtJQUNuRSwrQkFBK0I7SUFDL0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBZSxFQUFFLEtBQUssR0FBRyxDQUFDO0lBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRTtRQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7S0FDM0Q7SUFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakcsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNoQixnQkFBZ0IsQ0FBQyxZQUFZLEVBQUU7U0FDNUIsWUFBWSxDQUNYLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN6QixLQUFLLENBQ047U0FDQSxRQUFRLEVBQUUsQ0FDZCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWEsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUN6RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDbEcsQ0FBQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/fields/fields.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAiB7D;;;;;;;;GAQG;AACH,uBAAe,SAAS;IACtB,MAAM,CAAC,aAAa,SAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAE1B;;;SAGK;IACL,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,SAAS,aAAa,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/fields/fields.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAiB7D;;;;;;;;GAQG;AACH,uBAAe,SAAS;IACtB,MAAM,CAAC,aAAa,SAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAE1B;;;SAGK;IACL,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,SAAS,aAAa,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM;IA8B3E,SAAS,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM;IAEpC;;OAEG;IACH,QAAQ,IAAI,MAAM;IAOlB,QAAQ,IAAI,KAAK,MAAM,EAAE;IAIzB,QAAQ,IAAI,MAAM;IAUlB,aAAa,IAAI,MAAM;IAKvB,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;IAI/B,MAAM,IAAI,OAAO;IAIjB,cAAc,IAAI,MAAM;IAIxB,OAAO;CAGR;AAmCD;;GAEG;AACH,MAAM,WAAW,EAAE;IACjB,aAAa;IACb,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,EAAG,SAAQ,SAAS;IAC/B,MAAM,CAAC,IAAI,KAAc;IACzB,MAAM,CAAC,OAAO,SAAuE;gBAEzE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,MAAM;IAI1D,SAAS,CAAC,OAAO;IAIjB,MAAM,CAAC,MAAM;IAIb,MAAM,CAAC,IAAI;IAIX,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAI/C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM;IAItC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;CAG9B;AAED;;GAEG;AACH,MAAM,WAAW,EAAE;IACjB,aAAa;IACb,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,EAAG,SAAQ,SAAS;IAC/B,MAAM,CAAC,IAAI,KAAc;IACzB,MAAM,CAAC,OAAO,SAAuE;IACrF,OAAO,CAAC,MAAM,CAAC,UAAU,CAA6C;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA8B;IAErD,IAAI,GAAG,IAAI,EAAE,CAEZ;IAED,IAAI,IAAI,IAAI,EAAE,CAEb;gBAEW,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,MAAM;IAI1D,SAAS,CAAC,OAAO;IAIjB,MAAM,CAAC,MAAM;IAIb,MAAM,CAAC,IAAI;IAIX,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAI/C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM;IAItC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAI7B,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE;CAG1C;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,EAAE,CAAC;AAChC,eAAO,MAAM,cAAc,WAAK,CAAC"}
|
package/dest/fields/fields.js
CHANGED
|
@@ -21,8 +21,13 @@ class BaseField {
|
|
|
21
21
|
}
|
|
22
22
|
constructor(value) {
|
|
23
23
|
if (value instanceof Buffer) {
|
|
24
|
+
if (value.length > BaseField.SIZE_IN_BYTES) {
|
|
25
|
+
throw new Error(`Value length ${value.length} exceeds ${BaseField.SIZE_IN_BYTES}`);
|
|
26
|
+
}
|
|
24
27
|
this.asBuffer =
|
|
25
|
-
value.length ===
|
|
28
|
+
value.length === BaseField.SIZE_IN_BYTES
|
|
29
|
+
? value
|
|
30
|
+
: Buffer.concat([Buffer.alloc(BaseField.SIZE_IN_BYTES - value.length), value]);
|
|
26
31
|
}
|
|
27
32
|
else if (typeof value === 'bigint' || typeof value === 'number' || typeof value === 'boolean') {
|
|
28
33
|
this.asBigInt = BigInt(value);
|
|
@@ -77,7 +82,7 @@ class BaseField {
|
|
|
77
82
|
return this.toBuffer().equals(ZERO_BUFFER);
|
|
78
83
|
}
|
|
79
84
|
toFriendlyJSON() {
|
|
80
|
-
return
|
|
85
|
+
return this.toString();
|
|
81
86
|
}
|
|
82
87
|
toField() {
|
|
83
88
|
return this;
|
|
@@ -181,4 +186,4 @@ Fq.MODULUS = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47n
|
|
|
181
186
|
Fq.HIGH_SHIFT = BigInt((BaseField.SIZE_IN_BYTES / 2) * 8);
|
|
182
187
|
Fq.LOW_MASK = (1n << Fq.HIGH_SHIFT) - 1n;
|
|
183
188
|
export const GrumpkinScalar = Fq;
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpZWxkcy9maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFlckM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFlLFNBQVM7SUFLdEI7OztTQUdLO0lBQ0wsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFlBQXNCLEtBQXFEO1FBQ3pFLElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRTtZQUMzQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLGFBQWEsRUFBRTtnQkFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxDQUFDLE1BQU0sWUFBWSxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQzthQUNwRjtZQUNELElBQUksQ0FBQyxRQUFRO2dCQUNYLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLGFBQWE7b0JBQ3RDLENBQUMsQ0FBQyxLQUFLO29CQUNQLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3BGO2FBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFB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
|
package/dest/index.d.ts
CHANGED
|
@@ -20,8 +20,10 @@ export * as serialize from './serialize/index.js';
|
|
|
20
20
|
export * as sleep from './sleep/index.js';
|
|
21
21
|
export * as timer from './timer/index.js';
|
|
22
22
|
export * as transport from './transport/index.js';
|
|
23
|
+
export * as trees from './trees/index.js';
|
|
23
24
|
export * as types from './types/index.js';
|
|
24
25
|
export * as url from './url/index.js';
|
|
25
26
|
export * as wasm from './wasm/index.js';
|
|
26
27
|
export * as worker from './worker/index.js';
|
|
28
|
+
export * as testing from './testing/index.js';
|
|
27
29
|
//# sourceMappingURL=index.d.ts.map
|
package/dest/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,WAAW,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,cAAc,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,YAAY,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,WAAW,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,cAAc,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC"}
|
package/dest/index.js
CHANGED
|
@@ -21,8 +21,10 @@ export * as serialize from './serialize/index.js';
|
|
|
21
21
|
export * as sleep from './sleep/index.js';
|
|
22
22
|
export * as timer from './timer/index.js';
|
|
23
23
|
export * as transport from './transport/index.js';
|
|
24
|
+
export * as trees from './trees/index.js';
|
|
24
25
|
export * as types from './types/index.js';
|
|
25
26
|
export * as url from './url/index.js';
|
|
26
27
|
export * as wasm from './wasm/index.js';
|
|
27
28
|
export * as worker from './worker/index.js';
|
|
28
|
-
|
|
29
|
+
export * as testing from './testing/index.js';
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUVBQW1FO0FBQ25FLE9BQU8sS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFVBQVUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssV0FBVyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssVUFBVSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxLQUFLLElBQUksTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxLQUFLLGFBQWEsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssR0FBRyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxLQUFLLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEtBQUssY0FBYyxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sS0FBSyxTQUFTLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxTQUFTLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/** Returns whether test data generation is enabled */
|
|
3
|
+
export declare function isGenerateTestDataEnabled(): boolean;
|
|
4
|
+
/** Pushes test data with the given name, only if test data generation is enabled. */
|
|
5
|
+
export declare function pushTestData(itemName: string, data: {
|
|
6
|
+
toBuffer(): Buffer;
|
|
7
|
+
}): void;
|
|
8
|
+
/** Returns all instances of pushed test data with the given name, or empty if test data generation is not enabled. */
|
|
9
|
+
export declare function getTestData(itemName: string): {
|
|
10
|
+
toBuffer(): Buffer;
|
|
11
|
+
}[];
|
|
12
|
+
//# sourceMappingURL=test_data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_data.d.ts","sourceRoot":"","sources":["../../src/testing/test_data.ts"],"names":[],"mappings":";AAEA,sDAAsD;AACtD,wBAAgB,yBAAyB,YAExC;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,QAAQ,IAAI,MAAM,CAAA;CAAE,QAgB1E;AAED,sHAAsH;AACtH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,QAAQ,IAAI,MAAM,CAAA;CAAE,EAAE,CAQtE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const testData = {};
|
|
2
|
+
/** Returns whether test data generation is enabled */
|
|
3
|
+
export function isGenerateTestDataEnabled() {
|
|
4
|
+
return process.env.AZTEC_GENERATE_TEST_DATA === '1' && typeof expect !== 'undefined';
|
|
5
|
+
}
|
|
6
|
+
/** Pushes test data with the given name, only if test data generation is enabled. */
|
|
7
|
+
export function pushTestData(itemName, data) {
|
|
8
|
+
if (!isGenerateTestDataEnabled()) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
if (typeof expect === 'undefined') {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const testName = expect.getState().currentTestName;
|
|
15
|
+
const fullItemName = `${testName} ${itemName}`;
|
|
16
|
+
if (!testData[fullItemName]) {
|
|
17
|
+
testData[fullItemName] = [];
|
|
18
|
+
}
|
|
19
|
+
testData[fullItemName].push(data);
|
|
20
|
+
}
|
|
21
|
+
/** Returns all instances of pushed test data with the given name, or empty if test data generation is not enabled. */
|
|
22
|
+
export function getTestData(itemName) {
|
|
23
|
+
if (!isGenerateTestDataEnabled()) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const testName = expect.getState().currentTestName;
|
|
27
|
+
const fullItemName = `${testName} ${itemName}`;
|
|
28
|
+
return testData[fullItemName];
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RpbmcvdGVzdF9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sUUFBUSxHQUFnRCxFQUFFLENBQUM7QUFFakUsc0RBQXNEO0FBQ3RELE1BQU0sVUFBVSx5QkFBeUI7SUFDdkMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixLQUFLLEdBQUcsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUM7QUFDdkYsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsWUFBWSxDQUFDLFFBQWdCLEVBQUUsSUFBNEI7SUFDekUsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUU7UUFDaEMsT0FBTztLQUNSO0lBRUQsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7UUFDakMsT0FBTztLQUNSO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLGVBQWUsQ0FBQztJQUNuRCxNQUFNLFlBQVksR0FBRyxHQUFHLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUUvQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzNCLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDN0I7SUFDRCxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxzSEFBc0g7QUFDdEgsTUFBTSxVQUFVLFdBQVcsQ0FBQyxRQUFnQjtJQUMxQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRTtRQUNoQyxPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLGVBQWUsQ0FBQztJQUNuRCxNQUFNLFlBQVksR0FBRyxHQUFHLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUMvQyxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoQyxDQUFDIn0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/**
|
|
3
|
+
* A leaf of an indexed merkle tree.
|
|
4
|
+
*/
|
|
5
|
+
export interface IndexedTreeLeaf {
|
|
6
|
+
/**
|
|
7
|
+
* Returns key of the leaf. It's used for indexing.
|
|
8
|
+
*/
|
|
9
|
+
getKey(): bigint;
|
|
10
|
+
/**
|
|
11
|
+
* Serializes the leaf into a buffer.
|
|
12
|
+
*/
|
|
13
|
+
toBuffer(): Buffer;
|
|
14
|
+
/**
|
|
15
|
+
* Returns true if the leaf is empty.
|
|
16
|
+
*/
|
|
17
|
+
isEmpty(): boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Preimage of an indexed merkle tree leaf.
|
|
21
|
+
*/
|
|
22
|
+
export interface IndexedTreeLeafPreimage {
|
|
23
|
+
/**
|
|
24
|
+
* Returns key of the leaf corresponding to this preimage.
|
|
25
|
+
*/
|
|
26
|
+
getKey(): bigint;
|
|
27
|
+
/**
|
|
28
|
+
* Returns the key of the next leaf.
|
|
29
|
+
*/
|
|
30
|
+
getNextKey(): bigint;
|
|
31
|
+
/**
|
|
32
|
+
* Returns the index of the next leaf.
|
|
33
|
+
*/
|
|
34
|
+
getNextIndex(): bigint;
|
|
35
|
+
/**
|
|
36
|
+
* Returns the preimage as a leaf.
|
|
37
|
+
*/
|
|
38
|
+
asLeaf(): IndexedTreeLeaf;
|
|
39
|
+
/**
|
|
40
|
+
* Serializes the preimage into a buffer.
|
|
41
|
+
*/
|
|
42
|
+
toBuffer(): Buffer;
|
|
43
|
+
/**
|
|
44
|
+
* Serializes the preimage to an array of buffers for hashing.
|
|
45
|
+
*/
|
|
46
|
+
toHashInputs(): Buffer[];
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trees/index.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC;IACjB;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC;IACjB;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,IAAI,MAAM,CAAC;IAEvB;;OAEG;IACH,MAAM,IAAI,eAAe,CAAC;IAC1B;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE,CAAC;CAC1B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/foundation",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.3",
|
|
4
4
|
"packageManager": "yarn@3.4.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dest/index.js",
|
|
@@ -28,13 +28,15 @@
|
|
|
28
28
|
"./sleep": "./dest/sleep/index.js",
|
|
29
29
|
"./timer": "./dest/timer/index.js",
|
|
30
30
|
"./transport": "./dest/transport/index.js",
|
|
31
|
+
"./trees": "./dest/trees/index.js",
|
|
31
32
|
"./wasm": "./dest/wasm/index.js",
|
|
32
33
|
"./worker": "./dest/worker/index.js",
|
|
33
34
|
"./bigint-buffer": "./dest/bigint-buffer/index.js",
|
|
34
35
|
"./types": "./dest/types/index.js",
|
|
35
36
|
"./url": "./dest/url/index.js",
|
|
36
37
|
"./committable": "./dest/committable/index.js",
|
|
37
|
-
"./noir": "./dest/noir/index.js"
|
|
38
|
+
"./noir": "./dest/noir/index.js",
|
|
39
|
+
"./testing": "./dest/testing/index.js"
|
|
38
40
|
},
|
|
39
41
|
"scripts": {
|
|
40
42
|
"build": "yarn clean && tsc -b",
|
|
@@ -57,7 +59,7 @@
|
|
|
57
59
|
"rootDir": "./src"
|
|
58
60
|
},
|
|
59
61
|
"dependencies": {
|
|
60
|
-
"@aztec/bb.js": "0.16.
|
|
62
|
+
"@aztec/bb.js": "0.16.3",
|
|
61
63
|
"@koa/cors": "^4.0.0",
|
|
62
64
|
"@noble/curves": "^1.2.0",
|
|
63
65
|
"bn.js": "^5.2.1",
|
|
@@ -88,6 +88,10 @@ export class FunctionSelector {
|
|
|
88
88
|
* @returns Function selector.
|
|
89
89
|
*/
|
|
90
90
|
static fromSignature(signature: string): FunctionSelector {
|
|
91
|
+
// throw if signature contains whitespace
|
|
92
|
+
if (/\s/.test(signature)) {
|
|
93
|
+
throw new Error('Function Signature cannot contain whitespace');
|
|
94
|
+
}
|
|
91
95
|
return FunctionSelector.fromBuffer(keccak(Buffer.from(signature)).subarray(0, FunctionSelector.SIZE));
|
|
92
96
|
}
|
|
93
97
|
|
package/src/crypto/index.ts
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
|
+
import { BarretenbergSync } from '@aztec/bb.js';
|
|
2
|
+
|
|
1
3
|
export * from './keccak/index.js';
|
|
2
4
|
export * from './random/index.js';
|
|
3
5
|
export * from './sha256/index.js';
|
|
4
6
|
export * from './pedersen/index.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Init the bb singleton. This constructs (if not already) the barretenberg sync api within bb.js itself.
|
|
10
|
+
* It takes about 100-200ms to initialize. It may not seem like much, but when in conjunction with many other things
|
|
11
|
+
* initializing, developers may want to pick precisely when to incur this cost.
|
|
12
|
+
* If in a test environment, we'll just do it on module load.
|
|
13
|
+
*/
|
|
14
|
+
export async function init() {
|
|
15
|
+
await BarretenbergSync.initSingleton();
|
|
16
|
+
}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { BarretenbergSync, Fr } from '@aztec/bb.js';
|
|
2
2
|
|
|
3
|
-
// Get the singleton. This constructs (if not already) the barretenberg sync api within bb.js itself.
|
|
4
|
-
// This can be called from multiple other modules as needed, and it ensures it's only constructed once.
|
|
5
|
-
const api = await BarretenbergSync.getSingleton();
|
|
6
|
-
|
|
7
3
|
/**
|
|
8
4
|
* Create a pedersen commitment (point) from an array of input fields.
|
|
9
5
|
* Left pads any inputs less than 32 bytes.
|
|
@@ -13,7 +9,7 @@ export function pedersenCommit(input: Buffer[]) {
|
|
|
13
9
|
throw new Error('All input buffers must be <= 32 bytes.');
|
|
14
10
|
}
|
|
15
11
|
input = input.map(i => (i.length < 32 ? Buffer.concat([Buffer.alloc(32 - i.length, 0), i]) : i));
|
|
16
|
-
const point =
|
|
12
|
+
const point = BarretenbergSync.getSingleton().pedersenCommit(input.map(i => new Fr(i)));
|
|
17
13
|
// toBuffer returns Uint8Arrays (browser/worker-boundary friendly).
|
|
18
14
|
// TODO: rename toTypedArray()?
|
|
19
15
|
return [Buffer.from(point.x.toBuffer()), Buffer.from(point.y.toBuffer())];
|
|
@@ -29,7 +25,7 @@ export function pedersenHash(input: Buffer[], index = 0) {
|
|
|
29
25
|
}
|
|
30
26
|
input = input.map(i => (i.length < 32 ? Buffer.concat([Buffer.alloc(32 - i.length, 0), i]) : i));
|
|
31
27
|
return Buffer.from(
|
|
32
|
-
|
|
28
|
+
BarretenbergSync.getSingleton()
|
|
33
29
|
.pedersenHash(
|
|
34
30
|
input.map(i => new Fr(i)),
|
|
35
31
|
index,
|
|
@@ -42,5 +38,5 @@ export function pedersenHash(input: Buffer[], index = 0) {
|
|
|
42
38
|
* Create a pedersen hash from an arbitrary length buffer.
|
|
43
39
|
*/
|
|
44
40
|
export function pedersenHashBuffer(input: Buffer, index = 0) {
|
|
45
|
-
return Buffer.from(
|
|
41
|
+
return Buffer.from(BarretenbergSync.getSingleton().pedersenHashBuffer(input, index).toBuffer());
|
|
46
42
|
}
|
package/src/fields/fields.ts
CHANGED
|
@@ -41,8 +41,13 @@ abstract class BaseField {
|
|
|
41
41
|
|
|
42
42
|
protected constructor(value: number | bigint | boolean | BaseField | Buffer) {
|
|
43
43
|
if (value instanceof Buffer) {
|
|
44
|
+
if (value.length > BaseField.SIZE_IN_BYTES) {
|
|
45
|
+
throw new Error(`Value length ${value.length} exceeds ${BaseField.SIZE_IN_BYTES}`);
|
|
46
|
+
}
|
|
44
47
|
this.asBuffer =
|
|
45
|
-
value.length ===
|
|
48
|
+
value.length === BaseField.SIZE_IN_BYTES
|
|
49
|
+
? value
|
|
50
|
+
: Buffer.concat([Buffer.alloc(BaseField.SIZE_IN_BYTES - value.length), value]);
|
|
46
51
|
} else if (typeof value === 'bigint' || typeof value === 'number' || typeof value === 'boolean') {
|
|
47
52
|
this.asBigInt = BigInt(value);
|
|
48
53
|
if (this.asBigInt >= this.modulus()) {
|
|
@@ -104,7 +109,7 @@ abstract class BaseField {
|
|
|
104
109
|
}
|
|
105
110
|
|
|
106
111
|
toFriendlyJSON(): string {
|
|
107
|
-
return
|
|
112
|
+
return this.toString();
|
|
108
113
|
}
|
|
109
114
|
|
|
110
115
|
toField() {
|
package/src/index.ts
CHANGED
|
@@ -21,7 +21,9 @@ export * as serialize from './serialize/index.js';
|
|
|
21
21
|
export * as sleep from './sleep/index.js';
|
|
22
22
|
export * as timer from './timer/index.js';
|
|
23
23
|
export * as transport from './transport/index.js';
|
|
24
|
+
export * as trees from './trees/index.js';
|
|
24
25
|
export * as types from './types/index.js';
|
|
25
26
|
export * as url from './url/index.js';
|
|
26
27
|
export * as wasm from './wasm/index.js';
|
|
27
28
|
export * as worker from './worker/index.js';
|
|
29
|
+
export * as testing from './testing/index.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './test_data.js';
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const testData: { [key: string]: { toBuffer(): Buffer }[] } = {};
|
|
2
|
+
|
|
3
|
+
/** Returns whether test data generation is enabled */
|
|
4
|
+
export function isGenerateTestDataEnabled() {
|
|
5
|
+
return process.env.AZTEC_GENERATE_TEST_DATA === '1' && typeof expect !== 'undefined';
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/** Pushes test data with the given name, only if test data generation is enabled. */
|
|
9
|
+
export function pushTestData(itemName: string, data: { toBuffer(): Buffer }) {
|
|
10
|
+
if (!isGenerateTestDataEnabled()) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (typeof expect === 'undefined') {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const testName = expect.getState().currentTestName;
|
|
19
|
+
const fullItemName = `${testName} ${itemName}`;
|
|
20
|
+
|
|
21
|
+
if (!testData[fullItemName]) {
|
|
22
|
+
testData[fullItemName] = [];
|
|
23
|
+
}
|
|
24
|
+
testData[fullItemName].push(data);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Returns all instances of pushed test data with the given name, or empty if test data generation is not enabled. */
|
|
28
|
+
export function getTestData(itemName: string): { toBuffer(): Buffer }[] {
|
|
29
|
+
if (!isGenerateTestDataEnabled()) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const testName = expect.getState().currentTestName;
|
|
34
|
+
const fullItemName = `${testName} ${itemName}`;
|
|
35
|
+
return testData[fullItemName];
|
|
36
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A leaf of an indexed merkle tree.
|
|
3
|
+
*/
|
|
4
|
+
export interface IndexedTreeLeaf {
|
|
5
|
+
/**
|
|
6
|
+
* Returns key of the leaf. It's used for indexing.
|
|
7
|
+
*/
|
|
8
|
+
getKey(): bigint;
|
|
9
|
+
/**
|
|
10
|
+
* Serializes the leaf into a buffer.
|
|
11
|
+
*/
|
|
12
|
+
toBuffer(): Buffer;
|
|
13
|
+
/**
|
|
14
|
+
* Returns true if the leaf is empty.
|
|
15
|
+
*/
|
|
16
|
+
isEmpty(): boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Preimage of an indexed merkle tree leaf.
|
|
21
|
+
*/
|
|
22
|
+
export interface IndexedTreeLeafPreimage {
|
|
23
|
+
/**
|
|
24
|
+
* Returns key of the leaf corresponding to this preimage.
|
|
25
|
+
*/
|
|
26
|
+
getKey(): bigint;
|
|
27
|
+
/**
|
|
28
|
+
* Returns the key of the next leaf.
|
|
29
|
+
*/
|
|
30
|
+
getNextKey(): bigint;
|
|
31
|
+
/**
|
|
32
|
+
* Returns the index of the next leaf.
|
|
33
|
+
*/
|
|
34
|
+
getNextIndex(): bigint;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Returns the preimage as a leaf.
|
|
38
|
+
*/
|
|
39
|
+
asLeaf(): IndexedTreeLeaf;
|
|
40
|
+
/**
|
|
41
|
+
* Serializes the preimage into a buffer.
|
|
42
|
+
*/
|
|
43
|
+
toBuffer(): Buffer;
|
|
44
|
+
/**
|
|
45
|
+
* Serializes the preimage to an array of buffers for hashing.
|
|
46
|
+
*/
|
|
47
|
+
toHashInputs(): Buffer[];
|
|
48
|
+
}
|