@aztec/stdlib 0.0.1-commit.3469e52 → 0.0.1-commit.54489865

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 (147) hide show
  1. package/dest/block/block_hash.d.ts +16 -18
  2. package/dest/block/block_hash.d.ts.map +1 -1
  3. package/dest/block/block_hash.js +21 -31
  4. package/dest/block/block_parameter.d.ts +4 -4
  5. package/dest/block/block_parameter.d.ts.map +1 -1
  6. package/dest/block/block_parameter.js +2 -2
  7. package/dest/block/checkpointed_l2_block.d.ts +6 -6
  8. package/dest/block/checkpointed_l2_block.d.ts.map +1 -1
  9. package/dest/block/checkpointed_l2_block.js +3 -3
  10. package/dest/block/in_block.d.ts +11 -11
  11. package/dest/block/in_block.d.ts.map +1 -1
  12. package/dest/block/in_block.js +4 -4
  13. package/dest/block/index.d.ts +2 -2
  14. package/dest/block/index.d.ts.map +1 -1
  15. package/dest/block/index.js +1 -1
  16. package/dest/block/{l2_block_new.d.ts → l2_block.d.ts} +8 -7
  17. package/dest/block/l2_block.d.ts.map +1 -0
  18. package/dest/block/{l2_block_new.js → l2_block.js} +5 -9
  19. package/dest/block/l2_block_source.d.ts +39 -30
  20. package/dest/block/l2_block_source.d.ts.map +1 -1
  21. package/dest/block/l2_block_stream/interfaces.d.ts +3 -3
  22. package/dest/block/l2_block_stream/interfaces.d.ts.map +1 -1
  23. package/dest/block/l2_block_stream/l2_block_stream.d.ts +2 -3
  24. package/dest/block/l2_block_stream/l2_block_stream.d.ts.map +1 -1
  25. package/dest/block/l2_block_stream/l2_block_stream.js +4 -4
  26. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts +3 -3
  27. package/dest/block/l2_block_stream/l2_tips_store_base.d.ts.map +1 -1
  28. package/dest/block/test/l2_tips_store_test_suite.js +2 -2
  29. package/dest/checkpoint/checkpoint.d.ts +8 -8
  30. package/dest/checkpoint/checkpoint.d.ts.map +1 -1
  31. package/dest/checkpoint/checkpoint.js +4 -4
  32. package/dest/checkpoint/published_checkpoint.d.ts +2 -2
  33. package/dest/config/node-rpc-config.js +1 -1
  34. package/dest/contract/contract_address.js +1 -1
  35. package/dest/contract/contract_class_id.d.ts +1 -1
  36. package/dest/contract/contract_class_id.js +1 -1
  37. package/dest/contract/private_function.d.ts +1 -1
  38. package/dest/contract/private_function.d.ts.map +1 -1
  39. package/dest/contract/private_function.js +2 -3
  40. package/dest/contract/private_function_membership_proof.d.ts +1 -1
  41. package/dest/contract/private_function_membership_proof.js +1 -1
  42. package/dest/delayed_public_mutable/delayed_public_mutable_values.d.ts +2 -2
  43. package/dest/delayed_public_mutable/delayed_public_mutable_values.d.ts.map +1 -1
  44. package/dest/delayed_public_mutable/delayed_public_mutable_values.js +7 -10
  45. package/dest/epoch-helpers/index.d.ts +3 -1
  46. package/dest/epoch-helpers/index.d.ts.map +1 -1
  47. package/dest/epoch-helpers/index.js +5 -1
  48. package/dest/hash/hash.js +2 -2
  49. package/dest/hash/map_slot.d.ts +1 -1
  50. package/dest/hash/map_slot.d.ts.map +1 -1
  51. package/dest/hash/map_slot.js +4 -3
  52. package/dest/interfaces/archiver.d.ts +1 -1
  53. package/dest/interfaces/archiver.d.ts.map +1 -1
  54. package/dest/interfaces/archiver.js +17 -16
  55. package/dest/interfaces/aztec-node-admin.d.ts +4 -1
  56. package/dest/interfaces/aztec-node-admin.d.ts.map +1 -1
  57. package/dest/interfaces/aztec-node.d.ts +23 -9
  58. package/dest/interfaces/aztec-node.d.ts.map +1 -1
  59. package/dest/interfaces/aztec-node.js +11 -11
  60. package/dest/interfaces/block-builder.d.ts +6 -5
  61. package/dest/interfaces/block-builder.d.ts.map +1 -1
  62. package/dest/interfaces/configs.d.ts +2 -2
  63. package/dest/interfaces/configs.d.ts.map +1 -1
  64. package/dest/interfaces/get_logs_response.d.ts +7 -7
  65. package/dest/interfaces/prover-client.d.ts +10 -1
  66. package/dest/interfaces/prover-client.d.ts.map +1 -1
  67. package/dest/interfaces/prover-client.js +7 -1
  68. package/dest/interfaces/tx_provider.d.ts +3 -3
  69. package/dest/interfaces/tx_provider.d.ts.map +1 -1
  70. package/dest/interfaces/validator.d.ts +3 -3
  71. package/dest/interfaces/validator.d.ts.map +1 -1
  72. package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts +3 -3
  73. package/dest/kernel/hints/build_nullifier_read_request_hints.d.ts.map +1 -1
  74. package/dest/kernel/hints/build_nullifier_read_request_hints.js +4 -6
  75. package/dest/logs/extended_public_log.d.ts +6 -6
  76. package/dest/logs/log_id.d.ts +8 -8
  77. package/dest/logs/log_id.d.ts.map +1 -1
  78. package/dest/logs/log_id.js +6 -5
  79. package/dest/logs/siloed_tag.d.ts +1 -1
  80. package/dest/logs/siloed_tag.d.ts.map +1 -1
  81. package/dest/logs/siloed_tag.js +4 -3
  82. package/dest/p2p/block_proposal.d.ts +13 -6
  83. package/dest/p2p/block_proposal.d.ts.map +1 -1
  84. package/dest/p2p/block_proposal.js +1 -1
  85. package/dest/p2p/checkpoint_proposal.d.ts +10 -3
  86. package/dest/p2p/checkpoint_proposal.d.ts.map +1 -1
  87. package/dest/p2p/message_validator.d.ts +18 -3
  88. package/dest/p2p/message_validator.d.ts.map +1 -1
  89. package/dest/p2p/message_validator.js +2 -1
  90. package/dest/tests/factories.js +1 -1
  91. package/dest/tests/jest.d.ts +4 -4
  92. package/dest/tests/jest.js +9 -9
  93. package/dest/tests/mocks.d.ts +15 -10
  94. package/dest/tests/mocks.d.ts.map +1 -1
  95. package/dest/tests/mocks.js +19 -13
  96. package/dest/tx/block_header.d.ts +3 -2
  97. package/dest/tx/block_header.d.ts.map +1 -1
  98. package/dest/tx/block_header.js +3 -2
  99. package/dest/tx/in_tx.d.ts +3 -3
  100. package/dest/tx/indexed_tx_effect.d.ts +5 -5
  101. package/dest/tx/indexed_tx_effect.d.ts.map +1 -1
  102. package/dest/tx/indexed_tx_effect.js +3 -2
  103. package/dest/tx/tx_receipt.d.ts +42 -14
  104. package/dest/tx/tx_receipt.d.ts.map +1 -1
  105. package/dest/tx/tx_receipt.js +46 -15
  106. package/package.json +9 -9
  107. package/src/block/block_hash.ts +26 -47
  108. package/src/block/block_parameter.ts +3 -3
  109. package/src/block/checkpointed_l2_block.ts +4 -4
  110. package/src/block/in_block.ts +7 -7
  111. package/src/block/index.ts +1 -1
  112. package/src/block/{l2_block_new.ts → l2_block.ts} +8 -12
  113. package/src/block/l2_block_source.ts +40 -31
  114. package/src/block/l2_block_stream/interfaces.ts +2 -2
  115. package/src/block/l2_block_stream/l2_block_stream.ts +5 -6
  116. package/src/block/l2_block_stream/l2_tips_store_base.ts +2 -2
  117. package/src/block/test/l2_tips_store_test_suite.ts +4 -4
  118. package/src/checkpoint/checkpoint.ts +7 -7
  119. package/src/config/node-rpc-config.ts +1 -1
  120. package/src/contract/contract_address.ts +1 -1
  121. package/src/contract/contract_class_id.ts +1 -1
  122. package/src/contract/private_function.ts +2 -3
  123. package/src/contract/private_function_membership_proof.ts +1 -1
  124. package/src/delayed_public_mutable/delayed_public_mutable_values.ts +9 -10
  125. package/src/epoch-helpers/index.ts +10 -1
  126. package/src/hash/hash.ts +2 -2
  127. package/src/hash/map_slot.ts +3 -2
  128. package/src/interfaces/archiver.ts +17 -25
  129. package/src/interfaces/aztec-node.ts +38 -31
  130. package/src/interfaces/block-builder.ts +5 -3
  131. package/src/interfaces/configs.ts +1 -3
  132. package/src/interfaces/prover-client.ts +15 -0
  133. package/src/interfaces/tx_provider.ts +2 -2
  134. package/src/interfaces/validator.ts +2 -4
  135. package/src/kernel/hints/build_nullifier_read_request_hints.ts +1 -10
  136. package/src/logs/log_id.ts +7 -6
  137. package/src/logs/siloed_tag.ts +3 -2
  138. package/src/p2p/block_proposal.ts +12 -5
  139. package/src/p2p/checkpoint_proposal.ts +9 -2
  140. package/src/p2p/message_validator.ts +14 -2
  141. package/src/tests/factories.ts +1 -1
  142. package/src/tests/jest.ts +9 -9
  143. package/src/tests/mocks.ts +26 -17
  144. package/src/tx/block_header.ts +7 -4
  145. package/src/tx/indexed_tx_effect.ts +3 -2
  146. package/src/tx/tx_receipt.ts +75 -18
  147. package/dest/block/l2_block_new.d.ts.map +0 -1
