@aztec/archiver 0.0.1-commit.7b97ef96e → 0.0.1-commit.7cbc774

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 (128) hide show
  1. package/README.md +19 -11
  2. package/dest/archiver.d.ts +36 -17
  3. package/dest/archiver.d.ts.map +1 -1
  4. package/dest/archiver.js +257 -75
  5. package/dest/config.d.ts +6 -3
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +23 -15
  8. package/dest/errors.d.ts +55 -9
  9. package/dest/errors.d.ts.map +1 -1
  10. package/dest/errors.js +81 -14
  11. package/dest/factory.d.ts +13 -9
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +48 -39
  14. package/dest/index.d.ts +11 -3
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +10 -2
  17. package/dest/l1/bin/retrieve-calldata.js +32 -28
  18. package/dest/l1/calldata_retriever.d.ts +71 -53
  19. package/dest/l1/calldata_retriever.d.ts.map +1 -1
  20. package/dest/l1/calldata_retriever.js +190 -262
  21. package/dest/l1/data_retrieval.d.ts +24 -16
  22. package/dest/l1/data_retrieval.d.ts.map +1 -1
  23. package/dest/l1/data_retrieval.js +39 -45
  24. package/dest/l1/spire_proposer.d.ts +5 -5
  25. package/dest/l1/spire_proposer.d.ts.map +1 -1
  26. package/dest/l1/spire_proposer.js +9 -17
  27. package/dest/l1/trace_tx.d.ts +12 -66
  28. package/dest/l1/trace_tx.d.ts.map +1 -1
  29. package/dest/l1/validate_historical_logs.d.ts +23 -0
  30. package/dest/l1/validate_historical_logs.d.ts.map +1 -0
  31. package/dest/l1/validate_historical_logs.js +108 -0
  32. package/dest/modules/contract_data_source_adapter.d.ts +25 -0
  33. package/dest/modules/contract_data_source_adapter.d.ts.map +1 -0
  34. package/dest/modules/contract_data_source_adapter.js +40 -0
  35. package/dest/modules/data_source_base.d.ts +70 -46
  36. package/dest/modules/data_source_base.d.ts.map +1 -1
  37. package/dest/modules/data_source_base.js +270 -135
  38. package/dest/modules/data_store_updater.d.ts +42 -17
  39. package/dest/modules/data_store_updater.d.ts.map +1 -1
  40. package/dest/modules/data_store_updater.js +191 -122
  41. package/dest/modules/instrumentation.d.ts +18 -2
  42. package/dest/modules/instrumentation.d.ts.map +1 -1
  43. package/dest/modules/instrumentation.js +35 -7
  44. package/dest/modules/l1_synchronizer.d.ts +12 -11
  45. package/dest/modules/l1_synchronizer.d.ts.map +1 -1
  46. package/dest/modules/l1_synchronizer.js +439 -207
  47. package/dest/modules/validation.d.ts +4 -3
  48. package/dest/modules/validation.d.ts.map +1 -1
  49. package/dest/modules/validation.js +6 -6
  50. package/dest/store/block_store.d.ts +174 -70
  51. package/dest/store/block_store.d.ts.map +1 -1
  52. package/dest/store/block_store.js +696 -250
  53. package/dest/store/contract_class_store.d.ts +17 -4
  54. package/dest/store/contract_class_store.d.ts.map +1 -1
  55. package/dest/store/contract_class_store.js +24 -68
  56. package/dest/store/contract_instance_store.d.ts +28 -1
  57. package/dest/store/contract_instance_store.d.ts.map +1 -1
  58. package/dest/store/contract_instance_store.js +37 -2
  59. package/dest/store/data_stores.d.ts +68 -0
  60. package/dest/store/data_stores.d.ts.map +1 -0
  61. package/dest/store/data_stores.js +54 -0
  62. package/dest/store/function_names_cache.d.ts +17 -0
  63. package/dest/store/function_names_cache.d.ts.map +1 -0
  64. package/dest/store/function_names_cache.js +30 -0
  65. package/dest/store/l2_tips_cache.d.ts +13 -7
  66. package/dest/store/l2_tips_cache.d.ts.map +1 -1
  67. package/dest/store/l2_tips_cache.js +13 -76
  68. package/dest/store/log_store.d.ts +42 -37
  69. package/dest/store/log_store.d.ts.map +1 -1
  70. package/dest/store/log_store.js +262 -408
  71. package/dest/store/log_store_codec.d.ts +70 -0
  72. package/dest/store/log_store_codec.d.ts.map +1 -0
  73. package/dest/store/log_store_codec.js +101 -0
  74. package/dest/store/message_store.d.ts +11 -1
  75. package/dest/store/message_store.d.ts.map +1 -1
  76. package/dest/store/message_store.js +51 -9
  77. package/dest/test/fake_l1_state.d.ts +22 -1
  78. package/dest/test/fake_l1_state.d.ts.map +1 -1
  79. package/dest/test/fake_l1_state.js +152 -24
  80. package/dest/test/mock_l1_to_l2_message_source.d.ts +1 -1
  81. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  82. package/dest/test/mock_l1_to_l2_message_source.js +2 -1
  83. package/dest/test/mock_l2_block_source.d.ts +52 -46
  84. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  85. package/dest/test/mock_l2_block_source.js +246 -170
  86. package/dest/test/mock_structs.d.ts +4 -1
  87. package/dest/test/mock_structs.d.ts.map +1 -1
  88. package/dest/test/mock_structs.js +13 -1
  89. package/dest/test/noop_l1_archiver.d.ts +12 -6
  90. package/dest/test/noop_l1_archiver.d.ts.map +1 -1
  91. package/dest/test/noop_l1_archiver.js +26 -9
  92. package/package.json +14 -14
  93. package/src/archiver.ts +313 -75
  94. package/src/config.ts +32 -12
  95. package/src/errors.ts +122 -21
  96. package/src/factory.ts +54 -30
  97. package/src/index.ts +18 -2
  98. package/src/l1/README.md +25 -68
  99. package/src/l1/bin/retrieve-calldata.ts +40 -27
  100. package/src/l1/calldata_retriever.ts +243 -384
  101. package/src/l1/data_retrieval.ts +55 -69
  102. package/src/l1/spire_proposer.ts +7 -15
  103. package/src/l1/validate_historical_logs.ts +140 -0
  104. package/src/modules/contract_data_source_adapter.ts +55 -0
  105. package/src/modules/data_source_base.ts +336 -171
  106. package/src/modules/data_store_updater.ts +224 -154
  107. package/src/modules/instrumentation.ts +48 -8
  108. package/src/modules/l1_synchronizer.ts +579 -254
  109. package/src/modules/validation.ts +10 -9
  110. package/src/store/block_store.ts +865 -290
  111. package/src/store/contract_class_store.ts +31 -103
  112. package/src/store/contract_instance_store.ts +51 -5
  113. package/src/store/data_stores.ts +104 -0
  114. package/src/store/function_names_cache.ts +37 -0
  115. package/src/store/l2_tips_cache.ts +16 -70
  116. package/src/store/log_store.ts +301 -559
  117. package/src/store/log_store_codec.ts +132 -0
  118. package/src/store/message_store.ts +60 -10
  119. package/src/structs/inbox_message.ts +1 -1
  120. package/src/test/fake_l1_state.ts +198 -35
  121. package/src/test/mock_l1_to_l2_message_source.ts +1 -0
  122. package/src/test/mock_l2_block_source.ts +309 -205
  123. package/src/test/mock_structs.ts +20 -6
  124. package/src/test/noop_l1_archiver.ts +39 -9
  125. package/dest/store/kv_archiver_store.d.ts +0 -354
  126. package/dest/store/kv_archiver_store.d.ts.map +0 -1
  127. package/dest/store/kv_archiver_store.js +0 -464
  128. package/src/store/kv_archiver_store.ts +0 -671
