@aztec/foundation 0.0.1-commit.2ed92850 → 0.0.1-commit.343b43af6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dest/array/sorted_array.d.ts +6 -1
  2. package/dest/array/sorted_array.d.ts.map +1 -1
  3. package/dest/array/sorted_array.js +18 -15
  4. package/dest/collection/array.d.ts +7 -1
  5. package/dest/collection/array.d.ts.map +1 -1
  6. package/dest/collection/array.js +24 -0
  7. package/dest/config/env_var.d.ts +2 -2
  8. package/dest/config/env_var.d.ts.map +1 -1
  9. package/dest/config/index.d.ts +1 -1
  10. package/dest/config/index.d.ts.map +1 -1
  11. package/dest/config/index.js +15 -0
  12. package/dest/config/network_config.d.ts +13 -1
  13. package/dest/config/network_config.d.ts.map +1 -1
  14. package/dest/config/network_config.js +3 -1
  15. package/dest/config/network_name.d.ts +2 -2
  16. package/dest/config/network_name.d.ts.map +1 -1
  17. package/dest/config/network_name.js +2 -0
  18. package/dest/crypto/poseidon/index.js +13 -13
  19. package/dest/crypto/random/randomness_singleton.d.ts +4 -3
  20. package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
  21. package/dest/crypto/random/randomness_singleton.js +4 -4
  22. package/dest/crypto/secp256k1-signer/utils.d.ts +12 -1
  23. package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
  24. package/dest/crypto/secp256k1-signer/utils.js +26 -0
  25. package/dest/curves/bn254/field.d.ts +2 -1
  26. package/dest/curves/bn254/field.d.ts.map +1 -1
  27. package/dest/curves/bn254/field.js +5 -2
  28. package/dest/eth-signature/eth_signature.d.ts +2 -1
  29. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  30. package/dest/eth-signature/eth_signature.js +7 -2
  31. package/dest/jest/setup.js +28 -1
  32. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +2 -1
  33. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
  34. package/dest/json-rpc/client/safe_json_rpc_client.js +1 -1
  35. package/dest/json-rpc/server/api_key_auth.d.ts +19 -0
  36. package/dest/json-rpc/server/api_key_auth.d.ts.map +1 -0
  37. package/dest/json-rpc/server/api_key_auth.js +57 -0
  38. package/dest/json-rpc/server/index.d.ts +2 -1
  39. package/dest/json-rpc/server/index.d.ts.map +1 -1
  40. package/dest/json-rpc/server/index.js +1 -0
  41. package/dest/log/bigint-utils.d.ts +5 -0
  42. package/dest/log/bigint-utils.d.ts.map +1 -0
  43. package/dest/log/bigint-utils.js +21 -0
  44. package/dest/log/gcloud-logger-config.d.ts +1 -1
  45. package/dest/log/gcloud-logger-config.d.ts.map +1 -1
  46. package/dest/log/gcloud-logger-config.js +3 -0
  47. package/dest/log/libp2p_logger.d.ts +5 -2
  48. package/dest/log/libp2p_logger.d.ts.map +1 -1
  49. package/dest/log/libp2p_logger.js +14 -4
  50. package/dest/log/log-filters.d.ts +17 -4
  51. package/dest/log/log-filters.d.ts.map +1 -1
  52. package/dest/log/log-filters.js +26 -12
  53. package/dest/log/pino-logger-server.d.ts +9 -0
  54. package/dest/log/pino-logger-server.d.ts.map +1 -0
  55. package/dest/log/pino-logger-server.js +18 -0
  56. package/dest/log/pino-logger.d.ts +37 -8
  57. package/dest/log/pino-logger.d.ts.map +1 -1
  58. package/dest/log/pino-logger.js +121 -28
  59. package/dest/queue/base_memory_queue.d.ts +2 -2
  60. package/dest/queue/base_memory_queue.d.ts.map +1 -1
  61. package/dest/queue/semaphore.d.ts +5 -1
  62. package/dest/queue/semaphore.d.ts.map +1 -1
  63. package/dest/serialize/buffer_reader.d.ts +8 -1
  64. package/dest/serialize/buffer_reader.d.ts.map +1 -1
  65. package/dest/serialize/buffer_reader.js +13 -0
  66. package/dest/serialize/serialize.d.ts +19 -1
  67. package/dest/serialize/serialize.d.ts.map +1 -1
  68. package/dest/serialize/serialize.js +31 -0
  69. package/dest/sleep/index.d.ts +2 -1
  70. package/dest/sleep/index.d.ts.map +1 -1
  71. package/dest/sleep/index.js +10 -1
  72. package/dest/timer/date.d.ts +25 -1
  73. package/dest/timer/date.d.ts.map +1 -1
  74. package/dest/timer/date.js +33 -0
  75. package/dest/transport/transport_client.js +2 -2
  76. package/dest/types/index.d.ts +3 -1
  77. package/dest/types/index.d.ts.map +1 -1
  78. package/dest/types/index.js +3 -0
  79. package/package.json +23 -2
  80. package/src/array/sorted_array.ts +22 -17
  81. package/src/collection/array.ts +21 -0
  82. package/src/config/env_var.ts +49 -5
  83. package/src/config/index.ts +15 -0
  84. package/src/config/network_config.ts +2 -0
  85. package/src/config/network_name.ts +4 -1
  86. package/src/crypto/poseidon/index.ts +13 -13
  87. package/src/crypto/random/randomness_singleton.ts +9 -5
  88. package/src/crypto/secp256k1-signer/utils.ts +32 -0
  89. package/src/curves/bn254/field.ts +6 -2
  90. package/src/eth-signature/eth_signature.ts +7 -1
  91. package/src/jest/setup.mjs +31 -1
  92. package/src/json-rpc/client/safe_json_rpc_client.ts +2 -0
  93. package/src/json-rpc/server/api_key_auth.ts +63 -0
  94. package/src/json-rpc/server/index.ts +1 -0
  95. package/src/log/bigint-utils.ts +25 -0
  96. package/src/log/gcloud-logger-config.ts +5 -0
  97. package/src/log/libp2p_logger.ts +12 -5
  98. package/src/log/log-filters.ts +29 -11
  99. package/src/log/pino-logger-server.ts +25 -0
  100. package/src/log/pino-logger.ts +142 -38
  101. package/src/queue/base_memory_queue.ts +1 -1
  102. package/src/queue/semaphore.ts +5 -0
  103. package/src/serialize/buffer_reader.ts +15 -0
  104. package/src/serialize/serialize.ts +32 -0
  105. package/src/sleep/index.ts +10 -1
  106. package/src/timer/date.ts +48 -0
  107. package/src/transport/transport_client.ts +2 -2
  108. package/src/types/index.ts +5 -0