@@ -20,8 +20,9 @@ import type { BlockHeader } from '../tx/block_header.js';
20
20
  import type { IndexedTxEffect } from '../tx/indexed_tx_effect.js';
21
21
  import type { TxHash } from '../tx/tx_hash.js';
22
22
  import type { TxReceipt } from '../tx/tx_receipt.js';
23
+ import type { BlockHash } from './block_hash.js';
23
24
  import type { CheckpointedL2Block } from './checkpointed_l2_block.js';
24
- import type { L2BlockNew } from './l2_block_new.js';
25
+ import type { L2Block } from './l2_block.js';
25
26
  import type { ValidateCheckpointNegativeResult, ValidateCheckpointResult } from './validate_block_result.js';
26
27
 
27
28
  /**
@@ -52,6 +53,20 @@ export interface L2BlockSource {
52
53
  */
53
54
  getProvenBlockNumber(): Promise<BlockNumber>;
54
55
 
56
+ /**
57
+ * Gets the number of the latest L2 block checkpointed seen by the block source implementation.
58
+ * @returns The number of the latest L2 block checkpointed seen by the block source implementation.
59
+ */
60
+ getCheckpointedL2BlockNumber(): Promise<BlockNumber>;
61
+
62
+ /**
63
+ * Computes the finalized block number based on the proven block number.
64
+ * A block is considered finalized when it's 2 epochs behind the proven block.
65
+ * TODO(#13569): Compute proper finalized block number based on L1 finalized block.
66
+ * @returns The finalized block number.
67
+ */
68
+ getFinalizedL2BlockNumber(): Promise<BlockNumber>;
69
+
55
70
  /**
56
71
  * Gets an l2 block header.
57
72
  * @param number - The block number to return or 'latest' for the most recent one.
@@ -67,15 +82,15 @@ export interface L2BlockSource {
67
82
  */
