@aztec/archiver 0.0.1-commit.6d3c34e → 0.0.1-commit.7ac86ea28

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 (195) hide show
  1. package/README.md +156 -22
  2. package/dest/archiver.d.ts +139 -0
  3. package/dest/archiver.d.ts.map +1 -0
  4. package/dest/archiver.js +699 -0
  5. package/dest/{archiver/config.d.ts → config.d.ts} +9 -1
  6. package/dest/config.d.ts.map +1 -0
  7. package/dest/{archiver/config.js → config.js} +9 -0
  8. package/dest/errors.d.ts +41 -0
  9. package/dest/errors.d.ts.map +1 -0
  10. package/dest/{archiver/errors.js → errors.js} +8 -0
  11. package/dest/factory.d.ts +9 -7
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +94 -11
  14. package/dest/index.d.ts +11 -4
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +9 -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 +17 -18
  23. package/dest/{archiver/l1 → l1}/calldata_retriever.d.ts +8 -2
  24. package/dest/l1/calldata_retriever.d.ts.map +1 -0
  25. package/dest/{archiver/l1 → l1}/calldata_retriever.js +17 -4
  26. package/dest/l1/data_retrieval.d.ts +89 -0
  27. package/dest/l1/data_retrieval.d.ts.map +1 -0
  28. package/dest/{archiver/l1 → l1}/data_retrieval.js +39 -57
  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 +13 -9
  40. package/dest/modules/data_source_base.d.ts +89 -0
  41. package/dest/modules/data_source_base.d.ts.map +1 -0
  42. package/dest/modules/data_source_base.js +216 -0
  43. package/dest/modules/data_store_updater.d.ts +80 -0
  44. package/dest/modules/data_store_updater.d.ts.map +1 -0
  45. package/dest/modules/data_store_updater.js +323 -0
  46. package/dest/modules/instrumentation.d.ts +39 -0
  47. package/dest/modules/instrumentation.d.ts.map +1 -0
  48. package/dest/{archiver → modules}/instrumentation.js +26 -12
  49. package/dest/modules/l1_synchronizer.d.ts +76 -0
  50. package/dest/modules/l1_synchronizer.d.ts.map +1 -0
  51. package/dest/modules/l1_synchronizer.js +1112 -0
  52. package/dest/{archiver → modules}/validation.d.ts +1 -1
  53. package/dest/modules/validation.d.ts.map +1 -0
  54. package/dest/{archiver → modules}/validation.js +6 -0
  55. package/dest/store/block_store.d.ts +196 -0
  56. package/dest/store/block_store.d.ts.map +1 -0
  57. package/dest/{archiver/kv_archiver_store → store}/block_store.js +207 -60
  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 +354 -0
  65. package/dest/store/kv_archiver_store.d.ts.map +1 -0
  66. package/dest/store/kv_archiver_store.js +464 -0
  67. package/dest/store/l2_tips_cache.d.ts +19 -0
  68. package/dest/store/l2_tips_cache.d.ts.map +1 -0
  69. package/dest/store/l2_tips_cache.js +89 -0
  70. package/dest/store/log_store.d.ts +54 -0
  71. package/dest/store/log_store.d.ts.map +1 -0
  72. package/dest/{archiver/kv_archiver_store → store}/log_store.js +146 -91
  73. package/dest/{archiver/kv_archiver_store → store}/message_store.d.ts +1 -1
  74. package/dest/store/message_store.d.ts.map +1 -0
  75. package/dest/{archiver/structs → structs}/data_retrieval.d.ts +1 -1
  76. package/dest/structs/data_retrieval.d.ts.map +1 -0
  77. package/dest/structs/inbox_message.d.ts +15 -0
  78. package/dest/structs/inbox_message.d.ts.map +1 -0
  79. package/dest/{archiver/structs → structs}/published.d.ts +1 -1
  80. package/dest/structs/published.d.ts.map +1 -0
  81. package/dest/test/fake_l1_state.d.ts +193 -0
  82. package/dest/test/fake_l1_state.d.ts.map +1 -0
  83. package/dest/test/fake_l1_state.js +389 -0
  84. package/dest/test/index.d.ts +2 -1
  85. package/dest/test/index.d.ts.map +1 -1
  86. package/dest/test/index.js +4 -1
  87. package/dest/test/mock_archiver.d.ts +2 -2
  88. package/dest/test/mock_archiver.d.ts.map +1 -1
  89. package/dest/test/mock_archiver.js +3 -3
  90. package/dest/test/mock_l2_block_source.d.ts +35 -17
  91. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  92. package/dest/test/mock_l2_block_source.js +177 -74
  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 +443 -0
  101. package/src/{archiver/config.ts → config.ts} +11 -0
  102. package/src/{archiver/errors.ts → errors.ts} +12 -0
  103. package/src/factory.ts +140 -11
  104. package/src/index.ts +11 -3
  105. package/src/interfaces.ts +9 -0
  106. package/src/{archiver/l1 → l1}/bin/retrieve-calldata.ts +16 -17
  107. package/src/{archiver/l1 → l1}/calldata_retriever.ts +26 -4
  108. package/src/{archiver/l1 → l1}/data_retrieval.ts +60 -74
  109. package/src/{archiver/l1 → l1}/validate_trace.ts +24 -6
  110. package/src/modules/data_source_base.ts +328 -0
  111. package/src/modules/data_store_updater.ts +448 -0
  112. package/src/{archiver → modules}/instrumentation.ts +26 -14
  113. package/src/modules/l1_synchronizer.ts +932 -0
  114. package/src/{archiver → modules}/validation.ts +5 -0
  115. package/src/{archiver/kv_archiver_store → store}/block_store.ts +258 -93
  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/{archiver/kv_archiver_store → store}/kv_archiver_store.ts +267 -38
  119. package/src/store/l2_tips_cache.ts +89 -0
  120. package/src/{archiver/kv_archiver_store → store}/log_store.ts +242 -121
  121. package/src/test/fake_l1_state.ts +607 -0
  122. package/src/test/index.ts +4 -0
  123. package/src/test/mock_archiver.ts +4 -3
  124. package/src/test/mock_l2_block_source.ts +218 -90
  125. package/src/test/mock_structs.ts +269 -8
  126. package/src/test/noop_l1_archiver.ts +109 -0
  127. package/dest/archiver/archiver.d.ts +0 -307
  128. package/dest/archiver/archiver.d.ts.map +0 -1
  129. package/dest/archiver/archiver.js +0 -2102
  130. package/dest/archiver/archiver_store.d.ts +0 -315
  131. package/dest/archiver/archiver_store.d.ts.map +0 -1
  132. package/dest/archiver/archiver_store.js +0 -4
  133. package/dest/archiver/archiver_store_test_suite.d.ts +0 -8
  134. package/dest/archiver/archiver_store_test_suite.d.ts.map +0 -1
  135. package/dest/archiver/archiver_store_test_suite.js +0 -2770
  136. package/dest/archiver/config.d.ts.map +0 -1
  137. package/dest/archiver/errors.d.ts +0 -36
  138. package/dest/archiver/errors.d.ts.map +0 -1
  139. package/dest/archiver/index.d.ts +0 -7
  140. package/dest/archiver/index.d.ts.map +0 -1
  141. package/dest/archiver/index.js +0 -4
  142. package/dest/archiver/instrumentation.d.ts +0 -37
  143. package/dest/archiver/instrumentation.d.ts.map +0 -1
  144. package/dest/archiver/kv_archiver_store/block_store.d.ts +0 -164
  145. package/dest/archiver/kv_archiver_store/block_store.d.ts.map +0 -1
  146. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts +0 -18
  147. package/dest/archiver/kv_archiver_store/contract_class_store.d.ts.map +0 -1
  148. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts +0 -24
  149. package/dest/archiver/kv_archiver_store/contract_instance_store.d.ts.map +0 -1
  150. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts +0 -159
  151. package/dest/archiver/kv_archiver_store/kv_archiver_store.d.ts.map +0 -1
  152. package/dest/archiver/kv_archiver_store/kv_archiver_store.js +0 -316
  153. package/dest/archiver/kv_archiver_store/log_store.d.ts +0 -45
  154. package/dest/archiver/kv_archiver_store/log_store.d.ts.map +0 -1
  155. package/dest/archiver/kv_archiver_store/message_store.d.ts.map +0 -1
  156. package/dest/archiver/l1/bin/retrieve-calldata.d.ts.map +0 -1
  157. package/dest/archiver/l1/calldata_retriever.d.ts.map +0 -1
  158. package/dest/archiver/l1/data_retrieval.d.ts +0 -90
  159. package/dest/archiver/l1/data_retrieval.d.ts.map +0 -1
  160. package/dest/archiver/l1/debug_tx.d.ts.map +0 -1
  161. package/dest/archiver/l1/spire_proposer.d.ts.map +0 -1
  162. package/dest/archiver/l1/trace_tx.d.ts.map +0 -1
  163. package/dest/archiver/l1/types.d.ts +0 -12
  164. package/dest/archiver/l1/types.d.ts.map +0 -1
  165. package/dest/archiver/l1/validate_trace.d.ts.map +0 -1
  166. package/dest/archiver/structs/data_retrieval.d.ts.map +0 -1
  167. package/dest/archiver/structs/inbox_message.d.ts +0 -15
  168. package/dest/archiver/structs/inbox_message.d.ts.map +0 -1
  169. package/dest/archiver/structs/published.d.ts.map +0 -1
  170. package/dest/archiver/validation.d.ts.map +0 -1
  171. package/dest/rpc/index.d.ts +0 -9
  172. package/dest/rpc/index.d.ts.map +0 -1
  173. package/dest/rpc/index.js +0 -15
  174. package/src/archiver/archiver.ts +0 -2265
  175. package/src/archiver/archiver_store.ts +0 -380
  176. package/src/archiver/archiver_store_test_suite.ts +0 -2842
  177. package/src/archiver/index.ts +0 -6
  178. package/src/rpc/index.ts +0 -16
  179. /package/dest/{archiver/l1 → l1}/debug_tx.js +0 -0
  180. /package/dest/{archiver/l1 → l1}/spire_proposer.js +0 -0
  181. /package/dest/{archiver/l1 → l1}/trace_tx.js +0 -0
  182. /package/dest/{archiver/l1 → l1}/types.js +0 -0
  183. /package/dest/{archiver/kv_archiver_store → store}/message_store.js +0 -0
  184. /package/dest/{archiver/structs → structs}/data_retrieval.js +0 -0
  185. /package/dest/{archiver/structs → structs}/inbox_message.js +0 -0
  186. /package/dest/{archiver/structs → structs}/published.js +0 -0
  187. /package/src/{archiver/l1 → l1}/README.md +0 -0
  188. /package/src/{archiver/l1 → l1}/debug_tx.ts +0 -0
  189. /package/src/{archiver/l1 → l1}/spire_proposer.ts +0 -0
  190. /package/src/{archiver/l1 → l1}/trace_tx.ts +0 -0
  191. /package/src/{archiver/l1 → l1}/types.ts +0 -0
  192. /package/src/{archiver/kv_archiver_store → store}/message_store.ts +0 -0
  193. /package/src/{archiver/structs → structs}/data_retrieval.ts +0 -0
  194. /package/src/{archiver/structs → structs}/inbox_message.ts +0 -0
  195. /package/src/{archiver/structs → structs}/published.ts +0 -0
