@aztec/archiver 3.0.3 → 4.0.0-devnet.1-patch.0

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 (204) hide show
  1. package/README.md +156 -22
  2. package/dest/archiver.d.ts +136 -0
  3. package/dest/archiver.d.ts.map +1 -0
  4. package/dest/archiver.js +781 -0
  5. package/dest/{archiver/config.d.ts → config.d.ts} +11 -3
  6. package/dest/config.d.ts.map +1 -0
  7. package/dest/{archiver/config.js → config.js} +13 -4
  8. package/dest/errors.d.ts +41 -0
  9. package/dest/errors.d.ts.map +1 -0
  10. package/dest/errors.js +62 -0
  11. package/dest/factory.d.ts +9 -7
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +91 -11
  14. package/dest/index.d.ts +10 -4
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +8 -3
  17. package/dest/interfaces.d.ts +9 -0
  18. package/dest/interfaces.d.ts.map +1 -0
  19. package/dest/interfaces.js +3 -0
  20. package/dest/{archiver/l1 → l1}/bin/retrieve-calldata.d.ts +1 -1
  21. package/dest/l1/bin/retrieve-calldata.d.ts.map +1 -0
  22. package/dest/{archiver/l1 → l1}/bin/retrieve-calldata.js +21 -20
  23. package/dest/{archiver/l1 → l1}/calldata_retriever.d.ts +18 -4
  24. package/dest/l1/calldata_retriever.d.ts.map +1 -0
  25. package/dest/{archiver/l1 → l1}/calldata_retriever.js +75 -7
  26. package/dest/l1/data_retrieval.d.ts +88 -0
  27. package/dest/l1/data_retrieval.d.ts.map +1 -0
  28. package/dest/{archiver/l1 → l1}/data_retrieval.js +61 -67
  29. package/dest/{archiver/l1 → l1}/debug_tx.d.ts +1 -1
  30. package/dest/l1/debug_tx.d.ts.map +1 -0
  31. package/dest/{archiver/l1 → l1}/spire_proposer.d.ts +1 -1
  32. package/dest/l1/spire_proposer.d.ts.map +1 -0
  33. package/dest/{archiver/l1 → l1}/trace_tx.d.ts +1 -1
  34. package/dest/l1/trace_tx.d.ts.map +1 -0
  35. package/dest/l1/types.d.ts +12 -0
  36. package/dest/l1/types.d.ts.map +1 -0
  37. package/dest/{archiver/l1 → l1}/validate_trace.d.ts +6 -3
  38. package/dest/l1/validate_trace.d.ts.map +1 -0
  39. package/dest/{archiver/l1 → l1}/validate_trace.js +14 -10
  40. package/dest/modules/data_source_base.d.ts +84 -0
  41. package/dest/modules/data_source_base.d.ts.map +1 -0
  42. package/dest/modules/data_source_base.js +260 -0
  43. package/dest/modules/data_store_updater.d.ts +73 -0
  44. package/dest/modules/data_store_updater.d.ts.map +1 -0
  45. package/dest/modules/data_store_updater.js +302 -0
  46. package/dest/modules/instrumentation.d.ts +37 -0
  47. package/dest/modules/instrumentation.d.ts.map +1 -0
  48. package/dest/{archiver → modules}/instrumentation.js +24 -65
  49. package/dest/modules/l1_synchronizer.d.ts +75 -0
  50. package/dest/modules/l1_synchronizer.d.ts.map +1 -0
  51. package/dest/modules/l1_synchronizer.js +1112 -0
  52. package/dest/modules/validation.d.ts +17 -0
  53. package/dest/modules/validation.d.ts.map +1 -0
  54. package/dest/{archiver → modules}/validation.js +7 -1
  55. package/dest/store/block_store.d.ts +192 -0
  56. package/dest/store/block_store.d.ts.map +1 -0
  57. package/dest/store/block_store.js +721 -0
  58. package/dest/store/contract_class_store.d.ts +18 -0
  59. package/dest/store/contract_class_store.d.ts.map +1 -0
  60. package/dest/{archiver/kv_archiver_store → store}/contract_class_store.js +12 -8
  61. package/dest/store/contract_instance_store.d.ts +24 -0
  62. package/dest/store/contract_instance_store.d.ts.map +1 -0
  63. package/dest/{archiver/kv_archiver_store → store}/contract_instance_store.js +1 -1
  64. package/dest/store/kv_archiver_store.d.ts +340 -0
  65. package/dest/store/kv_archiver_store.d.ts.map +1 -0
  66. package/dest/store/kv_archiver_store.js +446 -0
  67. package/dest/store/log_store.d.ts +54 -0
  68. package/dest/store/log_store.d.ts.map +1 -0
  69. package/dest/store/log_store.js +456 -0
  70. package/dest/{archiver/kv_archiver_store → store}/message_store.d.ts +1 -1
  71. package/dest/store/message_store.d.ts.map +1 -0
  72. package/dest/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
  73. package/dest/structs/data_retrieval.d.ts.map +1 -0
  74. package/dest/structs/inbox_message.d.ts +15 -0
  75. package/dest/structs/inbox_message.d.ts.map +1 -0
  76. package/dest/structs/published.d.ts +2 -0
  77. package/dest/structs/published.d.ts.map +1 -0
  78. package/dest/test/fake_l1_state.d.ts +190 -0
  79. package/dest/test/fake_l1_state.d.ts.map +1 -0
  80. package/dest/test/fake_l1_state.js +383 -0
  81. package/dest/test/index.d.ts +2 -1
  82. package/dest/test/index.d.ts.map +1 -1
  83. package/dest/test/index.js +4 -1
  84. package/dest/test/mock_archiver.d.ts +2 -2
  85. package/dest/test/mock_archiver.d.ts.map +1 -1
  86. package/dest/test/mock_archiver.js +1 -2
  87. package/dest/test/mock_l1_to_l2_message_source.d.ts +2 -2
  88. package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
  89. package/dest/test/mock_l1_to_l2_message_source.js +12 -3
  90. package/dest/test/mock_l2_block_source.d.ts +29 -15
  91. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  92. package/dest/test/mock_l2_block_source.js +173 -66
  93. package/dest/test/mock_structs.d.ts +78 -3
  94. package/dest/test/mock_structs.d.ts.map +1 -1
  95. package/dest/test/mock_structs.js +140 -7
  96. package/dest/test/noop_l1_archiver.d.ts +23 -0
  97. package/dest/test/noop_l1_archiver.d.ts.map +1 -0
  98. package/dest/test/noop_l1_archiver.js +68 -0
  99. package/package.json +16 -17
  100. package/src/archiver.ts +543 -0
  101. package/src/{archiver/config.ts → config.ts} +20 -5
  102. package/src/errors.ts +102 -0
  103. package/src/factory.ts +133 -11
  104. package/src/index.ts +10 -3
  105. package/src/interfaces.ts +9 -0
  106. package/src/{archiver/l1 → l1}/bin/retrieve-calldata.ts +18 -19
  107. package/src/{archiver/l1 → l1}/calldata_retriever.ts +119 -9
  108. package/src/{archiver/l1 → l1}/data_retrieval.ts +91 -87
  109. package/src/{archiver/l1 → l1}/validate_trace.ts +25 -7
  110. package/src/modules/data_source_base.ts +367 -0
  111. package/src/modules/data_store_updater.ts +423 -0
  112. package/src/{archiver → modules}/instrumentation.ts +24 -68
  113. package/src/modules/l1_synchronizer.ts +930 -0
  114. package/src/{archiver → modules}/validation.ts +11 -6
  115. package/src/store/block_store.ts +966 -0
  116. package/src/{archiver/kv_archiver_store → store}/contract_class_store.ts +12 -8
  117. package/src/{archiver/kv_archiver_store → store}/contract_instance_store.ts +1 -1
  118. package/src/store/kv_archiver_store.ts +639 -0
  119. package/src/store/log_store.ts +637 -0
  120. package/src/{archiver/structs → structs}/published.ts +0 -1
  121. package/src/test/fake_l1_state.ts +599 -0
  122. package/src/test/index.ts +4 -0
  123. package/src/test/mock_archiver.ts +2 -2
  124. package/src/test/mock_l1_to_l2_message_source.ts +10 -4
  125. package/src/test/mock_l2_block_source.ts +189 -79
  126. package/src/test/mock_structs.ts +269 -8
  127. package/src/test/noop_l1_archiver.ts +109 -0
  128. package/dest/archiver/archiver.d.ts +0 -284
  129. package/dest/archiver/archiver.d.ts.map +0 -1
  130. package/dest/archiver/archiver.js +0 -1454
  131. package/dest/archiver/archiver_store.d.ts +0 -249
  132. package/dest/archiver/archiver_store.d.ts.map +0 -1
  133. package/dest/archiver/archiver_store.js +0 -4
  134. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  135. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  136. package/dest/archiver/archiver_store_test_suite.js +0 -1273
  137. package/dest/archiver/config.d.ts.map +0 -1
  138. package/dest/archiver/errors.d.ts +0 -12
  139. package/dest/archiver/errors.d.ts.map +0 -1
  140. package/dest/archiver/errors.js +0 -17
  141. package/dest/archiver/index.d.ts +0 -7
  142. package/dest/archiver/index.d.ts.map +0 -1
  143. package/dest/archiver/index.js +0 -4
  144. package/dest/archiver/instrumentation.d.ts +0 -37
  145. package/dest/archiver/instrumentation.d.ts.map +0 -1
  146. package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -125
  147. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  148. package/dest/archiver/kv_archiver_store/block_store.js +0 -371
  149. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
  150. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  151. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
  152. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  153. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -162
  154. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  155. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -288
  156. package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -42
  157. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  158. package/dest/archiver/kv_archiver_store/log_store.js +0 -314
  159. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  160. package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +0 -1
  161. package/dest/archiver/l1/calldata_retriever.d.ts.map +0 -1
  162. package/dest/archiver/l1/data_retrieval.d.ts +0 -87
  163. package/dest/archiver/l1/data_retrieval.d.ts.map +0 -1
  164. package/dest/archiver/l1/debug_tx.d.ts.map +0 -1
  165. package/dest/archiver/l1/spire_proposer.d.ts.map +0 -1
  166. package/dest/archiver/l1/trace_tx.d.ts.map +0 -1
  167. package/dest/archiver/l1/types.d.ts +0 -12
  168. package/dest/archiver/l1/types.d.ts.map +0 -1
  169. package/dest/archiver/l1/validate_trace.d.ts.map +0 -1
  170. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  171. package/dest/archiver/structs/inbox_message.d.ts +0 -15
  172. package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
  173. package/dest/archiver/structs/published.d.ts +0 -3
  174. package/dest/archiver/structs/published.d.ts.map +0 -1
  175. package/dest/archiver/validation.d.ts +0 -17
  176. package/dest/archiver/validation.d.ts.map +0 -1
  177. package/dest/rpc/index.d.ts +0 -9
  178. package/dest/rpc/index.d.ts.map +0 -1
  179. package/dest/rpc/index.js +0 -15
  180. package/src/archiver/archiver.ts +0 -1906
  181. package/src/archiver/archiver_store.ts +0 -302
  182. package/src/archiver/archiver_store_test_suite.ts +0 -1286
  183. package/src/archiver/errors.ts +0 -26
  184. package/src/archiver/index.ts +0 -6
  185. package/src/archiver/kv_archiver_store/block_store.ts +0 -482
  186. package/src/archiver/kv_archiver_store/kv_archiver_store.ts +0 -413
  187. package/src/archiver/kv_archiver_store/log_store.ts +0 -380
  188. package/src/rpc/index.ts +0 -16
  189. /package/dest/{archiver/l1 → l1}/debug_tx.js +0 -0
  190. /package/dest/{archiver/l1 → l1}/spire_proposer.js +0 -0
  191. /package/dest/{archiver/l1 → l1}/trace_tx.js +0 -0
  192. /package/dest/{archiver/l1 → l1}/types.js +0 -0
  193. /package/dest/{archiver/kv_archiver_store → store}/message_store.js +0 -0
  194. /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
  195. /package/dest/{archiver/structs → structs}/inbox_message.js +0 -0
  196. /package/dest/{archiver/structs → structs}/published.js +0 -0
  197. /package/src/{archiver/l1 → l1}/README.md +0 -0
  198. /package/src/{archiver/l1 → l1}/debug_tx.ts +0 -0
  199. /package/src/{archiver/l1 → l1}/spire_proposer.ts +0 -0
  200. /package/src/{archiver/l1 → l1}/trace_tx.ts +0 -0
  201. /package/src/{archiver/l1 → l1}/types.ts +0 -0
  202. /package/src/{archiver/kv_archiver_store → store}/message_store.ts +0 -0
  203. /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
  204. /package/src/{archiver/structs → structs}/inbox_message.ts +0 -0
