@aztec/foundation 0.0.1-commit.9ef841308 → 0.0.1-commit.a89ec08
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/collection/index.d.ts +1 -2
- package/dest/collection/index.d.ts.map +1 -1
- package/dest/collection/index.js +0 -1
- package/dest/config/env_var.d.ts +2 -2
- package/dest/config/env_var.d.ts.map +1 -1
- package/dest/config/network_config.d.ts +6 -6
- package/dest/config/network_config.js +2 -2
- package/dest/config/network_name.d.ts +2 -2
- package/dest/config/network_name.d.ts.map +1 -1
- package/dest/config/network_name.js +0 -2
- package/dest/crypto/serialize.d.ts +51 -0
- package/dest/crypto/serialize.d.ts.map +1 -0
- package/dest/crypto/serialize.js +68 -0
- package/dest/curves/grumpkin/point.d.ts +4 -4
- package/dest/curves/grumpkin/point.d.ts.map +1 -1
- package/dest/curves/grumpkin/point.js +7 -4
- package/dest/jest/setup.js +0 -24
- package/dest/serialize/buffer_reader.d.ts +20 -7
- package/dest/serialize/buffer_reader.d.ts.map +1 -1
- package/dest/serialize/buffer_reader.js +18 -5
- package/dest/serialize/field_reader.d.ts +13 -5
- package/dest/serialize/field_reader.d.ts.map +1 -1
- package/dest/serialize/field_reader.js +13 -0
- package/dest/sleep/index.d.ts +1 -2
- package/dest/sleep/index.d.ts.map +1 -1
- package/dest/sleep/index.js +1 -10
- package/dest/timer/date.d.ts +1 -3
- package/dest/timer/date.d.ts.map +1 -1
- package/dest/timer/date.js +0 -4
- package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -1
- package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/indexed_merkle_tree_calculator.js +1 -5
- package/package.json +2 -3
- package/src/collection/index.ts +0 -1
- package/src/config/env_var.ts +4 -11
- package/src/config/network_config.ts +1 -1
- package/src/config/network_name.ts +1 -4
- package/src/crypto/serialize.ts +85 -0
- package/src/curves/grumpkin/point.ts +6 -3
- package/src/jest/setup.mjs +0 -27
- package/src/serialize/buffer_reader.ts +29 -6
- package/src/serialize/field_reader.ts +22 -4
- package/src/sleep/index.ts +1 -10
- package/src/timer/date.ts +0 -6
- package/src/trees/indexed_merkle_tree_calculator.ts +1 -5
- package/src/trees/membership_witness.ts +2 -2
- package/dest/collection/lru_set.d.ts +0 -35
- package/dest/collection/lru_set.d.ts.map +0 -1
- package/dest/collection/lru_set.js +0 -95
- package/dest/fifo/fifo_frame_reader.d.ts +0 -41
- package/dest/fifo/fifo_frame_reader.d.ts.map +0 -1
- package/dest/fifo/fifo_frame_reader.js +0 -74
- package/dest/fifo/index.d.ts +0 -2
- package/dest/fifo/index.d.ts.map +0 -1
- package/dest/fifo/index.js +0 -1
- package/src/collection/lru_set.ts +0 -115
- package/src/fifo/fifo_frame_reader.ts +0 -98
- package/src/fifo/index.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field_reader.d.ts","sourceRoot":"","sources":["../../src/serialize/field_reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;GAOG;AACH,qBAAa,WAAW;IAKpB,OAAO,CAAC,MAAM;IAJhB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,YACU,MAAM,EAAE,EAAE,EAAE,EACpB,MAAM,SAAI,EAOX;IAED;;;;;OAKG;IACH,OAAc,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG,WAAW,CAM9D;IAED;;;;OAIG;IACH,IAAW,MAAM,WAEhB;IAEM,eAAe,IAAI,MAAM,CAE/B;IAED;;;;OAIG;IACI,IAAI,CAAC,CAAC,EAAE,MAAM,QAKpB;IAED;;;;OAIG;IACI,SAAS,IAAI,EAAE,CAKrB;IAED;;;;OAIG;IACI,SAAS,IAAI,EAAE,CAKrB;IAED;;;;OAIG;IACI,MAAM,IAAI,EAAE,CAElB;IAED;;;;;;;OAOG;IACI,WAAW,IAAI,OAAO,CAO5B;IAED;;;;;;OAMG;IACI,OAAO,IAAI,MAAM,CAOvB;IAED;;;;;;OAMG;IACI,OAAO,IAAI,MAAM,CAOvB;IAED;;;;;OAKG;IACI,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAM7D;IAED;;;;;;;;;OASG;IACI,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAClC,IAAI,EAAE,CAAC,EACP,gBAAgB,EAAE;QAChB
|
|
1
|
+
{"version":3,"file":"field_reader.d.ts","sourceRoot":"","sources":["../../src/serialize/field_reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;GAOG;AACH,qBAAa,WAAW;IAKpB,OAAO,CAAC,MAAM;IAJhB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,YACU,MAAM,EAAE,EAAE,EAAE,EACpB,MAAM,SAAI,EAOX;IAED;;;;;OAKG;IACH,OAAc,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG,WAAW,CAM9D;IAED;;;;OAIG;IACH,IAAW,MAAM,WAEhB;IAEM,eAAe,IAAI,MAAM,CAE/B;IAED;;;;OAIG;IACI,IAAI,CAAC,CAAC,EAAE,MAAM,QAKpB;IAED;;;;OAIG;IACI,SAAS,IAAI,EAAE,CAKrB;IAED;;;;OAIG;IACI,SAAS,IAAI,EAAE,CAKrB;IAED;;;;OAIG;IACI,MAAM,IAAI,EAAE,CAElB;IAED;;;;;;;OAOG;IACI,WAAW,IAAI,OAAO,CAO5B;IAED;;;;;;OAMG;IACI,OAAO,IAAI,MAAM,CAOvB;IAED;;;;;;OAMG;IACI,OAAO,IAAI,MAAM,CAOvB;IAED;;;;;OAKG;IACI,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAM7D;IAED;;;;;;;;;OASG;IACH;;;OAGG;IACI,SAAS,CAAC,CAAC,EAChB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE;QAChB,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC,CAAC;KACxC,GACA,CAAC,EAAE,CAML;IAED;;;OAGG;IACI,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAClC,IAAI,EAAE,CAAC,EACP,gBAAgB,EAAE;QAChB,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC,CAAC;KACxC,GACA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAGb;IAED;;;;;;OAMG;IACI,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE;QACjC;;WAEG;QACH,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,CAAC,CAAC;KACxC,GAAG,CAAC,CAEJ;IAED;;;OAGG;IACI,UAAU,IAAI,OAAO,CAE3B;CACF"}
|
|
@@ -140,7 +140,20 @@ import { Fq } from '../curves/bn254/field.js';
|
|
|
140
140
|
* @param size - The fixed number of elements in the array.
|
|
141
141
|
* @param itemDeserializer - An object with a 'fromFields' method to deserialize individual elements of type T.
|
|
142
142
|
* @returns An array of instances of type T.
|
|
143
|
+
*/ /**
|
|
144
|
+
* Read an array from the field array using lazy allocation (new Array + loop).
|
|
145
|
+
* Safe for use with untrusted sizes.
|
|
143
146
|
*/ readArray(size, itemDeserializer) {
|
|
147
|
+
const result = new Array(size);
|
|
148
|
+
for(let i = 0; i < size; i++){
|
|
149
|
+
result[i] = itemDeserializer.fromFields(this);
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Read a fixed-size tuple from the field array using dense allocation (Array.from).
|
|
155
|
+
* Only use with compile-time constant sizes — the size parameter MUST NOT come from untrusted input.
|
|
156
|
+
*/ readTuple(size, itemDeserializer) {
|
|
144
157
|
const result = Array.from({
|
|
145
158
|
length: size
|
|
146
159
|
}, ()=>itemDeserializer.fromFields(this));
|
package/dest/sleep/index.d.ts
CHANGED
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
*/
|
|
21
21
|
export declare class InterruptibleSleep {
|
|
22
22
|
private interrupts;
|
|
23
|
-
private timeoutIds;
|
|
24
23
|
/**
|
|
25
24
|
* Sleep for a specified amount of time in milliseconds.
|
|
26
25
|
* The sleep function will pause the execution of the current async function
|
|
@@ -51,4 +50,4 @@ export declare class InterruptibleSleep {
|
|
|
51
50
|
export declare function sleep<T>(ms: number, returnValue?: T): Promise<T>;
|
|
52
51
|
/** Sleeps until the target date */
|
|
53
52
|
export declare function sleepUntil<T>(target: Date, now: Date, returnValue?: T): Promise<T>;
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zbGVlcC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILHFCQUFhLGtCQUFrQjtJQUM3QixPQUFPLENBQUMsVUFBVSxDQUE2QztJQUUvRDs7Ozs7OztPQU9HO0lBQ1UsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWU1QztJQUVEOzs7Ozs7T0FNRztJQUNJLFNBQVMsQ0FBQyxnQkFBZ0IsVUFBUSxHQUFHLElBQUksQ0FHL0M7Q0FDRjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQWdCLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUVoRTtBQUVELG1DQUFtQztBQUNuQyx3QkFBZ0IsVUFBVSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FHbEYifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sleep/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAA6C;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sleep/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAA6C;IAE/D;;;;;;;OAOG;IACU,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe5C;IAED;;;;;;OAMG;IACI,SAAS,CAAC,gBAAgB,UAAQ,GAAG,IAAI,CAG/C;CACF;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhE;AAED,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlF"}
|
package/dest/sleep/index.js
CHANGED
|
@@ -20,7 +20,6 @@ import { InterruptError } from '../error/index.js';
|
|
|
20
20
|
* setTimeout(() =\> sleeper.interrupt(true), 1500); // Interrupt the sleep after 1.5 seconds
|
|
21
21
|
*/ export class InterruptibleSleep {
|
|
22
22
|
interrupts = [];
|
|
23
|
-
timeoutIds = [];
|
|
24
23
|
/**
|
|
25
24
|
* Sleep for a specified amount of time in milliseconds.
|
|
26
25
|
* The sleep function will pause the execution of the current async function
|
|
@@ -34,17 +33,11 @@ import { InterruptError } from '../error/index.js';
|
|
|
34
33
|
interruptResolve = resolve;
|
|
35
34
|
this.interrupts.push(resolve);
|
|
36
35
|
});
|
|
37
|
-
|
|
38
|
-
const timeoutPromise = new Promise((resolve)=>{
|
|
39
|
-
timeoutId = setTimeout(()=>resolve(false), ms);
|
|
40
|
-
this.timeoutIds.push(timeoutId);
|
|
41
|
-
});
|
|
36
|
+
const timeoutPromise = new Promise((resolve)=>setTimeout(()=>resolve(false), ms));
|
|
42
37
|
const shouldThrow = await Promise.race([
|
|
43
38
|
interruptPromise,
|
|
44
39
|
timeoutPromise
|
|
45
40
|
]);
|
|
46
|
-
clearTimeout(timeoutId);
|
|
47
|
-
this.timeoutIds = this.timeoutIds.filter((id)=>id !== timeoutId);
|
|
48
41
|
this.interrupts = this.interrupts.filter((res)=>res !== interruptResolve);
|
|
49
42
|
if (shouldThrow) {
|
|
50
43
|
throw new InterruptError('Interrupted.');
|
|
@@ -59,8 +52,6 @@ import { InterruptError } from '../error/index.js';
|
|
|
59
52
|
*/ interrupt(sleepShouldThrow = false) {
|
|
60
53
|
this.interrupts.forEach((resolve)=>resolve(sleepShouldThrow));
|
|
61
54
|
this.interrupts = [];
|
|
62
|
-
this.timeoutIds.forEach((id)=>clearTimeout(id));
|
|
63
|
-
this.timeoutIds = [];
|
|
64
55
|
}
|
|
65
56
|
}
|
|
66
57
|
/**
|
package/dest/timer/date.d.ts
CHANGED
|
@@ -11,8 +11,6 @@ export declare class TestDateProvider extends DateProvider {
|
|
|
11
11
|
constructor(logger?: import("../log/pino-logger.js").Logger);
|
|
12
12
|
now(): number;
|
|
13
13
|
setTime(timeMs: number): void;
|
|
14
|
-
/** Resets the time back to real time (offset = 0). */
|
|
15
|
-
reset(): void;
|
|
16
14
|
/** Advances the time by the given number of seconds. */
|
|
17
15
|
advanceTime(seconds: number): void;
|
|
18
16
|
}
|
|
@@ -36,4 +34,4 @@ export declare class ManualDateProvider extends DateProvider {
|
|
|
36
34
|
/** Advances the time by the given number of milliseconds. */
|
|
37
35
|
advanceTimeMs(ms: number): void;
|
|
38
36
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RpbWVyL2RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsZ0NBQWdDO0FBQ2hDLHFCQUFhLFlBQVk7SUFDaEIsR0FBRyxJQUFJLE1BQU0sQ0FFbkI7SUFFTSxZQUFZLElBQUksTUFBTSxDQUU1QjtJQUVNLFNBQVMsSUFBSSxJQUFJLENBRXZCO0NBQ0Y7QUFFRCwwREFBMEQ7QUFDMUQscUJBQWEsZ0JBQWlCLFNBQVEsWUFBWTtJQUdwQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFGbkMsT0FBTyxDQUFDLE1BQU0sQ0FBSztJQUVuQixZQUE2QixNQUFNLHlDQUFnRCxFQUVsRjtJQUVlLEdBQUcsSUFBSSxNQUFNLENBRTVCO0lBRU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLFFBRzVCO0lBRUQsd0RBQXdEO0lBQ2pELFdBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxRQUVqQztDQUNGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxxQkFBYSxrQkFBbUIsU0FBUSxZQUFZO0lBQ2xELE9BQU8sQ0FBQyxhQUFhLENBQVM7SUFFOUI7O09BRUc7SUFDSCxZQUFZLGFBQWEsR0FBRSxNQUFzQyxFQUdoRTtJQUVlLEdBQUcsSUFBSSxNQUFNLENBRTVCO0lBRUQsb0VBQW9FO0lBQzdELE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxRQUU1QjtJQUVELHdEQUF3RDtJQUNqRCxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sUUFFakM7SUFFRCw2REFBNkQ7SUFDdEQsYUFBYSxDQUFDLEVBQUUsRUFBRSxNQUFNLFFBRTlCO0NBQ0YifQ==
|
package/dest/timer/date.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/timer/date.ts"],"names":[],"mappings":"AAEA,gCAAgC;AAChC,qBAAa,YAAY;IAChB,GAAG,IAAI,MAAM,CAEnB;IAEM,YAAY,IAAI,MAAM,CAE5B;IAEM,SAAS,IAAI,IAAI,CAEvB;CACF;AAED,0DAA0D;AAC1D,qBAAa,gBAAiB,SAAQ,YAAY;IAGpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,MAAM,CAAK;IAEnB,YAA6B,MAAM,yCAAgD,EAElF;IAEe,GAAG,IAAI,MAAM,CAE5B;IAEM,OAAO,CAAC,MAAM,EAAE,MAAM,QAG5B;IAED,
|
|
1
|
+
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/timer/date.ts"],"names":[],"mappings":"AAEA,gCAAgC;AAChC,qBAAa,YAAY;IAChB,GAAG,IAAI,MAAM,CAEnB;IAEM,YAAY,IAAI,MAAM,CAE5B;IAEM,SAAS,IAAI,IAAI,CAEvB;CACF;AAED,0DAA0D;AAC1D,qBAAa,gBAAiB,SAAQ,YAAY;IAGpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,MAAM,CAAK;IAEnB,YAA6B,MAAM,yCAAgD,EAElF;IAEe,GAAG,IAAI,MAAM,CAE5B;IAEM,OAAO,CAAC,MAAM,EAAE,MAAM,QAG5B;IAED,wDAAwD;IACjD,WAAW,CAAC,OAAO,EAAE,MAAM,QAEjC;CACF;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,aAAa,CAAS;IAE9B;;OAEG;IACH,YAAY,aAAa,GAAE,MAAsC,EAGhE;IAEe,GAAG,IAAI,MAAM,CAE5B;IAED,oEAAoE;IAC7D,OAAO,CAAC,MAAM,EAAE,MAAM,QAE5B;IAED,wDAAwD;IACjD,WAAW,CAAC,OAAO,EAAE,MAAM,QAEjC;IAED,6DAA6D;IACtD,aAAa,CAAC,EAAE,EAAE,MAAM,QAE9B;CACF"}
|
package/dest/timer/date.js
CHANGED
|
@@ -26,10 +26,6 @@ import { createLogger } from '../log/pino-logger.js';
|
|
|
26
26
|
timeMs
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
|
-
/** Resets the time back to real time (offset = 0). */ reset() {
|
|
30
|
-
this.offset = 0;
|
|
31
|
-
this.logger.warn('Time reset to real time');
|
|
32
|
-
}
|
|
33
29
|
/** Advances the time by the given number of seconds. */ advanceTime(seconds) {
|
|
34
30
|
this.offset += seconds * 1000;
|
|
35
31
|
}
|
|
@@ -18,4 +18,4 @@ export declare class IndexedMerkleTreeCalculator<T extends IndexedTreeLeafPreima
|
|
|
18
18
|
computeTreeRoot(leaves?: Buffer[]): Promise<Buffer>;
|
|
19
19
|
}
|
|
20
20
|
export {};
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhlZF9tZXJrbGVfdHJlZV9jYWxjdWxhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJlZXMvaW5kZXhlZF9tZXJrbGVfdHJlZV9jYWxjdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkUsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTdELFVBQVUsbUJBQW1CLENBQUMsQ0FBQyxTQUFTLHVCQUF1QjtJQUM3RCxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7Q0FDL0I7QUFFRDs7R0FFRztBQUNILHFCQUFhLDJCQUEyQixDQUFDLENBQUMsU0FBUyx1QkFBdUIsRUFBRSxDQUFDLFNBQVMsTUFBTTtJQUV4RixPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxVQUFVO0lBQ2xCLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLE9BQU87SUFKakIsT0FBTyxlQUtIO0lBRUosT0FBYSxNQUFNLENBQUMsQ0FBQyxTQUFTLHVCQUF1QixFQUFFLENBQUMsU0FBUyxNQUFNLEVBQ3JFLE1BQU0sRUFBRSxDQUFDLEVBQ1QsTUFBTSxFQUFFLFdBQVcsRUFDbkIsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUMvQixRQUFRLHNCQUFtQiw4Q0FPNUI7SUFFSyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FxQ3BFO0lBRUssZUFBZSxDQUFDLE1BQU0sR0FBRSxNQUFNLEVBQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBa0I1RDtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexed_merkle_tree_calculator.d.ts","sourceRoot":"","sources":["../../src/trees/indexed_merkle_tree_calculator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,UAAU,mBAAmB,CAAC,CAAC,SAAS,uBAAuB;IAC7D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,2BAA2B,CAAC,CAAC,SAAS,uBAAuB,EAAE,CAAC,SAAS,MAAM;IAExF,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IAJjB,OAAO,eAKH;IAEJ,OAAa,MAAM,CAAC,CAAC,SAAS,uBAAuB,EAAE,CAAC,SAAS,MAAM,EACrE,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC/B,QAAQ,sBAAmB,8CAO5B;IAEK,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"indexed_merkle_tree_calculator.d.ts","sourceRoot":"","sources":["../../src/trees/indexed_merkle_tree_calculator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,UAAU,mBAAmB,CAAC,CAAC,SAAS,uBAAuB;IAC7D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,2BAA2B,CAAC,CAAC,SAAS,uBAAuB,EAAE,CAAC,SAAS,MAAM;IAExF,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IAJjB,OAAO,eAKH;IAEJ,OAAa,MAAM,CAAC,CAAC,SAAS,uBAAuB,EAAE,CAAC,SAAS,MAAM,EACrE,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC/B,QAAQ,sBAAmB,8CAO5B;IAEK,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAqCpE;IAEK,eAAe,CAAC,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB5D;CACF"}
|
|
@@ -34,11 +34,7 @@ import { IndexedMerkleTree } from './indexed_merkle_tree.js';
|
|
|
34
34
|
const sorted = values.map((v, i)=>({
|
|
35
35
|
value: v,
|
|
36
36
|
index: i
|
|
37
|
-
})).sort((a, b)=>
|
|
38
|
-
const aBigInt = toBigIntBE(a.value);
|
|
39
|
-
const bBigInt = toBigIntBE(b.value);
|
|
40
|
-
return aBigInt < bBigInt ? 1 : aBigInt > bBigInt ? -1 : 0;
|
|
41
|
-
});
|
|
37
|
+
})).sort((a, b)=>Number(toBigIntBE(b.value) - toBigIntBE(a.value)));
|
|
42
38
|
const indexedLeaves = sorted.map((item, i)=>({
|
|
43
39
|
leaf: this.factory.fromBuffer(Buffer.concat([
|
|
44
40
|
item.value,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/foundation",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.a89ec08",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dest/index.js",
|
|
6
6
|
"types": "./dest/index.d.ts",
|
|
@@ -61,7 +61,6 @@
|
|
|
61
61
|
"./eth-address": "./dest/eth-address/index.js",
|
|
62
62
|
"./eth-signature": "./dest/eth-signature/index.js",
|
|
63
63
|
"./queue": "./dest/queue/index.js",
|
|
64
|
-
"./fifo": "./dest/fifo/index.js",
|
|
65
64
|
"./fs": "./dest/fs/index.js",
|
|
66
65
|
"./buffer": "./dest/buffer/index.js",
|
|
67
66
|
"./json-rpc": "./dest/json-rpc/index.js",
|
|
@@ -145,7 +144,7 @@
|
|
|
145
144
|
"testEnvironment": "../../foundation/src/jest/env.mjs"
|
|
146
145
|
},
|
|
147
146
|
"dependencies": {
|
|
148
|
-
"@aztec/bb.js": "0.0.1-commit.
|
|
147
|
+
"@aztec/bb.js": "0.0.1-commit.a89ec08",
|
|
149
148
|
"@koa/cors": "^5.0.0",
|
|
150
149
|
"@noble/curves": "=1.7.0",
|
|
151
150
|
"@noble/hashes": "^1.6.1",
|
package/src/collection/index.ts
CHANGED
package/src/config/env_var.ts
CHANGED
|
@@ -12,6 +12,7 @@ export type EnvVar =
|
|
|
12
12
|
| 'ARCHIVER_VIEM_POLLING_INTERVAL_MS'
|
|
13
13
|
| 'ARCHIVER_BATCH_SIZE'
|
|
14
14
|
| 'AZTEC_ADMIN_PORT'
|
|
15
|
+
| 'AZTEC_NODE_DEBUG'
|
|
15
16
|
| 'AZTEC_ADMIN_API_KEY_HASH'
|
|
16
17
|
| 'AZTEC_DISABLE_ADMIN_API_KEY'
|
|
17
18
|
| 'AZTEC_RESET_ADMIN_API_KEY'
|
|
@@ -23,8 +24,6 @@ export type EnvVar =
|
|
|
23
24
|
| 'BB_WORKING_DIRECTORY'
|
|
24
25
|
| 'BB_NUM_IVC_VERIFIERS'
|
|
25
26
|
| 'BB_IVC_CONCURRENCY'
|
|
26
|
-
| 'BB_CHONK_VERIFY_MAX_BATCH'
|
|
27
|
-
| 'BB_CHONK_VERIFY_BATCH_CONCURRENCY'
|
|
28
27
|
| 'BOOTSTRAP_NODES'
|
|
29
28
|
| 'BLOB_ARCHIVE_API_URL'
|
|
30
29
|
| 'BLOB_FILE_STORE_URLS'
|
|
@@ -64,7 +63,6 @@ export type EnvVar =
|
|
|
64
63
|
| 'BLOB_SINK_MAP_SIZE_KB'
|
|
65
64
|
| 'P2P_STORE_MAP_SIZE_KB'
|
|
66
65
|
| 'PROVER_BROKER_STORE_MAP_SIZE_KB'
|
|
67
|
-
| 'SIGNING_PROTECTION_MAP_SIZE_KB'
|
|
68
66
|
| 'WS_DB_MAP_SIZE_KB'
|
|
69
67
|
| 'ARCHIVE_TREE_MAP_SIZE_KB'
|
|
70
68
|
| 'NULLIFIER_TREE_MAP_SIZE_KB'
|
|
@@ -86,7 +84,6 @@ export type EnvVar =
|
|
|
86
84
|
| 'ETHEREUM_HTTP_TIMEOUT_MS'
|
|
87
85
|
| 'L1_CONSENSUS_HOST_API_KEYS'
|
|
88
86
|
| 'L1_CONSENSUS_HOST_API_KEY_HEADERS'
|
|
89
|
-
| 'L1_TX_FAILED_STORE'
|
|
90
87
|
| 'LOG_JSON'
|
|
91
88
|
| 'LOG_MULTILINE'
|
|
92
89
|
| 'LOG_NO_COLOR_PER_ACTOR'
|
|
@@ -94,7 +91,6 @@ export type EnvVar =
|
|
|
94
91
|
| 'MNEMONIC'
|
|
95
92
|
| 'NETWORK'
|
|
96
93
|
| 'NETWORK_CONFIG_LOCATION'
|
|
97
|
-
| 'NO_PXE'
|
|
98
94
|
| 'USE_GCLOUD_LOGGING'
|
|
99
95
|
| 'OTEL_EXPORTER_OTLP_METRICS_ENDPOINT'
|
|
100
96
|
| 'OTEL_EXPORTER_OTLP_TRACES_ENDPOINT'
|
|
@@ -133,7 +129,6 @@ export type EnvVar =
|
|
|
133
129
|
| 'P2P_L2_QUEUE_SIZE'
|
|
134
130
|
| 'P2P_MAX_PEERS'
|
|
135
131
|
| 'P2P_PEER_CHECK_INTERVAL_MS'
|
|
136
|
-
| 'P2P_PEER_FAILED_BAN_TIME_MS'
|
|
137
132
|
| 'P2P_PEER_PENALTY_VALUES'
|
|
138
133
|
| 'P2P_QUERY_FOR_IP'
|
|
139
134
|
| 'P2P_REQRESP_INDIVIDUAL_REQUEST_TIMEOUT_MS'
|
|
@@ -154,6 +149,7 @@ export type EnvVar =
|
|
|
154
149
|
| 'P2P_PREFERRED_PEERS'
|
|
155
150
|
| 'P2P_MAX_PENDING_TX_COUNT'
|
|
156
151
|
| 'P2P_SEEN_MSG_CACHE_SIZE'
|
|
152
|
+
| 'P2P_DROP_TX'
|
|
157
153
|
| 'P2P_DROP_TX_CHANCE'
|
|
158
154
|
| 'P2P_TX_POOL_DELETE_TXS_AFTER_REORG'
|
|
159
155
|
| 'P2P_MIN_TX_POOL_AGE_MS'
|
|
@@ -207,7 +203,6 @@ export type EnvVar =
|
|
|
207
203
|
| 'SENTINEL_ENABLED'
|
|
208
204
|
| 'SENTINEL_HISTORY_LENGTH_IN_EPOCHS'
|
|
209
205
|
| 'SENTINEL_HISTORIC_PROVEN_PERFORMANCE_LENGTH_IN_EPOCHS'
|
|
210
|
-
| 'SEQ_ENABLE_PROPOSER_PIPELINING'
|
|
211
206
|
| 'SEQ_MAX_TX_PER_BLOCK'
|
|
212
207
|
| 'SEQ_MAX_TX_PER_CHECKPOINT'
|
|
213
208
|
| 'SEQ_MIN_TX_PER_BLOCK'
|
|
@@ -221,8 +216,6 @@ export type EnvVar =
|
|
|
221
216
|
| 'SEQ_PUBLISHER_ADDRESSES'
|
|
222
217
|
| 'SEQ_PUBLISHER_ALLOW_INVALID_STATES'
|
|
223
218
|
| 'SEQ_PUBLISHER_FORWARDER_ADDRESS'
|
|
224
|
-
| 'PUBLISHER_FUNDING_THRESHOLD'
|
|
225
|
-
| 'PUBLISHER_FUNDING_AMOUNT'
|
|
226
219
|
| 'SEQ_POLLING_INTERVAL_MS'
|
|
227
220
|
| 'SEQ_ENFORCE_TIME_TABLE'
|
|
228
221
|
| 'SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT'
|
|
@@ -295,6 +288,7 @@ export type EnvVar =
|
|
|
295
288
|
| 'VALIDATOR_MAX_TX_PER_CHECKPOINT'
|
|
296
289
|
| 'VALIDATOR_PRIVATE_KEYS'
|
|
297
290
|
| 'VALIDATOR_PRIVATE_KEY'
|
|
291
|
+
| 'VALIDATOR_REEXECUTE'
|
|
298
292
|
| 'VALIDATOR_ADDRESSES'
|
|
299
293
|
| 'ROLLUP_VERSION'
|
|
300
294
|
| 'WS_BLOCK_CHECK_INTERVAL_MS'
|
|
@@ -357,11 +351,10 @@ export type EnvVar =
|
|
|
357
351
|
| 'K8S_POD_UID'
|
|
358
352
|
| 'K8S_NAMESPACE_NAME'
|
|
359
353
|
| 'ENABLE_VERSION_CHECK'
|
|
354
|
+
| 'VALIDATOR_REEXECUTE_DEADLINE_MS'
|
|
360
355
|
| 'WEB3_SIGNER_URL'
|
|
361
356
|
| 'SKIP_ARCHIVER_INITIAL_SYNC'
|
|
362
357
|
| 'BLOB_ALLOW_EMPTY_SOURCES'
|
|
363
|
-
| 'BLOB_PREFER_FILESTORES'
|
|
364
|
-
| 'BLOB_FILE_STORE_TIMEOUT_MS'
|
|
365
358
|
| 'FISHERMAN_MODE'
|
|
366
359
|
| 'MAX_ALLOWED_ETH_CLIENT_DRIFT_SECONDS'
|
|
367
360
|
| 'LEGACY_BLS_CLI'
|
|
@@ -10,8 +10,8 @@ export const NetworkConfigSchema = z
|
|
|
10
10
|
feeAssetHandlerAddress: z.string().optional(),
|
|
11
11
|
l1ChainId: z.number(),
|
|
12
12
|
blockDurationMs: z.number().positive().optional(),
|
|
13
|
-
txPublicSetupAllowListExtend: z.string().optional(),
|
|
14
13
|
nodeVersion: z.string().optional(),
|
|
14
|
+
txPublicSetupAllowListExtend: z.string().optional(),
|
|
15
15
|
})
|
|
16
16
|
.passthrough(); // Allow additional unknown fields to pass through
|
|
17
17
|
|
|
@@ -5,8 +5,7 @@ export type NetworkNames =
|
|
|
5
5
|
| 'testnet'
|
|
6
6
|
| 'mainnet'
|
|
7
7
|
| 'next-net'
|
|
8
|
-
| 'devnet'
|
|
9
|
-
| `v${number}-devnet-${number}`;
|
|
8
|
+
| 'devnet';
|
|
10
9
|
|
|
11
10
|
export function getActiveNetworkName(name?: string): NetworkNames {
|
|
12
11
|
const network = name || process.env.NETWORK;
|
|
@@ -24,8 +23,6 @@ export function getActiveNetworkName(name?: string): NetworkNames {
|
|
|
24
23
|
return 'next-net';
|
|
25
24
|
} else if (network === 'devnet') {
|
|
26
25
|
return 'devnet';
|
|
27
|
-
} else if (/^v\d+-devnet-\d+$/.test(network)) {
|
|
28
|
-
return network as `v${number}-devnet-${number}`;
|
|
29
26
|
}
|
|
30
27
|
throw new Error(`Unknown network: ${network}`);
|
|
31
28
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// TODO find a new home for this as we move to external bb.js
|
|
2
|
+
// See https://github.com/AztecProtocol/aztec-packages/issues/782
|
|
3
|
+
import { Buffer } from 'buffer';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* For serializing an array of fixed length buffers.
|
|
7
|
+
* TODO move to foundation pkg.
|
|
8
|
+
* @param arr - Array of bufffers.
|
|
9
|
+
* @returns The serialized buffers.
|
|
10
|
+
*/
|
|
11
|
+
export function serializeBufferArrayToVector(arr: Buffer[]) {
|
|
12
|
+
const lengthBuf = Buffer.alloc(4);
|
|
13
|
+
lengthBuf.writeUInt32BE(arr.length, 0);
|
|
14
|
+
return Buffer.concat([lengthBuf, ...arr]);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Helper function for deserializeArrayFromVector.
|
|
19
|
+
*/
|
|
20
|
+
type DeserializeFn<T> = (
|
|
21
|
+
buf: Buffer,
|
|
22
|
+
offset: number,
|
|
23
|
+
) => {
|
|
24
|
+
/**
|
|
25
|
+
* The deserialized type.
|
|
26
|
+
*/
|
|
27
|
+
elem: T;
|
|
28
|
+
/**
|
|
29
|
+
* How many bytes to advance by.
|
|
30
|
+
*/
|
|
31
|
+
adv: number;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* For deserializing numbers to 32-bit little-endian form.
|
|
36
|
+
* TODO move to foundation pkg.
|
|
37
|
+
* @param n - The number.
|
|
38
|
+
* @returns The endian-corrected number.
|
|
39
|
+
*/
|
|
40
|
+
export function deserializeArrayFromVector<T>(deserialize: DeserializeFn<T>, vector: Buffer, offset = 0) {
|
|
41
|
+
let pos = offset;
|
|
42
|
+
const size = vector.readUInt32BE(pos);
|
|
43
|
+
pos += 4;
|
|
44
|
+
const arr = new Array<T>(size);
|
|
45
|
+
for (let i = 0; i < size; ++i) {
|
|
46
|
+
const { elem, adv } = deserialize(vector, pos);
|
|
47
|
+
pos += adv;
|
|
48
|
+
arr[i] = elem;
|
|
49
|
+
}
|
|
50
|
+
return { elem: arr, adv: pos - offset };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* For serializing numbers to 32 bit little-endian form.
|
|
55
|
+
* TODO move to foundation pkg.
|
|
56
|
+
* @param n - The number.
|
|
57
|
+
* @returns The endian-corrected number.
|
|
58
|
+
*/
|
|
59
|
+
export function numToUInt32LE(n: number, bufferSize = 4) {
|
|
60
|
+
const buf = Buffer.alloc(bufferSize);
|
|
61
|
+
buf.writeUInt32LE(n, bufferSize - 4);
|
|
62
|
+
return buf;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Deserialize the 256-bit number at address `offset`.
|
|
67
|
+
* @param buf - The buffer.
|
|
68
|
+
* @param offset - The address.
|
|
69
|
+
* @returns The derserialized 256-bit field.
|
|
70
|
+
*/
|
|
71
|
+
export function deserializeField(buf: Buffer, offset = 0) {
|
|
72
|
+
const adv = 32;
|
|
73
|
+
return { elem: buf.slice(offset, offset + adv), adv };
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function concatenateUint8Arrays(arrayOfUint8Arrays: Uint8Array[]) {
|
|
77
|
+
const totalLength = arrayOfUint8Arrays.reduce((prev, curr) => prev + curr.length, 0);
|
|
78
|
+
const result = new Uint8Array(totalLength);
|
|
79
|
+
let length = 0;
|
|
80
|
+
for (const array of arrayOfUint8Arrays) {
|
|
81
|
+
result.set(array, length);
|
|
82
|
+
length += array.length;
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
@@ -65,7 +65,7 @@ export class Point {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
|
-
* Generate a random Point instance.
|
|
68
|
+
* Generate a random Point instance that is on the curve.
|
|
69
69
|
*
|
|
70
70
|
* @returns A randomly generated Point instance.
|
|
71
71
|
*/
|
|
@@ -125,9 +125,12 @@ export class Point {
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
/**
|
|
128
|
-
* Returns the contents of the point as an array of
|
|
129
|
-
* @returns The point as an array of
|
|
128
|
+
* Returns the contents of the point as an array of 3 fields.
|
|
129
|
+
* @returns The point as an array of 3 fields
|
|
130
130
|
*/
|
|
131
|
+
// TODO(F-553): Once we take the breaking change and drop the custom Noir `Point` wrapper in
|
|
132
|
+
// `noir-projects/noir-protocol-circuits/crates/types/src/point.nr`, revert this to serialize as `[x, y]` (2 fields)
|
|
133
|
+
// and drop the `is_infinite` flag from `fromFields` / `toNoirStruct` below.
|
|
131
134
|
toFields() {
|
|
132
135
|
return [this.x, this.y, new Fr(this.isInfinite)];
|
|
133
136
|
}
|
package/src/jest/setup.mjs
CHANGED
|
@@ -10,30 +10,3 @@ import pretty from 'pino-pretty';
|
|
|
10
10
|
if (!parseBooleanEnv(process.env.LOG_JSON)) {
|
|
11
11
|
overwriteLoggingStream(pretty(pinoPrettyOpts));
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
// Prevent timers from keeping the process alive after tests complete.
|
|
15
|
-
// Libraries like viem create internal polling loops (via setTimeout) that
|
|
16
|
-
// reschedule themselves indefinitely. In test environments we never want a
|
|
17
|
-
// timer to be the reason the process can't exit. We also unref stdout/stderr
|
|
18
|
-
// which, when they are pipes (as in Jest workers), remain ref'd by default.
|
|
19
|
-
{
|
|
20
|
-
const origSetTimeout = globalThis.setTimeout;
|
|
21
|
-
const origSetInterval = globalThis.setInterval;
|
|
22
|
-
globalThis.setTimeout = function unrefSetTimeout(...args) {
|
|
23
|
-
const id = origSetTimeout.apply(this, args);
|
|
24
|
-
id?.unref?.();
|
|
25
|
-
return id;
|
|
26
|
-
};
|
|
27
|
-
// Preserve .unref, .__promisify__ etc. that may exist on the original
|
|
28
|
-
Object.setPrototypeOf(globalThis.setTimeout, origSetTimeout);
|
|
29
|
-
|
|
30
|
-
globalThis.setInterval = function unrefSetInterval(...args) {
|
|
31
|
-
const id = origSetInterval.apply(this, args);
|
|
32
|
-
id?.unref?.();
|
|
33
|
-
return id;
|
|
34
|
-
};
|
|
35
|
-
Object.setPrototypeOf(globalThis.setInterval, origSetInterval);
|
|
36
|
-
|
|
37
|
-
if (process.stdout?._handle?.unref) process.stdout._handle.unref();
|
|
38
|
-
if (process.stderr?._handle?.unref) process.stderr._handle.unref();
|
|
39
|
-
}
|
|
@@ -286,16 +286,39 @@ export class BufferReader {
|
|
|
286
286
|
}
|
|
287
287
|
|
|
288
288
|
/**
|
|
289
|
-
* Read an array
|
|
290
|
-
*
|
|
291
|
-
* and returns an instance of the desired deserialized data type T.
|
|
292
|
-
* This method will call the 'fromBuffer' method for each element in the array and return the resulting array.
|
|
289
|
+
* Read an array from the buffer using lazy allocation (new Array + loop).
|
|
290
|
+
* Safe for use with untrusted sizes — does not pre-allocate memory proportional to size.
|
|
293
291
|
*
|
|
294
|
-
* @param size - The
|
|
292
|
+
* @param size - The number of elements to read.
|
|
295
293
|
* @param itemDeserializer - An object with a 'fromBuffer' method to deserialize individual elements of type T.
|
|
296
294
|
* @returns An array of instances of type T.
|
|
297
295
|
*/
|
|
298
|
-
public readArray<T
|
|
296
|
+
public readArray<T>(
|
|
297
|
+
size: number,
|
|
298
|
+
itemDeserializer: {
|
|
299
|
+
/**
|
|
300
|
+
* A function for deserializing data from a BufferReader instance.
|
|
301
|
+
*/
|
|
302
|
+
fromBuffer: (reader: BufferReader) => T;
|
|
303
|
+
},
|
|
304
|
+
): T[] {
|
|
305
|
+
const result = new Array<T>(size);
|
|
306
|
+
for (let i = 0; i < size; i++) {
|
|
307
|
+
result[i] = itemDeserializer.fromBuffer(this);
|
|
308
|
+
}
|
|
309
|
+
return result;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Read a fixed-size tuple from the buffer using dense allocation (Array.from).
|
|
314
|
+
* Only use with compile-time constant sizes — the size parameter MUST NOT come from untrusted input
|
|
315
|
+
* as Array.from pre-allocates memory proportional to size.
|
|
316
|
+
*
|
|
317
|
+
* @param size - The fixed number of elements (must be a compile-time constant).
|
|
318
|
+
* @param itemDeserializer - An object with a 'fromBuffer' method to deserialize individual elements of type T.
|
|
319
|
+
* @returns A densely-allocated tuple of instances of type T.
|
|
320
|
+
*/
|
|
321
|
+
public readTuple<T, N extends number>(
|
|
299
322
|
size: N,
|
|
300
323
|
itemDeserializer: {
|
|
301
324
|
/**
|
|
@@ -169,12 +169,30 @@ export class FieldReader {
|
|
|
169
169
|
* @param itemDeserializer - An object with a 'fromFields' method to deserialize individual elements of type T.
|
|
170
170
|
* @returns An array of instances of type T.
|
|
171
171
|
*/
|
|
172
|
-
|
|
172
|
+
/**
|
|
173
|
+
* Read an array from the field array using lazy allocation (new Array + loop).
|
|
174
|
+
* Safe for use with untrusted sizes.
|
|
175
|
+
*/
|
|
176
|
+
public readArray<T>(
|
|
177
|
+
size: number,
|
|
178
|
+
itemDeserializer: {
|
|
179
|
+
fromFields: (reader: FieldReader) => T;
|
|
180
|
+
},
|
|
181
|
+
): T[] {
|
|
182
|
+
const result = new Array<T>(size);
|
|
183
|
+
for (let i = 0; i < size; i++) {
|
|
184
|
+
result[i] = itemDeserializer.fromFields(this);
|
|
185
|
+
}
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Read a fixed-size tuple from the field array using dense allocation (Array.from).
|
|
191
|
+
* Only use with compile-time constant sizes — the size parameter MUST NOT come from untrusted input.
|
|
192
|
+
*/
|
|
193
|
+
public readTuple<T, N extends number>(
|
|
173
194
|
size: N,
|
|
174
195
|
itemDeserializer: {
|
|
175
|
-
/**
|
|
176
|
-
* A function for deserializing data from a FieldReader instance.
|
|
177
|
-
*/
|
|
178
196
|
fromFields: (reader: FieldReader) => T;
|
|
179
197
|
},
|
|
180
198
|
): Tuple<T, N> {
|
package/src/sleep/index.ts
CHANGED
|
@@ -22,7 +22,6 @@ import { InterruptError } from '../error/index.js';
|
|
|
22
22
|
*/
|
|
23
23
|
export class InterruptibleSleep {
|
|
24
24
|
private interrupts: Array<(shouldThrow: boolean) => void> = [];
|
|
25
|
-
private timeoutIds: NodeJS.Timeout[] = [];
|
|
26
25
|
|
|
27
26
|
/**
|
|
28
27
|
* Sleep for a specified amount of time in milliseconds.
|
|
@@ -39,15 +38,9 @@ export class InterruptibleSleep {
|
|
|
39
38
|
this.interrupts.push(resolve);
|
|
40
39
|
});
|
|
41
40
|
|
|
42
|
-
|
|
43
|
-
const timeoutPromise = new Promise<boolean>(resolve => {
|
|
44
|
-
timeoutId = setTimeout(() => resolve(false), ms);
|
|
45
|
-
this.timeoutIds.push(timeoutId);
|
|
46
|
-
});
|
|
41
|
+
const timeoutPromise = new Promise<boolean>(resolve => setTimeout(() => resolve(false), ms));
|
|
47
42
|
const shouldThrow = await Promise.race([interruptPromise, timeoutPromise]);
|
|
48
43
|
|
|
49
|
-
clearTimeout(timeoutId!);
|
|
50
|
-
this.timeoutIds = this.timeoutIds.filter(id => id !== timeoutId);
|
|
51
44
|
this.interrupts = this.interrupts.filter(res => res !== interruptResolve);
|
|
52
45
|
|
|
53
46
|
if (shouldThrow) {
|
|
@@ -65,8 +58,6 @@ export class InterruptibleSleep {
|
|
|
65
58
|
public interrupt(sleepShouldThrow = false): void {
|
|
66
59
|
this.interrupts.forEach(resolve => resolve(sleepShouldThrow));
|
|
67
60
|
this.interrupts = [];
|
|
68
|
-
this.timeoutIds.forEach(id => clearTimeout(id));
|
|
69
|
-
this.timeoutIds = [];
|
|
70
61
|
}
|
|
71
62
|
}
|
|
72
63
|
|
package/src/timer/date.ts
CHANGED
|
@@ -32,12 +32,6 @@ export class TestDateProvider extends DateProvider {
|
|
|
32
32
|
this.logger.warn(`Time set to ${new Date(timeMs).toISOString()}`, { offset: this.offset, timeMs });
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
/** Resets the time back to real time (offset = 0). */
|
|
36
|
-
public reset() {
|
|
37
|
-
this.offset = 0;
|
|
38
|
-
this.logger.warn('Time reset to real time');
|
|
39
|
-
}
|
|
40
|
-
|
|
41
35
|
/** Advances the time by the given number of seconds. */
|
|
42
36
|
public advanceTime(seconds: number) {
|
|
43
37
|
this.offset += seconds * 1000;
|
|
@@ -40,11 +40,7 @@ export class IndexedMerkleTreeCalculator<T extends IndexedTreeLeafPreimage, N ex
|
|
|
40
40
|
}
|
|
41
41
|
const sorted = values
|
|
42
42
|
.map((v, i) => ({ value: v, index: i }))
|
|
43
|
-
.sort((a, b)
|
|
44
|
-
const aBigInt = toBigIntBE(a.value);
|
|
45
|
-
const bBigInt = toBigIntBE(b.value);
|
|
46
|
-
return aBigInt < bBigInt ? 1 : aBigInt > bBigInt ? -1 : 0;
|
|
47
|
-
});
|
|
43
|
+
.sort((a, b) => Number(toBigIntBE(b.value) - toBigIntBE(a.value)));
|
|
48
44
|
const indexedLeaves = sorted.map((item, i) => ({
|
|
49
45
|
leaf: this.factory.fromBuffer(
|
|
50
46
|
Buffer.concat([
|
|
@@ -94,7 +94,7 @@ export class MembershipWitness<N extends number> {
|
|
|
94
94
|
static fromBuffer<N extends number>(buffer: Buffer | BufferReader, size: N): MembershipWitness<N> {
|
|
95
95
|
const reader = BufferReader.asReader(buffer);
|
|
96
96
|
const leafIndex = toBigIntBE(reader.readBytes(32));
|
|
97
|
-
const siblingPath = reader.readArray(size, Fr)
|
|
97
|
+
const siblingPath = reader.readArray(size, Fr) as Tuple<Fr, N>;
|
|
98
98
|
return new MembershipWitness(size, leafIndex, siblingPath);
|
|
99
99
|
}
|
|
100
100
|
|
|
@@ -108,7 +108,7 @@ export class MembershipWitness<N extends number> {
|
|
|
108
108
|
fromBuffer: (buffer: Buffer | BufferReader) => {
|
|
109
109
|
const reader = BufferReader.asReader(buffer);
|
|
110
110
|
const leafIndex = toBigIntBE(reader.readBytes(32));
|
|
111
|
-
const siblingPath = reader.readArray(size, Fr)
|
|
111
|
+
const siblingPath = reader.readArray(size, Fr) as Tuple<Fr, N>;
|
|
112
112
|
return new MembershipWitness(size, leafIndex, siblingPath);
|
|
113
113
|
},
|
|
114
114
|
};
|