68
83
  getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
69
84
 
70
- getCheckpointedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<CheckpointedL2Block[]>;
85
+ getCheckpointedBlocks(from: BlockNumber, limit: number): Promise<CheckpointedL2Block[]>;
71
86
 
72
87
  /**
73
- * Retrieves a collection of published checkpoints
74
- * @param checkpointNumber The first checkpoint to be retrieved
75
- * @param limit The number of checkpoints to be retrieved
76
- * @returns The collection of complete checkpoints
88
+ * Retrieves a collection of checkpoints.
89
+ * @param checkpointNumber The first checkpoint to be retrieved.
90
+ * @param limit The number of checkpoints to be retrieved.
91
+ * @returns The collection of complete checkpoints.
77
92
  */
78
- getPublishedCheckpoints(checkpointNumber: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
93
+ getCheckpoints(checkpointNumber: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
79
94
 
80
95
  /**
81
96
  * Gets the checkpoints for a given epoch
@@ -88,7 +103,7 @@ export interface L2BlockSource {
88
103
  * @param blockHash - The block hash to retrieve.
89
104
  * @returns The requested block header (or undefined if not found).
90
105
  */
91
- getBlockHeaderByHash(blockHash: Fr): Promise<BlockHeader | undefined>;
106
+ getBlockHeaderByHash(blockHash: BlockHash): Promise<BlockHeader | undefined>;
92
107
 
93
108
  /**
94
109
  * Gets a block header by its archive root.
@@ -102,21 +117,21 @@ export interface L2BlockSource {
102
117
  * @param number - The block number to return.
103
118
  * @returns The requested L2 block (or undefined if not found).
104
119
  */
105
- getL2BlockNew(number: BlockNumber): Promise<L2BlockNew | undefined>;
120
+ getL2Block(number: BlockNumber): Promise<L2Block | undefined>;
106
121
 
107
122
  /**
108
123
  * Gets an L2 block by its hash.
109
124
  * @param blockHash - The block hash to retrieve.
110
125
  * @returns The requested L2 block (or undefined if not found).
111
126
  */
112
- getL2BlockNewByHash(blockHash: Fr): Promise<L2BlockNew | undefined>;
127
+ getL2BlockByHash(blockHash: BlockHash): Promise<L2Block | undefined>;
113
128
 
114
129
  /**
115
130
  * Gets an L2 block by its archive root.
116
131
  * @param archive - The archive root to retrieve.
117
132
  * @returns The requested L2 block (or undefined if not found).
118
133
  */
119
- getL2BlockNewByArchive(archive: Fr): Promise<L2BlockNew | undefined>;
134
+ getL2BlockByArchive(archive: Fr): Promise<L2Block | undefined>;
120
135
 
121
136
  /**
122
137
  * Gets a tx effect.
@@ -143,11 +158,11 @@ export interface L2BlockSource {
143
158
  getL2EpochNumber(): Promise<EpochNumber | undefined>;
144
159
 
145
160
  /**
146
- * Returns all block headers for a given epoch.
161
+ * Returns all checkpointed block headers for a given epoch.
147
162
  * @dev Use this method only with recent epochs, since it walks the block list backwards.
148
163
  * @param epochNumber - The epoch number to return headers for.
149
164
  */
150
- getBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]>;
165
+ getCheckpointedBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]>;
151
166
 
152
167
  /**
153
168
  * Returns whether the given epoch is completed on L1, based on the current L1 and L2 block numbers.
@@ -193,49 +208,43 @@ export interface L2BlockSource {
193
208
  * @param number - The block number to return (inclusive).
194
209
  * @returns The requested L2 block.
195
210
  */
196
- getBlock(number: BlockNumber): Promise<L2BlockNew | undefined>;
197
-
198
- getL2BlocksNew(from: BlockNumber, limit: number, proven?: boolean): Promise<L2BlockNew[]>;
211
+ getBlock(number: BlockNumber): Promise<L2Block | undefined>;
199
212
 
200
213
  /**
201
- * Returns all blocks for a given epoch.
214
+ * Returns all checkpointed blocks for a given epoch.
202
215
  * @dev Use this method only with recent epochs, since it walks the block list backwards.
203
216
  * @param epochNumber - The epoch number to return blocks for.
204
217
  */
205
- getBlocksForEpoch(epochNumber: EpochNumber): Promise<L2BlockNew[]>;
218
+ getCheckpointedBlocksForEpoch(epochNumber: EpochNumber): Promise<CheckpointedL2Block[]>;
206
219
 
207
220
  /**
208
221
  * Returns all blocks for a given slot.
209
222
  * @dev Use this method only with recent slots, since it walks the block list backwards.
210
223
  * @param slotNumber - The slot number to return blocks for.
211
224
  */
212
- getBlocksForSlot(slotNumber: SlotNumber): Promise<L2BlockNew[]>;
225
+ getBlocksForSlot(slotNumber: SlotNumber): Promise<L2Block[]>;
213
226
 
214
227
  /**
215
- * Gets a published block by its block hash.
228
+ * Gets a checkpointed block by its block hash.
216
229
  * @param blockHash - The block hash to retrieve.
217
230
  * @returns The requested block (or undefined if not found).
218
231
  */