@@ -1,16 +1,19 @@
1
1
  import { getBlobsPerL1Block, getPrefixedEthBlobCommitments } from '@aztec/blob-lib';
2
+ import { INITIAL_CHECKPOINT_NUMBER } from '@aztec/constants';
2
3
  import { MULTI_CALL_3_ADDRESS } from '@aztec/ethereum/contracts';
3
4
  import { CheckpointNumber } from '@aztec/foundation/branded-types';
4
5
  import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
6
+ import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
5
7
  import { createLogger } from '@aztec/foundation/log';
6
8
  import { RollupAbi } from '@aztec/l1-artifacts';
7
9
  import { CommitteeAttestation, CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
8
10
  import { getSlotAtTimestamp } from '@aztec/stdlib/epoch-helpers';
9
11
  import { InboxLeaf } from '@aztec/stdlib/messaging';
10
- import { makeAndSignCommitteeAttestationsAndSigners, makeCheckpointAttestationFromCheckpoint, mockCheckpointAndMessages } from '@aztec/stdlib/testing';
12
+ import { ConsensusPayload, getHashedSignaturePayloadTypedData } from '@aztec/stdlib/p2p';
13
+ import { mockCheckpointAndMessages } from '@aztec/stdlib/testing';
11
14
  import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
12
15
  import { mock } from 'jest-mock-extended';
13
- import { encodeFunctionData, multicall3Abi, toHex } from 'viem';
16
+ import { encodeAbiParameters, encodeFunctionData, keccak256, multicall3Abi, toHex } from 'viem';
14
17
  import { updateRollingHash } from '../structs/inbox_message.js';
15
18
  /**
16
19
  * Stateful fake for L1 data used by the archiver.
@@ -46,6 +49,10 @@ import { updateRollingHash } from '../structs/inbox_message.js';
46
49
  canPruneResult;
47
50
  // Computed from checkpoints based on L1 block visibility
48
51
  pendingCheckpointNumber;
52
+ // The L1 block number reported as "finalized" (defaults to the start block).
53
+ // `undefined` simulates the startup window on a fresh devnet where
54
+ // `getBlock({ blockTag: 'finalized' })` fails with "finalized block not found".
55
+ finalizedL1BlockNumber;
49
56
  constructor(config){
50
57
  this.config = config;
51
58
  this.log = createLogger('archiver:test:fake-l1');
@@ -58,6 +65,7 @@ import { updateRollingHash } from '../structs/inbox_message.js';
58
65
  this.canPruneResult = false;
59
66
  this.pendingCheckpointNumber = CheckpointNumber(0);
60
67
  this.l1BlockNumber = config.l1StartBlock;
68
+ this.finalizedL1BlockNumber = config.l1StartBlock;
61
69
  this.lastArchive = new AppendOnlyTreeSnapshot(config.genesisArchiveRoot, 1);
62
70
  }
63
71
  /**
@@ -100,8 +108,8 @@ import { updateRollingHash } from '../structs/inbox_message.js';
100
108
  });
101
109
  // Store the messages internally so they match the checkpoint's inHash
102
110
  this.addMessages(checkpointNumber, messagesL1BlockNumber, messages);
103
- // Create the transaction and blobs
104
- const tx = await this.makeRollupTx(checkpoint, signers);
111
+ // Create the transaction, blobs, and event hashes
112
+ const { tx, attestationsHash, payloadDigest } = await this.makeRollupTx(checkpoint, signers);
105
113
  const blobHashes = await this.makeVersionedBlobHashes(checkpoint);
106
114
  const blobs = await this.makeBlobsFromCheckpoint(checkpoint);
107
115
  // Store the checkpoint data
@@ -112,7 +120,9 @@ import { updateRollingHash } from '../structs/inbox_message.js';
112
120
  tx,
113
121
  blobHashes,
114
122
  blobs,
115
- signers
123
+ signers,
124
+ attestationsHash,
125
+ payloadDigest
116
126
  });
117
127
  // Update last archive for auto-chaining
118
128
  this.lastArchive = lastArchive ?? checkpoint.blocks.at(-1).archive;
@@ -154,9 +164,27 @@ import { updateRollingHash } from '../structs/inbox_message.js';
154
164
  this.l1BlockNumber = blockNumber;
155
165
  this.updatePendingCheckpointNumber();
156
166
  }
167
+ /**
168
+ * Sets the L1 block number that will be reported as "finalized". Pass `undefined` to
169
+ * simulate a chain that does not yet have a finalized block (devnet startup).
170
+ */ setFinalizedL1BlockNumber(blockNumber) {
171
+ this.finalizedL1BlockNumber = blockNumber;
172
+ }
157
173
  /** Marks a checkpoint as proven. Updates provenCheckpointNumber. */ markCheckpointAsProven(checkpointNumber) {
158
174
  this.provenCheckpointNumber = checkpointNumber;
159
175
  }
176
+ /**
177
+ * Simulates what `rollup.getProvenCheckpointNumber({ blockNumber: atL1Block })` would return.
178
+ */ getProvenCheckpointNumberAtL1Block(atL1Block) {
179
+ if (this.provenCheckpointNumber === 0) {
180
+ return CheckpointNumber(0);
181
+ }
182
+ const checkpoint = this.checkpoints.find((cp)=>cp.checkpointNumber === this.provenCheckpointNumber);
183
+ if (checkpoint && checkpoint.l1BlockNumber <= atL1Block) {
184
+ return this.provenCheckpointNumber;
185
+ }
186
+ return CheckpointNumber(0);
187
+ }
160
188
  /** Sets the target committee size for attestation validation. */ setTargetCommitteeSize(size) {
161
189
  this.targetCommitteeSize = size;
162
190
  }
@@ -172,6 +200,19 @@ import { updateRollingHash } from '../structs/inbox_message.js';
172
200
  this.updatePendingCheckpointNumber();
173
201
  }
