@aztec/archiver 0.0.1-commit.2ed92850 → 0.0.1-commit.3100065

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 (138) hide show
  1. package/README.md +19 -13
  2. package/dest/archiver.d.ts +78 -19
  3. package/dest/archiver.d.ts.map +1 -1
  4. package/dest/archiver.js +338 -157
  5. package/dest/config.d.ts +7 -3
  6. package/dest/config.d.ts.map +1 -1
  7. package/dest/config.js +43 -14
  8. package/dest/errors.d.ts +55 -9
  9. package/dest/errors.d.ts.map +1 -1
  10. package/dest/errors.js +81 -14
  11. package/dest/factory.d.ts +20 -7
  12. package/dest/factory.d.ts.map +1 -1
  13. package/dest/factory.js +90 -41
  14. package/dest/index.d.ts +12 -3
  15. package/dest/index.d.ts.map +1 -1
  16. package/dest/index.js +11 -2
  17. package/dest/l1/bin/retrieve-calldata.js +36 -33
  18. package/dest/l1/calldata_retriever.d.ts +81 -50
  19. package/dest/l1/calldata_retriever.d.ts.map +1 -1
  20. package/dest/l1/calldata_retriever.js +202 -260
  21. package/dest/l1/data_retrieval.d.ts +32 -18
  22. package/dest/l1/data_retrieval.d.ts.map +1 -1
  23. package/dest/l1/data_retrieval.js +43 -48
  24. package/dest/l1/spire_proposer.d.ts +5 -5
  25. package/dest/l1/spire_proposer.d.ts.map +1 -1
  26. package/dest/l1/spire_proposer.js +9 -17
  27. package/dest/l1/trace_tx.d.ts +12 -66
  28. package/dest/l1/trace_tx.d.ts.map +1 -1
  29. package/dest/l1/validate_historical_logs.d.ts +23 -0
  30. package/dest/l1/validate_historical_logs.d.ts.map +1 -0
  31. package/dest/l1/validate_historical_logs.js +108 -0
  32. package/dest/l1/validate_trace.d.ts +6 -3
  33. package/dest/l1/validate_trace.d.ts.map +1 -1
  34. package/dest/l1/validate_trace.js +13 -9
  35. package/dest/modules/contract_data_source_adapter.d.ts +25 -0
  36. package/dest/modules/contract_data_source_adapter.d.ts.map +1 -0
  37. package/dest/modules/contract_data_source_adapter.js +32 -0
  38. package/dest/modules/data_source_base.d.ts +74 -46
  39. package/dest/modules/data_source_base.d.ts.map +1 -1
  40. package/dest/modules/data_source_base.js +252 -190
  41. package/dest/modules/data_store_updater.d.ts +49 -17
  42. package/dest/modules/data_store_updater.d.ts.map +1 -1
  43. package/dest/modules/data_store_updater.js +218 -122
  44. package/dest/modules/instrumentation.d.ts +29 -3
  45. package/dest/modules/instrumentation.d.ts.map +1 -1
  46. package/dest/modules/instrumentation.js +83 -20
  47. package/dest/modules/l1_synchronizer.d.ts +16 -14
  48. package/dest/modules/l1_synchronizer.d.ts.map +1 -1
  49. package/dest/modules/l1_synchronizer.js +490 -222
  50. package/dest/modules/outbox_trees_resolver.d.ts +62 -0
  51. package/dest/modules/outbox_trees_resolver.d.ts.map +1 -0
  52. package/dest/modules/outbox_trees_resolver.js +162 -0
  53. package/dest/modules/validation.d.ts +30 -7
  54. package/dest/modules/validation.d.ts.map +1 -1
  55. package/dest/modules/validation.js +35 -17
  56. package/dest/store/block_store.d.ts +185 -74
  57. package/dest/store/block_store.d.ts.map +1 -1
  58. package/dest/store/block_store.js +761 -276
  59. package/dest/store/contract_class_store.d.ts +17 -4
  60. package/dest/store/contract_class_store.d.ts.map +1 -1
  61. package/dest/store/contract_class_store.js +51 -73
  62. package/dest/store/contract_instance_store.d.ts +28 -1
  63. package/dest/store/contract_instance_store.d.ts.map +1 -1
  64. package/dest/store/contract_instance_store.js +54 -2
  65. package/dest/store/data_stores.d.ts +68 -0
  66. package/dest/store/data_stores.d.ts.map +1 -0
  67. package/dest/store/data_stores.js +54 -0
  68. package/dest/store/function_names_cache.d.ts +17 -0
  69. package/dest/store/function_names_cache.d.ts.map +1 -0
  70. package/dest/store/function_names_cache.js +30 -0
  71. package/dest/store/l2_tips_cache.d.ts +25 -0
  72. package/dest/store/l2_tips_cache.d.ts.map +1 -0
  73. package/dest/store/l2_tips_cache.js +26 -0
  74. package/dest/store/log_store.d.ts +42 -37
  75. package/dest/store/log_store.d.ts.map +1 -1
  76. package/dest/store/log_store.js +262 -388
  77. package/dest/store/log_store_codec.d.ts +78 -0
  78. package/dest/store/log_store_codec.d.ts.map +1 -0
  79. package/dest/store/log_store_codec.js +110 -0
  80. package/dest/store/message_store.d.ts +11 -1
  81. package/dest/store/message_store.d.ts.map +1 -1
  82. package/dest/store/message_store.js +51 -9
  83. package/dest/test/fake_l1_state.d.ts +25 -1
  84. package/dest/test/fake_l1_state.d.ts.map +1 -1
  85. package/dest/test/fake_l1_state.js +166 -32
  86. package/dest/test/index.js +3 -1
  87. package/dest/test/mock_archiver.d.ts +1 -1
  88. package/dest/test/mock_archiver.d.ts.map +1 -1
  89. package/dest/test/mock_archiver.js +3 -2
  90. package/dest/test/mock_l2_block_source.d.ts +62 -48
  91. package/dest/test/mock_l2_block_source.d.ts.map +1 -1
  92. package/dest/test/mock_l2_block_source.js +307 -212
  93. package/dest/test/mock_structs.d.ts +6 -2
  94. package/dest/test/mock_structs.d.ts.map +1 -1
  95. package/dest/test/mock_structs.js +22 -8
  96. package/dest/test/noop_l1_archiver.d.ts +34 -0
  97. package/dest/test/noop_l1_archiver.d.ts.map +1 -0
  98. package/dest/test/noop_l1_archiver.js +88 -0
  99. package/package.json +16 -14
  100. package/src/archiver.ts +444 -182
  101. package/src/config.ts +51 -13
  102. package/src/errors.ts +122 -21
  103. package/src/factory.ts +121 -38
  104. package/src/index.ts +19 -2
  105. package/src/l1/README.md +25 -68
  106. package/src/l1/bin/retrieve-calldata.ts +46 -39
  107. package/src/l1/calldata_retriever.ts +267 -379
  108. package/src/l1/data_retrieval.ts +67 -71
  109. package/src/l1/spire_proposer.ts +7 -15
  110. package/src/l1/validate_historical_logs.ts +140 -0
  111. package/src/l1/validate_trace.ts +24 -6
  112. package/src/modules/contract_data_source_adapter.ts +46 -0
  113. package/src/modules/data_source_base.ts +337 -238
  114. package/src/modules/data_store_updater.ts +259 -154
  115. package/src/modules/instrumentation.ts +85 -20
  116. package/src/modules/l1_synchronizer.ts +660 -271
  117. package/src/modules/outbox_trees_resolver.ts +199 -0
  118. package/src/modules/validation.ts +80 -23
  119. package/src/store/block_store.ts +934 -349
  120. package/src/store/contract_class_store.ts +57 -107
  121. package/src/store/contract_instance_store.ts +68 -5
  122. package/src/store/data_stores.ts +104 -0
  123. package/src/store/function_names_cache.ts +37 -0
  124. package/src/store/l2_tips_cache.ts +35 -0
  125. package/src/store/log_store.ts +304 -499
  126. package/src/store/log_store_codec.ts +143 -0
  127. package/src/store/message_store.ts +60 -10
  128. package/src/structs/inbox_message.ts +1 -1
  129. package/src/test/fake_l1_state.ts +213 -42
  130. package/src/test/index.ts +3 -0
  131. package/src/test/mock_archiver.ts +3 -2
  132. package/src/test/mock_l2_block_source.ts +379 -234
  133. package/src/test/mock_structs.ts +47 -14
  134. package/src/test/noop_l1_archiver.ts +158 -0
  135. package/dest/store/kv_archiver_store.d.ts +0 -340
  136. package/dest/store/kv_archiver_store.d.ts.map +0 -1
  137. package/dest/store/kv_archiver_store.js +0 -447
  138. package/src/store/kv_archiver_store.ts +0 -639
