@aztec/stdlib 0.0.1-commit.6230a0c → 0.0.1-commit.64b6bbb

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 (94) hide show
  1. package/dest/abi/function_call.d.ts +39 -9
  2. package/dest/abi/function_call.d.ts.map +1 -1
  3. package/dest/abi/function_call.js +20 -3
  4. package/dest/block/in_block.js +1 -1
  5. package/dest/config/index.d.ts +2 -1
  6. package/dest/config/index.d.ts.map +1 -1
  7. package/dest/config/index.js +1 -0
  8. package/dest/config/sequencer-config.d.ts +10 -0
  9. package/dest/config/sequencer-config.d.ts.map +1 -0
  10. package/dest/config/sequencer-config.js +12 -0
  11. package/dest/epoch-helpers/index.d.ts +5 -1
  12. package/dest/epoch-helpers/index.d.ts.map +1 -1
  13. package/dest/epoch-helpers/index.js +4 -2
  14. package/dest/interfaces/aztec-node-admin.d.ts +10 -1
  15. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  16. package/dest/interfaces/get_logs_response.d.ts +8 -1
  17. package/dest/interfaces/get_logs_response.d.ts.map +1 -1
  18. package/dest/interfaces/p2p.d.ts +2 -2
  19. package/dest/interfaces/p2p.d.ts.map +1 -1
  20. package/dest/interfaces/proving-job.d.ts +166 -166
  21. package/dest/interfaces/slasher.d.ts +9 -1
  22. package/dest/interfaces/slasher.d.ts.map +1 -1
  23. package/dest/interfaces/slasher.js +2 -0
  24. package/dest/interfaces/validator.d.ts +16 -2
  25. package/dest/interfaces/validator.d.ts.map +1 -1
  26. package/dest/interfaces/validator.js +4 -1
  27. package/dest/logs/extended_public_log.d.ts +7 -1
  28. package/dest/logs/extended_public_log.d.ts.map +1 -1
  29. package/dest/logs/log_id.d.ts +10 -7
  30. package/dest/logs/log_id.d.ts.map +1 -1
  31. package/dest/logs/log_id.js +15 -13
  32. package/dest/messaging/l2_to_l1_membership.d.ts +2 -2
  33. package/dest/messaging/l2_to_l1_membership.js +3 -3
  34. package/dest/p2p/checkpoint_proposal.d.ts +8 -1
  35. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  36. package/dest/p2p/checkpoint_proposal.js +9 -0
  37. package/dest/p2p/constants.d.ts +3 -1
  38. package/dest/p2p/constants.d.ts.map +1 -1
  39. package/dest/p2p/constants.js +1 -0
  40. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts +6 -6
  41. package/dest/rollup/checkpoint_rollup_public_inputs.d.ts.map +1 -1
  42. package/dest/rollup/checkpoint_rollup_public_inputs.js +2 -2
  43. package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts +2 -2
  44. package/dest/rollup/checkpoint_root_rollup_private_inputs.d.ts.map +1 -1
  45. package/dest/rollup/root_rollup_public_inputs.d.ts +6 -6
  46. package/dest/rollup/root_rollup_public_inputs.d.ts.map +1 -1
  47. package/dest/rollup/root_rollup_public_inputs.js +3 -3
  48. package/dest/slashing/empire.d.ts +1 -1
  49. package/dest/slashing/empire.d.ts.map +1 -1
  50. package/dest/slashing/empire.js +2 -0
  51. package/dest/slashing/helpers.d.ts +2 -2
  52. package/dest/slashing/helpers.d.ts.map +1 -1
  53. package/dest/slashing/helpers.js +6 -0
  54. package/dest/slashing/tally.d.ts +2 -1
  55. package/dest/slashing/tally.d.ts.map +1 -1
  56. package/dest/slashing/tally.js +6 -2
  57. package/dest/slashing/types.d.ts +7 -3
  58. package/dest/slashing/types.d.ts.map +1 -1
  59. package/dest/slashing/types.js +13 -1
  60. package/dest/tests/factories.js +3 -3
  61. package/dest/timetable/index.d.ts +37 -0
  62. package/dest/timetable/index.d.ts.map +1 -0
  63. package/dest/timetable/index.js +39 -0
  64. package/dest/trees/public_data_leaf.d.ts +2 -1
  65. package/dest/trees/public_data_leaf.d.ts.map +1 -1
  66. package/dest/trees/public_data_leaf.js +7 -6
  67. package/dest/tx/validator/empty_validator.d.ts +2 -2
  68. package/dest/tx/validator/empty_validator.d.ts.map +1 -1
  69. package/dest/tx/validator/tx_validator.d.ts +2 -2
  70. package/dest/tx/validator/tx_validator.d.ts.map +1 -1
  71. package/package.json +22 -11
  72. package/src/abi/function_call.ts +25 -3
  73. package/src/block/in_block.ts +1 -1
  74. package/src/config/index.ts +1 -0
  75. package/src/config/sequencer-config.ts +19 -0
  76. package/src/epoch-helpers/index.ts +3 -0
  77. package/src/interfaces/p2p.ts +1 -1
  78. package/src/interfaces/slasher.ts +4 -0
  79. package/src/interfaces/validator.ts +10 -1
  80. package/src/logs/log_id.ts +15 -12
  81. package/src/messaging/l2_to_l1_membership.ts +3 -3
  82. package/src/p2p/checkpoint_proposal.ts +10 -0
  83. package/src/p2p/constants.ts +3 -0
  84. package/src/rollup/checkpoint_rollup_public_inputs.ts +5 -5
  85. package/src/rollup/root_rollup_public_inputs.ts +7 -7
  86. package/src/slashing/empire.ts +3 -1
  87. package/src/slashing/helpers.ts +8 -0
  88. package/src/slashing/tally.ts +8 -2
  89. package/src/slashing/types.ts +14 -0
  90. package/src/tests/factories.ts +5 -5
  91. package/src/timetable/index.ts +66 -0
  92. package/src/trees/public_data_leaf.ts +11 -5
  93. package/src/tx/validator/empty_validator.ts +1 -1
  94. package/src/tx/validator/tx_validator.ts +1 -1
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Timetable constants used for sequencer timing calculations.
3
+ * These define the time budgets for various phases of block production.
4
+ *
5
+ * The sequencer slot is divided into phases:
6
+ * 1. Checkpoint initialization (sync + proposer check)
7
+ * 2. Block building (execution)
8
+ * 3. Checkpoint assembly
9
+ * 4. P2P propagation for proposal and attestations (round-trip)
10
+ * 5. L1 publishing
11
+ */
12
+
13
+ /** Time budget for checkpoint initialization (sync + proposer check) in seconds */
14
+ export const CHECKPOINT_INITIALIZATION_TIME = 1;
15
+
16
+ /** Time budget for assembling a checkpoint after building the last block in seconds */
17
+ export const CHECKPOINT_ASSEMBLE_TIME = 1;
18
+
19
+ /** Default one-way P2P propagation time for proposals and attestations in seconds */
20
+ export const DEFAULT_P2P_PROPAGATION_TIME = 2;
21
+
22
+ /** Default L1 publishing time (matches Ethereum slot duration on mainnet) in seconds */
23
+ export const DEFAULT_L1_PUBLISHING_TIME = 12;
24
+
25
+ /** Minimum execution time for building a block in seconds */
26
+ export const MIN_EXECUTION_TIME = 2;
27
+
28
+ /**
29
+ * Calculates the maximum number of blocks that can be built in a slot.
30
+ * Used by both the sequencer timetable and p2p gossipsub scoring.
31
+ *
32
+ * @param aztecSlotDurationSec - Aztec slot duration in seconds
33
+ * @param blockDurationSec - Duration per block in seconds (undefined = single block mode)
34
+ * @param opts - Optional overrides for timing constants
35
+ * @returns Maximum number of blocks per slot
36
+ */
37
+ export function calculateMaxBlocksPerSlot(
38
+ aztecSlotDurationSec: number,
39
+ blockDurationSec: number | undefined,
40
+ opts: {
41
+ checkpointInitializationTime?: number;
42
+ checkpointAssembleTime?: number;
43
+ p2pPropagationTime?: number;
44
+ l1PublishingTime?: number;
45
+ } = {},
46
+ ): number {
47
+ if (!blockDurationSec) {
48
+ return 1; // Single block per slot
49
+ }
50
+
51
+ const initOffset = opts.checkpointInitializationTime ?? CHECKPOINT_INITIALIZATION_TIME;
52
+ const assembleTime = opts.checkpointAssembleTime ?? CHECKPOINT_ASSEMBLE_TIME;
53
+ const p2pTime = opts.p2pPropagationTime ?? DEFAULT_P2P_PROPAGATION_TIME;
54
+ const l1Time = opts.l1PublishingTime ?? DEFAULT_L1_PUBLISHING_TIME;
55
+
56
+ // Calculate checkpoint finalization time (assembly + round-trip propagation + L1 publishing)
57
+ const checkpointFinalizationTime = assembleTime + p2pTime * 2 + l1Time;
58
+
59
+ // Time reserved at end for last sub-slot (validator re-execution) + finalization
60
+ const timeReservedAtEnd = blockDurationSec + checkpointFinalizationTime;
61
+
62
+ // Time available for building blocks
63
+ const timeAvailableForBlocks = aztecSlotDurationSec - initOffset - timeReservedAtEnd;
64
+
65
+ return Math.max(1, Math.floor(timeAvailableForBlocks / blockDurationSec));
66
+ }
@@ -1,4 +1,5 @@
1
1
  import { toBigIntBE, toBufferBE } from '@aztec/foundation/bigint-buffer';