174
202
  /**
203
+ * Moves a checkpoint to a different L1 block number (simulates L1 reorg that
204
+ * re-includes the same checkpoint transaction in a different block).
205
+ * The checkpoint content stays the same — only the L1 metadata changes.
206
+ * Auto-updates pending status.
207
+ */ moveCheckpointToL1Block(checkpointNumber, newL1BlockNumber) {
208
+ for (const cpData of this.checkpoints){
209
+ if (cpData.checkpointNumber === checkpointNumber) {
210
+ cpData.l1BlockNumber = newL1BlockNumber;
211
+ }
212
+ }
213
+ this.updatePendingCheckpointNumber();
214
+ }
215
+ /**
175
216
  * Removes messages after a given total index (simulates L1 reorg).
176
217
  * Auto-updates rolling hash.
177
218
  */ removeMessagesAfter(totalIndex) {
@@ -243,6 +284,10 @@ import { updateRollingHash } from '../structs/inbox_message.js';
243
284
  archiveOfMyCheckpoint: this.getArchiveAt(localCheckpointNum)
244
285
  });
245
286
  });
287
+ mockRollup.getProvenCheckpointNumber.mockImplementation((options)=>{
288
+ const atBlock = options?.blockNumber ?? this.l1BlockNumber;
289
+ return Promise.resolve(this.getProvenCheckpointNumberAtL1Block(atBlock));
290
+ });
246
291
  mockRollup.canPruneAtTime.mockImplementation(()=>Promise.resolve(this.canPruneResult));
247
292
  // Mock the wrapper method for fetching checkpoint events
248
293
  mockRollup.getCheckpointProposedEvents.mockImplementation((fromBlock, toBlock)=>Promise.resolve(this.getCheckpointProposedLogs(fromBlock, toBlock)));