@@ -6,33 +6,31 @@ import {
6
6
  decodeCheckpointBlobDataFromBlobs,
7
7
  encodeBlockBlobData,
8
8
  } from '@aztec/blob-lib';
9
- import type { EpochProofPublicInputArgs } from '@aztec/ethereum/contracts';
10
- import type { ViemClient, ViemPublicClient, ViemPublicDebugClient } from '@aztec/ethereum/types';
9
+ import type {
10
+ CheckpointProposedLog,
11
+ EpochProofPublicInputArgs,
12
+ InboxContract,
13
+ MessageSentLog,
14
+ RollupContract,
15
+ } from '@aztec/ethereum/contracts';
16
+ import type { ViemPublicClient, ViemPublicDebugClient } from '@aztec/ethereum/types';
11
17
  import { asyncPool } from '@aztec/foundation/async-pool';
12
- import { CheckpointNumber } from '@aztec/foundation/branded-types';
13
- import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
18
+ import { CheckpointNumber, IndexWithinCheckpoint } from '@aztec/foundation/branded-types';
14
19
  import { Fr } from '@aztec/foundation/curves/bn254';
15
20
  import { EthAddress } from '@aztec/foundation/eth-address';
16
21
  import { type Logger, createLogger } from '@aztec/foundation/log';