package/dest/factory.js CHANGED
@@ -1,75 +1,88 @@
1
1
  import { EpochCache } from '@aztec/epoch-cache';
2
2
  import { createEthereumChain } from '@aztec/ethereum/chain';
3
- import { InboxContract, RollupContract } from '@aztec/ethereum/contracts';
3
+ import { makeL1HttpTransport } from '@aztec/ethereum/client';
4
+ import { InboxContract, OutboxContract, RollupContract } from '@aztec/ethereum/contracts';
5
+ import { pickL1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
4
6
  import { BlockNumber } from '@aztec/foundation/branded-types';
5
7
  import { Buffer32 } from '@aztec/foundation/buffer';
6
8
  import { merge } from '@aztec/foundation/collection';
7
9
  import { Fr } from '@aztec/foundation/curves/bn254';
8
- import { createLogger } from '@aztec/foundation/log';
9
10
  import { DateProvider } from '@aztec/foundation/timer';
10
11
  import { createStore } from '@aztec/kv-store/lmdb-v2';
11
12
  import { protocolContractNames } from '@aztec/protocol-contracts';
12
13
  import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
14
+ import { getPublishableStandardContracts } from '@aztec/standard-contracts';
13
15
  import { FunctionType, decodeFunctionSignature } from '@aztec/stdlib/abi';
16
+ import { DEFAULT_BLOCK_DURATION_MS } from '@aztec/stdlib/config';
14
17
  import { computePublicBytecodeCommitment } from '@aztec/stdlib/contract';
18
+ import { DEFAULT_ORPHAN_PRUNE_NO_PROPOSAL_TOLERANCE, getDefaultCheckpointProposalSyncGrace } from '@aztec/stdlib/timetable';
15
19
  import { getTelemetryClient } from '@aztec/telemetry-client';
16
20
  import { EventEmitter } from 'events';
17
- import { createPublicClient, fallback, http } from 'viem';
21
+ import { createPublicClient } from 'viem';
18
22
  import { Archiver } from './archiver.js';
19
23
  import { mapArchiverConfig } from './config.js';
20
24
  import { ArchiverInstrumentation } from './modules/instrumentation.js';
21
25
  import { ArchiverL1Synchronizer } from './modules/l1_synchronizer.js';
22
- import { ARCHIVER_DB_VERSION, KVArchiverDataStore } from './store/kv_archiver_store.js';
26
+ import { ARCHIVER_DB_VERSION, createArchiverDataStores } from './store/data_stores.js';
27
+ import { L2TipsCache } from './store/l2_tips_cache.js';
23
28
  export const ARCHIVER_STORE_NAME = 'archiver';
24
- /** Creates an archiver store. */ export async function createArchiverStore(userConfig, l1Constants) {
29
+ /** Creates an archiver store. */ export async function createArchiverStore(userConfig, genesisBlockHash) {
25
30
  const config = {
26
31
  ...userConfig,
27
32
  dataStoreMapSizeKb: userConfig.archiverStoreMapSizeKb ?? userConfig.dataStoreMapSizeKb
28
33
  };
29
- const store = await createStore(ARCHIVER_STORE_NAME, ARCHIVER_DB_VERSION, config, createLogger('archiver:lmdb'));
30
- return new KVArchiverDataStore(store, config.maxLogs, l1Constants);
34
+ const store = await createStore(ARCHIVER_STORE_NAME, ARCHIVER_DB_VERSION, config);
35
+ return createArchiverDataStores(store, genesisBlockHash);
31
36
  }
32
37
  /**
33
38
  * Creates a local archiver.
34
39
  * @param config - The archiver configuration.
35
40
  * @param deps - The archiver dependencies (blobClient, epochCache, dateProvider, telemetry).
36
41
  * @param opts - The options.
42
+ * @param initialHeader - The genesis block header from world-state, used to answer block-0 queries.
43
+ * @param initialBlockHash - Precomputed hash of `initialHeader`. Hoisted to the caller so the archiver
44
+ * can expose `getGenesisBlockHash()` synchronously.
37
45
  * @returns The local archiver.
38
46
  */ export async function createArchiver(config, deps, opts = {
39
47
  blockUntilSync: true
40
- }) {
41
- const archiverStore = await createArchiverStore(config, {
42
- epochDuration: config.aztecEpochDuration
43
- });
48
+ }, initialHeader, initialBlockHash) {
49
+ const archiverStore = await createArchiverStore(config, initialBlockHash);
44
50
  await registerProtocolContracts(archiverStore);
51
+ if (config.testPreloadStandardContracts) {
52
+ await registerStandardContracts(archiverStore);
53
+ }
45
54
  // Create Ethereum clients
46
55
  const chain = createEthereumChain(config.l1RpcUrls, config.l1ChainId);
56
+ const httpTimeout = config.l1HttpTimeoutMS;
47
57
  const publicClient = createPublicClient({
48
58
  chain: chain.chainInfo,
49
- transport: fallback(config.l1RpcUrls.map((url)=>http(url, {
50
- batch: false
51
- }))),
59
+ transport: makeL1HttpTransport(config.l1RpcUrls, {
60
+ timeout: httpTimeout
61
+ }),
52
62
  pollingInterval: config.viemPollingIntervalMS
53
63
  });
54
64
  // Create debug client using debug RPC URLs if available, otherwise fall back to regular RPC URLs
55
65
  const debugRpcUrls = config.l1DebugRpcUrls.length > 0 ? config.l1DebugRpcUrls : config.l1RpcUrls;
56
66
  const debugClient = createPublicClient({
57
67
  chain: chain.chainInfo,
58
- transport: fallback(debugRpcUrls.map((url)=>http(url, {
59
- batch: false
60
- }))),
68
+ transport: makeL1HttpTransport(debugRpcUrls, {
69
+ timeout: httpTimeout
70
+ }),
61
71
  pollingInterval: config.viemPollingIntervalMS
62
72
  });
63
73
  // Create L1 contract instances
64
- const rollup = new RollupContract(publicClient, config.l1Contracts.rollupAddress);
65
- const inbox = new InboxContract(publicClient, config.l1Contracts.inboxAddress);
74
+ const rollup = new RollupContract(publicClient, config.rollupAddress);
75
+ const inbox = new InboxContract(publicClient, config.inboxAddress);
76
+ const outbox = new OutboxContract(publicClient, config.outboxAddress);
66
77
  // Fetch L1 constants from rollup contract
67
- const [l1StartBlock, l1GenesisTime, proofSubmissionEpochs, genesisArchiveRoot, slashingProposerAddress] = await Promise.all([
78
+ const [l1StartBlock, l1GenesisTime, proofSubmissionEpochs, genesisArchiveRoot, slashingProposerAddress, targetCommitteeSize, rollupManaLimit] = await Promise.all([
68
79
  rollup.getL1StartBlock(),
69
80
  rollup.getL1GenesisTime(),
70
81
  rollup.getProofSubmissionEpochs(),
71
82
  rollup.getGenesisArchiveTreeRoot(),
72
- rollup.getSlashingProposerAddress()
83
+ rollup.getSlashingProposerAddress(),
84
+ rollup.getTargetCommitteeSize(),
85
+ rollup.getManaLimit()
73
86
  ]);
74
87
  const l1StartBlockHash = await publicClient.getBlock({
75
88
  blockNumber: l1StartBlock,
@@ -84,50 +97,86 @@ export const ARCHIVER_STORE_NAME = 'archiver';
84
97
  slotDuration,
85
98
  ethereumSlotDuration,
86
99
  proofSubmissionEpochs: Number(proofSubmissionEpochs),
87
- genesisArchiveRoot: Fr.fromString(genesisArchiveRoot.toString())
100
+ targetCommitteeSize,
101
+ genesisArchiveRoot: Fr.fromString(genesisArchiveRoot.toString()),
102
+ rollupManaLimit: Number(rollupManaLimit)
88
103
  };
89
104
  const archiverConfig = merge({
90
105
  pollingIntervalMs: 10_000,
91
106
  batchSize: 100,
92
107
  maxAllowedEthClientDriftSeconds: 300,
93
- ethereumAllowNoDebugHosts: false
108
+ ethereumAllowNoDebugHosts: false,
109
+ skipHistoricalLogsCheck: false,
110
+ checkpointProposalSyncGrace: config.checkpointProposalSyncGraceSeconds ?? getDefaultCheckpointProposalSyncGrace((config.blockDurationMs ?? DEFAULT_BLOCK_DURATION_MS) / 1000),
111
+ orphanPruneNoProposalTolerance: DEFAULT_ORPHAN_PRUNE_NO_PROPOSAL_TOLERANCE,
112
+ skipOrphanProposedBlockPruning: false,
113
+ blockDuration: (config.blockDurationMs ?? DEFAULT_BLOCK_DURATION_MS) / 1000
94
114
  }, mapArchiverConfig(config));
95
- const epochCache = deps.epochCache ?? await EpochCache.create(config.l1Contracts.rollupAddress, config, deps);
115
+ const epochCache = deps.epochCache ?? await EpochCache.create(config.rollupAddress, config, deps);
96
116
  const telemetry = deps.telemetry ?? getTelemetryClient();
97
- const instrumentation = await ArchiverInstrumentation.new(telemetry, ()=>archiverStore.estimateSize());
117
+ const instrumentation = await ArchiverInstrumentation.new(telemetry, ()=>archiverStore.db.estimateSize());
98
118
  // Create the event emitter that will be shared by archiver and synchronizer
99
119
  const events = new EventEmitter();
120
+ // Create L2 tips cache shared by archiver and synchronizer. The genesis block hash is dynamic —
121
+ // it depends on the injected initial header (genesisTimestamp + prefilled state). Hoisted to the
122
+ // caller so we can pass the same value to the archiver and expose it via `getGenesisBlockHash()`.
123
+ const l2TipsCache = new L2TipsCache(archiverStore.blocks, initialBlockHash);
100
124
  // Create the L1 synchronizer
101
- const synchronizer = new ArchiverL1Synchronizer(publicClient, debugClient, rollup, inbox, {
102
- ...config.l1Contracts,
125
+ const synchronizer = new ArchiverL1Synchronizer(publicClient, debugClient, rollup, inbox, archiverStore, archiverConfig, deps.blobClient, epochCache, deps.dateProvider ?? new DateProvider(), instrumentation, l1Constants, events, instrumentation.tracer, l2TipsCache, undefined);
126
+ const archiver = new Archiver(publicClient, debugClient, rollup, outbox, {
127
+ ...pickL1ContractAddresses(config),
103
128
  slashingProposerAddress
104
- }, archiverStore, archiverConfig, deps.blobClient, epochCache, deps.dateProvider ?? new DateProvider(), instrumentation, l1Constants, events, instrumentation.tracer);
105
- const archiver = new Archiver(publicClient, debugClient, rollup, {
106
- ...config.l1Contracts,
107
- slashingProposerAddress
108
- }, archiverStore, archiverConfig, deps.blobClient, instrumentation, l1Constants, synchronizer, events);
129
+ }, archiverStore, archiverConfig, deps.blobClient, instrumentation, l1Constants, synchronizer, events, initialHeader, initialBlockHash, l2TipsCache, deps.dateProvider ?? new DateProvider());
109
130
  await archiver.start(opts.blockUntilSync);
110
131
  return archiver;
111
132
  }
112
- async function registerProtocolContracts(store) {
133
+ /** Registers protocol contracts in the archiver store. Idempotent — skips contracts that already exist (e.g. on node restart). */ export async function registerProtocolContracts(stores) {
113
134
  const blockNumber = 0;
114
135
  for (const name of protocolContractNames){
115
136
  const provider = new BundledProtocolContractsProvider();
116
137
  const contract = await provider.getProtocolContractArtifact(name);
138
+ // Skip if already registered (happens on node restart with a persisted store).
139
+ if (await stores.contractClasses.getContractClass(contract.contractClass.id)) {
140
+ continue;
141
+ }
142
+ const publicBytecodeCommitment = await computePublicBytecodeCommitment(contract.contractClass.packedBytecode);
143
+ const contractClassPublic = {
144
+ ...contract.contractClass,
145
+ publicBytecodeCommitment
146
+ };
147
+ const publicFunctionSignatures = contract.artifact.functions.filter((fn)=>fn.functionType === FunctionType.PUBLIC).map((fn)=>decodeFunctionSignature(fn.name, fn.parameters));
148
+ await stores.functionNames.register(publicFunctionSignatures);
149
+ await stores.contractClasses.addContractClasses([
150
+ contractClassPublic
151
+ ], BlockNumber(blockNumber));
152
+ await stores.contractInstances.addContractInstances([
153
+ contract.instance
154
+ ], BlockNumber(blockNumber));
155
+ }
156
+ }
157
+ /**
158
+ * Preloads the standard contracts (AuthRegistry, PublicChecks, HandshakeRegistry) into the archiver store at block 0,
159
+ * mirroring {@link registerProtocolContracts}. Only invoked for test environments (via `testPreloadStandardContracts`),
160
+ * which also seed the matching registration/deployment nullifiers into the genesis nullifier tree so the store and tree
161
+ * stay consistent. Idempotent — skips contracts that already exist (e.g. on node restart).
162
+ */ export async function registerStandardContracts(stores) {
163
+ const blockNumber = 0;
164
+ for (const contract of (await getPublishableStandardContracts())){
165
+ // Skip if already registered (happens on node restart with a persisted store).
166
+ if (await stores.contractClasses.getContractClass(contract.contractClass.id)) {
167
+ continue;
168
+ }
169
+ const publicBytecodeCommitment = await computePublicBytecodeCommitment(contract.contractClass.packedBytecode);
117
170
  const contractClassPublic = {
118
171
  ...contract.contractClass,
119
- privateFunctions: [],
120
- utilityFunctions: []
172
+ publicBytecodeCommitment
121
173
  };
122
174
  const publicFunctionSignatures = contract.artifact.functions.filter((fn)=>fn.functionType === FunctionType.PUBLIC).map((fn)=>decodeFunctionSignature(fn.name, fn.parameters));
123
- await store.registerContractFunctionSignatures(publicFunctionSignatures);
124
- const bytecodeCommitment = await computePublicBytecodeCommitment(contractClassPublic.packedBytecode);
125
- await store.addContractClasses([
175
+ await stores.functionNames.register(publicFunctionSignatures);
176
+ await stores.contractClasses.addContractClasses([
126
177
  contractClassPublic
127
- ], [
128
- bytecodeCommitment
129
178
  ], BlockNumber(blockNumber));
130
- await store.addContractInstances([
179
+ await stores.contractInstances.addContractInstances([
131
180
  contract.instance
132
181
  ], BlockNumber(blockNumber));
133
182
  }
package/dest/index.d.ts CHANGED
@@ -4,8 +4,17 @@ export * from './archiver.js';
4
4
  export * from './modules/data_source_base.js';
5
5
  export * from './modules/data_store_updater.js';
6
6
  export * from './config.js';
7
+ export * from './errors.js';
7
8
  export { type L1PublishedData } from './structs/published.js';
8
- export { KVArchiverDataStore, ARCHIVER_DB_VERSION } from './store/kv_archiver_store.js';
9
+ export { ARCHIVER_DB_VERSION, type ArchiverDataStores, type ArchiverL1SynchPoint, backupArchiverDataStores, createArchiverDataStores, createContractDataSource, getArchiverSynchPoint, } from './store/data_stores.js';
10
+ export { FunctionNamesCache } from './store/function_names_cache.js';
11
+ export { ArchiverContractDataSourceAdapter } from './modules/contract_data_source_adapter.js';
12
+ export { BlockStore } from './store/block_store.js';
13
+ export { LogStore } from './store/log_store.js';
14
+ export { MessageStore } from './store/message_store.js';
15
+ export { ContractClassStore } from './store/contract_class_store.js';
9
16
  export { ContractInstanceStore } from './store/contract_instance_store.js';
10
- export { retrieveCheckpointsFromRollup, retrieveL2ProofVerifiedEvents } from './l1/data_retrieval.js';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGFBQWEsQ0FBQztBQUU1QixPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQyJ9
17
+ export { L2TipsCache } from './store/l2_tips_cache.js';
18
+ export { retrieveL2ProofVerifiedEvents } from './l1/data_retrieval.js';
19
+ export { CalldataRetriever } from './l1/calldata_retriever.js';
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUU1QixPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssb0JBQW9CLEVBQ3pCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAE3E,OAAO,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,iCAAiC,EAAE,MAAM,2CAA2C,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC"}
package/dest/index.js CHANGED
@@ -4,6 +4,15 @@ export * from './archiver.js';
4
4
  export * from './modules/data_source_base.js';
5
5
  export * from './modules/data_store_updater.js';
6
6
  export * from './config.js';
7
- export { KVArchiverDataStore, ARCHIVER_DB_VERSION } from './store/kv_archiver_store.js';
7
+ export * from './errors.js';
8
+ export { ARCHIVER_DB_VERSION, backupArchiverDataStores, createArchiverDataStores, createContractDataSource, getArchiverSynchPoint } from './store/data_stores.js';
9
+ export { FunctionNamesCache } from './store/function_names_cache.js';
10
+ export { ArchiverContractDataSourceAdapter } from './modules/contract_data_source_adapter.js';
11
+ export { BlockStore } from './store/block_store.js';
12
+ export { LogStore } from './store/log_store.js';
13
+ export { MessageStore } from './store/message_store.js';
14
+ export { ContractClassStore } from './store/contract_class_store.js';
8
15
  export { ContractInstanceStore } from './store/contract_instance_store.js';
9
- export { retrieveCheckpointsFromRollup, retrieveL2ProofVerifiedEvents } from './l1/data_retrieval.js';
16
+ export { L2TipsCache } from './store/l2_tips_cache.js';
17
+ export { retrieveL2ProofVerifiedEvents } from './l1/data_retrieval.js';
18
+ export { CalldataRetriever } from './l1/calldata_retriever.js';
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
2
+ import { CheckpointNumber } from '@aztec/foundation/branded-types';
3
3
  import { EthAddress } from '@aztec/foundation/eth-address';
4
4
  import { createLogger } from '@aztec/foundation/log';
5
- import { createPublicClient, http } from 'viem';
5
+ import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
6
+ import { createPublicClient, decodeEventLog, getAbiItem, http, toEventSelector } from 'viem';
6
7
  import { mainnet } from 'viem/chains';
7
8
  import { CalldataRetriever } from '../calldata_retriever.js';
8
9
  const logger = createLogger('archiver:calldata-test');
@@ -73,49 +74,51 @@ async function main() {
73
74
  throw new Error(`Transaction ${txHash} not found`);
74
75
  }
75
76
  logger.info(`Transaction found in block ${tx.blockNumber}`);
76
- // For simplicity, use zero addresses for optional contract addresses
77
- // In production, these would be fetched from the rollup contract or configuration
78
- const slashingProposerAddress = EthAddress.ZERO;
79
- const governanceProposerAddress = EthAddress.ZERO;
80
- const slashFactoryAddress = undefined;
81
- logger.info('Using zero addresses for governance/slashing (can be configured if needed)');
82
77
  // Create CalldataRetriever
83
- const retriever = new CalldataRetriever(publicClient, publicClient, targetCommitteeSize, undefined, logger, {
84
- rollupAddress,
85
- governanceProposerAddress,
86
- slashingProposerAddress,
87
- slashFactoryAddress
88
- });
89
- // Extract L2 block number from transaction logs
90
- logger.info('Decoding transaction to extract L2 block number...');
78
+ const retriever = new CalldataRetriever(publicClient, publicClient, targetCommitteeSize, undefined, logger, rollupAddress);
79
+ // Extract checkpoint number and hashes from transaction logs
80
+ logger.info('Decoding transaction to extract checkpoint number and hashes...');
91
81
  const receipt = await publicClient.getTransactionReceipt({
92
82
  hash: txHash
93
83
  });
94
- const l2BlockProposedEvent = receipt.logs.find((log)=>{
84
+ // Look for CheckpointProposed event
85
+ const checkpointProposedEventAbi = getAbiItem({
86
+ abi: RollupAbi,
87
+ name: 'CheckpointProposed'
88
+ });
89
+ const checkpointProposedLog = receipt.logs.find((log)=>{
95
90
  try {
96
- // Try to match the L2BlockProposed event
97
- return log.address.toLowerCase() === rollupAddress.toString().toLowerCase() && log.topics[0] === '0x2f1d0e696fa5186494a2f2f89a0e0bcbb15d607f6c5eac4637e07e1e5e7d3c00' // L2BlockProposed event signature
98
- ;
91
+ return log.address.toLowerCase() === rollupAddress.toString().toLowerCase() && log.topics[0] === toEventSelector(checkpointProposedEventAbi);
99
92
  } catch {
100
93
  return false;
101
94
  }
102
95
  });
103
- let l2BlockNumber;
104
- if (l2BlockProposedEvent && l2BlockProposedEvent.topics[1]) {
105
- // L2 block number is typically the first indexed parameter
106
- l2BlockNumber = Number(BigInt(l2BlockProposedEvent.topics[1]));
107
- logger.info(`L2 Block Number (from event): ${l2BlockNumber}`);
108
- } else {
109
- // Fallback: try to extract from transaction data or use a default
110
- logger.warn('Could not extract L2 block number from event, using block number as fallback');
111
- l2BlockNumber = Number(tx.blockNumber);
96
+ if (!checkpointProposedLog || checkpointProposedLog.topics[1] === undefined) {
97
+ throw new Error(`Checkpoint proposed event not found`);
98
+ }
99
+ const checkpointNumber = CheckpointNumber.fromBigInt(BigInt(checkpointProposedLog.topics[1]));
100
+ // Decode the full event to extract attestationsHash and payloadDigest
101
+ const decodedEvent = decodeEventLog({
102
+ abi: RollupAbi,
103
+ data: checkpointProposedLog.data,
104
+ topics: checkpointProposedLog.topics
105
+ });
106
+ const eventArgs = decodedEvent.args;
107
+ if (!eventArgs.attestationsHash || !eventArgs.payloadDigest) {
108
+ throw new Error(`CheckpointProposed event missing attestationsHash or payloadDigest`);
112
109
  }
110
+ const expectedHashes = {
111
+ attestationsHash: eventArgs.attestationsHash,
112
+ payloadDigest: eventArgs.payloadDigest
113
+ };
114
+ logger.info(`Checkpoint Number: ${checkpointNumber}`);
115
+ logger.info(`Attestations Hash: ${expectedHashes.attestationsHash}`);
116
+ logger.info(`Payload Digest: ${expectedHashes.payloadDigest}`);
113
117
  logger.info('');
114
- logger.info('Retrieving block header from rollup transaction...');
118
+ logger.info('Retrieving checkpoint from rollup transaction...');
115
119
  logger.info('');
116
- // For this script, we don't have blob hashes or expected hashes, so pass empty arrays/objects
117
- const result = await retriever.getCheckpointFromRollupTx(txHash, [], CheckpointNumber.fromBlockNumber(BlockNumber(l2BlockNumber)), {});
118
- logger.info(' Successfully retrieved block header!');
120
+ const result = await retriever.getCheckpointFromRollupTx(txHash, [], checkpointNumber, expectedHashes);
121
+ logger.info(' Successfully retrieved block header!');
119
122
  logger.info('');
120
123
  logger.info('Block Header Details:');
121
124
  logger.info('====================');
@@ -1,3 +1,4 @@
1
+ import { type ViemCommitteeAttestations } from '@aztec/ethereum/contracts';
1
2
  import type { ViemPublicClient, ViemPublicDebugClient } from '@aztec/ethereum/types';
2
3
  import { CheckpointNumber } from '@aztec/foundation/branded-types';
3
4
  import { Fr } from '@aztec/foundation/curves/bn254';
@@ -7,9 +8,25 @@ import { CommitteeAttestation } from '@aztec/stdlib/block';
7
8
  import { CheckpointHeader } from '@aztec/stdlib/rollup';
8
9
  import { type Hex, type Transaction } from 'viem';
9
10
  import type { ArchiverInstrumentation } from '../modules/instrumentation.js';
11
+ /** Decoded checkpoint data from a propose calldata. */
12
+ type CheckpointData = {
13
+ checkpointNumber: CheckpointNumber;
14
+ archiveRoot: Fr;
15
+ header: CheckpointHeader;
16
+ attestations: CommitteeAttestation[];
17
+ /**
18
+ * The exact packed `CommitteeAttestations` tuple as it appears in the propose calldata, preserved
19
+ * verbatim (never re-derived from {@link attestations}) so invalidation evidence stays byte-faithful to
20
+ * the on-chain `attestationsHash`.
21
+ */
22
+ verbatimAttestations: ViemCommitteeAttestations;
23
+ blockHash: string;
24
+ feeAssetPriceModifier: bigint;
25
+ };
10
26
  /**
11
27
  * Extracts calldata to the `propose` method of the rollup contract from an L1 transaction
12
- * in order to reconstruct an L2 block header.
28
+ * in order to reconstruct an L2 block header. Uses hash matching against expected hashes
29
+ * from the CheckpointProposed event to verify the correct propose calldata.
13
30
  */
14
31
  export declare class CalldataRetriever {
15
32
  private readonly publicClient;
@@ -17,65 +34,80 @@ export declare class CalldataRetriever {
17
34
  private readonly targetCommitteeSize;
18
35
  private readonly instrumentation;
19
36
  private readonly logger;
20
- /** Pre-computed valid contract calls for validation */
21
- private readonly validContractCalls;
22
37
  private readonly rollupAddress;
23
- constructor(publicClient: ViemPublicClient, debugClient: ViemPublicDebugClient, targetCommitteeSize: number, instrumentation: ArchiverInstrumentation | undefined, logger: Logger, contractAddresses: {
24
- rollupAddress: EthAddress;
25
- governanceProposerAddress: EthAddress;
26
- slashingProposerAddress: EthAddress;
27
- slashFactoryAddress?: EthAddress;
28
- });
38
+ /** Tx hashes we've already logged for trace+debug failure (log once per tx per process). */
39
+ private static readonly traceFailureWarnedTxHashes;
40
+ /** Clears the trace-failure warned set. For testing only. */
41
+ static resetTraceFailureWarnedForTesting(): void;
42
+ constructor(publicClient: ViemPublicClient, debugClient: ViemPublicDebugClient, targetCommitteeSize: number, instrumentation: ArchiverInstrumentation | undefined, logger: Logger, rollupAddress: EthAddress);
43
+ private getSignatureContext;
29
44
  /**
30
45
  * Gets checkpoint header and metadata from the calldata of an L1 transaction.
31
46
  * Tries multicall3 decoding, falls back to trace-based extraction.
32
47
  * @param txHash - Hash of the tx that published it.
33
48
  * @param blobHashes - Blob hashes for the checkpoint.
34
49
  * @param checkpointNumber - Checkpoint number.
35
- * @param expectedHashes - Optional expected hashes from the CheckpointProposed event for validation
50
+ * @param expectedHashes - Expected hashes from the CheckpointProposed event for validation
36
51
  * @returns Checkpoint header and metadata from the calldata, deserialized
37
52
  */
38
53
  getCheckpointFromRollupTx(txHash: `0x${string}`, _blobHashes: Buffer[], checkpointNumber: CheckpointNumber, expectedHashes: {
39
- attestationsHash?: Hex;
40
- payloadDigest?: Hex;
41
- }): Promise<{
42
- checkpointNumber: CheckpointNumber;
43
- archiveRoot: Fr;
44
- header: CheckpointHeader;
45
- attestations: CommitteeAttestation[];
46
- blockHash: string;
47
- }>;
48
- /** Gets rollup propose calldata from a transaction */
49
- protected getProposeCallData(tx: Transaction, checkpointNumber: CheckpointNumber): Promise<Hex>;
54
+ attestationsHash: Hex;
55
+ payloadDigest: Hex;
56
+ }): Promise<CheckpointData>;
57
+ /** Gets checkpoint data from a transaction by trying decode strategies then falling back to trace. */
58
+ protected getCheckpointFromTx(tx: Transaction, checkpointNumber: CheckpointNumber, expectedHashes: {
59
+ attestationsHash: Hex;
60
+ payloadDigest: Hex;
61
+ }): Promise<CheckpointData>;
50
62
  /**
51
63
  * Attempts to decode a transaction as a Spire Proposer multicall wrapper.
52
- * If successful, extracts the wrapped call and validates it as either multicall3 or direct propose.
64
+ * If successful, iterates all wrapped calls and validates each as either multicall3
65
+ * or direct propose, verifying against expected hashes.
53
66
  * @param tx - The transaction to decode
54
- * @returns The propose calldata if successfully decoded and validated, undefined otherwise
67
+ * @param expectedHashes - Expected hashes for hash-verified matching
68
+ * @param checkpointNumber - The checkpoint number
69
+ * @param blockHash - The L1 block hash
70
+ * @returns The checkpoint data if successfully decoded and validated, undefined otherwise
55
71
  */
56
- protected tryDecodeSpireProposer(tx: Transaction): Promise<Hex | undefined>;
72
+ protected tryDecodeSpireProposer(tx: Transaction, expectedHashes: {
73
+ attestationsHash: Hex;
74
+ payloadDigest: Hex;
75
+ }, checkpointNumber: CheckpointNumber, blockHash: Hex): Promise<CheckpointData | undefined>;
57
76
  /**
58
77
  * Attempts to decode transaction input as multicall3 and extract propose calldata.
59
- * Returns undefined if validation fails.
78
+ * Finds all calls matching the rollup address and propose selector, then decodes
79
+ * and verifies each candidate against expected hashes from the CheckpointProposed event.
60
80
  * @param tx - The transaction-like object with to, input, and hash
61
- * @returns The propose calldata if successfully validated, undefined otherwise
81
+ * @param expectedHashes - Expected hashes from CheckpointProposed event
82
+ * @param checkpointNumber - The checkpoint number
83
+ * @param blockHash - The L1 block hash
84
+ * @returns The checkpoint data if successfully validated, undefined otherwise
62
85
  */
63
86
  protected tryDecodeMulticall3(tx: {
64
87
  to: Hex | null | undefined;
65
88
  input: Hex;
66
89
  hash: Hex;
67
- }): Hex | undefined;
90
+ }, expectedHashes: {
91
+ attestationsHash: Hex;
92
+ payloadDigest: Hex;
93
+ }, checkpointNumber: CheckpointNumber, blockHash: Hex): CheckpointData | undefined;
68
94
  /**
69
95
  * Attempts to decode transaction as a direct propose call to the rollup contract.
70
- * Returns undefined if validation fails.
96
+ * Decodes, verifies hashes, and builds checkpoint data in a single pass.
71
97
  * @param tx - The transaction-like object with to, input, and hash
72
- * @returns The propose calldata if successfully validated, undefined otherwise
98
+ * @param expectedHashes - Expected hashes from CheckpointProposed event
99
+ * @param checkpointNumber - The checkpoint number
100
+ * @param blockHash - The L1 block hash
101
+ * @returns The checkpoint data if successfully validated, undefined otherwise
73
102
  */
74
103
  protected tryDecodeDirectPropose(tx: {
75
104
  to: Hex | null | undefined;
76
105
  input: Hex;
77
106
  hash: Hex;
78
- }): Hex | undefined;
107
+ }, expectedHashes: {
108
+ attestationsHash: Hex;
109
+ payloadDigest: Hex;
110
+ }, checkpointNumber: CheckpointNumber, blockHash: Hex): CheckpointData | undefined;
79
111
  /**
80
112
  * Uses debug/trace RPC to extract the actual calldata from the successful propose call.
81
113
  * This is the definitive fallback that works for any transaction pattern.
@@ -84,29 +116,28 @@ export declare class CalldataRetriever {
84
116
  * @returns The propose calldata from the successful call
85
117
  */
86
118
  protected extractCalldataViaTrace(txHash: Hex): Promise<Hex>;
119
+ /**
120
+ * Decodes propose calldata, verifies against expected hashes, and builds checkpoint data.
121
+ * Returns undefined on decode errors or hash mismatches (soft failure for try-based callers).
122
+ * @param proposeCalldata - The propose function calldata
123
+ * @param expectedHashes - Expected hashes from the CheckpointProposed event
124
+ * @param checkpointNumber - The checkpoint number
125
+ * @param blockHash - The L1 block hash
126
+ * @returns The decoded checkpoint data, or undefined on failure
127
+ */
128
+ protected tryDecodeAndVerifyPropose(proposeCalldata: Hex, expectedHashes: {
129
+ attestationsHash: Hex;
130
+ payloadDigest: Hex;
131
+ }, checkpointNumber: CheckpointNumber, blockHash: Hex): CheckpointData | undefined;
132
+ /** Computes the keccak256 hash of ABI-encoded CommitteeAttestations. */
133
+ private computeAttestationsHash;
134
+ /** Computes the keccak256 payload digest from the checkpoint header, archive root, and fee asset price modifier. */
135
+ private computePayloadDigest;
87
136
  /**
88
137
  * Extracts the CommitteeAttestations struct definition from RollupAbi.
89
138
  * Finds the _attestations parameter by name in the propose function.
90
- * Lazy-loaded to avoid issues during module initialization.
91
139
  */
92
140
  private getCommitteeAttestationsStructDef;
93
- /**
94
- * Decodes propose calldata and builds the checkpoint header structure.
95
- * @param proposeCalldata - The propose function calldata
96
- * @param blockHash - The L1 block hash containing this transaction
97
- * @param checkpointNumber - The checkpoint number
98
- * @param expectedHashes - Optional expected hashes from the CheckpointProposed event for validation
99
- * @returns The decoded checkpoint header and metadata
100
- */
101
- protected decodeAndBuildCheckpoint(proposeCalldata: Hex, blockHash: Hex, checkpointNumber: CheckpointNumber, expectedHashes: {
102
- attestationsHash?: Hex;
103
- payloadDigest?: Hex;
104
- }): {
105
- checkpointNumber: CheckpointNumber;
106
- archiveRoot: Fr;
107
- header: CheckpointHeader;
108
- attestations: CommitteeAttestation[];
109
- blockHash: string;
110
- };
111
141
  }
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbGRhdGFfcmV0cmlldmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbDEvY2FsbGRhdGFfcmV0cmlldmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVFwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBRUwsS0FBSyxHQUFHLEVBQ1IsS0FBSyxXQUFXLEVBT2pCLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU03RTs7O0dBR0c7QUFDSCxxQkFBYSxpQkFBaUI7SUFPMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVztJQUM1QixPQUFPLENBQUMsUUFBUSxDQUFDLG1CQUFtQjtJQUNwQyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWU7SUFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO0lBVnpCLHVEQUF1RDtJQUN2RCxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFzQjtJQUV6RCxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBYTtJQUUzQyxZQUNtQixZQUFZLEVBQUUsZ0JBQWdCLEVBQzlCLFdBQVcsRUFBRSxxQkFB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
142
+ export {};
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbGRhdGFfcmV0cmlldmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbDEvY2FsbGRhdGFfcmV0cmlldmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0IsS0FBSyx5QkFBeUIsRUFBbUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNsSCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUVMLEtBQUssR0FBRyxFQUNSLEtBQUssV0FBVyxFQU9qQixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFNN0UsdURBQXVEO0FBQ3ZELEtBQUssY0FBYyxHQUFHO0lBQ3BCLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO0lBQ25DLFdBQVcsRUFBRSxFQUFFLENBQUM7SUFDaEIsTUFBTSxFQUFFLGdCQUFnQixDQUFDO0lBQ3pCLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0lBQ3JDOzs7O09BSUc7SUFDSCxvQkFBb0IsRUFBRSx5QkFBeUIsQ0FBQztJQUNoRCxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztDQUMvQixDQUFDO0FBRUY7Ozs7R0FJRztB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
@@ -1 +1 @@
1
- {"version":3,"file":"calldata_retriever.d.ts","sourceRoot":"","sources":["../../src/l1/calldata_retriever.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calldata_retriever.d.ts","sourceRoot":"","sources":["../../src/l1/calldata_retriever.ts"],"names":[],"mappings":"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"}