@@ -253,23 +298,49 @@ import { updateRollingHash } from '../structs/inbox_message.js';
253
298
  }
254
299
  /** Creates mock InboxContract that reads from this fake state. */ createMockInboxContract(_publicClient) {
255
300
  const mockInbox = mock();
256
- mockInbox.getState.mockImplementation(()=>Promise.resolve({
257
- messagesRollingHash: this.messagesRollingHash,
258
- totalMessagesInserted: BigInt(this.messages.length),
259
- treeInProgress: 0n
260
- }));
301
+ mockInbox.getState.mockImplementation((opts = {})=>{
302
+ // Filter messages visible at the given block number (or all if not specified)
303
+ const blockNumber = opts.blockNumber ?? this.l1BlockNumber;
304
+ const visibleMessages = this.messages.filter((m)=>m.l1BlockNumber <= blockNumber);
305
+ // treeInProgress must be > any sealed checkpoint. On L1, a checkpoint can only be proposed
306
+ // after its messages are sealed, so treeInProgress > checkpointNumber for all published checkpoints.
307
+ const maxFromMessages = visibleMessages.length > 0 ? Math.max(...visibleMessages.map((m)=>Number(m.checkpointNumber))) + 1 : 0;
308
+ const maxFromCheckpoints = this.checkpoints.length > 0 ? Math.max(...this.checkpoints.filter((cp)=>!cp.pruned && cp.l1BlockNumber <= blockNumber).map((cp)=>Number(cp.checkpointNumber)), 0) + 1 : 0;
309
+ const treeInProgress = Math.max(maxFromMessages, maxFromCheckpoints, INITIAL_CHECKPOINT_NUMBER);
310
+ // Compute rolling hash only for visible messages
311
+ const rollingHash = visibleMessages.length > 0 ? visibleMessages[visibleMessages.length - 1].rollingHash : Buffer16.ZERO;
312
+ return Promise.resolve({
313
+ messagesRollingHash: rollingHash,
314
+ totalMessagesInserted: BigInt(visibleMessages.length),
315
+ treeInProgress: BigInt(treeInProgress)
316
+ });
317
+ });
261
318
  // Mock the wrapper methods for fetching message events
262
319
  mockInbox.getMessageSentEvents.mockImplementation((fromBlock, toBlock)=>Promise.resolve(this.getMessageSentLogs(fromBlock, toBlock)));
263
- mockInbox.getMessageSentEventByHash.mockImplementation((hash, fromBlock, toBlock)=>Promise.resolve(this.getMessageSentLogs(fromBlock, toBlock, hash)));
320
+ mockInbox.getMessageSentEventByHash.mockImplementation((msgHash, aroundL1BlockNumber)=>Promise.resolve(this.getMessageSentLogByHash(msgHash, aroundL1BlockNumber)));
264
321
  return mockInbox;
265
322
  }
266
323
  /** Creates mock PublicClient that reads from this fake state. */ createMockPublicClient() {
267
324
  const publicClient = mock();
268
325
  publicClient.getChainId.mockResolvedValue(1);
326
+ // Several consumers (CalldataRetriever, ArchiverL1Synchronizer) derive the EIP-712 signing
327
+ // context from `publicClient.chain.id`. Pin it so it matches `getSignatureContext()` below.
328
+ publicClient.chain = {
329
+ id: 1
330
+ };
269
331
  publicClient.getBlockNumber.mockImplementation(()=>Promise.resolve(this.l1BlockNumber));
270
- // Use async function pattern that existing test uses for getBlock
271
332
  publicClient.getBlock.mockImplementation(async (args = {})=>{
272
- const blockNum = args.blockNumber ?? await publicClient.getBlockNumber();
333
+ let blockNum;
334
+ if (args.blockTag === 'finalized') {
335
+ if (this.finalizedL1BlockNumber === undefined) {
336
+ throw Object.assign(new Error('finalized block not found'), {
337
+ details: 'finalized block not found'
338
+ });
339
+ }
340
+ blockNum = this.finalizedL1BlockNumber;
341
+ } else {
342
+ blockNum = args.blockNumber ?? await publicClient.getBlockNumber();
343
+ }
273
344
  return {
274
345
  number: blockNum,
275
346
  timestamp: BigInt(blockNum) * BigInt(this.config.ethereumSlotDuration) + this.config.l1GenesisTime,
@@ -282,8 +353,8 @@ import { updateRollingHash } from '../structs/inbox_message.js';
282
353
  }
283
354
  /** Creates mock BlobClient that reads from this fake state. */ createMockBlobClient() {
284
355
  const blobClient = mock();
285
- // The blockId is the transaction's blockHash, which we set to the checkpoint's archive root
286
- blobClient.getBlobSidecar.mockImplementation((blockId)=>Promise.resolve(this.checkpoints.find((cpData)=>cpData.checkpoint.archive.root.toString() === blockId)?.blobs ?? []));
356
+ // The blockId is the L1 block hash, which we derive from the L1 block number
357
+ blobClient.getBlobSidecar.mockImplementation((blockId)=>Promise.resolve(this.checkpoints.find((cpData)=>Buffer32.fromBigInt(cpData.l1BlockNumber).toString() === blockId)?.blobs ?? []));
287
358
  blobClient.testSources.mockResolvedValue(undefined);
288
359
  return blobClient;
289
360
  }
@@ -316,10 +387,8 @@ import { updateRollingHash } from '../structs/inbox_message.js';
316
387
  checkpointNumber: cpData.checkpointNumber,
317
388
  archive: cpData.checkpoint.archive.root,
318
389
  versionedBlobHashes: cpData.blobHashes.map((h)=>Buffer.from(h.slice(2), 'hex')),
319
- // These are intentionally undefined to skip hash validation in the archiver
320
- // (validation is skipped when these fields are falsy)
321
- payloadDigest: undefined,
322
- attestationsHash: undefined
390
+ attestationsHash: cpData.attestationsHash,
391
+ payloadDigest: cpData.payloadDigest
323
392
  }
324
393
  }));