2
+ import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
2
3
  import { Fr } from '@aztec/foundation/curves/bn254';
3
4
  import { schemas } from '@aztec/foundation/schemas';
4
5
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
@@ -81,11 +82,15 @@ export class PublicDataTreeLeafPreimage implements IndexedTreeLeafPreimage {
81
82
  toHashInputs(): Buffer[] {
82
83
  return [
83
84
  ...this.leaf.toHashInputs(),
84
- Buffer.from(toBufferBE(this.nextIndex, 32)),
85
85
  Buffer.from(this.nextKey.toBuffer()),
86
+ Buffer.from(toBufferBE(this.nextIndex, 32)),
86
87
  ];
87
88
  }
88
89
 
90
+ hash(): Promise<Fr> {
91
+ return poseidon2Hash(this.toHashInputs());
92
+ }
93
+
89
94
  clone(): PublicDataTreeLeafPreimage {
90
95
  return new PublicDataTreeLeafPreimage(this.leaf.clone(), this.nextKey, this.nextIndex);
91
96
  }
@@ -104,10 +109,11 @@ export class PublicDataTreeLeafPreimage implements IndexedTreeLeafPreimage {
104
109
 
105
110
  static fromBuffer(buffer: Buffer | BufferReader): PublicDataTreeLeafPreimage {
106
111
  const reader = BufferReader.asReader(buffer);
107
- const value = PublicDataTreeLeaf.fromBuffer(reader);
108
- const nextIndex = toBigIntBE(reader.readBytes(32));
109
- const nextSlot = Fr.fromBuffer(reader);
110
- return new PublicDataTreeLeafPreimage(value, nextSlot, nextIndex);
112
+ return new PublicDataTreeLeafPreimage(
113
+ PublicDataTreeLeaf.fromBuffer(reader),
114
+ Fr.fromBuffer(reader),
115
+ toBigIntBE(reader.readBytes(32)),
116
+ );
111
117
  }
112
118
 
113
119
  static fromLeaf(leaf: PublicDataTreeLeaf, nextKey: bigint, nextIndex: bigint): PublicDataTreeLeafPreimage {
@@ -1,6 +1,6 @@
1
1
  import type { AnyTx, TxValidationResult, TxValidator } from './tx_validator.js';
2
2
 
3
- export class EmptyTxValidator<T extends AnyTx = AnyTx> implements TxValidator<T> {
3
+ export class EmptyTxValidator<T = AnyTx> implements TxValidator<T> {
4
4
  public validateTx(_tx: T): Promise<TxValidationResult> {
5
5
  return Promise.resolve({ result: 'valid' });
6
6
  }
@@ -20,7 +20,7 @@ export type TxValidationResult =
20
20
  | { result: 'invalid'; reason: string[] }
21
21
  | { result: 'skipped'; reason: string[] };
22
22
 
23
- export interface TxValidator<T extends AnyTx = AnyTx> {
23
+ export interface TxValidator<T = AnyTx> {
24
24
  validateTx(tx: T): Promise<TxValidationResult>;
25
25
  }
26
26