17
- import { type InboxAbi, RollupAbi } from '@aztec/l1-artifacts';
18
- import { Body, CommitteeAttestation, L2BlockNew } from '@aztec/stdlib/block';
22
+ import { RollupAbi } from '@aztec/l1-artifacts';
23
+ import { Body, CommitteeAttestation, L2Block } from '@aztec/stdlib/block';
19
24
  import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
20
25
  import { Proof } from '@aztec/stdlib/proofs';
21
26
  import { CheckpointHeader } from '@aztec/stdlib/rollup';
22
27
  import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
23
28
  import { BlockHeader, GlobalVariables, PartialStateReference, StateReference } from '@aztec/stdlib/tx';
24
29
 
25
- import {
26
- type GetContractEventsReturnType,
27
- type GetContractReturnType,
28
- type Hex,
29
- decodeFunctionData,
30
- getAbiItem,
31
- hexToBytes,
32
- } from 'viem';
30
+ import { type Hex, decodeFunctionData, getAbiItem, hexToBytes } from 'viem';
33
31
 
34
32
  import { NoBlobBodiesFoundError } from '../errors.js';
35
- import type { ArchiverInstrumentation } from '../instrumentation.js';
33
+ import type { ArchiverInstrumentation } from '../modules/instrumentation.js';
36
34
  import type { DataRetrieval } from '../structs/data_retrieval.js';