@@ -3,8 +3,9 @@ import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import { EthAddress } from '@aztec/foundation/eth-address';
4
4
  import { EmpireSlashingProposerAbi, GovernanceProposerAbi, RollupAbi, SlashFactoryAbi, TallySlashingProposerAbi } from '@aztec/l1-artifacts';
5
5
  import { CommitteeAttestation } from '@aztec/stdlib/block';
6
+ import { ConsensusPayload, SignatureDomainSeparator } from '@aztec/stdlib/p2p';
6
7
  import { CheckpointHeader } from '@aztec/stdlib/rollup';
7
- import { decodeFunctionData, hexToBytes, multicall3Abi, toFunctionSelector } from 'viem';
8
+ import { decodeFunctionData, encodeAbiParameters, hexToBytes, keccak256, multicall3Abi, toFunctionSelector } from 'viem';
8
9
  import { getSuccessfulCallsFromDebug } from './debug_tx.js';
9
10
  import { getCallFromSpireProposer } from './spire_proposer.js';
10
11
  import { getSuccessfulCallsFromTrace } from './trace_tx.js';
@@ -34,14 +35,19 @@ import { getSuccessfulCallsFromTrace } from './trace_tx.js';
34
35
  * @param txHash - Hash of the tx that published it.
35
36
  * @param blobHashes - Blob hashes for the checkpoint.
36
37
  * @param checkpointNumber - Checkpoint number.
38
+ * @param expectedHashes - Optional expected hashes from the CheckpointProposed event for validation
37
39
  * @returns Checkpoint header and metadata from the calldata, deserialized
