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