@@ -11,5 +11,29 @@ 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
+ /** Advances the time by the given number of seconds. */
17
+ advanceTime(seconds: number): void;
14
18
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RpbWVyL2RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsZ0NBQWdDO0FBQ2hDLHFCQUFhLFlBQVk7SUFDaEIsR0FBRyxJQUFJLE1BQU0sQ0FFbkI7SUFFTSxZQUFZLElBQUksTUFBTSxDQUU1QjtJQUVNLFNBQVMsSUFBSSxJQUFJLENBRXZCO0NBQ0Y7QUFFRCwwREFBMEQ7QUFDMUQscUJBQWEsZ0JBQWlCLFNBQVEsWUFBWTtJQUdwQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFGbkMsT0FBTyxDQUFDLE1BQU0sQ0FBSztJQUVuQixZQUE2QixNQUFNLHlDQUFnRCxFQUVsRjtJQUVlLEdBQUcsSUFBSSxNQUFNLENBRTVCO0lBRU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLFFBRzVCO0NBQ0YifQ==
19
+ /**
20
+ * A date provider for tests that only advances time via explicit advanceTime() calls.
21
+ * Unlike TestDateProvider, this does NOT track real time progression - time is completely
22
+ * frozen until explicitly advanced. This eliminates flakiness from tests taking
23
+ * varying amounts of real time to execute.
24
+ */
25
+ export declare class ManualDateProvider extends DateProvider {
26
+ private currentTimeMs;
27
+ /**
28
+ * @param initialTimeMs - Initial time in milliseconds. Defaults to a round timestamp for easy visualization.
29
+ */
30
+ constructor(initialTimeMs?: number);
31
+ now(): number;
32
+ /** Sets the current time to the given timestamp in milliseconds. */
33
+ setTime(timeMs: number): void;
34
+ /** Advances the time by the given number of seconds. */
35
+ advanceTime(seconds: number): void;
36
+ /** Advances the time by the given number of milliseconds. */
37
+ advanceTimeMs(ms: number): void;
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RpbWVyL2RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsZ0NBQWdDO0FBQ2hDLHFCQUFhLFlBQVk7SUFDaEIsR0FBRyxJQUFJLE1BQU0sQ0FFbkI7SUFFTSxZQUFZLElBQUksTUFBTSxDQUU1QjtJQUVNLFNBQVMsSUFBSSxJQUFJLENBRXZCO0NBQ0Y7QUFFRCwwREFBMEQ7QUFDMUQscUJBQWEsZ0JBQWlCLFNBQVEsWUFBWTtJQUdwQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07SUFGbkMsT0FBTyxDQUFDLE1BQU0sQ0FBSztJQUVuQixZQUE2QixNQUFNLHlDQUFnRCxFQUVsRjtJQUVlLEdBQUcsSUFBSSxNQUFNLENBRTVCO0lBRU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLFFBRzVCO0lBRUQsc0RBQXNEO0lBQy9DLEtBQUssU0FHWDtJQUVELHdEQUF3RDtJQUNqRCxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sUUFFakM7Q0FDRjtBQUVEOzs7OztHQUtHO0FBQ0gscUJBQWEsa0JBQW1CLFNBQVEsWUFBWTtJQUNsRCxPQUFPLENBQUMsYUFBYSxDQUFTO0lBRTlCOztPQUVHO0lBQ0gsWUFBWSxhQUFhLEdBQUUsTUFBc0MsRUFHaEU7SUFFZSxHQUFHLElBQUksTUFBTSxDQUU1QjtJQUVELG9FQUFvRTtJQUM3RCxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFFNUI7SUFFRCx3REFBd0Q7SUFDakQsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLFFBRWpDO0lBRUQsNkRBQTZEO0lBQ3RELGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQUU5QjtDQUNGIn0=
@@ -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;CACF"}
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,sDAAsD;IAC/C,KAAK,SAGX;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"}
@@ -26,4 +26,37 @@ 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
+ /** Advances the time by the given number of seconds. */ advanceTime(seconds) {
34
+ this.offset += seconds * 1000;
35
+ }
36
+ }
37
+ /**
38
+ * A date provider for tests that only advances time via explicit advanceTime() calls.
39
+ * Unlike TestDateProvider, this does NOT track real time progression - time is completely
40
+ * frozen until explicitly advanced. This eliminates flakiness from tests taking
41
+ * varying amounts of real time to execute.
42
+ */ export class ManualDateProvider extends DateProvider {
43
+ currentTimeMs;
44
+ /**
45
+ * @param initialTimeMs - Initial time in milliseconds. Defaults to a round timestamp for easy visualization.
46
+ */ constructor(initialTimeMs = Date.UTC(2025, 0, 1, 0, 0, 0)){
47
+ super();
48
+ this.currentTimeMs = initialTimeMs;
49
+ }
50
+ now() {
51
+ return this.currentTimeMs;
52
+ }
53
+ /** Sets the current time to the given timestamp in milliseconds. */ setTime(timeMs) {
54
+ this.currentTimeMs = timeMs;
55
+ }
56
+ /** Advances the time by the given number of seconds. */ advanceTime(seconds) {
57
+ this.currentTimeMs += seconds * 1000;
58
+ }
59
+ /** Advances the time by the given number of milliseconds. */ advanceTimeMs(ms) {
60
+ this.currentTimeMs += ms;
61
+ }
29
62
  }
@@ -55,7 +55,7 @@ const log = createLogger('foundation:transport_client');
55
55
  msgId,
56
56
  payload
57
57
  };