38
- */ async getCheckpointFromRollupTx(txHash, blobHashes, checkpointNumber) {
39
- this.logger.trace(`Fetching checkpoint ${checkpointNumber} from rollup tx ${txHash}`);
40
+ */ async getCheckpointFromRollupTx(txHash, _blobHashes, checkpointNumber, expectedHashes) {
41
+ this.logger.trace(`Fetching checkpoint ${checkpointNumber} from rollup tx ${txHash}`, {
42
+ willValidateHashes: !!expectedHashes.attestationsHash || !!expectedHashes.payloadDigest,
43
+ hasAttestationsHash: !!expectedHashes.attestationsHash,
44
+ hasPayloadDigest: !!expectedHashes.payloadDigest
45
+ });
40
46
  const tx = await this.publicClient.getTransaction({
41
47
  hash: txHash
42
48
  });
43
49
  const proposeCalldata = await this.getProposeCallData(tx, checkpointNumber);
44
- return this.decodeAndBuildCheckpoint(proposeCalldata, tx.blockHash, checkpointNumber);
50
+ return this.decodeAndBuildCheckpoint(proposeCalldata, tx.blockHash, checkpointNumber, expectedHashes);
45
51
  }
46
52
  /** Gets rollup propose calldata from a transaction */ async getProposeCallData(tx, checkpointNumber) {
47
53
  // Try to decode as multicall3 with validation
@@ -283,12 +289,37 @@ import { getSuccessfulCallsFromTrace } from './trace_tx.js';
283
289
  return calls[0].input;
284
290
  }
285
291
  /**
292
+ * Extracts the CommitteeAttestations struct definition from RollupAbi.
293
+ * Finds the _attestations parameter by name in the propose function.
294
+ * Lazy-loaded to avoid issues during module initialization.
295
+ */ getCommitteeAttestationsStructDef() {
296
+ const proposeFunction = RollupAbi.find((item)=>item.type === 'function' && item.name === 'propose');
297
+ if (!proposeFunction) {
298
+ throw new Error('propose function not found in RollupAbi');
299
+ }
300
+ // Find the _attestations parameter by name, not by index
301
+ const attestationsParam = proposeFunction.inputs.find((param)=>param.name === '_attestations');
302
+ if (!attestationsParam) {
303
+ throw new Error('_attestations parameter not found in propose function');
304
+ }
305
+ if (attestationsParam.type !== 'tuple') {
306
+ throw new Error(`Expected _attestations parameter to be a tuple, got ${attestationsParam.type}`);
307
+ }
308
+ // Extract the tuple components (struct fields)
309
+ const tupleParam = attestationsParam;
310
+ return {
311
+ type: 'tuple',
312
+ components: tupleParam.components || []
313
+ };
314
+ }
315
+ /**
286
316
  * Decodes propose calldata and builds the checkpoint header structure.
287
317
  * @param proposeCalldata - The propose function calldata
288
318
  * @param blockHash - The L1 block hash containing this transaction
289
319
  * @param checkpointNumber - The checkpoint number
320
+ * @param expectedHashes - Optional expected hashes from the CheckpointProposed event for validation
290
321
  * @returns The decoded checkpoint header and metadata
291
- */ decodeAndBuildCheckpoint(proposeCalldata, blockHash, checkpointNumber) {
322
+ */ decodeAndBuildCheckpoint(proposeCalldata, blockHash, checkpointNumber, expectedHashes) {
292
323
  const { functionName: rollupFunctionName, args: rollupArgs } = decodeFunctionData({
293
324
  abi: RollupAbi,
294
325
  data: proposeCalldata
@@ -298,6 +329,45 @@ import { getSuccessfulCallsFromTrace } from './trace_tx.js';
298
329
  }
299
330
  const [decodedArgs, packedAttestations, _signers, _attestationsAndSignersSignature, _blobInput] = rollupArgs;
300
331
  const attestations = CommitteeAttestation.fromPacked(packedAttestations, this.targetCommitteeSize);
332
+ const header = CheckpointHeader.fromViem(decodedArgs.header);
333
+ const archiveRoot = new Fr(Buffer.from(hexToBytes(decodedArgs.archive)));
334
+ // Validate attestationsHash if provided (skip for backwards compatibility with older events)
335
+ if (expectedHashes.attestationsHash) {
336
+ // Compute attestationsHash: keccak256(abi.encode(CommitteeAttestations))
337
+ const computedAttestationsHash = keccak256(encodeAbiParameters([
338
+ this.getCommitteeAttestationsStructDef()
339
+ ], [
340
+ packedAttestations
341
+ ]));
342
+ // Compare as buffers to avoid case-sensitivity and string comparison issues
343
+ const computedBuffer = Buffer.from(hexToBytes(computedAttestationsHash));
344
+ const expectedBuffer = Buffer.from(hexToBytes(expectedHashes.attestationsHash));
345
+ if (!computedBuffer.equals(expectedBuffer)) {
346
+ throw new Error(`Attestations hash mismatch for checkpoint ${checkpointNumber}: ` + `computed=${computedAttestationsHash}, expected=${expectedHashes.attestationsHash}`);
347
+ }
348
+ this.logger.trace(`Validated attestationsHash for checkpoint ${checkpointNumber}`, {
349
+ computedAttestationsHash,
350
+ expectedAttestationsHash: expectedHashes.attestationsHash
351
+ });
352
+ }
353
+ // Validate payloadDigest if provided (skip for backwards compatibility with older events)
354
+ if (expectedHashes.payloadDigest) {
355
+ // Use ConsensusPayload to compute the digest - this ensures we match the exact logic
356
+ // used by the network for signing and verification
357
+ const consensusPayload = new ConsensusPayload(header, archiveRoot);
358
+ const payloadToSign = consensusPayload.getPayloadToSign(SignatureDomainSeparator.checkpointAttestation);
359
+ const computedPayloadDigest = keccak256(payloadToSign);
360
+ // Compare as buffers to avoid case-sensitivity and string comparison issues
361
+ const computedBuffer = Buffer.from(hexToBytes(computedPayloadDigest));
362
+ const expectedBuffer = Buffer.from(hexToBytes(expectedHashes.payloadDigest));
363
+ if (!computedBuffer.equals(expectedBuffer)) {
364
+ throw new Error(`Payload digest mismatch for checkpoint ${checkpointNumber}: ` + `computed=${computedPayloadDigest}, expected=${expectedHashes.payloadDigest}`);
365
+ }
366
+ this.logger.trace(`Validated payloadDigest for checkpoint ${checkpointNumber}`, {
367
+ computedPayloadDigest,
368
+ expectedPayloadDigest: expectedHashes.payloadDigest
369
+ });
370
+ }
301
371
  this.logger.trace(`Decoded propose calldata`, {
302
372
  checkpointNumber,
303
373
  archive: decodedArgs.archive,
@@ -307,8 +377,6 @@ import { getSuccessfulCallsFromTrace } from './trace_tx.js';
307
377
  packedAttestations,
308
378
  targetCommitteeSize: this.targetCommitteeSize
309
379
  });
310
- const header = CheckpointHeader.fromViem(decodedArgs.header);
311
- const archiveRoot = new Fr(Buffer.from(hexToBytes(decodedArgs.archive)));
312
380
  return {
313
381
  checkpointNumber,
314
382
  archiveRoot,
@@ -0,0 +1,88 @@
1
+ import type { BlobClientInterface } from '@aztec/blob-client/client';
2
+ import { type CheckpointBlobData } from '@aztec/blob-lib';
3
+ import type { InboxContract, RollupContract } from '@aztec/ethereum/contracts';
4
+ import type { ViemPublicClient, ViemPublicDebugClient } from '@aztec/ethereum/types';
5
+ import { CheckpointNumber } from '@aztec/foundation/branded-types';
6
+ import { Fr } from '@aztec/foundation/curves/bn254';
7
+ import { EthAddress } from '@aztec/foundation/eth-address';
8
+ import { type Logger } from '@aztec/foundation/log';
9
+ import { CommitteeAttestation } from '@aztec/stdlib/block';
10
+ import { L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
11
+ import { Proof } from '@aztec/stdlib/proofs';
12
+ import { CheckpointHeader } from '@aztec/stdlib/rollup';
13
+ import { type Hex } from 'viem';
14
+ import type { ArchiverInstrumentation } from '../modules/instrumentation.js';
15
+ import type { DataRetrieval } from '../structs/data_retrieval.js';
16
+ import type { InboxMessage } from '../structs/inbox_message.js';
17
+ export type RetrievedCheckpoint = {
18
+ checkpointNumber: CheckpointNumber;
19
+ archiveRoot: Fr;
20
+ header: CheckpointHeader;
21
+ checkpointBlobData: CheckpointBlobData;
22
+ l1: L1PublishedData;
23
+ chainId: Fr;
24
+ version: Fr;
25
+ attestations: CommitteeAttestation[];
26
+ };
27
+ export declare function retrievedToPublishedCheckpoint({ checkpointNumber, archiveRoot, header: checkpointHeader, checkpointBlobData, l1, chainId, version, attestations }: RetrievedCheckpoint): Promise<PublishedCheckpoint>;
28
+ /**
29
+ * Fetches new checkpoints.
30
+ * @param rollup - The rollup contract wrapper.
31
+ * @param publicClient - The viem public client to use for transaction retrieval.
32
+ * @param debugClient - The viem debug client to use for trace/debug RPC methods (optional).
33
+ * @param blobClient - The blob client client for fetching blob data.
34
+ * @param searchStartBlock - The block number to use for starting the search.
35
+ * @param searchEndBlock - The highest block number that we should search up to.
36
+ * @param contractAddresses - The contract addresses (governanceProposerAddress, slashFactoryAddress, slashingProposerAddress).
37
+ * @param instrumentation - The archiver instrumentation instance.
38
+ * @param logger - The logger instance.
39
+ * @param isHistoricalSync - Whether this is a historical sync.
40
+ * @returns An array of retrieved checkpoints.
41
+ */
42
+ export declare function retrieveCheckpointsFromRollup(rollup: RollupContract, publicClient: ViemPublicClient, debugClient: ViemPublicDebugClient, blobClient: BlobClientInterface, searchStartBlock: bigint, searchEndBlock: bigint, contractAddresses: {
43
+ governanceProposerAddress: EthAddress;
44
+ slashFactoryAddress?: EthAddress;
45
+ slashingProposerAddress: EthAddress;
46
+ }, instrumentation: ArchiverInstrumentation, logger?: Logger, isHistoricalSync?: boolean): Promise<RetrievedCheckpoint[]>;
47
+ export declare function getL1BlockTime(publicClient: ViemPublicClient, blockNumber: bigint): Promise<bigint>;
48
+ export declare function getCheckpointBlobDataFromBlobs(blobClient: BlobClientInterface, blockHash: string, blobHashes: Buffer<ArrayBufferLike>[], checkpointNumber: CheckpointNumber, logger: Logger, isHistoricalSync: boolean): Promise<CheckpointBlobData>;
49
+ /** Given an L1 to L2 message, retrieves its corresponding event from the Inbox within a specific block range. */
50
+ export declare function retrieveL1ToL2Message(inbox: InboxContract, leaf: Fr, fromBlock: bigint, toBlock: bigint): Promise<InboxMessage | undefined>;
51
+ /**
52
+ * Fetch L1 to L2 messages.
53
+ * @param inbox - The inbox contract wrapper.
54
+ * @param searchStartBlock - The block number to use for starting the search.
55
+ * @param searchEndBlock - The highest block number that we should search up to.
56
+ * @returns An array of InboxLeaf and next eth block to search from.
57
+ */
58
+ export declare function retrieveL1ToL2Messages(inbox: InboxContract, searchStartBlock: bigint, searchEndBlock: bigint): Promise<InboxMessage[]>;
59
+ /** Retrieves L2ProofVerified events from the rollup contract. */
60
+ export declare function retrieveL2ProofVerifiedEvents(publicClient: ViemPublicClient, rollupAddress: EthAddress, searchStartBlock: bigint, searchEndBlock?: bigint): Promise<{
61
+ l1BlockNumber: bigint;
62
+ checkpointNumber: CheckpointNumber;
63
+ proverId: Fr;
64
+ txHash: Hex;
65
+ }[]>;
66
+ /** Retrieve submitted proofs from the rollup contract */
67
+ export declare function retrieveL2ProofsFromRollup(publicClient: ViemPublicClient, rollupAddress: EthAddress, searchStartBlock: bigint, searchEndBlock?: bigint): Promise<DataRetrieval<{
68
+ proof: Proof;
69
+ proverId: Fr;
70
+ checkpointNumber: number;
71
+ txHash: `0x${string}`;
72
+ }>>;
73
+ export type SubmitEpochProof = {
74
+ archiveRoot: Fr;
75
+ proverId: Fr;
76
+ proof: Proof;
77
+ };
78
+ /**
79
+ * Gets epoch proof metadata (archive root and proof) from the calldata of an L1 transaction.
80
+ * Assumes that the block was published from an EOA.
81
+ * TODO: Add retries and error management.
82
+ * @param publicClient - The viem public client to use for transaction retrieval.
83
+ * @param txHash - Hash of the tx that published it.
84
+ * @param expectedProverId - Expected prover ID.
85
+ * @returns Epoch proof metadata from the calldata, deserialized.
86
+ */
87
+ export declare function getProofFromSubmitProofTx(publicClient: ViemPublicClient, txHash: `0x${string}`, expectedProverId: Fr): Promise<SubmitEpochProof>;
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9yZXRyaWV2YWwuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMS9kYXRhX3JldHJpZXZhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFFTCxLQUFLLGtCQUFrQixFQUl4QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sS0FBSyxFQUdWLGFBQWEsRUFFYixjQUFjLEVBQ2YsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBeUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQVEsb0JBQW9CLEVBQVcsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQWMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSXhELE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBOEMsTUFBTSxNQUFNLENBQUM7QUFHNUUsT0FBTyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data_retrieval.d.ts","sourceRoot":"","sources":["../../src/l1/data_retrieval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAEL,KAAK,kBAAkB,EAIxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAGV,aAAa,EAEb,cAAc,EACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAErF,OAAO,EAAE,gBAAgB,EAAyB,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAQ,oBAAoB,EAAW,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAc,eAAe,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIxD,OAAO,EAAE,KAAK,GAAG,EAA8C,MAAM,MAAM,CAAC;AAG5E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE,MAAM,MAAM,mBAAmB,GAAG;IAChC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,WAAW,EAAE,EAAE,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;IACzB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,EAAE,EAAE,eAAe,CAAC;IACpB,OAAO,EAAE,EAAE,CAAC;IACZ,OAAO,EAAE,EAAE,CAAC;IACZ,YAAY,EAAE,oBAAoB,EAAE,CAAC;CACtC,CAAC;AAEF,wBAAsB,8BAA8B,CAAC,EACnD,gBAAgB,EAChB,WAAW,EACX,MAAM,EAAE,gBAAgB,EACxB,kBAAkB,EAClB,EAAE,EACF,OAAO,EACP,OAAO,EACP,YAAY,EACb,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA4EpD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,gBAAgB,EAC9B,WAAW,EAAE,qBAAqB,EAClC,UAAU,EAAE,mBAAmB,EAC/B,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE;IACjB,yBAAyB,EAAE,UAAU,CAAC;IACtC,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,uBAAuB,EAAE,UAAU,CAAC;CACrC,EACD,eAAe,EAAE,uBAAuB,EACxC,MAAM,GAAE,MAAiC,EACzC,gBAAgB,GAAE,OAAe,GAChC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAmDhC;AA+FD,wBAAsB,cAAc,CAAC,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGzG;AAED,wBAAsB,8BAA8B,CAClD,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,EACrC,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAqB7B;AAED,iHAAiH;AACjH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,EAAE,EACR,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAKnC;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,aAAa,EACpB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,YAAY,EAAE,CAAC,CAczB;AAaD,iEAAiE;AACjE,wBAAsB,6BAA6B,CACjD,YAAY,EAAE,gBAAgB,EAC9B,aAAa,EAAE,UAAU,EACzB,gBAAgB,EAAE,MAAM,EACxB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,EAAE,CAAC;IAAC,MAAM,EAAE,GAAG,CAAA;CAAE,EAAE,CAAC,CAerG;AAED,yDAAyD;AACzD,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,gBAAgB,EAC9B,aAAa,EAAE,UAAU,EACzB,gBAAgB,EAAE,MAAM,EACxB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,aAAa,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,EAAE,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAA;CAAE,CAAC,CAAC,CAazG;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,EAAE,CAAC;IAChB,QAAQ,EAAE,EAAE,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,gBAAgB,EAC9B,MAAM,EAAE,KAAK,MAAM,EAAE,EACrB,gBAAgB,EAAE,EAAE,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAmC3B"}
@@ -1,13 +1,12 @@
1
1
  import { BlobDeserializationError, SpongeBlob, decodeCheckpointBlobDataFromBlobs, encodeBlockBlobData } from '@aztec/blob-lib';
2
2
  import { asyncPool } from '@aztec/foundation/async-pool';
3
- import { CheckpointNumber } from '@aztec/foundation/branded-types';
4
- import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
3
+ import { CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
5
4
  import { Fr } from '@aztec/foundation/curves/bn254';
6
5
  import { EthAddress } from '@aztec/foundation/eth-address';
7
6
  import { createLogger } from '@aztec/foundation/log';
8
7
  import { RollupAbi } from '@aztec/l1-artifacts';
9
- import { Body, L2BlockNew } from '@aztec/stdlib/block';
10
- import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
8
+ import { Body, L2Block } from '@aztec/stdlib/block';
9
+ import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
11
10
  import { Proof } from '@aztec/stdlib/proofs';
12
11
  import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
13
12
  import { BlockHeader, GlobalVariables, PartialStateReference, StateReference } from '@aztec/stdlib/tx';
@@ -47,7 +46,7 @@ export async function retrievedToPublishedCheckpoint({ checkpointNumber, archive
47
46
  publicDataTree: new AppendOnlyTreeSnapshot(publicDataRoot, blockEndStateField.publicDataNextAvailableLeafIndex)
48
47
  })
49
48
  });
50
- const body = Body.fromTxBlobData(checkpointBlobData.blocks[0].txs);
49
+ const body = Body.fromTxBlobData(blockBlobData.txs);
51
50
  const blobFields = encodeBlockBlobData(blockBlobData);
52
51
  await spongeBlob.absorb(blobFields);
53
52
  const clonedSpongeBlob = spongeBlob.clone();
@@ -61,7 +60,7 @@ export async function retrievedToPublishedCheckpoint({ checkpointNumber, archive
61
60
  totalManaUsed: new Fr(blockEndStateField.totalManaUsed)
62
61
  });
63
62
  const newArchive = new AppendOnlyTreeSnapshot(newArchiveRoots[i], l2BlockNumber + 1);
64
- l2Blocks.push(new L2BlockNew(newArchive, header, body, checkpointNumber, i));
63
+ l2Blocks.push(new L2Block(newArchive, header, body, checkpointNumber, IndexWithinCheckpoint(i)));
65
64
  }
66
65
  const lastBlock = l2Blocks.at(-1);
67
66
  const checkpoint = Checkpoint.from({
@@ -78,77 +77,83 @@ export async function retrievedToPublishedCheckpoint({ checkpointNumber, archive
78
77
  }
79
78
  /**
80
79
  * Fetches new checkpoints.
80
+ * @param rollup - The rollup contract wrapper.
81
81
  * @param publicClient - The viem public client to use for transaction retrieval.
82
82
  * @param debugClient - The viem debug client to use for trace/debug RPC methods (optional).
83
- * @param rollupAddress - The address of the rollup contract.
83
+ * @param blobClient - The blob client client for fetching blob data.
84
84
  * @param searchStartBlock - The block number to use for starting the search.
85
85
  * @param searchEndBlock - The highest block number that we should search up to.
86
- * @param expectedNextL2BlockNum - The next L2 block number that we expect to find.
87
- * @returns An array of block; as well as the next eth block to search from.
88
- */ export async function retrieveCheckpointsFromRollup(rollup, publicClient, debugClient, blobSinkClient, searchStartBlock, searchEndBlock, contractAddresses, instrumentation, logger = createLogger('archiver')) {
86
+ * @param contractAddresses - The contract addresses (governanceProposerAddress, slashFactoryAddress, slashingProposerAddress).
87
+ * @param instrumentation - The archiver instrumentation instance.
88
+ * @param logger - The logger instance.
89
+ * @param isHistoricalSync - Whether this is a historical sync.
90
+ * @returns An array of retrieved checkpoints.
91
+ */ export async function retrieveCheckpointsFromRollup(rollup, publicClient, debugClient, blobClient, searchStartBlock, searchEndBlock, contractAddresses, instrumentation, logger = createLogger('archiver'), isHistoricalSync = false) {
89
92
  const retrievedCheckpoints = [];
90
93
  let rollupConstants;
91
94
  do {
92
95
  if (searchStartBlock > searchEndBlock) {
93
96
  break;
94
97
  }
95
- const checkpointProposedLogs = (await rollup.getEvents.CheckpointProposed({}, {
96
- fromBlock: searchStartBlock,
97
- toBlock: searchEndBlock
98
- })).filter((log)=>log.blockNumber >= searchStartBlock && log.blockNumber <= searchEndBlock);
98
+ const checkpointProposedLogs = await rollup.getCheckpointProposedEvents(searchStartBlock, searchEndBlock);
99
99
  if (checkpointProposedLogs.length === 0) {
100
100
  break;
101
101
  }
102
102
  const lastLog = checkpointProposedLogs.at(-1);
103
- logger.debug(`Got ${checkpointProposedLogs.length} processed logs for checkpoints ${checkpointProposedLogs[0].args.checkpointNumber}-${lastLog.args.checkpointNumber} between L1 blocks ${searchStartBlock}-${searchEndBlock}`);
103
+ logger.debug(`Got ${checkpointProposedLogs.length} processed logs for checkpoints ${checkpointProposedLogs[0].args.checkpointNumber}-${lastLog.args.checkpointNumber} between L1 blocks ${searchStartBlock}-${searchEndBlock}`);
104
104
  if (rollupConstants === undefined) {
105
105
  const [chainId, version, targetCommitteeSize] = await Promise.all([
106
106
  publicClient.getChainId(),
107
- rollup.read.getVersion(),
108
- rollup.read.getTargetCommitteeSize()
107
+ rollup.getVersion(),
108
+ rollup.getTargetCommitteeSize()
109
109
  ]);
110
110
  rollupConstants = {
111
111
  chainId: new Fr(chainId),
112
112
  version: new Fr(version),
113
- targetCommitteeSize: Number(targetCommitteeSize)
113
+ targetCommitteeSize
114
114
  };
115
115
  }
116
- const newCheckpoints = await processCheckpointProposedLogs(rollup, publicClient, debugClient, blobSinkClient, checkpointProposedLogs, rollupConstants, contractAddresses, instrumentation, logger);
116
+ const newCheckpoints = await processCheckpointProposedLogs(rollup, publicClient, debugClient, blobClient, checkpointProposedLogs, rollupConstants, contractAddresses, instrumentation, logger, isHistoricalSync);
117
117
  retrievedCheckpoints.push(...newCheckpoints);
118
- searchStartBlock = lastLog.blockNumber + 1n;
118
+ searchStartBlock = lastLog.l1BlockNumber + 1n;
119
119
  }while (searchStartBlock <= searchEndBlock)
120
120
  // The asyncPool from processCheckpointProposedLogs will not necessarily return the checkpoints in order, so we sort them before returning.
121
121
  return retrievedCheckpoints.sort((a, b)=>Number(a.l1.blockNumber - b.l1.blockNumber));
122
122
  }
123
123
  /**
124
124
  * Processes newly received CheckpointProposed logs.
125
- * @param rollup - The rollup contract
125
+ * @param rollup - The rollup contract wrapper.
126
126
  * @param publicClient - The viem public client to use for transaction retrieval.
127
127
  * @param debugClient - The viem debug client to use for trace/debug RPC methods (optional).
128
+ * @param blobClient - The blob client client for fetching blob data.
128
129
  * @param logs - CheckpointProposed logs.
129
- * @returns - An array of checkpoints.
130
- */ async function processCheckpointProposedLogs(rollup, publicClient, debugClient, blobSinkClient, logs, { chainId, version, targetCommitteeSize }, contractAddresses, instrumentation, logger) {
130
+ * @param rollupConstants - The rollup constants (chainId, version, targetCommitteeSize).
131
+ * @param contractAddresses - The contract addresses (governanceProposerAddress, slashFactoryAddress, slashingProposerAddress).
132
+ * @param instrumentation - The archiver instrumentation instance.
133
+ * @param logger - The logger instance.
134
+ * @param isHistoricalSync - Whether this is a historical sync.
135
+ * @returns An array of retrieved checkpoints.
136
+ */ async function processCheckpointProposedLogs(rollup, publicClient, debugClient, blobClient, logs, { chainId, version, targetCommitteeSize }, contractAddresses, instrumentation, logger, isHistoricalSync) {
131
137
  const retrievedCheckpoints = [];
132
138
  const calldataRetriever = new CalldataRetriever(publicClient, debugClient, targetCommitteeSize, instrumentation, logger, {
133
139
  ...contractAddresses,
134
140
  rollupAddress: EthAddress.fromString(rollup.address)
135
141
  });
136
142
  await asyncPool(10, logs, async (log)=>{
137
- const checkpointNumber = CheckpointNumber.fromBigInt(log.args.checkpointNumber);
143
+ const checkpointNumber = log.args.checkpointNumber;
138
144
  const archive = log.args.archive;
139
- const archiveFromChain = await rollup.read.archiveAt([
140
- BigInt(checkpointNumber)
141
- ]);
142
- const blobHashes = log.args.versionedBlobHashes.map((blobHash)=>Buffer.from(blobHash.slice(2), 'hex'));
145
+ const archiveFromChain = await rollup.archiveAt(checkpointNumber);
146
+ const blobHashes = log.args.versionedBlobHashes;
143
147
  // The value from the event and contract will match only if the checkpoint is in the chain.
144
- if (archive === archiveFromChain) {
145
- const checkpoint = await calldataRetriever.getCheckpointFromRollupTx(log.transactionHash, blobHashes, checkpointNumber);
146
- const checkpointBlobData = await getCheckpointBlobDataFromBlobs(blobSinkClient, checkpoint.blockHash, blobHashes, checkpointNumber, logger);
147
- const l1 = {
148
- blockNumber: log.blockNumber,
149
- blockHash: log.blockHash,
150
- timestamp: await getL1BlockTime(publicClient, log.blockNumber)
148
+ if (archive.equals(archiveFromChain)) {
149
+ // Build expected hashes object (fields may be undefined for backwards compatibility with older events)
150
+ const expectedHashes = {
151
+ attestationsHash: log.args.attestationsHash?.toString(),
152
+ payloadDigest: log.args.payloadDigest?.toString()
151
153
  };
154
+ const checkpoint = await calldataRetriever.getCheckpointFromRollupTx(log.l1TransactionHash, blobHashes, checkpointNumber, expectedHashes);
155
+ const checkpointBlobData = await getCheckpointBlobDataFromBlobs(blobClient, checkpoint.blockHash, blobHashes, checkpointNumber, logger, isHistoricalSync);
156
+ const l1 = new L1PublishedData(log.l1BlockNumber, await getL1BlockTime(publicClient, log.l1BlockNumber), log.l1BlockHash.toString());
152
157
  retrievedCheckpoints.push({
153
158
  ...checkpoint,
154
159
  checkpointBlobData,
@@ -156,16 +161,16 @@ export async function retrievedToPublishedCheckpoint({ checkpointNumber, archive
156
161
  chainId,
157
162
  version
158
163
  });
159
- logger.trace(`Retrieved checkpoint ${checkpointNumber} from L1 tx ${log.transactionHash}`, {
160
- l1BlockNumber: log.blockNumber,
164
+ logger.trace(`Retrieved checkpoint ${checkpointNumber} from L1 tx ${log.l1TransactionHash}`, {
165
+ l1BlockNumber: log.l1BlockNumber,
161
166
  checkpointNumber,
162
167
  archive: archive.toString(),
163
168
  attestations: checkpoint.attestations
164
169
  });
165
170
  } else {
166
171
  logger.warn(`Ignoring checkpoint ${checkpointNumber} due to archive root mismatch`, {
167
- actual: archive,
168
- expected: archiveFromChain
172
+ actual: archive.toString(),
173
+ expected: archiveFromChain.toString()
169
174
  });
170
175
  }
171
176
  });
@@ -178,15 +183,17 @@ export async function getL1BlockTime(publicClient, blockNumber) {
178
183
  });
179
184
  return block.timestamp;
180
185
  }
181
- export async function getCheckpointBlobDataFromBlobs(blobSinkClient, blockHash, blobHashes, checkpointNumber, logger) {
182
- const blobBodies = await blobSinkClient.getBlobSidecar(blockHash, blobHashes);
186
+ export async function getCheckpointBlobDataFromBlobs(blobClient, blockHash, blobHashes, checkpointNumber, logger, isHistoricalSync) {
187
+ const blobBodies = await blobClient.getBlobSidecar(blockHash, blobHashes, {
188
+ isHistoricalSync
189
+ });
183
190
  if (blobBodies.length === 0) {
184
191
  throw new NoBlobBodiesFoundError(checkpointNumber);
185
192
  }
186
193
  let checkpointBlobData;
187
194
  try {
188
195
  // Attempt to decode the checkpoint blob data.
189
- checkpointBlobData = decodeCheckpointBlobDataFromBlobs(blobBodies.map((b)=>b.blob));
196
+ checkpointBlobData = decodeCheckpointBlobDataFromBlobs(blobBodies);
190
197
  } catch (err) {
191
198
  if (err instanceof BlobDeserializationError) {
192
199
  logger.fatal(err.message);
@@ -199,50 +206,37 @@ export async function getCheckpointBlobDataFromBlobs(blobSinkClient, blockHash,
199
206
  return checkpointBlobData;
200
207
  }
201
208
  /** Given an L1 to L2 message, retrieves its corresponding event from the Inbox within a specific block range. */ export async function retrieveL1ToL2Message(inbox, leaf, fromBlock, toBlock) {
202
- const logs = await inbox.getEvents.MessageSent({
203
- hash: leaf.toString()
204
- }, {
205
- fromBlock,
206
- toBlock
207
- });
209
+ const logs = await inbox.getMessageSentEventByHash(leaf.toString(), fromBlock, toBlock);
208
210
  const messages = mapLogsInboxMessage(logs);
209
211
  return messages.length > 0 ? messages[0] : undefined;
210
212
  }
211
213
  /**
212
214
  * Fetch L1 to L2 messages.
213
- * @param publicClient - The viem public client to use for transaction retrieval.
214
- * @param inboxAddress - The address of the inbox contract to fetch messages from.
215
- * @param blockUntilSynced - If true, blocks until the archiver has fully synced.
215
+ * @param inbox - The inbox contract wrapper.
216
216
  * @param searchStartBlock - The block number to use for starting the search.
217
217
  * @param searchEndBlock - The highest block number that we should search up to.
218
218
  * @returns An array of InboxLeaf and next eth block to search from.
219
219
  */ export async function retrieveL1ToL2Messages(inbox, searchStartBlock, searchEndBlock) {
220
220
  const retrievedL1ToL2Messages = [];
221
221
  while(searchStartBlock <= searchEndBlock){
222
- const messageSentLogs = (await inbox.getEvents.MessageSent({}, {
223
- fromBlock: searchStartBlock,
224
- toBlock: searchEndBlock
225
- })).filter((log)=>log.blockNumber >= searchStartBlock && log.blockNumber <= searchEndBlock);
222
+ const messageSentLogs = await inbox.getMessageSentEvents(searchStartBlock, searchEndBlock);
226
223
  if (messageSentLogs.length === 0) {
227
224
  break;
228
225
  }
229
226
  retrievedL1ToL2Messages.push(...mapLogsInboxMessage(messageSentLogs));
230
- searchStartBlock = messageSentLogs.at(-1).blockNumber + 1n;
227
+ searchStartBlock = messageSentLogs.at(-1).l1BlockNumber + 1n;
231
228
  }
232
229
  return retrievedL1ToL2Messages;
233
230
  }
234
231
  function mapLogsInboxMessage(logs) {
235
- return logs.map((log)=>{
236
- const { index, hash, checkpointNumber, rollingHash } = log.args;
237
- return {
238
- index: index,
239
- leaf: Fr.fromHexString(hash),
240
- l1BlockNumber: log.blockNumber,
241
- l1BlockHash: Buffer32.fromString(log.blockHash),
242
- checkpointNumber: CheckpointNumber.fromBigInt(checkpointNumber),
243
- rollingHash: Buffer16.fromString(rollingHash)
244
- };
245
- });
232
+ return logs.map((log)=>({
233
+ index: log.args.index,
234
+ leaf: log.args.leaf,
235
+ l1BlockNumber: log.l1BlockNumber,
236
+ l1BlockHash: log.l1BlockHash,
237
+ checkpointNumber: log.args.checkpointNumber,
238
+ rollingHash: log.args.rollingHash
239
+ }));
246
240
  }
247
241
  /** Retrieves L2ProofVerified events from the rollup contract. */ export async function retrieveL2ProofVerifiedEvents(publicClient, rollupAddress, searchStartBlock, searchEndBlock) {
248
242
  const logs = await publicClient.getLogs({
@@ -16,4 +16,4 @@ export declare const callTraceSchema: ZodFor<DebugCallTrace>;
16
16
  * @returns Array of CallInfo objects containing from, gasUsed, input, and value for matching calls
17
17
  */
18
18
  export declare function getSuccessfulCallsFromDebug(client: ViemPublicDebugClient, txHash: Hex, targetAddress: EthAddress, functionSelector: string, logger?: Logger): Promise<CallInfo[]>;
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWdfdHguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcmNoaXZlci9sMS9kZWJ1Z190eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFXLE1BQU0sMkJBQTJCLENBQUM7QUFHakUsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2hDLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyx1RUFBdUU7QUFDdkUsZUFBTyxNQUFNLGVBQWUsRUFBRSxNQUFNLENBQUMsY0FBYyxDQWFsRCxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCx3QkFBc0IsMkJBQTJCLENBQy9DLE1BQU0sRUFBRSxxQkFBcUIsRUFDN0IsTUFBTSxFQUFFLEdBQUcsRUFDWCxhQUFhLEVBQUUsVUFBVSxFQUN6QixnQkFBZ0IsRUFBRSxNQUFNLEVBQ3hCLE1BQU0sQ0FBQyxFQUFFLE1BQU0sR0FDZCxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0F3RHJCIn0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWdfdHguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMS9kZWJ1Z190eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFXLE1BQU0sMkJBQTJCLENBQUM7QUFHakUsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2hDLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyx1RUFBdUU7QUFDdkUsZUFBTyxNQUFNLGVBQWUsRUFBRSxNQUFNLENBQUMsY0FBYyxDQWFsRCxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCx3QkFBc0IsMkJBQTJCLENBQy9DLE1BQU0sRUFBRSxxQkFBcUIsRUFDN0IsTUFBTSxFQUFFLEdBQUcsRUFDWCxhQUFhLEVBQUUsVUFBVSxFQUN6QixnQkFBZ0IsRUFBRSxNQUFNLEVBQ3hCLE1BQU0sQ0FBQyxFQUFFLE1BQU0sR0FDZCxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0F3RHJCIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug_tx.d.ts","sourceRoot":"","sources":["../../src/l1/debug_tx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,2BAA2B,CAAC;AAGjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAGhC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,uEAAuE;AACvE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,cAAc,CAalD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,qBAAqB,EAC7B,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,UAAU,EACzB,gBAAgB,EAAE,MAAM,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,QAAQ,EAAE,CAAC,CAwDrB"}
@@ -67,4 +67,4 @@ export declare function getCallFromSpireProposer(tx: Transaction, publicClient:
67
67
  to: Hex;
68
68
  data: Hex;
69
69
  } | undefined>;
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpcmVfcHJvcG9zZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcmNoaXZlci9sMS9zcGlyZV9wcm9wb3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxXQUFXLEVBQXdDLE1BQU0sTUFBTSxDQUFDO0FBR3hGLGVBQU8sTUFBTSxzQkFBc0IsK0NBQStDLENBQUM7QUFDbkYsZUFBTyxNQUFNLHNDQUFzQywrQ0FBK0MsQ0FBQztBQUluRyxlQUFPLE1BQU0sMkJBQTJCLHNFQUN1QyxDQUFDO0FBR2hGLGVBQU8sTUFBTSxnQkFBZ0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxQm5CLENBQUM7QUFFWDs7Ozs7OztHQU9HO0FBQ0gsd0JBQXNCLHlCQUF5QixDQUM3QyxZQUFZLEVBQUU7SUFBRSxZQUFZLEVBQUUsQ0FBQyxNQUFNLEVBQUU7UUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDO1FBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQTtLQUFFLEtBQUssT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQTtDQUFFLEVBQ2pHLFlBQVksRUFBRSxHQUFHLEVBQ2pCLHNCQUFzQixFQUFFLEdBQUcsRUFDM0IsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUMsT0FBTyxDQUFDLENBaUNsQjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQXNCLHdCQUF3QixDQUM1QyxFQUFFLEVBQUUsV0FBVyxFQUNmLFlBQVksRUFBRTtJQUFFLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRTtRQUFFLE9BQU8sRUFBRSxHQUFHLENBQUM7UUFBQyxJQUFJLEVBQUUsR0FBRyxDQUFBO0tBQUUsS0FBSyxPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFBO0NBQUUsRUFDakcsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUM7SUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQTtDQUFFLEdBQUcsU0FBUyxDQUFDLENBNEQ3QyJ9
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpcmVfcHJvcG9zZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMS9zcGlyZV9wcm9wb3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxXQUFXLEVBQXdDLE1BQU0sTUFBTSxDQUFDO0FBR3hGLGVBQU8sTUFBTSxzQkFBc0IsK0NBQStDLENBQUM7QUFDbkYsZUFBTyxNQUFNLHNDQUFzQywrQ0FBK0MsQ0FBQztBQUluRyxlQUFPLE1BQU0sMkJBQTJCLHNFQUN1QyxDQUFDO0FBR2hGLGVBQU8sTUFBTSxnQkFBZ0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxQm5CLENBQUM7QUFFWDs7Ozs7OztHQU9HO0FBQ0gsd0JBQXNCLHlCQUF5QixDQUM3QyxZQUFZLEVBQUU7SUFBRSxZQUFZLEVBQUUsQ0FBQyxNQUFNLEVBQUU7UUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDO1FBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQTtLQUFFLEtBQUssT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQTtDQUFFLEVBQ2pHLFlBQVksRUFBRSxHQUFHLEVBQ2pCLHNCQUFzQixFQUFFLEdBQUcsRUFDM0IsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUMsT0FBTyxDQUFDLENBaUNsQjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQXNCLHdCQUF3QixDQUM1QyxFQUFFLEVBQUUsV0FBVyxFQUNmLFlBQVksRUFBRTtJQUFFLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRTtRQUFFLE9BQU8sRUFBRSxHQUFHLENBQUM7UUFBQyxJQUFJLEVBQUUsR0FBRyxDQUFBO0tBQUUsS0FBSyxPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFBO0NBQUUsRUFDakcsTUFBTSxFQUFFLE1BQU0sR0FDYixPQUFPLENBQUM7SUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQTtDQUFFLEdBQUcsU0FBUyxDQUFDLENBNEQ3QyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spire_proposer.d.ts","sourceRoot":"","sources":["../../src/l1/spire_proposer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,WAAW,EAAwC,MAAM,MAAM,CAAC;AAGxF,eAAO,MAAM,sBAAsB,+CAA+C,CAAC;AACnF,eAAO,MAAM,sCAAsC,+CAA+C,CAAC;AAInG,eAAO,MAAM,2BAA2B,sEACuC,CAAC;AAGhF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBnB,CAAC;AAEX;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE;IAAE,YAAY,EAAE,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAA;CAAE,EACjG,YAAY,EAAE,GAAG,EACjB,sBAAsB,EAAE,GAAG,EAC3B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAiClB;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,WAAW,EACf,YAAY,EAAE;IAAE,YAAY,EAAE,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAA;CAAE,EACjG,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,EAAE,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,GAAG,SAAS,CAAC,CA4D7C"}
@@ -94,4 +94,4 @@ export declare const traceTransactionResponseSchema: ZodFor<TraceTransaction[]>;
94
94
  */
95
95
  export declare function getSuccessfulCallsFromTrace(client: ViemPublicDebugClient, txHash: Hex, targetAddress: EthAddress, functionSelector: string, logger?: Logger): Promise<CallInfo[]>;
96
96
  export {};
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2VfdHguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcmNoaXZlci9sMS90cmFjZV90eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQVcsTUFBTSwyQkFBMkIsQ0FBQztBQUdqRSxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFrQjNDLDJEQUEyRDtBQUMzRCxlQUFPLE1BQU0sV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFPdEIsQ0FBQztBQUVILDBDQUEwQztBQUMxQyxLQUFLLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxXQUFXLENBQUMsQ0FBQztBQUVwRCwyRUFBMkU7QUFDM0UsZUFBTyxNQUFNLDhCQUE4QixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUF3QixDQUFDO0FBRS9GOzs7Ozs7Ozs7R0FTRztBQUNILHdCQUFzQiwyQkFBMkIsQ0FDL0MsTUFBTSxFQUFFLHFCQUFxQixFQUM3QixNQUFNLEVBQUUsR0FBRyxFQUNYLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLGdCQUFnQixFQUFFLE1BQU0sRUFDeEIsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUNkLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQW9FckIifQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2VfdHguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMS90cmFjZV90eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQVcsTUFBTSwyQkFBMkIsQ0FBQztBQUdqRSxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFrQjNDLDJEQUEyRDtBQUMzRCxlQUFPLE1BQU0sV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFPdEIsQ0FBQztBQUVILDBDQUEwQztBQUMxQyxLQUFLLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxXQUFXLENBQUMsQ0FBQztBQUVwRCwyRUFBMkU7QUFDM0UsZUFBTyxNQUFNLDhCQUE4QixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUF3QixDQUFDO0FBRS9GOzs7Ozs7Ozs7R0FTRztBQUNILHdCQUFzQiwyQkFBMkIsQ0FDL0MsTUFBTSxFQUFFLHFCQUFxQixFQUM3QixNQUFNLEVBQUUsR0FBRyxFQUNYLGFBQWEsRUFBRSxVQUFVLEVBQ3pCLGdCQUFnQixFQUFFLE1BQU0sRUFDeEIsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUNkLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQW9FckIifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace_tx.d.ts","sourceRoot":"","sources":["../../src/l1/trace_tx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,KAAK,MAAM,EAAW,MAAM,2BAA2B,CAAC;AAGjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAkB3C,2DAA2D;AAC3D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOtB,CAAC;AAEH,0CAA0C;AAC1C,KAAK,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEpD,2EAA2E;AAC3E,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAwB,CAAC;AAE/F;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,qBAAqB,EAC7B,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,UAAU,EACzB,gBAAgB,EAAE,MAAM,EACxB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoErB"}
@@ -0,0 +1,12 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import type { Hex } from 'viem';
3
+ /**
4
+ * Information about a matching CALL
5
+ */
6
+ export interface CallInfo {
7
+ from: EthAddress;
8
+ gasUsed?: bigint;
9
+ input: Hex;
10
+ value: bigint;
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhDOztHQUVHO0FBQ0gsTUFBTSxXQUFXLFFBQVE7SUFDdkIsSUFBSSxFQUFFLFVBQVUsQ0FBQztJQUNqQixPQUFPLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDakIsS0FBSyxFQUFFLEdBQUcsQ0FBQztJQUNYLEtBQUssRUFBRSxNQUFNLENBQUM7Q0FDZiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/l1/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -1,4 +1,5 @@
1
1
  import type { ViemPublicDebugClient } from '@aztec/ethereum/types';
2
+ import { type LoggerBindings } from '@aztec/foundation/log';
2
3
  /** Result of trace availability checks */
3
4
  export interface TraceAvailability {
4
5
  /** Whether debug_traceTransaction works for recent blocks */
@@ -14,16 +15,18 @@ export interface TraceAvailability {
14
15
  * Validates the availability of debug/trace methods on the Ethereum client.
15
16
  *
16
17
  * @param client - The Viem public debug client
18
+ * @param bindings - Optional logger bindings for context
17
19
  * @returns Object indicating which trace methods are available for recent and old blocks
18
20
  */
19
- export declare function validateTraceAvailability(client: ViemPublicDebugClient): Promise<TraceAvailability>;
21
+ export declare function validateTraceAvailability(client: ViemPublicDebugClient, bindings?: LoggerBindings): Promise<TraceAvailability>;
20
22
  /**
21
23
  * Validates trace availability and logs appropriate messages based on the results.
22
24
  * Optionally throws an error if no trace methods are available and ethereumAllowNoDebugHosts is false.
23
25
  *
24
26
  * @param client - The Viem public debug client
25
27
  * @param ethereumAllowNoDebugHosts - If false, throws an error when no trace methods are available
28
+ * @param bindings - Optional logger bindings for context
26
29
  * @throws Error if ethereumAllowNoDebugHosts is false and no trace methods are available
27
30
  */
28
- export declare function validateAndLogTraceAvailability(client: ViemPublicDebugClient, ethereumAllowNoDebugHosts: boolean): Promise<void>;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVfdHJhY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcmNoaXZlci9sMS92YWxpZGF0ZV90cmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBNkNuRSwwQ0FBMEM7QUFDMUMsTUFBTSxXQUFXLGlCQUFpQjtJQUNoQyw2REFBNkQ7SUFDN0QsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDO0lBQzFCLHdEQUF3RDtJQUN4RCxzQkFBc0IsRUFBRSxPQUFPLENBQUM7SUFDaEMsMkVBQTJFO0lBQzNFLGFBQWEsRUFBRSxPQUFPLENBQUM7SUFDdkIsc0VBQXNFO0lBQ3RFLG1CQUFtQixFQUFFLE9BQU8sQ0FBQztDQUM5QjtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQXNCLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxxQkFBcUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FzRnpHO0FBTUQ7Ozs7Ozs7R0FPRztBQUNILHdCQUFzQiwrQkFBK0IsQ0FDbkQsTUFBTSxFQUFFLHFCQUFxQixFQUM3Qix5QkFBeUIsRUFBRSxPQUFPLEdBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0E0Q2YifQ==
31
+ export declare function validateAndLogTraceAvailability(client: ViemPublicDebugClient, ethereumAllowNoDebugHosts: boolean, bindings?: LoggerBindings): Promise<void>;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVfdHJhY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sMS92YWxpZGF0ZV90cmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQTRDdkYsMENBQTBDO0FBQzFDLE1BQU0sV0FBVyxpQkFBaUI7SUFDaEMsNkRBQTZEO0lBQzdELGdCQUFnQixFQUFFLE9BQU8sQ0FBQztJQUMxQix3REFBd0Q7SUFDeEQsc0JBQXNCLEVBQUUsT0FBTyxDQUFDO0lBQ2hDLDJFQUEyRTtJQUMzRSxhQUFhLEVBQUUsT0FBTyxDQUFDO0lBQ3ZCLHNFQUFzRTtJQUN0RSxtQkFBbUIsRUFBRSxPQUFPLENBQUM7Q0FDOUI7QUFFRDs7Ozs7O0dBTUc7QUFDSCx3QkFBc0IseUJBQXlCLENBQzdDLE1BQU0sRUFBRSxxQkFBcUIsRUFDN0IsUUFBUSxDQUFDLEVBQUUsY0FBYyxHQUN4QixPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FpRzVCO0FBTUQ7Ozs7Ozs7O0dBUUc7QUFDSCx3QkFBc0IsK0JBQStCLENBQ25ELE1BQU0sRUFBRSxxQkFBcUIsRUFDN0IseUJBQXlCLEVBQUUsT0FBTyxFQUNsQyxRQUFRLENBQUMsRUFBRSxjQUFjLEdBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0E2Q2YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate_trace.d.ts","sourceRoot":"","sources":["../../src/l1/validate_trace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AA4CvF,0CAA0C;AAC1C,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,gBAAgB,EAAE,OAAO,CAAC;IAC1B,wDAAwD;IACxD,sBAAsB,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,aAAa,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAiG5B;AAMD;;;;;;;;GAQG;AACH,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qBAAqB,EAC7B,yBAAyB,EAAE,OAAO,EAClC,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CA6Cf"}