325
394
  }
@@ -336,13 +405,38 @@ import { updateRollingHash } from '../structs/inbox_message.js';
336
405
  }
337
406
  }));
338
407
  }
408
+ getMessageSentLogByHash(msgHash, aroundL1BlockNumber) {
409
+ const msg = this.messages.find((msg)=>msg.leaf.toString() === msgHash && msg.l1BlockNumber >= aroundL1BlockNumber - 5n && msg.l1BlockNumber <= aroundL1BlockNumber + 5n);
410
+ if (!msg) {
411
+ return undefined;
412
+ }
413
+ return {
414
+ l1BlockNumber: msg.l1BlockNumber,
415
+ l1BlockHash: Buffer32.fromBigInt(msg.l1BlockNumber),
416
+ l1TransactionHash: `0x${msg.l1BlockNumber.toString(16)}`,
417
+ args: {
418
+ checkpointNumber: msg.checkpointNumber,
419
+ index: msg.index,
420
+ leaf: msg.leaf,
421
+ rollingHash: msg.rollingHash
422
+ }
423
+ };
424
+ }
339
425
  async makeRollupTx(checkpoint, signers) {
340
- const attestations = signers.map((signer)=>makeCheckpointAttestationFromCheckpoint(checkpoint, signer)).map((attestation)=>CommitteeAttestation.fromSignature(attestation.signature)).map((committeeAttestation)=>committeeAttestation.toViem());
426
+ const signatureContext = this.getSignatureContext();
427
+ const consensusPayload = ConsensusPayload.fromCheckpoint(checkpoint, signatureContext);
428
+ const attestationDigest = getHashedSignaturePayloadTypedData(consensusPayload);
429
+ const attestations = signers.map((signer)=>CommitteeAttestation.fromSignature(signer.sign(attestationDigest))).map((committeeAttestation)=>committeeAttestation.toViem());
341
430
  const header = checkpoint.header.toViem();
342
431
  const blobInput = getPrefixedEthBlobCommitments(await getBlobsPerL1Block(checkpoint.toBlobFields()));
343
432
  const archive = toHex(checkpoint.archive.root.toBuffer());
344
- const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations.map((attestation)=>CommitteeAttestation.fromViem(attestation)));
345
- const attestationsAndSignersSignature = makeAndSignCommitteeAttestationsAndSigners(attestationsAndSigners, signers[0]);
433
+ const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations.map((attestation)=>CommitteeAttestation.fromViem(attestation)), signatureContext);
434
+ // Fall back to a random signer when no attesters are provided, so tests that
435
+ // don't care about the proposer identity (e.g. sync tests) still produce a
436
+ // valid-looking signature for the attestationsAndSigners struct.
437
+ const proposerSigner = signers[0] ?? Secp256k1Signer.random();
438
+ const attestationsAndSignersSignature = proposerSigner.sign(getHashedSignaturePayloadTypedData(attestationsAndSigners));
439
+ const packedAttestations = attestationsAndSigners.getPackedAttestations();
346
440
  const rollupInput = encodeFunctionData({
347
441
  abi: RollupAbi,
348
442
  functionName: 'propose',
@@ -354,7 +448,7 @@ import { updateRollingHash } from '../structs/inbox_message.js';
354
448
  feeAssetPriceModifier: 0n
355
449
  }
356
450
  },
357
- attestationsAndSigners.getPackedAttestations(),
451
+ packedAttestations,
358
452
  attestationsAndSigners.getSigners().map((signer)=>signer.toString()),
359
453
  attestationsAndSignersSignature.toViemSignature(),
360
454
  blobInput
@@ -373,12 +467,46 @@ import { updateRollingHash } from '../structs/inbox_message.js';
373
467
  ]
374
468
  ]
375
469
  });