219
- getPublishedBlockByHash(blockHash: Fr): Promise<CheckpointedL2Block | undefined>;
232
+ getCheckpointedBlockByHash(blockHash: BlockHash): Promise<CheckpointedL2Block | undefined>;
220
233
 
221
234
  /**
222
- * Gets a published block by its archive root.
235
+ * Gets a checkpointed block by its archive root.
223
236
  * @param archive - The archive root to retrieve.
224
237
  * @returns The requested block (or undefined if not found).
225
238
  */
226
- getPublishedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined>;
239
+ getCheckpointedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined>;
227
240
 
228
241
  /**
229
242
  * Gets up to `limit` amount of L2 blocks starting from `from`.
230
243
  * @param from - Number of the first block to return (inclusive).
231
244
  * @param limit - The maximum number of blocks to return.
232
- * @param proven - If true, only return blocks that have been proven.
233
245
  * @returns The requested L2 blocks.
234
246
  */
235
- getBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<L2BlockNew[]>;
236
-
237
- /** Equivalent to getBlocks but includes publish data. */
238
- getPublishedBlocks(from: BlockNumber, limit: number, proven?: boolean): Promise<CheckpointedL2Block[]>;
247
+ getBlocks(from: BlockNumber, limit: number): Promise<L2Block[]>;
239
248
  }
240
249
 
241
250
  /**
@@ -247,7 +256,7 @@ export interface L2BlockSink {
247
256
  * @param block - The L2 block to add.
248
257
  * @throws If block number is not incremental (i.e., not exactly one more than the last stored block).
249
258
  */
250
- addBlock(block: L2BlockNew): Promise<void>;
259
+ addBlock(block: L2Block): Promise<void>;
251
260
  }
252
261
 
253
262
  /**
@@ -344,13 +353,13 @@ export type L2BlockProvenEvent = {
344
353
  export type L2PruneUnprovenEvent = {
345
354
  type: 'l2PruneUnproven';
346
355
  epochNumber: EpochNumber;
347
- blocks: L2BlockNew[];
356
+ blocks: L2Block[];
348
357
  };
349
358
 
350
359
  export type L2PruneUncheckpointedEvent = {
351
360
  type: 'l2PruneUncheckpointed';
352
361
  slotNumber: SlotNumber;
353
- blocks: L2BlockNew[];
362
+ blocks: L2Block[];
354
363
  };
355
364
 
356
365
  export type L2CheckpointEvent = {
@@ -1,5 +1,5 @@
1
1
  import type { PublishedCheckpoint } from '../../checkpoint/published_checkpoint.js';
2
- import type { L2BlockNew } from '../l2_block_new.js';
2
+ import type { L2Block } from '../l2_block.js';
3
3
  import type { CheckpointId, L2BlockId, L2Tips } from '../l2_block_source.js';
4
4
 
5
5
  /** Interface to the local view of the chain. Implemented by world-state and l2-tips-store. */