58
- log.debug(format(`->`, msg));
58
+ log.trace(format(`->`, msg));
59
59
  return new Promise((resolve, reject)=>{
60
60
  this.pendingRequests.push({
61
61
  resolve,
@@ -77,7 +77,7 @@ const log = createLogger('foundation:transport_client');
77
77
  this.close();
78
78
  return;
79
79
  }
80
- log.debug(format(`<-`, msg));
80
+ log.trace(format(`<-`, msg));
81
81
  if (isEventMessage(msg)) {
82
82
  this.emit('event_msg', msg.payload);
83
83
  return;
@@ -16,6 +16,8 @@ export type Writeable<T> = {
16
16
  export declare function unfreeze<T>(obj: T): Writeable<T>;
17
17
  /** Is defined type guard */
18
18
  export declare function isDefined<T>(value: T | undefined): value is T;
19
+ /** Type guard for error classes */
20
+ export declare function isErrorClass<T extends Error>(value: unknown, errorClass: new (...args: any[]) => T): value is T;
19
21
  /** Resolves a record-like type. Lifted from viem. */
20
22
  export type Prettify<T> = {
21
23
  [K in keyof T]: T[K];
@@ -41,4 +43,4 @@ export interface TypedEventEmitter<TEventMap extends {
41
43
  removeListener<K extends keyof TEventMap>(event: K, listener: TEventMap[K]): this;
42
44
  removeAllListeners<K extends keyof TEventMap>(event: K): this;
43
45
  }
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsTUFBTSxNQUFNLFFBQVEsQ0FBQyxDQUFDLElBQUk7S0FDdkIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELENBQUM7QUFFRixrQ0FBa0M7QUFDbEMsTUFBTSxNQUFNLFdBQVcsQ0FBQyxDQUFDLElBQUk7S0FDMUIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxRQUFRLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELENBQUM7QUFFRix1REFBdUQ7QUFDdkQsTUFBTSxNQUFNLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUUvRSw2Q0FBNkM7QUFDN0MsTUFBTSxNQUFNLFNBQVMsQ0FBQyxDQUFDLElBQUk7SUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FBRSxDQUFDO0FBRTlELGdEQUFnRDtBQUNoRCx3QkFBZ0IsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FFaEQ7QUFFRCw0QkFBNEI7QUFDNUIsd0JBQWdCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxTQUFTLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FFN0Q7QUFFRCxxREFBcUQ7QUFDckQsTUFBTSxNQUFNLFFBQVEsQ0FBQyxDQUFDLElBQUk7S0FDdkIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckIsR0FBRyxFQUFFLENBQUM7QUFFUDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxXQUFXLGlCQUFpQixDQUFDLFNBQVMsU0FBUztLQUFHLEdBQUcsSUFBSSxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLElBQUk7Q0FBRTtJQUN6RyxJQUFJLENBQUMsQ0FBQyxTQUFTLE1BQU0sU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDeEUsRUFBRSxDQUFDLENBQUMsU0FBUyxNQUFNLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsTUFBTSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN2RSxJQUFJLENBQUMsQ0FBQyxTQUFTLE1BQU0sU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUN0RixjQUFjLENBQUMsQ0FBQyxTQUFTLE1BQU0sU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDbEYsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLE1BQU0sU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0NBRS9EIn0=
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsTUFBTSxNQUFNLFFBQVEsQ0FBQyxDQUFDLElBQUk7S0FDdkIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELENBQUM7QUFFRixrQ0FBa0M7QUFDbEMsTUFBTSxNQUFNLFdBQVcsQ0FBQyxDQUFDLElBQUk7S0FDMUIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxRQUFRLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFELENBQUM7QUFFRix1REFBdUQ7QUFDdkQsTUFBTSxNQUFNLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUUvRSw2Q0FBNkM7QUFDN0MsTUFBTSxNQUFNLFNBQVMsQ0FBQyxDQUFDLElBQUk7SUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FBRSxDQUFDO0FBRTlELGdEQUFnRDtBQUNoRCx3QkFBZ0IsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FFaEQ7QUFFRCw0QkFBNEI7QUFDNUIsd0JBQWdCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxTQUFTLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FFN0Q7QUFFRCxtQ0FBbUM7QUFDbkMsd0JBQWdCLFlBQVksQ0FBQyxDQUFDLFNBQVMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBRS9HO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sTUFBTSxRQUFRLENBQUMsQ0FBQyxJQUFJO0tBQ3ZCLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3JCLEdBQUcsRUFBRSxDQUFDO0FBRVA7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sV0FBVyxpQkFBaUIsQ0FBQyxTQUFTLFNBQVM7S0FBRyxHQUFHLElBQUksTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJO0NBQUU7SUFDekcsSUFBSSxDQUFDLENBQUMsU0FBUyxNQUFNLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3hFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsTUFBTSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN0RSxHQUFHLENBQUMsQ0FBQyxTQUFTLE1BQU0sU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDdkUsSUFBSSxDQUFDLENBQUMsU0FBUyxNQUFNLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDdEYsY0FBYyxDQUFDLENBQUMsU0FBUyxNQUFNLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2xGLGtCQUFrQixDQUFDLENBQUMsU0FBUyxNQUFNLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUUvRCJ9
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KACvB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/E,6CAA6C;AAC7C,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAE9D,gDAAgD;AAChD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAEhD;AAED,4BAA4B;AAC5B,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,KAAK,IAAI,CAAC,CAE7D;AAED,qDAAqD;AACrD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KACvB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrB,GAAG,EAAE,CAAC;AAEP;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB,CAAC,SAAS,SAAS;KAAG,GAAG,IAAI,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI;CAAE;IACzG,IAAI,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACxE,EAAE,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACtE,GAAG,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACvE,IAAI,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACtF,cAAc,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAClF,kBAAkB,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CAE/D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KACvB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/E,6CAA6C;AAC7C,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAE9D,gDAAgD;AAChD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAEhD;AAED,4BAA4B;AAC5B,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,KAAK,IAAI,CAAC,CAE7D;AAED,mCAAmC;AACnC,wBAAgB,YAAY,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAE/G;AAED,qDAAqD;AACrD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KACvB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrB,GAAG,EAAE,CAAC;AAEP;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB,CAAC,SAAS,SAAS;KAAG,GAAG,IAAI,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI;CAAE;IACzG,IAAI,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACxE,EAAE,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACtE,GAAG,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACvE,IAAI,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACtF,cAAc,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAClF,kBAAkB,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CAE/D"}
@@ -4,3 +4,6 @@
4
4
  /** Is defined type guard */ export function isDefined(value) {
5
5
  return value !== undefined;
6
6
  }
7
+ /** Type guard for error classes */ export function isErrorClass(value, errorClass) {
8
+ return value instanceof errorClass || value instanceof Error && value.name === errorClass.name;
9
+ }
package/package.json CHANGED
@@ -1,9 +1,29 @@
1
1
  {
2
2
  "name": "@aztec/foundation",
3
- "version": "0.0.1-commit.2ed92850",
3
+ "version": "0.0.1-commit.343b43af6",
4
4
  "type": "module",
5
5
  "main": "./dest/index.js",
6
6
  "types": "./dest/index.d.ts",
7
+ "typedocOptions": {
8
+ "entryPoints": [
9
+ "./src/buffer/index.ts",
10
+ "./src/collection/index.ts",
11
+ "./src/config/index.ts",
12
+ "./src/crypto/random/index.ts",
13
+ "./src/error/index.ts",
14
+ "./src/eth-address/index.ts",
15
+ "./src/json-rpc/index.ts",
16
+ "./src/log/index.ts",
17
+ "./src/retry/index.ts",
18
+ "./src/schemas/index.ts",
19
+ "./src/serialize/index.ts",
20
+ "./src/sleep/index.ts",
21
+ "./src/timer/index.ts",
22
+ "./src/types/index.ts"
23
+ ],
24
+ "name": "Foundation",
25
+ "tsconfig": "./tsconfig.json"
26
+ },
7
27
  "exports": {
8
28
  "./eslint": "./eslint.config.js",
9
29
  "./eslint.docs": "./eslint.config.docs.js",
@@ -51,6 +71,7 @@
51
71
  "./iterable": "./dest/iterable/index.js",
52
72
  "./iterator": "./dest/iterator/index.js",
53
73
  "./log": "./dest/log/index.js",
74
+ "./log/server": "./dest/log/pino-logger-server.js",
54
75
  "./mutex": "./dest/mutex/index.js",
55
76
  "./retry": "./dest/retry/index.js",
56
77
  "./running-promise": "./dest/running-promise/index.js",
@@ -123,7 +144,7 @@
123
144
  "testEnvironment": "../../foundation/src/jest/env.mjs"
124
145
  },
125
146
  "dependencies": {
126
- "@aztec/bb.js": "0.0.1-commit.2ed92850",
147
+ "@aztec/bb.js": "0.0.1-commit.343b43af6",
127
148
  "@koa/cors": "^5.0.0",
128
149
  "@noble/curves": "=1.7.0",
129
150
  "@noble/hashes": "^1.6.1",
@@ -21,34 +21,39 @@ export function dedupeSortedArray<T>(arr: T[], cmp: Cmp<T>): void {
21
21
  }
22
22
 
23
23
  export function insertIntoSortedArray<T>(arr: T[], item: T, cmp: Cmp<T>, allowDuplicates = true): boolean {
24
+ const index = findInsertionIndexInSortedArray(arr, item, cmp);
25
+
26
+ if (!allowDuplicates) {
27
+ // Check element before insertion point (upper bound returns index after equal elements)
28
+ if (index > 0 && cmp(arr[index - 1], item) === 0) {
29
+ return false;
30
+ }
31
+ }
32
+
33
+ arr.splice(index, 0, item);
34
+ return true;
35
+ }
36
+
37
+ /**
38
+ * Finds the index where needle would be inserted to maintain sorted order.
39
+ * Returns the count of elements less than or equal to needle.
40
+ */
41
+ export function findInsertionIndexInSortedArray<T, N>(values: T[], needle: N, cmp: (a: T, b: N) => number): number {
24
42
  let start = 0;
25
- let end = arr.length;
43
+ let end = values.length;
26
44
 
27
45
  while (start < end) {
28
46
  const mid = start + (((end - start) / 2) | 0);
29
- const comparison = cmp(arr[mid], item);
47
+ const comparison = cmp(values[mid], needle);
30
48
 
31
- if (comparison < 0) {
49
+ if (comparison <= 0) {
32
50
  start = mid + 1;
33
51
  } else {
34
52
  end = mid;
35
53
  }
36
54
  }
37
55
 
38
- if (!allowDuplicates) {
39
- // Check element at insertion point
40
- if (start < arr.length && cmp(arr[start], item) === 0) {
41
- return false;
42
- }
43
-
44
- // Check element before insertion point (in case we landed after duplicates)
45
- if (start > 0 && cmp(arr[start - 1], item) === 0) {
46
- return false;
47
- }
48
- }
49
-
50
- arr.splice(start, 0, item);
51
- return true;
56
+ return start;
52
57
  }
53
58
 
54
59
  export function findIndexInSortedArray<T, N>(values: T[], needle: N, cmp: (a: T, b: N) => number): number {
@@ -250,6 +250,27 @@ export function chunk<T>(items: T[], chunkSize: number): T[][] {
250
250
  return chunks;
251
251
  }
252
252
 
253
+ /**
254
+ * Splits the given array into chunks of the given size, wrapping around to the beginning
255
+ * if the last chunk would be smaller than the requested size.
256
+ * Returns empty array for empty input. Returns single chunk with all items if chunkSize <= 0.
257
+ */
258
+ export function chunkWrapAround<T>(items: T[], chunkSize: number): T[][] {
259
+ if (items.length === 0) {
260
+ return [];
261
+ }
262
+ if (chunkSize <= 0 || items.length <= chunkSize) {
263
+ return [items];
264
+ }
265
+ const remainder = items.length % chunkSize;
266
+ if (remainder === 0) {
267
+ return chunk(items, chunkSize);
268
+ }
269
+ const wrapAroundCount = chunkSize - remainder;
270
+ const wrappedItems = [...items, ...items.slice(0, wrapAroundCount)];
271
+ return chunk(wrappedItems, chunkSize);
272
+ }
273
+
253
274
  const UNINITIALIZED = Symbol('uninitialized');
254
275
 
255
276
  /**
@@ -12,6 +12,9 @@ export type EnvVar =
12
12
  | 'ARCHIVER_VIEM_POLLING_INTERVAL_MS'
13
13
  | 'ARCHIVER_BATCH_SIZE'
14
14
  | 'AZTEC_ADMIN_PORT'
15
+ | 'AZTEC_ADMIN_API_KEY_HASH'
16
+ | 'AZTEC_DISABLE_ADMIN_API_KEY'
17
+ | 'AZTEC_RESET_ADMIN_API_KEY'
15
18
  | 'AZTEC_NODE_ADMIN_URL'
16
19
  | 'AZTEC_NODE_URL'
17
20
  | 'AZTEC_PORT'
@@ -47,7 +50,10 @@ export type EnvVar =
47
50
  | 'BOT_TX_MINED_WAIT_SECONDS'
48
51
  | 'BOT_MAX_CONSECUTIVE_ERRORS'
49
52
  | 'BOT_STOP_WHEN_UNHEALTHY'
50
- | 'BOT_AMM_TXS'
53
+ | 'BOT_MODE'
54
+ | 'BOT_L2_TO_L1_MESSAGES_PER_TX'
55
+ | 'BOT_L1_TO_L2_SEED_COUNT'
56
+ | 'BOT_L1_TO_L2_SEED_INTERVAL'
51
57
  | 'COINBASE'
52
58
  | 'CRS_PATH'
53
59
  | 'DATA_DIRECTORY'
@@ -56,6 +62,7 @@ export type EnvVar =
56
62
  | 'BLOB_SINK_MAP_SIZE_KB'
57
63
  | 'P2P_STORE_MAP_SIZE_KB'
58
64
  | 'PROVER_BROKER_STORE_MAP_SIZE_KB'
65
+ | 'SIGNING_PROTECTION_MAP_SIZE_KB'
59
66
  | 'WS_DB_MAP_SIZE_KB'
60
67
  | 'ARCHIVE_TREE_MAP_SIZE_KB'
61
68
  | 'NULLIFIER_TREE_MAP_SIZE_KB'
@@ -64,6 +71,7 @@ export type EnvVar =
64
71
  | 'PUBLIC_DATA_TREE_MAP_SIZE_KB'
65
72
  | 'DEBUG'
66
73
  | 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY'
74
+ | 'ENABLE_PROVER_NODE'
67
75
  | 'ETHEREUM_HOSTS'
68
76
  | 'ETHEREUM_DEBUG_HOSTS'
69
77
  | 'ETHEREUM_ALLOW_NO_DEBUG_HOSTS'
@@ -75,8 +83,10 @@ export type EnvVar =
75
83
  | 'L1_CONSENSUS_HOST_URLS'
76
84
  | 'L1_CONSENSUS_HOST_API_KEYS'
77
85
  | 'L1_CONSENSUS_HOST_API_KEY_HEADERS'
86
+ | 'L1_TX_FAILED_STORE'
78
87
  | 'LOG_JSON'
79
88
  | 'LOG_MULTILINE'
89
+ | 'LOG_NO_COLOR_PER_ACTOR'
80
90
  | 'LOG_LEVEL'
81
91
  | 'MNEMONIC'
82
92
  | 'NETWORK'
@@ -94,7 +104,12 @@ export type EnvVar =
94
104
  | 'PUBLIC_OTEL_INCLUDE_METRICS'
95
105
  | 'PUBLIC_OTEL_COLLECT_FROM'
96
106
  | 'PUBLIC_OTEL_OPT_OUT'
107
+ | 'P2P_BATCH_TX_REQUESTER_SMART_PARALLEL_WORKER_COUNT'
108
+ | 'P2P_BATCH_TX_REQUESTER_DUMB_PARALLEL_WORKER_COUNT'
109
+ | 'P2P_BATCH_TX_REQUESTER_TX_BATCH_SIZE'
110
+ | 'P2P_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD'
97
111
  | 'P2P_BLOCK_CHECK_INTERVAL_MS'
112
+ | 'P2P_SLOT_CHECK_INTERVAL_MS'
98
113
  | 'P2P_BLOCK_REQUEST_BATCH_SIZE'
99
114
  | 'P2P_BOOTSTRAP_NODE_ENR_VERSION_CHECK'
100
115
  | 'P2P_BOOTSTRAP_NODES_AS_FULL_PEERS'
@@ -135,9 +150,10 @@ export type EnvVar =
135
150
  | 'P2P_PREFERRED_PEERS'
136
151
  | 'P2P_MAX_PENDING_TX_COUNT'
137
152
  | 'P2P_SEEN_MSG_CACHE_SIZE'
138
- | 'P2P_DROP_TX'
139
153
  | 'P2P_DROP_TX_CHANCE'
140
154
  | 'P2P_TX_POOL_DELETE_TXS_AFTER_REORG'
155
+ | 'P2P_MIN_TX_POOL_AGE_MS'
156
+ | 'P2P_RPC_PRICE_BUMP_PERCENTAGE'
141
157
  | 'DEBUG_P2P_INSTRUMENT_MESSAGES'
142
158
  | 'PEER_ID_PRIVATE_KEY'
143
159
  | 'PEER_ID_PRIVATE_KEY_PATH'
@@ -151,8 +167,11 @@ export type EnvVar =
151
167
  | 'PROVER_BROKER_BATCH_INTERVAL_MS'
152
168
  | 'PROVER_BROKER_BATCH_SIZE'
153
169
  | 'PROVER_BROKER_MAX_EPOCHS_TO_KEEP_RESULTS_FOR'
170
+ | 'PROVER_BROKER_DEBUG_REPLAY_ENABLED'
154
171
  | 'PROVER_CANCEL_JOBS_ON_STOP'
172
+ | 'PROVER_ENQUEUE_CONCURRENCY'
155
173
  | 'PROVER_COORDINATION_NODE_URLS'
174
+ | 'PROVER_PROOF_STORE'
156
175
  | 'PROVER_FAILED_PROOF_STORE'
157
176
  | 'PROVER_NODE_FAILED_EPOCH_STORE'
158
177
  | 'PROVER_NODE_DISABLE_PROOF_PUBLISH'
@@ -184,12 +203,13 @@ export type EnvVar =
184
203
  | 'SENTINEL_ENABLED'
185
204
  | 'SENTINEL_HISTORY_LENGTH_IN_EPOCHS'
186
205
  | 'SENTINEL_HISTORIC_PROVEN_PERFORMANCE_LENGTH_IN_EPOCHS'
187
- | 'SEQ_MAX_BLOCK_SIZE_IN_BYTES'
188
206
  | 'SEQ_MAX_TX_PER_BLOCK'
207
+ | 'SEQ_MAX_TX_PER_CHECKPOINT'
189
208
  | 'SEQ_MIN_TX_PER_BLOCK'
190
209
  | 'SEQ_PUBLISH_TXS_WITH_PROPOSALS'
191
210
  | 'SEQ_MAX_DA_BLOCK_GAS'
192
211
  | 'SEQ_MAX_L2_BLOCK_GAS'
212
+ | 'SEQ_PER_BLOCK_ALLOCATION_MULTIPLIER'
193
213
  | 'SEQ_PUBLISHER_PRIVATE_KEY'
194
214
  | 'SEQ_PUBLISHER_PRIVATE_KEYS'
195
215
  | 'SEQ_PUBLISHER_ADDRESSES'
@@ -200,9 +220,11 @@ export type EnvVar =
200
220
  | 'SEQ_L1_PUBLISHING_TIME_ALLOWANCE_IN_SLOT'
201
221
  | 'SEQ_ATTESTATION_PROPAGATION_TIME'
202
222
  | 'SEQ_BLOCK_DURATION_MS'
223
+ | 'SEQ_EXPECTED_BLOCK_PROPOSALS_PER_SLOT'
203
224
  | 'SEQ_BUILD_CHECKPOINT_IF_EMPTY'
204
225
  | 'SEQ_SECONDS_BEFORE_INVALIDATING_BLOCK_AS_COMMITTEE_MEMBER'
205
226
  | 'SEQ_SECONDS_BEFORE_INVALIDATING_BLOCK_AS_NON_COMMITTEE_MEMBER'
227
+ | 'SEQ_SKIP_CHECKPOINT_PUBLISH_PERCENT'
206
228
  | 'SLASH_MIN_PENALTY_PERCENTAGE'
207
229
  | 'SLASH_MAX_PENALTY_PERCENTAGE'
208
230
  | 'SLASH_VALIDATORS_ALWAYS'
@@ -213,6 +235,8 @@ export type EnvVar =
213
235
  | 'SLASH_INACTIVITY_TARGET_PERCENTAGE'
214
236
  | 'SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD'
215
237
  | 'SLASH_INVALID_BLOCK_PENALTY'
238
+ | 'SLASH_DUPLICATE_PROPOSAL_PENALTY'
239
+ | 'SLASH_DUPLICATE_ATTESTATION_PENALTY'
216
240
  | 'SLASH_OVERRIDE_PAYLOAD'
217
241
  | 'SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY'
218
242
  | 'SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY'
@@ -227,6 +251,7 @@ export type EnvVar =
227
251
  | 'TELEMETRY'
228
252
  | 'TEST_ACCOUNTS'
229
253
  | 'SPONSORED_FPC'
254
+ | 'PREFUND_ADDRESSES'
230
255
  | 'TX_COLLECTION_FAST_NODES_TIMEOUT_BEFORE_REQ_RESP_MS'
231
256
  | 'TX_COLLECTION_SLOW_NODES_INTERVAL_MS'
232
257
  | 'TX_COLLECTION_SLOW_REQ_RESP_INTERVAL_MS'
@@ -237,11 +262,29 @@ export type EnvVar =
237
262
  | 'TX_COLLECTION_FAST_MAX_PARALLEL_REQUESTS_PER_NODE'
238
263
  | 'TX_COLLECTION_NODE_RPC_MAX_BATCH_SIZE'
239
264
  | 'TX_COLLECTION_NODE_RPC_URLS'
265
+ | 'TX_COLLECTION_MISSING_TXS_COLLECTOR_TYPE'
266
+ | 'TX_COLLECTION_FILE_STORE_URLS'
267
+ | 'TX_COLLECTION_FILE_STORE_SLOW_DELAY_MS'
268
+ | 'TX_COLLECTION_FILE_STORE_FAST_DELAY_MS'
269
+ | 'TX_COLLECTION_FILE_STORE_FAST_WORKER_COUNT'
270
+ | 'TX_COLLECTION_FILE_STORE_SLOW_WORKER_COUNT'
271
+ | 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_BASE_MS'
272
+ | 'TX_COLLECTION_FILE_STORE_SLOW_BACKOFF_BASE_MS'
273
+ | 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_MAX_MS'
274
+ | 'TX_COLLECTION_FILE_STORE_SLOW_BACKOFF_MAX_MS'
275
+ | 'TX_FILE_STORE_URL'
276
+ | 'TX_FILE_STORE_UPLOAD_CONCURRENCY'
277
+ | 'TX_FILE_STORE_MAX_QUEUE_SIZE'
278
+ | 'TX_FILE_STORE_ENABLED'
240
279
  | 'TX_PUBLIC_SETUP_ALLOWLIST'
241
280
  | 'TXE_PORT'
242
281
  | 'TRANSACTIONS_DISABLED'
243
282
  | 'VALIDATOR_ATTESTATIONS_POLLING_INTERVAL_MS'
244
283
  | 'VALIDATOR_DISABLED'
284
+ | 'VALIDATOR_MAX_DA_BLOCK_GAS'
285
+ | 'VALIDATOR_MAX_L2_BLOCK_GAS'
286
+ | 'VALIDATOR_MAX_TX_PER_BLOCK'
287
+ | 'VALIDATOR_MAX_TX_PER_CHECKPOINT'
245
288
  | 'VALIDATOR_PRIVATE_KEYS'
246
289
  | 'VALIDATOR_PRIVATE_KEY'
247
290
  | 'VALIDATOR_REEXECUTE'
@@ -251,6 +294,7 @@ export type EnvVar =
251
294
  | 'WS_BLOCK_REQUEST_BATCH_SIZE'
252
295
  | 'L1_READER_VIEM_POLLING_INTERVAL_MS'
253
296
  | 'WS_DATA_DIRECTORY'
297
+ | 'WS_NUM_HISTORIC_CHECKPOINTS'
254
298
  | 'WS_NUM_HISTORIC_BLOCKS'
255
299
  | 'ETHEREUM_SLOT_DURATION'
256
300
  | 'AZTEC_SLOT_DURATION'
@@ -305,9 +349,8 @@ export type EnvVar =
305
349
  | 'K8S_POD_NAME'
306
350
  | 'K8S_POD_UID'
307
351
  | 'K8S_NAMESPACE_NAME'
352
+ | 'ENABLE_VERSION_CHECK'
308
353
  | 'VALIDATOR_REEXECUTE_DEADLINE_MS'
309
- | 'AUTO_UPDATE'
310
- | 'AUTO_UPDATE_URL'
311
354
  | 'WEB3_SIGNER_URL'
312
355
  | 'SKIP_ARCHIVER_INITIAL_SYNC'
313
356
  | 'BLOB_ALLOW_EMPTY_SOURCES'
@@ -320,6 +363,7 @@ export type EnvVar =
320
363
  | 'VALIDATOR_HA_POLLING_INTERVAL_MS'
321
364
  | 'VALIDATOR_HA_SIGNING_TIMEOUT_MS'
322
365
  | 'VALIDATOR_HA_MAX_STUCK_DUTIES_AGE_MS'
366
+ | 'VALIDATOR_HA_OLD_DUTIES_MAX_AGE_H'
323
367
  | 'VALIDATOR_HA_DATABASE_URL'
324
368
  | 'VALIDATOR_HA_RUN_MIGRATIONS'
325
369
  | 'VALIDATOR_HA_POOL_MAX'
@@ -177,6 +177,21 @@ export function bigintConfigHelper(defaultVal?: bigint): Pick<ConfigMapping, 'pa
177
177
  if (val === '') {
178
178
  return defaultVal;
179
179
  }
180
+ // Handle scientific notation (e.g. "1e+23", "2E23") which BigInt() doesn't accept directly.
181
+ // We parse it losslessly using bigint arithmetic instead of going through float64.
182
+ if (/[eE]/.test(val)) {
183
+ const match = val.match(/^(-?\d+(?:\.(\d+))?)[eE]([+-]?\d+)$/);
184
+ if (!match) {
185
+ throw new Error(`Cannot convert '${val}' to a BigInt`);
186
+ }
187
+ const digits = match[1].replace('.', '');
188
+ const decimalPlaces = match[2]?.length ?? 0;
189
+ const exponent = parseInt(match[3], 10) - decimalPlaces;
190
+ if (exponent < 0) {
191
+ throw new Error(`Cannot convert '${val}' to a BigInt: result is not an integer`);
192
+ }
193
+ return BigInt(digits) * 10n ** BigInt(exponent);
194
+ }
180
195
  return BigInt(val);
181
196
  },
182
197
  defaultValue: defaultVal,
@@ -9,6 +9,8 @@ export const NetworkConfigSchema = z
9
9
  feeAssetHandlerAddress: z.string().optional(),
10
10
  l1ChainId: z.number(),
11
11
  blockDurationMs: z.number().positive().optional(),
12
+ txPublicSetupAllowListExtend: z.string().optional(),
13
+ nodeVersion: z.string().optional(),
12
14
  })
13
15
  .passthrough(); // Allow additional unknown fields to pass through
14
16
 
@@ -5,7 +5,8 @@ export type NetworkNames =
5
5
  | 'testnet'
6
6
  | 'mainnet'
7
7
  | 'next-net'
8
- | 'devnet';
8
+ | 'devnet'
9
+ | `v${number}-devnet-${number}`;
9
10
 
10
11
  export function getActiveNetworkName(name?: string): NetworkNames {
11
12
  const network = name || process.env.NETWORK;
@@ -23,6 +24,8 @@ export function getActiveNetworkName(name?: string): NetworkNames {
23
24
  return 'next-net';
24
25
  } else if (network === 'devnet') {
25
26
  return 'devnet';
27
+ } else if (/^v\d+-devnet-\d+$/.test(network)) {
28
+ return network as `v${number}-devnet-${number}`;
26
29
  }
27
30
  throw new Error(`Unknown network: ${network}`);
28
31
  }
@@ -1,4 +1,4 @@
1
- import { BarretenbergSync } from '@aztec/bb.js';
1
+ import { Barretenberg } from '@aztec/bb.js';
2
2
 
3
3
  import { Fr } from '../../curves/bn254/field.js';
4
4
  import { type Fieldable, serializeToFields } from '../../serialize/serialize.js';
@@ -10,9 +10,9 @@ import { type Fieldable, serializeToFields } from '../../serialize/serialize.js'
10
10
  */
11
11
  export async function poseidon2Hash(input: Fieldable[]): Promise<Fr> {
12
12
  const inputFields = serializeToFields(input);
13
- await BarretenbergSync.initSingleton();
14
- const api = BarretenbergSync.getSingleton();
15
- const response = api.poseidon2Hash({
13
+ await Barretenberg.initSingleton();
14
+ const api = Barretenberg.getSingleton();
15
+ const response = await api.poseidon2Hash({
16
16
  inputs: inputFields.map(i => i.toBuffer()),
17
17
  });
18
18
  return Fr.fromBuffer(Buffer.from(response.hash));
@@ -27,9 +27,9 @@ export async function poseidon2Hash(input: Fieldable[]): Promise<Fr> {
27
27
  export async function poseidon2HashWithSeparator(input: Fieldable[], separator: number): Promise<Fr> {
28
28
  const inputFields = serializeToFields(input);
29
29
  inputFields.unshift(new Fr(separator));
30
- await BarretenbergSync.initSingleton();
31
- const api = BarretenbergSync.getSingleton();
32
- const response = api.poseidon2Hash({
30
+ await Barretenberg.initSingleton();
31
+ const api = Barretenberg.getSingleton();
32
+ const response = await api.poseidon2Hash({
33
33
  inputs: inputFields.map(i => i.toBuffer()),
34
34
  });
35
35
  return Fr.fromBuffer(Buffer.from(response.hash));
@@ -44,9 +44,9 @@ export async function poseidon2Permutation(input: Fieldable[]): Promise<Fr[]> {
44
44
  const inputFields = serializeToFields(input);
45
45
  // We'd like this assertion but it's not possible to use it in the browser.
46
46
  // assert(input.length === 4, 'Input state must be of size 4');
47
- await BarretenbergSync.initSingleton();
48
- const api = BarretenbergSync.getSingleton();
49
- const response = api.poseidon2Permutation({
47
+ await Barretenberg.initSingleton();
48
+ const api = Barretenberg.getSingleton();
49
+ const response = await api.poseidon2Permutation({
50
50
  inputs: inputFields.map(i => i.toBuffer()),
51
51
  });
52
52
  // We'd like this assertion but it's not possible to use it in the browser.
@@ -65,9 +65,9 @@ export async function poseidon2HashBytes(input: Buffer): Promise<Fr> {
65
65
  inputFields.push(Fr.fromBuffer(fieldBytes));
66
66
  }
67
67
 
68
- await BarretenbergSync.initSingleton();
69
- const api = BarretenbergSync.getSingleton();
70
- const response = api.poseidon2Hash({
68
+ await Barretenberg.initSingleton();
69
+ const api = Barretenberg.getSingleton();
70
+ const response = await api.poseidon2Hash({
71
71
  inputs: inputFields.map(i => i.toBuffer()),
72
72
  });
73
73
 
@@ -1,4 +1,4 @@
1
- import { createLogger } from '../../log/pino-logger.js';
1
+ import { type Logger, type LoggerBindings, createLogger } from '../../log/pino-logger.js';
2
2
 
3
3
  /**
4
4
  * A number generator which is used as a source of randomness in the system. If the SEED env variable is set, the
@@ -12,9 +12,13 @@ export class RandomnessSingleton {
12
12
  private static instance: RandomnessSingleton;
13
13
 
14
14
  private counter = 0;
15
- private readonly log = createLogger('foundation:randomness_singleton');
15
+ private log: Logger;
16
16
 
17
- private constructor(private readonly seed?: number) {
17
+ private constructor(
18
+ private readonly seed?: number,
19
+ bindings?: LoggerBindings,
20
+ ) {
21
+ this.log = createLogger('foundation:randomness_singleton', bindings);
18
22
  if (seed !== undefined) {
19
23
  this.log.debug(`Using pseudo-randomness with seed: ${seed}`);
20
24
  this.counter = seed;
@@ -23,10 +27,10 @@ export class RandomnessSingleton {
23
27
  }
24
28
  }
25
29
 
26
- public static getInstance(): RandomnessSingleton {
30
+ public static getInstance(bindings?: LoggerBindings): RandomnessSingleton {
27
31
  if (!RandomnessSingleton.instance) {
28
32
  const seed = process.env.SEED ? Number(process.env.SEED) : undefined;
29
- RandomnessSingleton.instance = new RandomnessSingleton(seed);
33
+ RandomnessSingleton.instance = new RandomnessSingleton(seed, bindings);
30
34
  }
31
35
 
32
36
  return RandomnessSingleton.instance;
@@ -210,3 +210,35 @@ export function recoverPublicKey(hash: Buffer32, signature: Signature, opts: Rec
210
210
  const publicKey = sig.recoverPublicKey(hash.buffer).toHex(false);
211
211
  return Buffer.from(publicKey, 'hex');
212
212
  }
213
+
214
+ /** Arbitrary hash used for testing signature recoverability. */
215
+ const PROBE_HASH = Buffer32.fromBuffer(keccak256(Buffer.from('signature-recoverability-probe')));
216
+
217
+ /**
218
+ * Generates a random valid ECDSA signature that is recoverable to some address.
219
+ * Since Signature.random() produces real signatures via secp256k1 signing, the result is always
220
+ * recoverable, but we verify defensively by checking tryRecoverAddress.
221
+ */
222
+ export function generateRecoverableSignature(): Signature {
223
+ for (let i = 0; i < 100; i++) {
224
+ const sig = Signature.random();
225
+ if (tryRecoverAddress(PROBE_HASH, sig) !== undefined) {
226
+ return sig;
227
+ }
228
+ }
229
+ throw new Secp256k1Error('Failed to generate a recoverable signature after 100 attempts');
230
+ }
231
+
232
+ /**
233
+ * Generates a random signature where ECDSA address recovery fails.
234
+ * Uses random r/s values (not from real signing) so that r is unlikely to be a valid secp256k1 x-coordinate.
235
+ */
236
+ export function generateUnrecoverableSignature(): Signature {
237
+ for (let i = 0; i < 100; i++) {
238
+ const sig = new Signature(Buffer32.random(), Buffer32.random(), 27);
239
+ if (tryRecoverAddress(PROBE_HASH, sig) === undefined) {
240
+ return sig;
241
+ }
242
+ }
243
+ throw new Secp256k1Error('Failed to generate an unrecoverable signature after 100 attempts');
244
+ }
@@ -118,14 +118,18 @@ abstract class BaseField {
118
118
  }
119
119
 
120
120
  cmp(rhs: BaseField): -1 | 0 | 1 {
121
- const rhsBigInt = rhs.asBigInt;
122
- return this.asBigInt === rhsBigInt ? 0 : this.asBigInt < rhsBigInt ? -1 : 1;
121
+ return BaseField.cmpAsBigInt(this.asBigInt, rhs.asBigInt);
123
122
  }
124
123
 
125
124
  static cmp(lhs: BaseField, rhs: BaseField): -1 | 0 | 1 {
126
125
  return lhs.cmp(rhs);
127
126
  }
128
127
 
128
+ // Actual bigint comparison. Arguments must have been validated previously.
129
+ static cmpAsBigInt(lhs: bigint, rhs: bigint): -1 | 0 | 1 {
130
+ return lhs === rhs ? 0 : lhs < rhs ? -1 : 1;
131
+ }
132
+
129
133
  isZero(): boolean {
130
134
  return this.asBigInt === 0n;
131
135
  }