376
- return {
470
+ // Compute attestationsHash (same logic as CalldataRetriever)
471
+ const attestationsHash = Buffer32.fromString(keccak256(encodeAbiParameters([
472
+ this.getCommitteeAttestationsStructDef()
473
+ ], [
474
+ packedAttestations
475
+ ])));
476
+ // Compute payloadDigest (same logic as CalldataRetriever)
477
+ const payloadDigest = getHashedSignaturePayloadTypedData(consensusPayload);
478
+ const tx = {
377
479
  input: multiCallInput,
378
480
  hash: archive,
379
481
  blockHash: archive,
380
482
  to: MULTI_CALL_3_ADDRESS
381
483
  };
484
+ return {
485
+ tx,
486
+ attestationsHash,
487
+ payloadDigest
488
+ };
489
+ }
490
+ getSignatureContext() {
491
+ return {
492
+ chainId: 1,
493
+ rollupAddress: this.config.rollupAddress
494
+ };
495
+ }
496
+ /** Extracts the CommitteeAttestations struct definition from RollupAbi for hash computation. */ getCommitteeAttestationsStructDef() {
497
+ const proposeFunction = RollupAbi.find((item)=>item.type === 'function' && item.name === 'propose');
498
+ if (!proposeFunction) {
499
+ throw new Error('propose function not found in RollupAbi');
500
+ }
501
+ const attestationsParam = proposeFunction.inputs.find((param)=>param.name === '_attestations');
502
+ if (!attestationsParam) {
503
+ throw new Error('_attestations parameter not found in propose function');
504
+ }
505
+ const tupleParam = attestationsParam;
506
+ return {
507
+ type: 'tuple',
508
+ components: tupleParam.components || []
509
+ };
382
510
  }
383
511
  async makeVersionedBlobHashes(checkpoint) {
384
512
  return (await getBlobsPerL1Block(checkpoint.toBlobFields())).map((b)=>`0x${b.getEthVersionedBlobHash().toString('hex')}`);
@@ -16,4 +16,4 @@ export declare class MockL1ToL2MessageSource implements L1ToL2MessageSource {
16
16
  getBlockNumber(): Promise<BlockNumber>;
17
17
  getL2Tips(): Promise<L2Tips>;
18
18
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvbW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFvQyxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5FOztHQUVHO0FBQ0gscUJBQWEsdUJBQXdCLFlBQVcsbUJBQW1CO0lBR3JELE9BQU8sQ0FBQyxXQUFXO0lBRi9CLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBcUM7SUFFbEUsWUFBb0IsV0FBVyxFQUFFLE1BQU0sRUFBSTtJQUVwQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBRXRFO0lBRU0sY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLFFBRXhDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBRW5FO0lBRUQscUJBQXFCLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVyRTtJQUVELGNBQWMseUJBRWI7SUFFRCxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQWMzQjtDQUNGIn0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvbW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFvQyxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5FOztHQUVHO0FBQ0gscUJBQWEsdUJBQXdCLFlBQVcsbUJBQW1CO0lBR3JELE9BQU8sQ0FBQyxXQUFXO0lBRi9CLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBcUM7SUFFbEUsWUFBb0IsV0FBVyxFQUFFLE1BQU0sRUFBSTtJQUVwQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBRXRFO0lBRU0sY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLFFBRXhDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBRW5FO0lBRUQscUJBQXFCLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVyRTtJQUVELGNBQWMseUJBRWI7SUFFRCxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQWUzQjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAoC,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,qBAAqB,CAAqC;IAElE,YAAoB,WAAW,EAAE,MAAM,EAAI;IAEpC,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,QAEtE;IAEM,cAAc,CAAC,WAAW,EAAE,MAAM,QAExC;IAED,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnE;IAED,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAErE;IAED,cAAc,yBAEb;IAED,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAc3B;CACF"}
1
+ {"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAoC,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,qBAAqB,CAAqC;IAElE,YAAoB,WAAW,EAAE,MAAM,EAAI;IAEpC,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,QAEtE;IAEM,cAAc,CAAC,WAAW,EAAE,MAAM,QAExC;IAED,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnE;IAED,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAErE;IAED,cAAc,yBAEb;IAED,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAe3B;CACF"}
@@ -42,7 +42,8 @@ import { Fr } from '@aztec/foundation/curves/bn254';
42
42
  proposed: blockId,
43
43
  checkpointed: tip,
44
44
  proven: tip,
45
- finalized: tip
45
+ finalized: tip,
46
+ proposedCheckpoint: tip
46
47
  });
47
48
  }
48
49
  }
@@ -3,11 +3,11 @@ import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import { EthAddress } from '@aztec/foundation/eth-address';
4
4
  import type { FunctionSelector } from '@aztec/stdlib/abi';