@@ -16,7 +16,7 @@ export interface L2BlockStreamEventHandler {
16
16
  export type L2BlockStreamEvent =
17
17
  | /** Emits blocks added to the chain. */ {
18
18
  type: 'blocks-added';
19
- blocks: L2BlockNew[];
19
+ blocks: L2Block[];
20
20
  }
21
21
  | /** Emits checkpoints published to L1. */ {
22
22
  type: 'chain-checkpointed';
@@ -19,13 +19,12 @@ export class L2BlockStream {
19
19
  constructor(
20
20
  private l2BlockSource: Pick<
21
21
  L2BlockSource,
22
- 'getL2BlocksNew' | 'getBlockHeader' | 'getL2Tips' | 'getPublishedCheckpoints' | 'getCheckpointedBlocks'
22
+ 'getBlocks' | 'getBlockHeader' | 'getL2Tips' | 'getCheckpoints' | 'getCheckpointedBlocks'
23
23
  >,
24
24
  private localData: L2BlockStreamLocalDataProvider,
25
25
  private handler: L2BlockStreamEventHandler,
26
26
  private readonly log = createLogger('types:block_stream'),
27
27
  private opts: {
28
- proven?: boolean;
29
28
  pollIntervalMS?: number;
30
29
  batchSize?: number;
31
30
  startingBlock?: number;
@@ -129,7 +128,7 @@ export class L2BlockStream {
129
128
  if (!this.opts.ignoreCheckpoints) {
130
129
  let loop1Iterations = 0;
131
130
  while (nextCheckpointToEmit <= sourceTips.checkpointed.checkpoint.number) {
132
- const checkpoints = await this.l2BlockSource.getPublishedCheckpoints(nextCheckpointToEmit, 1);
131
+ const checkpoints = await this.l2BlockSource.getCheckpoints(nextCheckpointToEmit, 1);
133
132
  if (checkpoints.length === 0) {
134
133
  break;
135
134
  }
@@ -174,7 +173,7 @@ export class L2BlockStream {
174
173
  // Refill the prefetch buffer when exhausted
175
174
  if (prefetchIdx >= prefetchedCheckpoints.length) {
176
175
  const prefetchLimit = this.opts.checkpointPrefetchLimit ?? CHECKPOINT_PREFETCH_LIMIT;
177
- prefetchedCheckpoints = await this.l2BlockSource.getPublishedCheckpoints(nextCheckpointNumber, prefetchLimit);
176
+ prefetchedCheckpoints = await this.l2BlockSource.getCheckpoints(nextCheckpointNumber, prefetchLimit);
178
177
  prefetchIdx = 0;
179
178
  if (prefetchedCheckpoints.length === 0) {
180
179
  break;
@@ -213,8 +212,8 @@ export class L2BlockStream {
213
212
  // Loop 3: Fetch any remaining uncheckpointed (proposed) blocks.
214
213
  while (nextBlockNumber <= sourceTips.proposed.number) {
215
214
  const limit = Math.min(this.opts.batchSize ?? 50, sourceTips.proposed.number - nextBlockNumber + 1);
216
- this.log.trace(`Requesting blocks from ${nextBlockNumber} limit ${limit} proven=${this.opts.proven}`);
217
- const blocks = await this.l2BlockSource.getL2BlocksNew(BlockNumber(nextBlockNumber), limit, this.opts.proven);
215
+ this.log.trace(`Requesting blocks from ${nextBlockNumber} limit ${limit}`);
216
+ const blocks = await this.l2BlockSource.getBlocks(BlockNumber(nextBlockNumber), BlockNumber(limit));
218
217
  if (blocks.length === 0) {
219
218
  break;
220
219
  }
@@ -2,7 +2,7 @@ import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
2
2
  import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
3
3
 
4
4
  import type { PublishedCheckpoint } from '../../checkpoint/published_checkpoint.js';
5
- import type { L2BlockNew } from '../l2_block_new.js';
5
+ import type { L2Block } from '../l2_block.js';
6
6
  import {
7
7
  type CheckpointId,
8
8
  GENESIS_CHECKPOINT_HEADER_HASH,
@@ -109,7 +109,7 @@ export abstract class L2TipsStoreBase implements L2BlockStreamEventHandler, L2Bl
109
109
  }
110
110
 
111
111
  // Protected helper that subclasses can override for block hash computation
112
- protected computeBlockHash(block: L2BlockNew): Promise<string> {
112
+ protected computeBlockHash(block: L2Block): Promise<string> {
113
113
  return block.hash().then(hash => hash.toString());
114
114
  }
115
115
 
@@ -5,8 +5,8 @@ import { Fr } from '@aztec/foundation/curves/bn254';
5
5
  import {
6
6
  type CheckpointId,
7
7
  GENESIS_CHECKPOINT_HEADER_HASH,
8
+ L2Block,
8
9
  type L2BlockId,
9
- L2BlockNew,
10
10
  type L2TipId,
11
11
  } from '@aztec/stdlib/block';
12
12
  import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
@@ -31,8 +31,8 @@ export function testL2TipsStore(makeTipsStore: () => Promise<L2TipsStore>) {
31
31
  blockToCheckpoint.clear();
32
32
  });
33
33
 
34
- const makeBlock = async (number: number): Promise<L2BlockNew> => {
35
- const block = await L2BlockNew.random(BlockNumber(number));
34
+ const makeBlock = async (number: number): Promise<L2Block> => {
35
+ const block = await L2Block.random(BlockNumber(number));
36
36
  blockHashes.set(number, (await block.hash()).toString());
37
37
  return block;
38
38
  };
@@ -74,7 +74,7 @@ export function testL2TipsStore(makeTipsStore: () => Promise<L2TipsStore>) {
74
74
  checkpointed: makeTipId(checkpointed),
75
75
  });
76
76
 
77
- const makeCheckpoint = async (checkpointNumber: number, blocks: L2BlockNew[]): Promise<PublishedCheckpoint> => {
77
+ const makeCheckpoint = async (checkpointNumber: number, blocks: L2Block[]): Promise<PublishedCheckpoint> => {
78
78
  const checkpoint = await Checkpoint.random(CheckpointNumber(checkpointNumber), {
79
79
  numBlocks: blocks.length,
80
80
  startBlockNumber: blocks[0].number,
@@ -13,7 +13,7 @@ import type { FieldsOf } from '@aztec/foundation/types';
13
13
 
14
14
  import { z } from 'zod';
15
15
 
16
- import { L2BlockNew } from '../block/l2_block_new.js';
16
+ import { L2Block } from '../block/l2_block.js';
17
17
  import { MAX_BLOCKS_PER_CHECKPOINT } from '../deserialization/index.js';
18
18
  import { computeCheckpointOutHash } from '../messaging/out_hash.js';
19
19
  import { CheckpointHeader } from '../rollup/checkpoint_header.js';
@@ -29,7 +29,7 @@ export class Checkpoint {
29
29
  /** Header of the checkpoint. */
30
30
  public header: CheckpointHeader,
31
31
  /** L2 blocks in the checkpoint. */
32
- public blocks: L2BlockNew[],
32
+ public blocks: L2Block[],
33
33
  /** Number of the checkpoint. */
34
34
  public number: CheckpointNumber,
35
35
  ) {}
@@ -43,7 +43,7 @@ export class Checkpoint {
43
43
  .object({
44
44
  archive: AppendOnlyTreeSnapshot.schema,
45
45
  header: CheckpointHeader.schema,
46
- blocks: z.array(L2BlockNew.schema),
46
+ blocks: z.array(L2Block.schema),
47
47
  number: CheckpointNumberSchema,
48
48
  })
49
49
  .transform(({ archive, header, blocks, number }) => new Checkpoint(archive, header, blocks, number));
@@ -62,7 +62,7 @@ export class Checkpoint {
62
62
  return new Checkpoint(
63
63
  reader.readObject(AppendOnlyTreeSnapshot),
64
64
  reader.readObject(CheckpointHeader),
65
- reader.readVector(L2BlockNew, MAX_BLOCKS_PER_CHECKPOINT),
65
+ reader.readVector(L2Block, MAX_BLOCKS_PER_CHECKPOINT),
66
66
  CheckpointNumber(reader.readNumber()),
67
67
  );
68
68
  }
@@ -135,16 +135,16 @@ export class Checkpoint {
135
135
  startBlockNumber?: number;
136
136
  previousArchive?: AppendOnlyTreeSnapshot;
137
137
  } & Partial<Parameters<typeof CheckpointHeader.random>[0]> &
138
- Partial<Parameters<typeof L2BlockNew.random>[1]> = {},
138
+ Partial<Parameters<typeof L2Block.random>[1]> = {},
139
139
  ) {
140
140
  const header = CheckpointHeader.random(options);
141
141
 
142
142
  // Create blocks sequentially to chain archive roots properly.
143
143
  // Each block's header.lastArchive must equal the previous block's archive.
144
- const blocks: L2BlockNew[] = [];
144
+ const blocks: L2Block[] = [];
145
145
  let lastArchive = previousArchive;
146
146
  for (let i = 0; i < numBlocks; i++) {
147
- const block = await L2BlockNew.random(BlockNumber(startBlockNumber + i), {
147
+ const block = await L2Block.random(BlockNumber(startBlockNumber + i), {
148
148
  indexWithinCheckpoint: IndexWithinCheckpoint(i),
149
149
  ...options,
150
150
  ...(lastArchive ? { lastArchive } : {}),
@@ -21,7 +21,7 @@ export const nodeRpcConfigMappings: ConfigMappingsType<NodeRPCConfig> = {
21
21
  rpcMaxBodySize: {
22
22
  env: 'RPC_MAX_BODY_SIZE',
23
23
  description: 'Maximum allowed batch size for JSON RPC batch requests.',
24
- defaultValue: '50mb',
24
+ defaultValue: '1mb',
25
25
  },
26
26
  };
27
27
 
@@ -87,5 +87,5 @@ export async function computeInitializationHashFromEncodedArgs(
87
87
  encodedArgs: Fr[],
88
88
  ): Promise<Fr> {
89
89
  const argsHash = await computeVarArgsHash(encodedArgs);
90
- return poseidon2HashWithSeparator([initFn, argsHash], GeneratorIndex.CONSTRUCTOR);
90
+ return poseidon2HashWithSeparator([initFn, argsHash], GeneratorIndex.INITIALIZER);
91
91
  }
@@ -13,7 +13,7 @@ import { computePrivateFunctionsRoot } from './private_function.js';
13
13
  *
14
14
  * ```
15
15
  * version = 1
16
- * private_function_leaves = private_functions.map(fn => pedersen([fn.function_selector as Field, fn.vk_hash], GENERATOR__FUNCTION_LEAF))
16
+ * private_function_leaves = private_functions.map(fn => pedersen([fn.function_selector as Field, fn.vk_hash], GENERATOR__PRIVATE_FUNCTION_LEAF))
17
17
  * private_functions_root = merkleize(private_function_leaves)
18
18
  * bytecode_commitment = calculate_commitment(packed_bytecode)
19
19
  * contract_class_id = pedersen([version, artifact_hash, private_functions_root, bytecode_commitment], GENERATOR__CLASS_IDENTIFIER)
@@ -1,5 +1,4 @@
1
1
  import { FUNCTION_TREE_HEIGHT, GeneratorIndex } from '@aztec/constants';
2
- import { pedersenHash } from '@aztec/foundation/crypto/pedersen';
3
2
  import { poseidon2Hash, poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
4
3
  import { Fr } from '@aztec/foundation/curves/bn254';
5
4
  import { type MerkleTree, MerkleTreeCalculator } from '@aztec/foundation/trees';
@@ -32,13 +31,13 @@ function computePrivateFunctionLeaves(fns: PrivateFunction[]): Promise<Buffer[]>
32
31
 
33
32
  /** Returns the leaf for a given private function. */
34
33
  export async function computePrivateFunctionLeaf(fn: PrivateFunction): Promise<Buffer> {
35
- return (await poseidon2HashWithSeparator([fn.selector, fn.vkHash], GeneratorIndex.FUNCTION_LEAF)).toBuffer();
34
+ return (await poseidon2HashWithSeparator([fn.selector, fn.vkHash], GeneratorIndex.PRIVATE_FUNCTION_LEAF)).toBuffer();
36
35
  }
37
36
 
38
37
  async function getPrivateFunctionTreeCalculator(): Promise<MerkleTreeCalculator> {
39
38
  if (!privateFunctionTreeCalculator) {
40
39
  const functionTreeZeroLeaf = (
41
- await pedersenHash(new Array(PRIVATE_FUNCTION_SIZE).fill(0))
40
+ await poseidon2Hash(new Array(PRIVATE_FUNCTION_SIZE).fill(0))
42
41
  ).toBuffer() as Buffer<ArrayBuffer>;
43
42
  privateFunctionTreeCalculator = await MerkleTreeCalculator.create(
44
43
  FUNCTION_TREE_HEIGHT,
@@ -99,7 +99,7 @@ export async function createPrivateFunctionMembershipProof(
99
99
  * contract_class = db.get_contract_class(contract_class_id)
100
100
  *
101
101
  * // Compute function leaf and assert it belongs to the private functions tree
102
- * function_leaf = pedersen([selector as Field, vk_hash], GENERATOR__FUNCTION_LEAF)
102
+ * function_leaf = pedersen([selector as Field, vk_hash], GENERATOR__PRIVATE_FUNCTION_LEAF)
103
103
  * computed_private_function_tree_root = compute_root(function_leaf, private_function_tree_sibling_path)
104
104
  * assert computed_private_function_tree_root == contract_class.private_functions_root
105
105
  *
@@ -68,23 +68,22 @@ export class DelayedPublicMutableValues {
68
68
  }
69
69
 
70
70
  static async readFromTree(delayedPublicMutableSlot: Fr, readStorage: (storageSlot: Fr) => Promise<Fr>) {
71
- const fields = [];
72
- for (let i = 0; i < DELAYED_PUBLIC_MUTABLE_VALUES_LEN; i++) {
73
- fields.push(await readStorage(delayedPublicMutableSlot.add(new Fr(i))));
74
- }
75
- return DelayedPublicMutableValues.fromFields(fields);
71
+ const fieldPromises = Array.from({ length: DELAYED_PUBLIC_MUTABLE_VALUES_LEN }).map((_, i) =>
72
+ readStorage(delayedPublicMutableSlot.add(new Fr(i))),
73
+ );
74
+ return DelayedPublicMutableValues.fromFields(await Promise.all(fieldPromises));
76
75
  }
77
76
 
78
77
  isEmpty(): boolean {
79
78
  return this.svc.isEmpty() && this.sdc.isEmpty();
80
79
  }
81
80
 
82
- async writeToTree(delayedPublicMutableSlot: Fr, storageWrite: (storageSlot: Fr, value: Fr) => Promise<void>) {
83
- const fields = this.toFields();
81
+ writeToTree(delayedPublicMutableSlot: Fr, storageWrite: (storageSlot: Fr, value: Fr) => Promise<void>) {
82
+ const fieldPromises = this.toFields().map((field, i) =>
83
+ storageWrite(delayedPublicMutableSlot.add(new Fr(i)), field),
84
+ );
84
85
 
85
- for (let i = 0; i < fields.length; i++) {
86
- await storageWrite(delayedPublicMutableSlot.add(new Fr(i)), fields[i]);
87
- }
86
+ return Promise.all(fieldPromises);
88
87
  }
89
88
 
90
89
  async hash(): Promise<Fr> {
@@ -51,6 +51,15 @@ export function getSlotAtTimestamp(
51
51
  : SlotNumber.fromBigInt((ts - constants.l1GenesisTime) / BigInt(constants.slotDuration));
52
52
  }
53
53
 
54
+ /** Returns the L2 slot number at the next L1 block based on the current timestamp. */
55
+ export function getSlotAtNextL1Block(
56
+ currentL1Timestamp: bigint,
57
+ constants: Pick<L1RollupConstants, 'l1GenesisTime' | 'slotDuration' | 'ethereumSlotDuration'>,
58
+ ): SlotNumber {
59
+ const nextL1BlockTimestamp = currentL1Timestamp + BigInt(constants.ethereumSlotDuration);
60
+ return getSlotAtTimestamp(nextL1BlockTimestamp, constants);
61
+ }
62
+
54
63
  /** Returns the epoch number for a given timestamp. */
55
64
  export function getEpochNumberAtTimestamp(
56
65
  ts: bigint,
@@ -69,7 +78,7 @@ export function getSlotRangeForEpoch(
69
78
  epochNumber: EpochNumber,
70
79
  constants: Pick<L1RollupConstants, 'epochDuration'>,
71
80
  ): [SlotNumber, SlotNumber] {
72
- const startSlot = SlotNumber(epochNumber * constants.epochDuration);
81
+ const startSlot = SlotNumber(Number(epochNumber) * constants.epochDuration);
73
82
  return [startSlot, SlotNumber(startSlot + constants.epochDuration - 1)];
74
83
  }
75
84
 
package/src/hash/hash.ts CHANGED
@@ -55,7 +55,7 @@ export function computeUniqueNoteHash(noteNonce: Fr, siloedNoteHash: Fr): Promis
55
55
  * @returns A siloed nullifier.
56
56
  */
57
57
  export function siloNullifier(contract: AztecAddress, innerNullifier: Fr): Promise<Fr> {
58
- return poseidon2HashWithSeparator([contract, innerNullifier], GeneratorIndex.OUTER_NULLIFIER);
58
+ return poseidon2HashWithSeparator([contract, innerNullifier], GeneratorIndex.SILOED_NULLIFIER);
59
59
  }
60
60
 
61
61
  /**
@@ -87,7 +87,7 @@ export function computePublicDataTreeValue(value: Fr): Fr {
87
87
 
88
88
  */
89
89
  export function computePublicDataTreeLeafSlot(contractAddress: AztecAddress, storageSlot: Fr): Promise<Fr> {
90
- return poseidon2HashWithSeparator([contractAddress, storageSlot], GeneratorIndex.PUBLIC_LEAF_INDEX);
90
+ return poseidon2HashWithSeparator([contractAddress, storageSlot], GeneratorIndex.PUBLIC_LEAF_SLOT);
91
91
  }
92
92
 
93
93
  /**
@@ -1,4 +1,5 @@
1
- import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
1
+ import { GeneratorIndex } from '@aztec/constants';
2
+ import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
2
3
  import type { Fr } from '@aztec/foundation/curves/bn254';
3
4
 
4
5
  /**
@@ -14,5 +15,5 @@ export function deriveStorageSlotInMap(
14
15
  toField: () => Fr;
15
16
  },
16
17
  ): Promise<Fr> {
17
- return poseidon2Hash([mapSlot, key.toField()]);
18
+ return poseidon2HashWithSeparator([mapSlot, key.toField()], GeneratorIndex.PUBLIC_STORAGE_MAP_SLOT);
18
19
  }
@@ -4,8 +4,9 @@ import type { ApiSchemaFor } from '@aztec/foundation/schemas';
4
4
 
5
5
  import { z } from 'zod';
6
6
 
7
+ import { BlockHash } from '../block/block_hash.js';
7
8
  import { CheckpointedL2Block } from '../block/checkpointed_l2_block.js';
8
- import { L2BlockNew } from '../block/l2_block_new.js';
9
+ import { L2Block } from '../block/l2_block.js';
9
10
  import { type L2BlockSource, L2TipsSchema } from '../block/l2_block_source.js';
10
11
  import { ValidateCheckpointResultSchema } from '../block/validate_block_result.js';
11
12
  import { Checkpoint } from '../checkpoint/checkpoint.js';
@@ -82,7 +83,9 @@ export const ArchiverApiSchema: ApiSchemaFor<ArchiverApi> = {
82
83
  getRegistryAddress: z.function().args().returns(schemas.EthAddress),
83
84
  getBlockNumber: z.function().args().returns(BlockNumberSchema),
84
85
  getProvenBlockNumber: z.function().args().returns(BlockNumberSchema),
85
- getBlock: z.function().args(BlockNumberSchema).returns(L2BlockNew.schema.optional()),
86
+ getCheckpointedL2BlockNumber: z.function().args().returns(BlockNumberSchema),
87
+ getFinalizedL2BlockNumber: z.function().args().returns(BlockNumberSchema),
88
+ getBlock: z.function().args(BlockNumberSchema).returns(L2Block.schema.optional()),
86
89
  getBlockHeader: z
87
90
  .function()
88
91
  .args(z.union([BlockNumberSchema, z.literal('latest')]))
@@ -90,39 +93,28 @@ export const ArchiverApiSchema: ApiSchemaFor<ArchiverApi> = {
90
93
  getCheckpointedBlock: z.function().args(BlockNumberSchema).returns(CheckpointedL2Block.schema.optional()),
91
94
  getCheckpointedBlocks: z
92
95
  .function()
93
- .args(BlockNumberSchema, schemas.Integer, optional(z.boolean()))
96
+ .args(BlockNumberSchema, schemas.Integer)
94
97
  .returns(z.array(CheckpointedL2Block.schema)),
95
- getBlocks: z
96
- .function()
97
- .args(BlockNumberSchema, schemas.Integer, optional(z.boolean()))
98
- .returns(z.array(L2BlockNew.schema)),
99
- getPublishedCheckpoints: z
98
+ getBlocks: z.function().args(BlockNumberSchema, schemas.Integer).returns(z.array(L2Block.schema)),
99
+ getCheckpoints: z
100
100
  .function()
101
101
  .args(CheckpointNumberSchema, schemas.Integer)
102
102
  .returns(z.array(PublishedCheckpoint.schema)),
103
- getPublishedBlocks: z
104
- .function()
105
- .args(BlockNumberSchema, schemas.Integer, optional(z.boolean()))
106
- .returns(z.array(CheckpointedL2Block.schema)),
107
- getL2BlocksNew: z
108
- .function()
109
- .args(BlockNumberSchema, schemas.Integer, optional(z.boolean()))
110
- .returns(z.array(L2BlockNew.schema)),
111
- getPublishedBlockByHash: z.function().args(schemas.Fr).returns(CheckpointedL2Block.schema.optional()),
112
- getPublishedBlockByArchive: z.function().args(schemas.Fr).returns(CheckpointedL2Block.schema.optional()),
113
- getBlockHeaderByHash: z.function().args(schemas.Fr).returns(BlockHeader.schema.optional()),
103
+ getCheckpointedBlockByHash: z.function().args(BlockHash.schema).returns(CheckpointedL2Block.schema.optional()),
104
+ getCheckpointedBlockByArchive: z.function().args(schemas.Fr).returns(CheckpointedL2Block.schema.optional()),
105
+ getBlockHeaderByHash: z.function().args(BlockHash.schema).returns(BlockHeader.schema.optional()),
114
106
  getBlockHeaderByArchive: z.function().args(schemas.Fr).returns(BlockHeader.schema.optional()),
115
- getL2BlockNew: z.function().args(BlockNumberSchema).returns(L2BlockNew.schema.optional()),
116
- getL2BlockNewByHash: z.function().args(schemas.Fr).returns(L2BlockNew.schema.optional()),
117
- getL2BlockNewByArchive: z.function().args(schemas.Fr).returns(L2BlockNew.schema.optional()),
107
+ getL2Block: z.function().args(BlockNumberSchema).returns(L2Block.schema.optional()),
108
+ getL2BlockByHash: z.function().args(BlockHash.schema).returns(L2Block.schema.optional()),
109
+ getL2BlockByArchive: z.function().args(schemas.Fr).returns(L2Block.schema.optional()),
118
110
  getTxEffect: z.function().args(TxHash.schema).returns(indexedTxSchema().optional()),
119
111
  getSettledTxReceipt: z.function().args(TxHash.schema).returns(TxReceipt.schema.optional()),
120
112
  getL2SlotNumber: z.function().args().returns(schemas.SlotNumber.optional()),
121
113
  getL2EpochNumber: z.function().args().returns(EpochNumberSchema.optional()),
122
114
  getCheckpointsForEpoch: z.function().args(EpochNumberSchema).returns(z.array(Checkpoint.schema)),
123
- getBlocksForEpoch: z.function().args(EpochNumberSchema).returns(z.array(L2BlockNew.schema)),
124
- getBlocksForSlot: z.function().args(schemas.SlotNumber).returns(z.array(L2BlockNew.schema)),
125
- getBlockHeadersForEpoch: z.function().args(EpochNumberSchema).returns(z.array(BlockHeader.schema)),
115
+ getCheckpointedBlocksForEpoch: z.function().args(EpochNumberSchema).returns(z.array(CheckpointedL2Block.schema)),
116
+ getBlocksForSlot: z.function().args(schemas.SlotNumber).returns(z.array(L2Block.schema)),
117
+ getCheckpointedBlockHeadersForEpoch: z.function().args(EpochNumberSchema).returns(z.array(BlockHeader.schema)),
126
118
  isEpochComplete: z.function().args(EpochNumberSchema).returns(z.boolean()),
127
119
  getL2Tips: z.function().args().returns(L2TipsSchema),
128
120
  getPrivateLogsByTags: z