@aztec/archiver 0.0.1-commit.e558bd1c → 0.0.1-commit.e5a3663dd
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.
- package/README.md +12 -6
- package/dest/archiver.d.ts +26 -15
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +161 -153
- package/dest/config.d.ts +5 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +16 -4
- package/dest/errors.d.ts +61 -10
- package/dest/errors.d.ts.map +1 -1
- package/dest/errors.js +88 -14
- package/dest/factory.d.ts +6 -7
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +40 -32
- package/dest/index.d.ts +11 -3
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +10 -2
- package/dest/l1/bin/retrieve-calldata.js +32 -28
- package/dest/l1/calldata_retriever.d.ts +74 -50
- package/dest/l1/calldata_retriever.d.ts.map +1 -1
- package/dest/l1/calldata_retriever.js +197 -260
- package/dest/l1/data_retrieval.d.ts +26 -17
- package/dest/l1/data_retrieval.d.ts.map +1 -1
- package/dest/l1/data_retrieval.js +42 -47
- package/dest/l1/spire_proposer.d.ts +5 -5
- package/dest/l1/spire_proposer.d.ts.map +1 -1
- package/dest/l1/spire_proposer.js +9 -17
- package/dest/l1/validate_historical_logs.d.ts +23 -0
- package/dest/l1/validate_historical_logs.d.ts.map +1 -0
- package/dest/l1/validate_historical_logs.js +108 -0
- package/dest/modules/contract_data_source_adapter.d.ts +25 -0
- package/dest/modules/contract_data_source_adapter.d.ts.map +1 -0
- package/dest/modules/contract_data_source_adapter.js +42 -0
- package/dest/modules/data_source_base.d.ts +27 -14
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +98 -125
- package/dest/modules/data_store_updater.d.ts +37 -17
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +155 -112
- package/dest/modules/instrumentation.d.ts +21 -3
- package/dest/modules/instrumentation.d.ts.map +1 -1
- package/dest/modules/instrumentation.js +41 -8
- package/dest/modules/l1_synchronizer.d.ts +13 -11
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +355 -182
- package/dest/modules/validation.d.ts +4 -3
- package/dest/modules/validation.d.ts.map +1 -1
- package/dest/modules/validation.js +6 -6
- package/dest/store/block_store.d.ts +107 -31
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +477 -141
- package/dest/store/contract_class_store.d.ts +17 -4
- package/dest/store/contract_class_store.d.ts.map +1 -1
- package/dest/store/contract_class_store.js +24 -68
- package/dest/store/contract_instance_store.d.ts +28 -1
- package/dest/store/contract_instance_store.d.ts.map +1 -1
- package/dest/store/contract_instance_store.js +37 -2
- package/dest/store/data_stores.d.ts +68 -0
- package/dest/store/data_stores.d.ts.map +1 -0
- package/dest/store/data_stores.js +50 -0
- package/dest/store/function_names_cache.d.ts +17 -0
- package/dest/store/function_names_cache.d.ts.map +1 -0
- package/dest/store/function_names_cache.js +30 -0
- package/dest/store/l2_tips_cache.d.ts +20 -0
- package/dest/store/l2_tips_cache.d.ts.map +1 -0
- package/dest/store/l2_tips_cache.js +109 -0
- package/dest/store/log_store.d.ts +6 -3
- package/dest/store/log_store.d.ts.map +1 -1
- package/dest/store/log_store.js +95 -20
- package/dest/store/message_store.d.ts +11 -1
- package/dest/store/message_store.d.ts.map +1 -1
- package/dest/store/message_store.js +51 -9
- package/dest/test/fake_l1_state.d.ts +25 -1
- package/dest/test/fake_l1_state.d.ts.map +1 -1
- package/dest/test/fake_l1_state.js +166 -32
- package/dest/test/mock_archiver.d.ts +1 -1
- package/dest/test/mock_archiver.d.ts.map +1 -1
- package/dest/test/mock_archiver.js +3 -2
- package/dest/test/mock_l1_to_l2_message_source.d.ts +1 -1
- package/dest/test/mock_l1_to_l2_message_source.d.ts.map +1 -1
- package/dest/test/mock_l1_to_l2_message_source.js +2 -1
- package/dest/test/mock_l2_block_source.d.ts +35 -5
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +182 -89
- package/dest/test/mock_structs.d.ts +4 -1
- package/dest/test/mock_structs.d.ts.map +1 -1
- package/dest/test/mock_structs.js +13 -1
- package/dest/test/noop_l1_archiver.d.ts +7 -4
- package/dest/test/noop_l1_archiver.d.ts.map +1 -1
- package/dest/test/noop_l1_archiver.js +14 -8
- package/package.json +13 -13
- package/src/archiver.ts +199 -174
- package/src/config.ts +23 -2
- package/src/errors.ts +133 -22
- package/src/factory.ts +53 -30
- package/src/index.ts +18 -2
- package/src/l1/README.md +25 -68
- package/src/l1/bin/retrieve-calldata.ts +40 -27
- package/src/l1/calldata_retriever.ts +261 -379
- package/src/l1/data_retrieval.ts +58 -69
- package/src/l1/spire_proposer.ts +7 -15
- package/src/l1/validate_historical_logs.ts +140 -0
- package/src/modules/contract_data_source_adapter.ts +59 -0
- package/src/modules/data_source_base.ts +142 -144
- package/src/modules/data_store_updater.ts +187 -141
- package/src/modules/instrumentation.ts +56 -9
- package/src/modules/l1_synchronizer.ts +463 -218
- package/src/modules/validation.ts +10 -9
- package/src/store/block_store.ts +587 -177
- package/src/store/contract_class_store.ts +31 -103
- package/src/store/contract_instance_store.ts +51 -5
- package/src/store/data_stores.ts +108 -0
- package/src/store/function_names_cache.ts +37 -0
- package/src/store/l2_tips_cache.ts +134 -0
- package/src/store/log_store.ts +128 -32
- package/src/store/message_store.ts +60 -10
- package/src/structs/inbox_message.ts +1 -1
- package/src/test/fake_l1_state.ts +213 -42
- package/src/test/mock_archiver.ts +3 -2
- package/src/test/mock_l1_to_l2_message_source.ts +1 -0
- package/src/test/mock_l2_block_source.ts +230 -82
- package/src/test/mock_structs.ts +20 -6
- package/src/test/noop_l1_archiver.ts +16 -8
- package/dest/store/kv_archiver_store.d.ts +0 -340
- package/dest/store/kv_archiver_store.d.ts.map +0 -1
- package/dest/store/kv_archiver_store.js +0 -446
- package/src/store/kv_archiver_store.ts +0 -639
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { getBlobsPerL1Block, getPrefixedEthBlobCommitments } from '@aztec/blob-lib';
|
|
2
|
+
import { INITIAL_CHECKPOINT_NUMBER } from '@aztec/constants';
|
|
2
3
|
import { MULTI_CALL_3_ADDRESS } from '@aztec/ethereum/contracts';
|
|
3
4
|
import { CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
4
5
|
import { Buffer16, Buffer32 } from '@aztec/foundation/buffer';
|
|
6
|
+
import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
|
|
5
7
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
8
|
import { RollupAbi } from '@aztec/l1-artifacts';
|
|
7
9
|
import { CommitteeAttestation, CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
8
10
|
import { getSlotAtTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
9
11
|
import { InboxLeaf } from '@aztec/stdlib/messaging';
|
|
10
|
-
import {
|
|
12
|
+
import { ConsensusPayload, getHashedSignaturePayloadTypedData } from '@aztec/stdlib/p2p';
|
|
13
|
+
import { mockCheckpointAndMessages } from '@aztec/stdlib/testing';
|
|
11
14
|
import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
|
|
12
15
|
import { mock } from 'jest-mock-extended';
|
|
13
|
-
import { encodeFunctionData, multicall3Abi, toHex } from 'viem';
|
|
16
|
+
import { encodeAbiParameters, encodeFunctionData, keccak256, multicall3Abi, toHex } from 'viem';
|
|
14
17
|
import { updateRollingHash } from '../structs/inbox_message.js';
|
|
15
18
|
/**
|
|
16
19
|
* Stateful fake for L1 data used by the archiver.
|
|
@@ -43,8 +46,13 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
43
46
|
provenCheckpointNumber;
|
|
44
47
|
targetCommitteeSize;
|
|
45
48
|
version;
|
|
49
|
+
canPruneResult;
|
|
46
50
|
// Computed from checkpoints based on L1 block visibility
|
|
47
51
|
pendingCheckpointNumber;
|
|
52
|
+
// The L1 block number reported as "finalized" (defaults to the start block).
|
|
53
|
+
// `undefined` simulates the startup window on a fresh devnet where
|
|
54
|
+
// `getBlock({ blockTag: 'finalized' })` fails with "finalized block not found".
|
|
55
|
+
finalizedL1BlockNumber;
|
|
48
56
|
constructor(config){
|
|
49
57
|
this.config = config;
|
|
50
58
|
this.log = createLogger('archiver:test:fake-l1');
|
|
@@ -54,8 +62,10 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
54
62
|
this.provenCheckpointNumber = CheckpointNumber(0);
|
|
55
63
|
this.targetCommitteeSize = 0;
|
|
56
64
|
this.version = 1n;
|
|
65
|
+
this.canPruneResult = false;
|
|
57
66
|
this.pendingCheckpointNumber = CheckpointNumber(0);
|
|
58
67
|
this.l1BlockNumber = config.l1StartBlock;
|
|
68
|
+
this.finalizedL1BlockNumber = config.l1StartBlock;
|
|
59
69
|
this.lastArchive = new AppendOnlyTreeSnapshot(config.genesisArchiveRoot, 1);
|
|
60
70
|
}
|
|
61
71
|
/**
|
|
@@ -98,10 +108,10 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
98
108
|
});
|
|
99
109
|
// Store the messages internally so they match the checkpoint's inHash
|
|
100
110
|
this.addMessages(checkpointNumber, messagesL1BlockNumber, messages);
|
|
101
|
-
// Create the transaction and
|
|
102
|
-
const tx = this.makeRollupTx(checkpoint, signers);
|
|
103
|
-
const blobHashes = this.makeVersionedBlobHashes(checkpoint);
|
|
104
|
-
const blobs = this.makeBlobsFromCheckpoint(checkpoint);
|
|
111
|
+
// Create the transaction, blobs, and event hashes
|
|
112
|
+
const { tx, attestationsHash, payloadDigest } = await this.makeRollupTx(checkpoint, signers);
|
|
113
|
+
const blobHashes = await this.makeVersionedBlobHashes(checkpoint);
|
|
114
|
+
const blobs = await this.makeBlobsFromCheckpoint(checkpoint);
|
|
105
115
|
// Store the checkpoint data
|
|
106
116
|
this.checkpoints.push({
|
|
107
117
|
checkpointNumber,
|
|
@@ -110,7 +120,9 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
110
120
|
tx,
|
|
111
121
|
blobHashes,
|
|
112
122
|
blobs,
|
|
113
|
-
signers
|
|
123
|
+
signers,
|
|
124
|
+
attestationsHash,
|
|
125
|
+
payloadDigest
|
|
114
126
|
});
|
|
115
127
|
// Update last archive for auto-chaining
|
|
116
128
|
this.lastArchive = lastArchive ?? checkpoint.blocks.at(-1).archive;
|
|
@@ -152,12 +164,33 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
152
164
|
this.l1BlockNumber = blockNumber;
|
|
153
165
|
this.updatePendingCheckpointNumber();
|
|
154
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Sets the L1 block number that will be reported as "finalized". Pass `undefined` to
|
|
169
|
+
* simulate a chain that does not yet have a finalized block (devnet startup).
|
|
170
|
+
*/ setFinalizedL1BlockNumber(blockNumber) {
|
|
171
|
+
this.finalizedL1BlockNumber = blockNumber;
|
|
172
|
+
}
|
|
155
173
|
/** Marks a checkpoint as proven. Updates provenCheckpointNumber. */ markCheckpointAsProven(checkpointNumber) {
|
|
156
174
|
this.provenCheckpointNumber = checkpointNumber;
|
|
157
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Simulates what `rollup.getProvenCheckpointNumber({ blockNumber: atL1Block })` would return.
|
|
178
|
+
*/ getProvenCheckpointNumberAtL1Block(atL1Block) {
|
|
179
|
+
if (this.provenCheckpointNumber === 0) {
|
|
180
|
+
return CheckpointNumber(0);
|
|
181
|
+
}
|
|
182
|
+
const checkpoint = this.checkpoints.find((cp)=>cp.checkpointNumber === this.provenCheckpointNumber);
|
|
183
|
+
if (checkpoint && checkpoint.l1BlockNumber <= atL1Block) {
|
|
184
|
+
return this.provenCheckpointNumber;
|
|
185
|
+
}
|
|
186
|
+
return CheckpointNumber(0);
|
|
187
|
+
}
|
|
158
188
|
/** Sets the target committee size for attestation validation. */ setTargetCommitteeSize(size) {
|
|
159
189
|
this.targetCommitteeSize = size;
|
|
160
190
|
}
|
|
191
|
+
/** Sets whether the rollup contract would allow pruning at the next block. */ setCanPrune(value) {
|
|
192
|
+
this.canPruneResult = value;
|
|
193
|
+
}
|
|
161
194
|
/**
|
|
162
195
|
* Removes all entries for a checkpoint number (simulates L1 reorg or prune).
|
|
163
196
|
* Note: Does NOT remove messages for this checkpoint (use numL1ToL2Messages: 0 when re-adding).
|
|
@@ -167,6 +200,19 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
167
200
|
this.updatePendingCheckpointNumber();
|
|
168
201
|
}
|
|
169
202
|
/**
|
|
203
|
+
* Moves a checkpoint to a different L1 block number (simulates L1 reorg that
|
|
204
|
+
* re-includes the same checkpoint transaction in a different block).
|
|
205
|
+
* The checkpoint content stays the same — only the L1 metadata changes.
|
|
206
|
+
* Auto-updates pending status.
|
|
207
|
+
*/ moveCheckpointToL1Block(checkpointNumber, newL1BlockNumber) {
|
|
208
|
+
for (const cpData of this.checkpoints){
|
|
209
|
+
if (cpData.checkpointNumber === checkpointNumber) {
|
|
210
|
+
cpData.l1BlockNumber = newL1BlockNumber;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
this.updatePendingCheckpointNumber();
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
170
216
|
* Removes messages after a given total index (simulates L1 reorg).
|
|
171
217
|
* Auto-updates rolling hash.
|
|
172
218
|
*/ removeMessagesAfter(totalIndex) {
|
|
@@ -238,6 +284,11 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
238
284
|
archiveOfMyCheckpoint: this.getArchiveAt(localCheckpointNum)
|
|
239
285
|
});
|
|
240
286
|
});
|
|
287
|
+
mockRollup.getProvenCheckpointNumber.mockImplementation((options)=>{
|
|
288
|
+
const atBlock = options?.blockNumber ?? this.l1BlockNumber;
|
|
289
|
+
return Promise.resolve(this.getProvenCheckpointNumberAtL1Block(atBlock));
|
|
290
|
+
});
|
|
291
|
+
mockRollup.canPruneAtTime.mockImplementation(()=>Promise.resolve(this.canPruneResult));
|
|
241
292
|
// Mock the wrapper method for fetching checkpoint events
|
|
242
293
|
mockRollup.getCheckpointProposedEvents.mockImplementation((fromBlock, toBlock)=>Promise.resolve(this.getCheckpointProposedLogs(fromBlock, toBlock)));
|
|
243
294
|
Object.defineProperty(mockRollup, 'address', {
|
|
@@ -247,23 +298,49 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
247
298
|
}
|
|
248
299
|
/** Creates mock InboxContract that reads from this fake state. */ createMockInboxContract(_publicClient) {
|
|
249
300
|
const mockInbox = mock();
|
|
250
|
-
mockInbox.getState.mockImplementation(()=>
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
301
|
+
mockInbox.getState.mockImplementation((opts = {})=>{
|
|
302
|
+
// Filter messages visible at the given block number (or all if not specified)
|
|
303
|
+
const blockNumber = opts.blockNumber ?? this.l1BlockNumber;
|
|
304
|
+
const visibleMessages = this.messages.filter((m)=>m.l1BlockNumber <= blockNumber);
|
|
305
|
+
// treeInProgress must be > any sealed checkpoint. On L1, a checkpoint can only be proposed
|
|
306
|
+
// after its messages are sealed, so treeInProgress > checkpointNumber for all published checkpoints.
|
|
307
|
+
const maxFromMessages = visibleMessages.length > 0 ? Math.max(...visibleMessages.map((m)=>Number(m.checkpointNumber))) + 1 : 0;
|
|
308
|
+
const maxFromCheckpoints = this.checkpoints.length > 0 ? Math.max(...this.checkpoints.filter((cp)=>!cp.pruned && cp.l1BlockNumber <= blockNumber).map((cp)=>Number(cp.checkpointNumber)), 0) + 1 : 0;
|
|
309
|
+
const treeInProgress = Math.max(maxFromMessages, maxFromCheckpoints, INITIAL_CHECKPOINT_NUMBER);
|
|
310
|
+
// Compute rolling hash only for visible messages
|
|
311
|
+
const rollingHash = visibleMessages.length > 0 ? visibleMessages[visibleMessages.length - 1].rollingHash : Buffer16.ZERO;
|
|
312
|
+
return Promise.resolve({
|
|
313
|
+
messagesRollingHash: rollingHash,
|
|
314
|
+
totalMessagesInserted: BigInt(visibleMessages.length),
|
|
315
|
+
treeInProgress: BigInt(treeInProgress)
|
|
316
|
+
});
|
|
317
|
+
});
|
|
255
318
|
// Mock the wrapper methods for fetching message events
|
|
256
319
|
mockInbox.getMessageSentEvents.mockImplementation((fromBlock, toBlock)=>Promise.resolve(this.getMessageSentLogs(fromBlock, toBlock)));
|
|
257
|
-
mockInbox.getMessageSentEventByHash.mockImplementation((
|
|
320
|
+
mockInbox.getMessageSentEventByHash.mockImplementation((msgHash, aroundL1BlockNumber)=>Promise.resolve(this.getMessageSentLogByHash(msgHash, aroundL1BlockNumber)));
|
|
258
321
|
return mockInbox;
|
|
259
322
|
}
|
|
260
323
|
/** Creates mock PublicClient that reads from this fake state. */ createMockPublicClient() {
|
|
261
324
|
const publicClient = mock();
|
|
262
325
|
publicClient.getChainId.mockResolvedValue(1);
|
|
326
|
+
// Several consumers (CalldataRetriever, ArchiverL1Synchronizer) derive the EIP-712 signing
|
|
327
|
+
// context from `publicClient.chain.id`. Pin it so it matches `getSignatureContext()` below.
|
|
328
|
+
publicClient.chain = {
|
|
329
|
+
id: 1
|
|
330
|
+
};
|
|
263
331
|
publicClient.getBlockNumber.mockImplementation(()=>Promise.resolve(this.l1BlockNumber));
|
|
264
|
-
// Use async function pattern that existing test uses for getBlock
|
|
265
332
|
publicClient.getBlock.mockImplementation(async (args = {})=>{
|
|
266
|
-
|
|
333
|
+
let blockNum;
|
|
334
|
+
if (args.blockTag === 'finalized') {
|
|
335
|
+
if (this.finalizedL1BlockNumber === undefined) {
|
|
336
|
+
throw Object.assign(new Error('finalized block not found'), {
|
|
337
|
+
details: 'finalized block not found'
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
blockNum = this.finalizedL1BlockNumber;
|
|
341
|
+
} else {
|
|
342
|
+
blockNum = args.blockNumber ?? await publicClient.getBlockNumber();
|
|
343
|
+
}
|
|
267
344
|
return {
|
|
268
345
|
number: blockNum,
|
|
269
346
|
timestamp: BigInt(blockNum) * BigInt(this.config.ethereumSlotDuration) + this.config.l1GenesisTime,
|
|
@@ -276,8 +353,8 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
276
353
|
}
|
|
277
354
|
/** Creates mock BlobClient that reads from this fake state. */ createMockBlobClient() {
|
|
278
355
|
const blobClient = mock();
|
|
279
|
-
// The blockId is the
|
|
280
|
-
blobClient.getBlobSidecar.mockImplementation((blockId)=>Promise.resolve(this.checkpoints.find((cpData)=>cpData.
|
|
356
|
+
// The blockId is the L1 block hash, which we derive from the L1 block number
|
|
357
|
+
blobClient.getBlobSidecar.mockImplementation((blockId)=>Promise.resolve(this.checkpoints.find((cpData)=>Buffer32.fromBigInt(cpData.l1BlockNumber).toString() === blockId)?.blobs ?? []));
|
|
281
358
|
blobClient.testSources.mockResolvedValue(undefined);
|
|
282
359
|
return blobClient;
|
|
283
360
|
}
|
|
@@ -310,10 +387,8 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
310
387
|
checkpointNumber: cpData.checkpointNumber,
|
|
311
388
|
archive: cpData.checkpoint.archive.root,
|
|
312
389
|
versionedBlobHashes: cpData.blobHashes.map((h)=>Buffer.from(h.slice(2), 'hex')),
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
payloadDigest: undefined,
|
|
316
|
-
attestationsHash: undefined
|
|
390
|
+
attestationsHash: cpData.attestationsHash,
|
|
391
|
+
payloadDigest: cpData.payloadDigest
|
|
317
392
|
}
|
|
318
393
|
}));
|
|
319
394
|
}
|
|
@@ -330,13 +405,38 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
330
405
|
}
|
|
331
406
|
}));
|
|
332
407
|
}
|
|
333
|
-
|
|
334
|
-
const
|
|
408
|
+
getMessageSentLogByHash(msgHash, aroundL1BlockNumber) {
|
|
409
|
+
const msg = this.messages.find((msg)=>msg.leaf.toString() === msgHash && msg.l1BlockNumber >= aroundL1BlockNumber - 5n && msg.l1BlockNumber <= aroundL1BlockNumber + 5n);
|
|
410
|
+
if (!msg) {
|
|
411
|
+
return undefined;
|
|
412
|
+
}
|
|
413
|
+
return {
|
|
414
|
+
l1BlockNumber: msg.l1BlockNumber,
|
|
415
|
+
l1BlockHash: Buffer32.fromBigInt(msg.l1BlockNumber),
|
|
416
|
+
l1TransactionHash: `0x${msg.l1BlockNumber.toString(16)}`,
|
|
417
|
+
args: {
|
|
418
|
+
checkpointNumber: msg.checkpointNumber,
|
|
419
|
+
index: msg.index,
|
|
420
|
+
leaf: msg.leaf,
|
|
421
|
+
rollingHash: msg.rollingHash
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
async makeRollupTx(checkpoint, signers) {
|
|
426
|
+
const signatureContext = this.getSignatureContext();
|
|
427
|
+
const consensusPayload = ConsensusPayload.fromCheckpoint(checkpoint, signatureContext);
|
|
428
|
+
const attestationDigest = getHashedSignaturePayloadTypedData(consensusPayload);
|
|
429
|
+
const attestations = signers.map((signer)=>CommitteeAttestation.fromSignature(signer.sign(attestationDigest))).map((committeeAttestation)=>committeeAttestation.toViem());
|
|
335
430
|
const header = checkpoint.header.toViem();
|
|
336
|
-
const blobInput = getPrefixedEthBlobCommitments(getBlobsPerL1Block(checkpoint.toBlobFields()));
|
|
431
|
+
const blobInput = getPrefixedEthBlobCommitments(await getBlobsPerL1Block(checkpoint.toBlobFields()));
|
|
337
432
|
const archive = toHex(checkpoint.archive.root.toBuffer());
|
|
338
|
-
const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations.map((attestation)=>CommitteeAttestation.fromViem(attestation)));
|
|
339
|
-
|
|
433
|
+
const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations.map((attestation)=>CommitteeAttestation.fromViem(attestation)), signatureContext);
|
|
434
|
+
// Fall back to a random signer when no attesters are provided, so tests that
|
|
435
|
+
// don't care about the proposer identity (e.g. sync tests) still produce a
|
|
436
|
+
// valid-looking signature for the attestationsAndSigners struct.
|
|
437
|
+
const proposerSigner = signers[0] ?? Secp256k1Signer.random();
|
|
438
|
+
const attestationsAndSignersSignature = proposerSigner.sign(getHashedSignaturePayloadTypedData(attestationsAndSigners));
|
|
439
|
+
const packedAttestations = attestationsAndSigners.getPackedAttestations();
|
|
340
440
|
const rollupInput = encodeFunctionData({
|
|
341
441
|
abi: RollupAbi,
|
|
342
442
|
functionName: 'propose',
|
|
@@ -348,7 +448,7 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
348
448
|
feeAssetPriceModifier: 0n
|
|
349
449
|
}
|
|
350
450
|
},
|
|
351
|
-
|
|
451
|
+
packedAttestations,
|
|
352
452
|
attestationsAndSigners.getSigners().map((signer)=>signer.toString()),
|
|
353
453
|
attestationsAndSignersSignature.toViemSignature(),
|
|
354
454
|
blobInput
|
|
@@ -367,17 +467,51 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
367
467
|
]
|
|
368
468
|
]
|
|
369
469
|
});
|
|
370
|
-
|
|
470
|
+
// Compute attestationsHash (same logic as CalldataRetriever)
|
|
471
|
+
const attestationsHash = Buffer32.fromString(keccak256(encodeAbiParameters([
|
|
472
|
+
this.getCommitteeAttestationsStructDef()
|
|
473
|
+
], [
|
|
474
|
+
packedAttestations
|
|
475
|
+
])));
|
|
476
|
+
// Compute payloadDigest (same logic as CalldataRetriever)
|
|
477
|
+
const payloadDigest = getHashedSignaturePayloadTypedData(consensusPayload);
|
|
478
|
+
const tx = {
|
|
371
479
|
input: multiCallInput,
|
|
372
480
|
hash: archive,
|
|
373
481
|
blockHash: archive,
|
|
374
482
|
to: MULTI_CALL_3_ADDRESS
|
|
375
483
|
};
|
|
484
|
+
return {
|
|
485
|
+
tx,
|
|
486
|
+
attestationsHash,
|
|
487
|
+
payloadDigest
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
getSignatureContext() {
|
|
491
|
+
return {
|
|
492
|
+
chainId: 1,
|
|
493
|
+
rollupAddress: this.config.rollupAddress
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
/** Extracts the CommitteeAttestations struct definition from RollupAbi for hash computation. */ getCommitteeAttestationsStructDef() {
|
|
497
|
+
const proposeFunction = RollupAbi.find((item)=>item.type === 'function' && item.name === 'propose');
|
|
498
|
+
if (!proposeFunction) {
|
|
499
|
+
throw new Error('propose function not found in RollupAbi');
|
|
500
|
+
}
|
|
501
|
+
const attestationsParam = proposeFunction.inputs.find((param)=>param.name === '_attestations');
|
|
502
|
+
if (!attestationsParam) {
|
|
503
|
+
throw new Error('_attestations parameter not found in propose function');
|
|
504
|
+
}
|
|
505
|
+
const tupleParam = attestationsParam;
|
|
506
|
+
return {
|
|
507
|
+
type: 'tuple',
|
|
508
|
+
components: tupleParam.components || []
|
|
509
|
+
};
|
|
376
510
|
}
|
|
377
|
-
makeVersionedBlobHashes(checkpoint) {
|
|
378
|
-
return getBlobsPerL1Block(checkpoint.toBlobFields()).map((b)=>`0x${b.getEthVersionedBlobHash().toString('hex')}`);
|
|
511
|
+
async makeVersionedBlobHashes(checkpoint) {
|
|
512
|
+
return (await getBlobsPerL1Block(checkpoint.toBlobFields())).map((b)=>`0x${b.getEthVersionedBlobHash().toString('hex')}`);
|
|
379
513
|
}
|
|
380
|
-
makeBlobsFromCheckpoint(checkpoint) {
|
|
381
|
-
return getBlobsPerL1Block(checkpoint.toBlobFields());
|
|
514
|
+
async makeBlobsFromCheckpoint(checkpoint) {
|
|
515
|
+
return await getBlobsPerL1Block(checkpoint.toBlobFields());
|
|
382
516
|
}
|
|
383
517
|
}
|
|
@@ -28,4 +28,4 @@ export declare class MockPrefilledArchiver extends MockArchiver {
|
|
|
28
28
|
}[]): void;
|
|
29
29
|
createBlocks(numBlocks: number): Promise<void>;
|
|
30
30
|
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19hcmNoaXZlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvbW9ja19hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3hFLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFOUQ7O0dBRUc7QUFDSCxxQkFBYSxZQUFhLFNBQVEsaUJBQWtCLFlBQVcsYUFBYSxFQUFFLG1CQUFtQjtJQUMvRixPQUFPLENBQUMsYUFBYSxDQUFrQztJQUVoRCxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBRXRFO0lBRUQsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBRW5FO0lBRUQscUJBQXFCLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVyRTtDQUNGO0FBRUQ7O0dBRUc7QUFDSCxxQkFBYSxxQkFBc0IsU0FBUSxZQUFZO0lBQ3JELE9BQU8sQ0FBQyxTQUFTLENBQW9CO0lBRXJDLFlBQVksU0FBUyxFQUFFO1FBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQTtLQUFFLEVBQUUsRUFHbEU7SUFFTSxZQUFZLENBQUMsU0FBUyxFQUFFO1FBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQTtLQUFFLEVBQUUsUUFRMUU7SUFFZSxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0saUJBYTdDO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_archiver.d.ts","sourceRoot":"","sources":["../../src/test/mock_archiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;GAEG;AACH,qBAAa,YAAa,SAAQ,iBAAkB,YAAW,aAAa,EAAE,mBAAmB;IAC/F,OAAO,CAAC,aAAa,CAAkC;IAEhD,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,QAEtE;IAED,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnE;IAED,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAErE;CACF;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,OAAO,CAAC,SAAS,CAAoB;IAErC,YAAY,SAAS,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,EAAE,EAAE,CAAA;KAAE,EAAE,EAGlE;IAEM,YAAY,CAAC,SAAS,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,EAAE,EAAE,CAAA;KAAE,EAAE,QAQ1E;IAEe,YAAY,CAAC,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mock_archiver.d.ts","sourceRoot":"","sources":["../../src/test/mock_archiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;GAEG;AACH,qBAAa,YAAa,SAAQ,iBAAkB,YAAW,aAAa,EAAE,mBAAmB;IAC/F,OAAO,CAAC,aAAa,CAAkC;IAEhD,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,QAEtE;IAED,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnE;IAED,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAErE;CACF;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,OAAO,CAAC,SAAS,CAAoB;IAErC,YAAY,SAAS,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,EAAE,EAAE,CAAA;KAAE,EAAE,EAGlE;IAEM,YAAY,CAAC,SAAS,EAAE;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,EAAE,EAAE,CAAA;KAAE,EAAE,QAQ1E;IAEe,YAAY,CAAC,SAAS,EAAE,MAAM,iBAa7C;CACF"}
|
|
@@ -37,8 +37,9 @@ import { MockL2BlockSource } from './mock_l2_block_source.js';
|
|
|
37
37
|
throw new Error(`Not enough precomputed blocks to create ${numBlocks} more blocks (already at ${this.l2Blocks.length})`);
|
|
38
38
|
}
|
|
39
39
|
const fromBlock = this.l2Blocks.length;
|
|
40
|
-
|
|
41
|
-
this.addProposedBlocks(
|
|
40
|
+
const checkpointsToAdd = this.prefilled.slice(fromBlock, fromBlock + numBlocks);
|
|
41
|
+
this.addProposedBlocks(checkpointsToAdd.flatMap((c)=>c.blocks));
|
|
42
|
+
this.checkpointList.push(...checkpointsToAdd);
|
|
42
43
|
return Promise.resolve();
|
|
43
44
|
}
|
|
44
45
|
}
|
|
@@ -16,4 +16,4 @@ export declare class MockL1ToL2MessageSource implements L1ToL2MessageSource {
|
|
|
16
16
|
getBlockNumber(): Promise<BlockNumber>;
|
|
17
17
|
getL2Tips(): Promise<L2Tips>;
|
|
18
18
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QvbW9ja19sMV90b19sMl9tZXNzYWdlX3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFvQyxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5FOztHQUVHO0FBQ0gscUJBQWEsdUJBQXdCLFlBQVcsbUJBQW1CO0lBR3JELE9BQU8sQ0FBQyxXQUFXO0lBRi9CLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBcUM7SUFFbEUsWUFBb0IsV0FBVyxFQUFFLE1BQU0sRUFBSTtJQUVwQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBRXRFO0lBRU0sY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLFFBRXhDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBRW5FO0lBRUQscUJBQXFCLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUVyRTtJQUVELGNBQWMseUJBRWI7SUFFRCxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQWUzQjtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAoC,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,qBAAqB,CAAqC;IAElE,YAAoB,WAAW,EAAE,MAAM,EAAI;IAEpC,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,QAEtE;IAEM,cAAc,CAAC,WAAW,EAAE,MAAM,QAExC;IAED,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnE;IAED,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAErE;IAED,cAAc,yBAEb;IAED,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"mock_l1_to_l2_message_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l1_to_l2_message_source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAoC,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,qBAAqB,CAAqC;IAElE,YAAoB,WAAW,EAAE,MAAM,EAAI;IAEpC,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,QAEtE;IAEM,cAAc,CAAC,WAAW,EAAE,MAAM,QAExC;IAED,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAEnE;IAED,qBAAqB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAErE;IAED,cAAc,yBAEb;IAED,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAe3B;CACF"}
|
|
@@ -3,8 +3,8 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
3
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
5
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
|
-
import { BlockHash, CheckpointedL2Block, L2Block, type L2BlockSource, type L2Tips, type ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
7
|
-
import { Checkpoint, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
6
|
+
import { type BlockData, BlockHash, CheckpointedL2Block, L2Block, type L2BlockSource, type L2Tips, type ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
7
|
+
import { Checkpoint, type CheckpointData, type ProposedCheckpointData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
8
8
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
9
9
|
import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
|
|
10
10
|
import { type BlockHeader, TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
@@ -14,15 +14,22 @@ import type { UInt64 } from '@aztec/stdlib/types';
|
|
|
14
14
|
*/
|
|
15
15
|
export declare class MockL2BlockSource implements L2BlockSource, ContractDataSource {
|
|
16
16
|
protected l2Blocks: L2Block[];
|
|
17
|
+
protected checkpointList: Checkpoint[];
|
|
17
18
|
private provenBlockNumber;
|
|
18
19
|
private finalizedBlockNumber;
|
|
19
20
|
private checkpointedBlockNumber;
|
|
21
|
+
private proposedCheckpointBlockNumber;
|
|
20
22
|
private log;
|
|
23
|
+
/** Creates blocks grouped into single-block checkpoints. */
|
|
21
24
|
createBlocks(numBlocks: number): Promise<void>;
|
|
25
|
+
getCheckpointNumber(): Promise<CheckpointNumber>;
|
|
26
|
+
/** Creates checkpoints, each containing `blocksPerCheckpoint` blocks. */
|
|
27
|
+
createCheckpoints(numCheckpoints: number, blocksPerCheckpoint?: number): Promise<void>;
|
|
22
28
|
addProposedBlocks(blocks: L2Block[]): void;
|
|
23
29
|
removeBlocks(numBlocks: number): void;
|
|
24
30
|
setProvenBlockNumber(provenBlockNumber: number): void;
|
|
25
31
|
setFinalizedBlockNumber(finalizedBlockNumber: number): void;
|
|
32
|
+
setProposedCheckpointBlockNumber(blockNumber: number): void;
|
|
26
33
|
setCheckpointedBlockNumber(checkpointedBlockNumber: number): void;
|
|
27
34
|
/**
|
|
28
35
|
* Method to fetch the rollup contract address at the base-layer.
|
|
@@ -42,6 +49,7 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
42
49
|
getProvenBlockNumber(): Promise<BlockNumber>;
|
|
43
50
|
getCheckpointedL2BlockNumber(): Promise<BlockNumber>;
|
|
44
51
|
getFinalizedL2BlockNumber(): Promise<BlockNumber>;
|
|
52
|
+
getProposedCheckpointL2BlockNumber(): Promise<BlockNumber>;
|
|
45
53
|
getCheckpointedBlock(number: BlockNumber): Promise<CheckpointedL2Block | undefined>;
|
|
46
54
|
getCheckpointedBlocks(from: BlockNumber, limit: number): Promise<CheckpointedL2Block[]>;
|
|
47
55
|
/**
|
|
@@ -71,8 +79,20 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
71
79
|
getL2BlockByArchive(archive: Fr): Promise<L2Block | undefined>;
|
|
72
80
|
getBlockHeaderByHash(blockHash: BlockHash): Promise<BlockHeader | undefined>;
|
|
73
81
|
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
82
|
+
getBlockData(number: BlockNumber): Promise<BlockData | undefined>;
|
|
83
|
+
getCheckpointData(_n: CheckpointNumber): Promise<CheckpointData | undefined>;
|
|
84
|
+
getCheckpointDataRange(_from: CheckpointNumber, _limit: number): Promise<CheckpointData[]>;
|
|
85
|
+
getCheckpointNumberBySlot(_slot: SlotNumber): Promise<CheckpointNumber | undefined>;
|
|
86
|
+
getBlockDataWithCheckpointContext(number: BlockNumber): Promise<{
|
|
87
|
+
data: BlockData;
|
|
88
|
+
checkpoint: undefined;
|
|
89
|
+
l1: undefined;
|
|
90
|
+
attestations: never[];
|
|
91
|
+
} | undefined>;
|
|
92
|
+
getBlockDataByArchive(archive: Fr): Promise<BlockData | undefined>;
|
|
74
93
|
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
|
|
75
94
|
getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]>;
|
|
95
|
+
getCheckpointsDataForEpoch(epochNumber: EpochNumber): Promise<CheckpointData[]>;
|
|
76
96
|
getCheckpointedBlocksForEpoch(epochNumber: EpochNumber): Promise<CheckpointedL2Block[]>;
|
|
77
97
|
getBlocksForSlot(slotNumber: SlotNumber): Promise<L2Block[]>;
|
|
78
98
|
getCheckpointedBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]>;
|
|
@@ -94,8 +114,8 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
94
114
|
*/
|
|
95
115
|
getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
|
|
96
116
|
getL2Tips(): Promise<L2Tips>;
|
|
97
|
-
|
|
98
|
-
|
|
117
|
+
getSyncedL2EpochNumber(): Promise<EpochNumber>;
|
|
118
|
+
getSyncedL2SlotNumber(): Promise<SlotNumber>;
|
|
99
119
|
isEpochComplete(_epochNumber: EpochNumber): Promise<boolean>;
|
|
100
120
|
getL1Constants(): Promise<L1RollupConstants>;
|
|
101
121
|
getGenesisValues(): Promise<{
|
|
@@ -121,5 +141,15 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
121
141
|
syncImmediate(): Promise<void>;
|
|
122
142
|
isPendingChainInvalid(): Promise<boolean>;
|
|
123
143
|
getPendingChainValidationStatus(): Promise<ValidateCheckpointResult>;
|
|
144
|
+
getLastCheckpoint(): Promise<ProposedCheckpointData | undefined>;
|
|
145
|
+
getLastProposedCheckpoint(): Promise<ProposedCheckpointData | undefined>;
|
|
146
|
+
/** Returns checkpoints whose slot falls within the given epoch. */
|
|
147
|
+
private getCheckpointsInEpoch;
|
|
148
|
+
/** Creates a mock L1PublishedData for a checkpoint. */
|
|
149
|
+
private mockL1DataForCheckpoint;
|
|
150
|
+
/** Creates a CheckpointedL2Block from a block using stored checkpoint info. */
|
|
151
|
+
private toCheckpointedBlock;
|
|
152
|
+
/** Finds the checkpoint number for a block, or undefined if the block is not in any checkpoint. */
|
|
153
|
+
private findCheckpointNumberForBlock;
|
|
124
154
|
}
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19sMl9ibG9ja19zb3VyY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L21vY2tfbDJfYmxvY2tfc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXpHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyxTQUFTLEVBQ2QsU0FBUyxFQUNULG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsS0FBSyxhQUFhLEVBQ2xCLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBQzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLFVBQVUsRUFDVixLQUFLLGNBQWMsRUFFbkIsS0FBSyxzQkFBc0IsRUFDM0IsbUJBQW1CLEVBQ3BCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuSCxPQUFPLEVBRUwsS0FBSyxpQkFBaUIsRUFHdkIsTUFBTSw2QkFBNkIsQ0FBQztBQUdyQyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUNwRyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRDs7R0FFRztBQUNILHFCQUFhLGlCQUFrQixZQUFXLGFBQWEs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAEzG,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,OAAO,EACP,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"mock_l2_block_source.d.ts","sourceRoot":"","sources":["../../src/test/mock_l2_block_source.ts"],"names":[],"mappings":"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"}
|