37
35
  import type { InboxMessage } from '../structs/inbox_message.js';
38
36
  import { CalldataRetriever } from './calldata_retriever.js';
@@ -40,6 +38,7 @@ import { CalldataRetriever } from './calldata_retriever.js';
40
38
  export type RetrievedCheckpoint = {
41
39
  checkpointNumber: CheckpointNumber;
42
40
  archiveRoot: Fr;
41
+ feeAssetPriceModifier: bigint;
43
42
  header: CheckpointHeader;
44
43
  checkpointBlobData: CheckpointBlobData;
45
44
  l1: L1PublishedData;
@@ -51,6 +50,7 @@ export type RetrievedCheckpoint = {
51
50
  export async function retrievedToPublishedCheckpoint({
52
51
  checkpointNumber,
53
52
  archiveRoot,
53
+ feeAssetPriceModifier,
54
54
  header: checkpointHeader,
55
55
  checkpointBlobData,
56
56
  l1,
@@ -71,7 +71,7 @@ export async function retrievedToPublishedCheckpoint({
71
71
  const l1toL2MessageTreeRoot = blocksBlobData[0].l1ToL2MessageRoot!;
72
72
 
73
73
  const spongeBlob = SpongeBlob.init();
74
- const l2Blocks: L2BlockNew[] = [];
74
+ const l2Blocks: L2Block[] = [];
75
75
  for (let i = 0; i < blocksBlobData.length; i++) {
76
76
  const blockBlobData = blocksBlobData[i];
77
77
  const { blockEndMarker, blockEndStateField, lastArchiveRoot, noteHashRoot, nullifierRoot, publicDataRoot } =
@@ -102,7 +102,7 @@ export async function retrievedToPublishedCheckpoint({
102
102
  }),
103
103
  });
104
104
 
105
- const body = Body.fromTxBlobData(checkpointBlobData.blocks[0].txs);
105
+ const body = Body.fromTxBlobData(blockBlobData.txs);
106
106
 
107
107
  const blobFields = encodeBlockBlobData(blockBlobData);
108
108
  await spongeBlob.absorb(blobFields);
@@ -121,7 +121,7 @@ export async function retrievedToPublishedCheckpoint({
121
121
 
122
122
  const newArchive = new AppendOnlyTreeSnapshot(newArchiveRoots[i], l2BlockNumber + 1);
123
123
 
124
- l2Blocks.push(new L2BlockNew(newArchive, header, body, checkpointNumber, i));
124
+ l2Blocks.push(new L2Block(newArchive, header, body, checkpointNumber, IndexWithinCheckpoint(i)));
125
125
  }
126
126
 
127
127
  const lastBlock = l2Blocks.at(-1)!;
@@ -130,6 +130,7 @@ export async function retrievedToPublishedCheckpoint({
130
130
  header: checkpointHeader,
131
131
  blocks: l2Blocks,
132
132
  number: checkpointNumber,
133
+ feeAssetPriceModifier: feeAssetPriceModifier,
133
134
  });
134
135
 
135
136
  return PublishedCheckpoint.from({ checkpoint, l1, attestations });
@@ -137,7 +138,7 @@ export async function retrievedToPublishedCheckpoint({
137
138
 
138
139
  /**
139
140
  * Fetches new checkpoints.
140
- * @param rollup - The rollup contract instance.
141
+ * @param rollup - The rollup contract wrapper.
141
142
  * @param publicClient - The viem public client to use for transaction retrieval.
142
143
  * @param debugClient - The viem debug client to use for trace/debug RPC methods (optional).
143
144
  * @param blobClient - The blob client client for fetching blob data.
@@ -150,7 +151,7 @@ export async function retrievedToPublishedCheckpoint({
150
151
  * @returns An array of retrieved checkpoints.
151
152
  */
152
153
  export async function retrieveCheckpointsFromRollup(
153
- rollup: GetContractReturnType<typeof RollupAbi, ViemPublicClient>,
154
+ rollup: RollupContract,
154
155
  publicClient: ViemPublicClient,
155
156
  debugClient: ViemPublicDebugClient,
156
157
  blobClient: BlobClientInterface,
@@ -173,15 +174,7 @@ export async function retrieveCheckpointsFromRollup(
173
174
  if (searchStartBlock > searchEndBlock) {
174
175
  break;
175
176
  }
176
- const checkpointProposedLogs = (
177
- await rollup.getEvents.CheckpointProposed(
178
- {},
179
- {
180
- fromBlock: searchStartBlock,
181
- toBlock: searchEndBlock,
182
- },
183
- )
184
- ).filter(log => log.blockNumber! >= searchStartBlock && log.blockNumber! <= searchEndBlock);
177
+ const checkpointProposedLogs = await rollup.getCheckpointProposedEvents(searchStartBlock, searchEndBlock);
185
178
 
186
179
  if (checkpointProposedLogs.length === 0) {
187
180
  break;
@@ -189,19 +182,19 @@ export async function retrieveCheckpointsFromRollup(
189
182
 
190
183
  const lastLog = checkpointProposedLogs.at(-1)!;
191
184
  logger.debug(
192
- `Got ${checkpointProposedLogs.length} processed logs for checkpoints ${checkpointProposedLogs[0].args.checkpointNumber}-${lastLog.args.checkpointNumber} between L1 blocks ${searchStartBlock}-${searchEndBlock}`,
185
+ `Got ${checkpointProposedLogs.length} processed logs for checkpoints ${checkpointProposedLogs[0].args.checkpointNumber}-${lastLog.args.checkpointNumber} between L1 blocks ${searchStartBlock}-${searchEndBlock}`,
193
186
  );
194
187
 
195
188
  if (rollupConstants === undefined) {
196
189
  const [chainId, version, targetCommitteeSize] = await Promise.all([
197
190
  publicClient.getChainId(),
198
- rollup.read.getVersion(),
199
- rollup.read.getTargetCommitteeSize(),
191
+ rollup.getVersion(),
192
+ rollup.getTargetCommitteeSize(),
200
193
  ]);
201
194
  rollupConstants = {
202
195
  chainId: new Fr(chainId),
203
196
  version: new Fr(version),
204
- targetCommitteeSize: Number(targetCommitteeSize),
197
+ targetCommitteeSize,
205
198
  };
206
199
  }
207
200
 
@@ -218,7 +211,7 @@ export async function retrieveCheckpointsFromRollup(
218
211
  isHistoricalSync,
219
212
  );
220
213
  retrievedCheckpoints.push(...newCheckpoints);
221
- searchStartBlock = lastLog.blockNumber! + 1n;
214
+ searchStartBlock = lastLog.l1BlockNumber + 1n;
222
215
  } while (searchStartBlock <= searchEndBlock);
223
216
 
224
217
  // The asyncPool from processCheckpointProposedLogs will not necessarily return the checkpoints in order, so we sort them before returning.
@@ -227,7 +220,7 @@ export async function retrieveCheckpointsFromRollup(
227
220
 
228
221
  /**
229
222
  * Processes newly received CheckpointProposed logs.
230
- * @param rollup - The rollup contract instance.
223
+ * @param rollup - The rollup contract wrapper.
231
224
  * @param publicClient - The viem public client to use for transaction retrieval.
232
225
  * @param debugClient - The viem debug client to use for trace/debug RPC methods (optional).
233
226
  * @param blobClient - The blob client client for fetching blob data.
@@ -240,11 +233,11 @@ export async function retrieveCheckpointsFromRollup(
240
233
  * @returns An array of retrieved checkpoints.
241
234
  */
242
235
  async function processCheckpointProposedLogs(
243
- rollup: GetContractReturnType<typeof RollupAbi, ViemPublicClient>,
236
+ rollup: RollupContract,
244
237
  publicClient: ViemPublicClient,
245
238
  debugClient: ViemPublicDebugClient,
246
239
  blobClient: BlobClientInterface,
247
- logs: GetContractEventsReturnType<typeof RollupAbi, 'CheckpointProposed'>,
240
+ logs: CheckpointProposedLog[],
248
241
  { chainId, version, targetCommitteeSize }: { chainId: Fr; version: Fr; targetCommitteeSize: number },
249
242
  contractAddresses: {
250
243
  governanceProposerAddress: EthAddress;
@@ -266,21 +259,21 @@ async function processCheckpointProposedLogs(
266
259
  );
267
260
 
268
261
  await asyncPool(10, logs, async log => {
269
- const checkpointNumber = CheckpointNumber.fromBigInt(log.args.checkpointNumber!);
270
- const archive = log.args.archive!;
271
- const archiveFromChain = await rollup.read.archiveAt([BigInt(checkpointNumber)]);
272
- const blobHashes = log.args.versionedBlobHashes!.map(blobHash => Buffer.from(blobHash.slice(2), 'hex'));
262
+ const checkpointNumber = log.args.checkpointNumber;
263
+ const archive = log.args.archive;
264
+ const archiveFromChain = await rollup.archiveAt(checkpointNumber);
265
+ const blobHashes = log.args.versionedBlobHashes;
273
266
 
274
267
  // The value from the event and contract will match only if the checkpoint is in the chain.
275
- if (archive === archiveFromChain) {
268
+ if (archive.equals(archiveFromChain)) {
276
269
  // Build expected hashes object (fields may be undefined for backwards compatibility with older events)
277
270
  const expectedHashes = {
278
- attestationsHash: log.args.attestationsHash,
279
- payloadDigest: log.args.payloadDigest,
271
+ attestationsHash: log.args.attestationsHash?.toString(),
272
+ payloadDigest: log.args.payloadDigest?.toString(),
280
273
  };
281
274
 
282
275
  const checkpoint = await calldataRetriever.getCheckpointFromRollupTx(
283
- log.transactionHash!,
276
+ log.l1TransactionHash,
284
277
  blobHashes,
285
278
  checkpointNumber,
286
279
  expectedHashes,
@@ -295,22 +288,22 @@ async function processCheckpointProposedLogs(
295
288
  );
296
289
 
297
290
  const l1 = new L1PublishedData(
298
- log.blockNumber,
299
- await getL1BlockTime(publicClient, log.blockNumber),
300
- log.blockHash,
291
+ log.l1BlockNumber,
292
+ await getL1BlockTime(publicClient, log.l1BlockNumber),
293
+ log.l1BlockHash.toString(),
301
294
  );
302
295
 
303
296
  retrievedCheckpoints.push({ ...checkpoint, checkpointBlobData, l1, chainId, version });
304
- logger.trace(`Retrieved checkpoint ${checkpointNumber} from L1 tx ${log.transactionHash}`, {
305
- l1BlockNumber: log.blockNumber,
297
+ logger.trace(`Retrieved checkpoint ${checkpointNumber} from L1 tx ${log.l1TransactionHash}`, {
298
+ l1BlockNumber: log.l1BlockNumber,
306
299
  checkpointNumber,
307
300
  archive: archive.toString(),
308
301
  attestations: checkpoint.attestations,
309
302
  });
310
303
  } else {
311
304
  logger.warn(`Ignoring checkpoint ${checkpointNumber} due to archive root mismatch`, {
312
- actual: archive,
313
- expected: archiveFromChain,
305
+ actual: archive.toString(),
306
+ expected: archiveFromChain.toString(),
314
307
  });
315
308
  }
316
309
  });
@@ -355,12 +348,12 @@ export async function getCheckpointBlobDataFromBlobs(
355
348
 
356
349
  /** Given an L1 to L2 message, retrieves its corresponding event from the Inbox within a specific block range. */
357
350
  export async function retrieveL1ToL2Message(
358
- inbox: GetContractReturnType<typeof InboxAbi, ViemClient>,
351
+ inbox: InboxContract,
359
352
  leaf: Fr,
360
353
  fromBlock: bigint,
361
354
  toBlock: bigint,
362
355
  ): Promise<InboxMessage | undefined> {
363
- const logs = await inbox.getEvents.MessageSent({ hash: leaf.toString() }, { fromBlock, toBlock });
356
+ const logs = await inbox.getMessageSentEventByHash(leaf.toString(), fromBlock, toBlock);
364
357
 
365
358
  const messages = mapLogsInboxMessage(logs);
366
359
  return messages.length > 0 ? messages[0] : undefined;
@@ -368,47 +361,40 @@ export async function retrieveL1ToL2Message(
368
361
 
369
362
  /**
370
363
  * Fetch L1 to L2 messages.
371
- * @param publicClient - The viem public client to use for transaction retrieval.
372
- * @param inboxAddress - The address of the inbox contract to fetch messages from.
373
- * @param blockUntilSynced - If true, blocks until the archiver has fully synced.
364
+ * @param inbox - The inbox contract wrapper.
374
365
  * @param searchStartBlock - The block number to use for starting the search.
375
366
  * @param searchEndBlock - The highest block number that we should search up to.
376
367
  * @returns An array of InboxLeaf and next eth block to search from.
377
368
  */
378
369
  export async function retrieveL1ToL2Messages(
379
- inbox: GetContractReturnType<typeof InboxAbi, ViemClient>,
370
+ inbox: InboxContract,
380
371
  searchStartBlock: bigint,
381
372
  searchEndBlock: bigint,
382
373
  ): Promise<InboxMessage[]> {
383
374
  const retrievedL1ToL2Messages: InboxMessage[] = [];
384
375
  while (searchStartBlock <= searchEndBlock) {
385
- const messageSentLogs = (
386
- await inbox.getEvents.MessageSent({}, { fromBlock: searchStartBlock, toBlock: searchEndBlock })
387
- ).filter(log => log.blockNumber! >= searchStartBlock && log.blockNumber! <= searchEndBlock);
376
+ const messageSentLogs = await inbox.getMessageSentEvents(searchStartBlock, searchEndBlock);
388
377
 
389
378
  if (messageSentLogs.length === 0) {
390
379
  break;
391
380
  }
392
381
 
393
382
  retrievedL1ToL2Messages.push(...mapLogsInboxMessage(messageSentLogs));
394
- searchStartBlock = messageSentLogs.at(-1)!.blockNumber + 1n;
383
+ searchStartBlock = messageSentLogs.at(-1)!.l1BlockNumber + 1n;
395
384
  }
396
385
 
397
386
  return retrievedL1ToL2Messages;
398
387
  }
399
388
 
400
- function mapLogsInboxMessage(logs: GetContractEventsReturnType<typeof InboxAbi, 'MessageSent'>): InboxMessage[] {
401
- return logs.map(log => {
402
- const { index, hash, checkpointNumber, rollingHash } = log.args;
403
- return {
404
- index: index!,
405
- leaf: Fr.fromHexString(hash!),
406
- l1BlockNumber: log.blockNumber,
407
- l1BlockHash: Buffer32.fromString(log.blockHash),
408
- checkpointNumber: CheckpointNumber.fromBigInt(checkpointNumber!),
409
- rollingHash: Buffer16.fromString(rollingHash!),
410
- };
411
- });
389
+ function mapLogsInboxMessage(logs: MessageSentLog[]): InboxMessage[] {
390
+ return logs.map(log => ({
391
+ index: log.args.index,
392
+ leaf: log.args.leaf,
393
+ l1BlockNumber: log.l1BlockNumber,
394
+ l1BlockHash: log.l1BlockHash,
395
+ checkpointNumber: log.args.checkpointNumber,
396
+ rollingHash: log.args.rollingHash,
397
+ }));
412
398
  }
413
399
 
414
400
  /** Retrieves L2ProofVerified events from the rollup contract. */
@@ -1,5 +1,5 @@
1
1
  import type { ViemPublicDebugClient } from '@aztec/ethereum/types';
2
- import { createLogger } from '@aztec/foundation/log';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
3
 
4
4
  import type { Hex } from 'viem';
5
5
  import type { ZodSchema } from 'zod';
@@ -7,8 +7,6 @@ import type { ZodSchema } from 'zod';
7
7
  import { callTraceSchema } from './debug_tx.js';
8
8
  import { traceTransactionResponseSchema } from './trace_tx.js';
9
9
 
10
- const logger = createLogger('aztec:archiver:validate_trace');
11
-
12
10
  /**
13
11
  * Helper function to test a trace method with validation
14
12
  *
@@ -17,6 +15,7 @@ const logger = createLogger('aztec:archiver:validate_trace');
17
15
  * @param schema - Zod schema to validate the response
18
16
  * @param method - Name of the RPC method ('debug_traceTransaction' or 'trace_transaction')
19
17
  * @param blockType - Type of block being tested ('recent' or 'old')
18
+ * @param logger - Logger instance
20
19
  * @returns true if the method works and validation passes, false otherwise
21
20
  */
22
21
  async function testTraceMethod(
@@ -25,6 +24,7 @@ async function testTraceMethod(
25
24
  schema: ZodSchema,
26
25
  method: 'debug_traceTransaction' | 'trace_transaction',
27
26
  blockType: string,
27
+ logger: Logger,
28
28
  ): Promise<boolean> {
29
29
  try {
30
30
  // Make request with appropriate params based on method name
@@ -59,9 +59,14 @@ export interface TraceAvailability {
59
59
  * Validates the availability of debug/trace methods on the Ethereum client.
60
60
  *
61
61
  * @param client - The Viem public debug client
62
+ * @param bindings - Optional logger bindings for context
62
63
  * @returns Object indicating which trace methods are available for recent and old blocks
63
64
  */
64
- export async function validateTraceAvailability(client: ViemPublicDebugClient): Promise<TraceAvailability> {
65
+ export async function validateTraceAvailability(
66
+ client: ViemPublicDebugClient,
67
+ bindings?: LoggerBindings,
68
+ ): Promise<TraceAvailability> {
69
+ const logger = createLogger('archiver:validate_trace', bindings);
65
70
  const result: TraceAvailability = {
66
71
  debugTraceRecent: false,
67
72
  traceTransactionRecent: false,
@@ -95,6 +100,7 @@ export async function validateTraceAvailability(client: ViemPublicDebugClient):
95
100
  callTraceSchema,
96
101
  'debug_traceTransaction',
97
102
  'recent',
103
+ logger,
98
104
  );
99
105
 
100
106
  // Test trace_transaction with recent block
@@ -104,6 +110,7 @@ export async function validateTraceAvailability(client: ViemPublicDebugClient):
104
110
  traceTransactionResponseSchema,
105
111
  'trace_transaction',
106
112
  'recent',
113
+ logger,
107
114
  );
108
115
 
109
116
  // Get a block from 512 blocks ago
@@ -132,7 +139,14 @@ export async function validateTraceAvailability(client: ViemPublicDebugClient):
132
139
  const oldTxHash = oldBlock.transactions[0] as Hex;
133
140
 
134
141
  // Test debug_traceTransaction with old block
135
- result.debugTraceOld = await testTraceMethod(client, oldTxHash, callTraceSchema, 'debug_traceTransaction', 'old');
142
+ result.debugTraceOld = await testTraceMethod(
143
+ client,
144
+ oldTxHash,
145
+ callTraceSchema,
146
+ 'debug_traceTransaction',
147
+ 'old',
148
+ logger,
149
+ );
136
150
 
137
151
  // Test trace_transaction with old block
138
152
  result.traceTransactionOld = await testTraceMethod(
@@ -141,6 +155,7 @@ export async function validateTraceAvailability(client: ViemPublicDebugClient):
141
155
  traceTransactionResponseSchema,
142
156
  'trace_transaction',
143
157
  'old',
158
+ logger,
144
159
  );
145
160
  } catch (error) {
146
161
  logger.warn(`Error validating debug_traceTransaction and trace_transaction availability: ${error}`);
@@ -159,15 +174,18 @@ function hasTxs(block: { transactions?: Hex[] }): boolean {
159
174
  *
160
175
  * @param client - The Viem public debug client
161
176
  * @param ethereumAllowNoDebugHosts - If false, throws an error when no trace methods are available
177
+ * @param bindings - Optional logger bindings for context
162
178
  * @throws Error if ethereumAllowNoDebugHosts is false and no trace methods are available
163
179
  */
164
180
  export async function validateAndLogTraceAvailability(
165
181
  client: ViemPublicDebugClient,
166
182
  ethereumAllowNoDebugHosts: boolean,
183
+ bindings?: LoggerBindings,
167
184
  ): Promise<void> {
185
+ const logger = createLogger('archiver:validate_trace', bindings);
168
186
  logger.debug('Validating trace/debug method availability...');
169
187
 
170
- const availability = await validateTraceAvailability(client);
188
+ const availability = await validateTraceAvailability(client, bindings);
171
189
 
172
190
  // Check if we have support for old blocks (either debug or trace)
173
191
  const hasOldBlockSupport = availability.debugTraceOld || availability.traceTransactionOld;