5
5
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
6
- import { type BlockData, BlockHash, CheckpointedL2Block, L2Block, type L2BlockSource, type L2Tips, type ValidateCheckpointResult } from '@aztec/stdlib/block';
7
- import { Checkpoint, type CheckpointData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
6
+ import { type BlockData, type BlockHash, type BlockQuery, type BlocksQuery, type CheckpointQuery, type CheckpointsQuery, L2Block, type L2BlockSource, type L2Tips, type ProposedCheckpointQuery, type ValidateCheckpointResult } from '@aztec/stdlib/block';
7
+ import { Checkpoint, type CheckpointData, type ProposedCheckpointData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
8
8
  import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
9
9
  import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
10
- import { type BlockHeader, TxHash, TxReceipt } from '@aztec/stdlib/tx';
10
+ import { BlockHeader, TxHash, TxReceipt } from '@aztec/stdlib/tx';
11
11
  import type { UInt64 } from '@aztec/stdlib/types';
12
12
  /**
13
13
  * A mocked implementation of L2BlockSource to be used in tests.
@@ -18,15 +18,45 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
18
18
  private provenBlockNumber;
19
19
  private finalizedBlockNumber;
20
20
  private checkpointedBlockNumber;
21
+ private proposedCheckpointBlockNumber;
22
+ private initialHeader;
23
+ private initialHeaderHash;
24
+ private genesisArchiveRoot?;
25
+ private genesisBlock?;
21
26
  private log;
27
+ /** Returns the initial header used to synthesize block 0. */
28
+ getInitialHeader(): BlockHeader;
29
+ /**
30
+ * Sets the initial header used to synthesize block 0. Tests that wire up a real
31
+ * world-state should call this with `worldState.getInitialHeader()` so the L2BlockStream
32
+ * agrees on the genesis hash on both sides. Precomputes and caches the header hash so
33
+ * `getGenesisBlockHash()` can return synchronously.
34
+ */
35
+ setInitialHeader(header: BlockHeader): Promise<void>;
36
+ /**
37
+ * Returns the precomputed hash of the genesis block header. Defaults to the static
38
+ * {@link GENESIS_BLOCK_HEADER_HASH} unless {@link setInitialHeader} has been called with a
39
+ * custom header.
40
+ */
41
+ getGenesisBlockHash(): BlockHash;
42
+ /**
43
+ * Sets the post-genesis archive root used to synthesize block 0. Mirrors the real archiver,
44
+ * whose synthetic block 0 carries `new AppendOnlyTreeSnapshot(genesisArchiveRoot, 1)` rather
45
+ * than `AppendOnlyTreeSnapshot.empty()`. Tests wiring up a real world-state should set this so
46
+ * archive-based block lookups against the mock match production semantics.
47
+ */
48
+ setGenesisArchiveRoot(root: Fr): void;
49
+ private getGenesisBlock;
22
50
  /** Creates blocks grouped into single-block checkpoints. */
23
51
  createBlocks(numBlocks: number): Promise<void>;
52
+ getCheckpointNumber(): Promise<CheckpointNumber>;
24
53
  /** Creates checkpoints, each containing `blocksPerCheckpoint` blocks. */
25
54
  createCheckpoints(numCheckpoints: number, blocksPerCheckpoint?: number): Promise<void>;
26
55
  addProposedBlocks(blocks: L2Block[]): void;
27
56
  removeBlocks(numBlocks: number): void;
28
57
  setProvenBlockNumber(provenBlockNumber: number): void;
29
58
  setFinalizedBlockNumber(finalizedBlockNumber: number): void;
59
+ setProposedCheckpointBlockNumber(blockNumber: number): void;
30
60
  setCheckpointedBlockNumber(checkpointedBlockNumber: number): void;
31
61
  /**
32
62
  * Method to fetch the rollup contract address at the base-layer.
@@ -43,46 +73,17 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
43
73
  * @returns In this mock instance, returns the number of L2 blocks that we've mocked.
44
74
  */
45
75
  getBlockNumber(): Promise<BlockNumber>;
46
- getProvenBlockNumber(): Promise<BlockNumber>;
47
- getCheckpointedL2BlockNumber(): Promise<BlockNumber>;
48
- getFinalizedL2BlockNumber(): Promise<BlockNumber>;
49
- getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
50
- getCheckpointedBlocks(from: BlockNumber, limit: number): Promise<CheckpointedL2Block[]>;
51
- /**
52
- * Gets an l2 block.
53
- * @param number - The block number to return (inclusive).
54
- * @returns The requested L2 block.
55
- */
56
- getBlock(number: number): Promise<L2Block | undefined>;
57
- /**
58
- * Gets an L2 block (new format).
59
- * @param number - The block number to return.
60
- * @returns The requested L2 block.
61
- */
62
- getL2Block(number: BlockNumber): Promise<L2Block | undefined>;
63
- /**
64
- * Gets up to `limit` amount of L2 blocks starting from `from`.
65
- * @param from - Number of the first block to return (inclusive).
66
- * @param limit - The maximum number of blocks to return.
67
- * @returns The requested mocked L2 blocks.
68
- */
69
- getBlocks(from: number, limit: number): Promise<L2Block[]>;
70
- getCheckpoints(from: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
76
+ getBlockNumber(query: BlockQuery): Promise<BlockNumber | undefined>;
77
+ getProposedCheckpointL2BlockNumber(): Promise<BlockNumber>;
78
+ getCheckpoint(query: CheckpointQuery): Promise<PublishedCheckpoint | undefined>;
79
+ getCheckpoints(query: CheckpointsQuery): Promise<PublishedCheckpoint[]>;
71
80
  getCheckpointByArchive(archive: Fr): Promise<Checkpoint | undefined>;
72
- getCheckpointedBlockByHash(blockHash: BlockHash): Promise<CheckpointedL2Block | undefined>;
73
- getCheckpointedBlockByArchive(archive: Fr): Promise<CheckpointedL2Block | undefined>;
74
- getL2BlockByHash(blockHash: BlockHash): Promise<L2Block | undefined>;
75
- getL2BlockByArchive(archive: Fr): Promise<L2Block | undefined>;
76
- getBlockHeaderByHash(blockHash: BlockHash): Promise<BlockHeader | undefined>;
77
- getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
78
- getBlockData(number: BlockNumber): Promise<BlockData | undefined>;
79
- getBlockDataByArchive(archive: Fr): Promise<BlockData | undefined>;
80
- getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
81
- getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]>;
82
- getCheckpointsDataForEpoch(epochNumber: EpochNumber): Promise<CheckpointData[]>;
83
- getCheckpointedBlocksForEpoch(epochNumber: EpochNumber): Promise<CheckpointedL2Block[]>;
81
+ getCheckpointData(query: CheckpointQuery): Promise<CheckpointData | undefined>;
82
+ getCheckpointsData(query: CheckpointsQuery): Promise<CheckpointData[]>;
83
+ private checkpointToData;
84
+ private resolveCheckpointQuery;
85
+ private resolveCheckpointsQuery;
84
86
  getBlocksForSlot(slotNumber: SlotNumber): Promise<L2Block[]>;
85
- getCheckpointedBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]>;
86
87
  /**
87
88
  * Gets a tx effect.
88
89
  * @param txHash - The hash of the tx corresponding to the tx effect.
@@ -101,10 +102,11 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
101
102
  */
102
103
  getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
103
104
  getL2Tips(): Promise<L2Tips>;
104
- getL2EpochNumber(): Promise<EpochNumber>;
105
- getL2SlotNumber(): Promise<SlotNumber>;
105
+ getSyncedL2EpochNumber(): Promise<EpochNumber>;
106
+ getSyncedL2SlotNumber(): Promise<SlotNumber>;
106
107
  isEpochComplete(_epochNumber: EpochNumber): Promise<boolean>;
107
108
  getL1Constants(): Promise<L1RollupConstants>;
109
+ isPruneDueAtSlot(_slot: SlotNumber): Promise<boolean>;
108
110
  getGenesisValues(): Promise<{
109
111
  genesisArchiveRoot: Fr;
110
112
  }>;
@@ -126,15 +128,19 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
126
128
  getDebugFunctionName(_address: AztecAddress, _selector: FunctionSelector): Promise<string | undefined>;
127
129
  registerContractFunctionSignatures(_signatures: string[]): Promise<void>;
128
130
  syncImmediate(): Promise<void>;
131
+ getBlock(query: BlockQuery): Promise<L2Block | undefined>;
132
+ private resolveBlockTag;
133
+ getBlocks(query: BlocksQuery): Promise<L2Block[]>;
134
+ getBlockData(query: BlockQuery): Promise<BlockData | undefined>;
135
+ getBlocksData(query: BlocksQuery): Promise<BlockData[]>;
129
136
  isPendingChainInvalid(): Promise<boolean>;
130
137
  getPendingChainValidationStatus(): Promise<ValidateCheckpointResult>;
138
+ getProposedCheckpointData(_query?: ProposedCheckpointQuery): Promise<ProposedCheckpointData | undefined>;
131
139
  /** Returns checkpoints whose slot falls within the given epoch. */
132
140
  private getCheckpointsInEpoch;
133
141
  /** Creates a mock L1PublishedData for a checkpoint. */
134
142
  private mockL1DataForCheckpoint;
135
- /** Creates a CheckpointedL2Block from a block using stored checkpoint info. */
136
- private toCheckpointedBlock;
137
143
  /** Finds the checkpoint number for a block, or undefined if the block is not in any checkpoint. */
138
144
  private findCheckpointNumberForBlock;
139
145
  }
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDJfYmxvY2tfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyxTQUFTLEVBQ2QsU0FBUyxFQUNULG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsS0FBSyxhQUFhLEVBQ2xCLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBQzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLGNBQWMsRUFBbUIsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNqSCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ILE9BQU8sRUFBMEIsS0FBSyxpQkFBaUIsRUFBd0IsTUFBTSw2QkFBNkIsQ0FBQztBQUduSCxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUNwRyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRDs7R0FFRztBQUNILHFCQUFhLGlCQUFrQixZQUFXLGFBQWEsRUFBRSxrQkFBa0I7SUFDekUs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
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDJfYmxvY2tfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFFWCxVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUNMLEtBQUssU0FBUyxFQUNkLEtBQUssU0FBUyxFQUNkLEtBQUssVUFBVSxFQUVmLEtBQUssV0FBVyxFQUVoQixLQUFLLGVBQWUsRUFDcEIsS0FBSyxnQkFBZ0IsRUFHckIsT0FBTyxFQUNQLEtBQUssYUFBYSxFQUNsQixLQUFLLE1BQU0sRUFDWCxLQUFLLHVCQUF1QixFQUM1QixLQUFLLHdCQUF3QixFQUM5QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxVQUFVLEVBQ1YsS0FBSyxjQUFjLEVBRW5CLEtBQUssc0JBQXNCLEVBQzNCLG1CQUFtQixFQUNwQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkgsT0FBTyxFQUVMLEtBQUssaUJBQWlCLEVBR3ZCLE1BQU0sNkJBQTZCLENBQUM7QUFJckMsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBQy9GLE9BQU8sS0FBSyxF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
@@ -1 +1 @@
1
- {"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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"}