@aztec/archiver 0.0.1-commit.e3c1de76 → 0.0.1-commit.e588bc7e5
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 +9 -6
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +78 -113
- package/dest/config.d.ts +3 -3
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +2 -1
- package/dest/errors.d.ts +34 -10
- package/dest/errors.d.ts.map +1 -1
- package/dest/errors.js +45 -16
- package/dest/factory.d.ts +4 -5
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +31 -26
- package/dest/index.d.ts +2 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -0
- package/dest/l1/bin/retrieve-calldata.js +36 -33
- package/dest/l1/calldata_retriever.d.ts +73 -50
- package/dest/l1/calldata_retriever.d.ts.map +1 -1
- package/dest/l1/calldata_retriever.js +191 -259
- package/dest/l1/data_retrieval.d.ts +10 -10
- package/dest/l1/data_retrieval.d.ts.map +1 -1
- package/dest/l1/data_retrieval.js +35 -34
- 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/modules/data_source_base.d.ts +14 -7
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +39 -77
- package/dest/modules/data_store_updater.d.ts +25 -12
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +125 -94
- package/dest/modules/instrumentation.d.ts +15 -2
- package/dest/modules/instrumentation.d.ts.map +1 -1
- package/dest/modules/instrumentation.js +19 -2
- package/dest/modules/l1_synchronizer.d.ts +7 -9
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +176 -136
- package/dest/modules/validation.d.ts +1 -1
- package/dest/modules/validation.d.ts.map +1 -1
- package/dest/modules/validation.js +2 -2
- package/dest/store/block_store.d.ts +65 -28
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +311 -134
- package/dest/store/contract_class_store.d.ts +2 -3
- package/dest/store/contract_class_store.d.ts.map +1 -1
- package/dest/store/contract_class_store.js +7 -67
- package/dest/store/contract_instance_store.d.ts +1 -1
- package/dest/store/contract_instance_store.d.ts.map +1 -1
- package/dest/store/contract_instance_store.js +6 -2
- package/dest/store/kv_archiver_store.d.ts +61 -24
- package/dest/store/kv_archiver_store.d.ts.map +1 -1
- package/dest/store/kv_archiver_store.js +75 -27
- 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 +148 -51
- package/dest/store/message_store.d.ts +5 -1
- package/dest/store/message_store.d.ts.map +1 -1
- package/dest/store/message_store.js +21 -9
- package/dest/test/fake_l1_state.d.ts +14 -1
- package/dest/test/fake_l1_state.d.ts.map +1 -1
- package/dest/test/fake_l1_state.js +120 -26
- 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 +26 -5
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +160 -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 +4 -1
- package/dest/test/noop_l1_archiver.d.ts.map +1 -1
- package/dest/test/noop_l1_archiver.js +5 -1
- package/package.json +13 -13
- package/src/archiver.ts +97 -133
- package/src/config.ts +8 -1
- package/src/errors.ts +70 -26
- package/src/factory.ts +46 -24
- package/src/index.ts +1 -0
- package/src/l1/README.md +25 -68
- package/src/l1/bin/retrieve-calldata.ts +46 -39
- package/src/l1/calldata_retriever.ts +250 -379
- package/src/l1/data_retrieval.ts +31 -37
- package/src/l1/spire_proposer.ts +7 -15
- package/src/modules/data_source_base.ts +78 -98
- package/src/modules/data_store_updater.ts +138 -124
- package/src/modules/instrumentation.ts +29 -2
- package/src/modules/l1_synchronizer.ts +195 -168
- package/src/modules/validation.ts +2 -2
- package/src/store/block_store.ts +393 -170
- package/src/store/contract_class_store.ts +8 -106
- package/src/store/contract_instance_store.ts +8 -5
- package/src/store/kv_archiver_store.ts +115 -41
- package/src/store/l2_tips_cache.ts +128 -0
- package/src/store/log_store.ts +219 -58
- package/src/store/message_store.ts +27 -10
- package/src/structs/inbox_message.ts +1 -1
- package/src/test/fake_l1_state.ts +163 -30
- 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 +209 -82
- package/src/test/mock_structs.ts +20 -6
- package/src/test/noop_l1_archiver.ts +7 -1
|
@@ -1,4 +1,5 @@
|
|
|
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';
|
|
@@ -7,10 +8,11 @@ import { RollupAbi } from '@aztec/l1-artifacts';
|
|
|
7
8
|
import { CommitteeAttestation, CommitteeAttestationsAndSigners } from '@aztec/stdlib/block';
|
|
8
9
|
import { getSlotAtTimestamp } from '@aztec/stdlib/epoch-helpers';
|
|
9
10
|
import { InboxLeaf } from '@aztec/stdlib/messaging';
|
|
11
|
+
import { ConsensusPayload, SignatureDomainSeparator } from '@aztec/stdlib/p2p';
|
|
10
12
|
import { makeAndSignCommitteeAttestationsAndSigners, makeCheckpointAttestationFromCheckpoint, mockCheckpointAndMessages } from '@aztec/stdlib/testing';
|
|
11
13
|
import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees';
|
|
12
14
|
import { mock } from 'jest-mock-extended';
|
|
13
|
-
import { encodeFunctionData, multicall3Abi, toHex } from 'viem';
|
|
15
|
+
import { encodeAbiParameters, encodeFunctionData, keccak256, multicall3Abi, toHex } from 'viem';
|
|
14
16
|
import { updateRollingHash } from '../structs/inbox_message.js';
|
|
15
17
|
/**
|
|
16
18
|
* Stateful fake for L1 data used by the archiver.
|
|
@@ -43,8 +45,11 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
43
45
|
provenCheckpointNumber;
|
|
44
46
|
targetCommitteeSize;
|
|
45
47
|
version;
|
|
48
|
+
canPruneResult;
|
|
46
49
|
// Computed from checkpoints based on L1 block visibility
|
|
47
50
|
pendingCheckpointNumber;
|
|
51
|
+
// The L1 block number reported as "finalized" (defaults to the start block)
|
|
52
|
+
finalizedL1BlockNumber;
|
|
48
53
|
constructor(config){
|
|
49
54
|
this.config = config;
|
|
50
55
|
this.log = createLogger('archiver:test:fake-l1');
|
|
@@ -54,8 +59,10 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
54
59
|
this.provenCheckpointNumber = CheckpointNumber(0);
|
|
55
60
|
this.targetCommitteeSize = 0;
|
|
56
61
|
this.version = 1n;
|
|
62
|
+
this.canPruneResult = false;
|
|
57
63
|
this.pendingCheckpointNumber = CheckpointNumber(0);
|
|
58
64
|
this.l1BlockNumber = config.l1StartBlock;
|
|
65
|
+
this.finalizedL1BlockNumber = config.l1StartBlock;
|
|
59
66
|
this.lastArchive = new AppendOnlyTreeSnapshot(config.genesisArchiveRoot, 1);
|
|
60
67
|
}
|
|
61
68
|
/**
|
|
@@ -98,10 +105,10 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
98
105
|
});
|
|
99
106
|
// Store the messages internally so they match the checkpoint's inHash
|
|
100
107
|
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);
|
|
108
|
+
// Create the transaction, blobs, and event hashes
|
|
109
|
+
const { tx, attestationsHash, payloadDigest } = await this.makeRollupTx(checkpoint, signers);
|
|
110
|
+
const blobHashes = await this.makeVersionedBlobHashes(checkpoint);
|
|
111
|
+
const blobs = await this.makeBlobsFromCheckpoint(checkpoint);
|
|
105
112
|
// Store the checkpoint data
|
|
106
113
|
this.checkpoints.push({
|
|
107
114
|
checkpointNumber,
|
|
@@ -110,7 +117,9 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
110
117
|
tx,
|
|
111
118
|
blobHashes,
|
|
112
119
|
blobs,
|
|
113
|
-
signers
|
|
120
|
+
signers,
|
|
121
|
+
attestationsHash,
|
|
122
|
+
payloadDigest
|
|
114
123
|
});
|
|
115
124
|
// Update last archive for auto-chaining
|
|
116
125
|
this.lastArchive = lastArchive ?? checkpoint.blocks.at(-1).archive;
|
|
@@ -152,12 +161,30 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
152
161
|
this.l1BlockNumber = blockNumber;
|
|
153
162
|
this.updatePendingCheckpointNumber();
|
|
154
163
|
}
|
|
164
|
+
/** Sets the L1 block number that will be reported as "finalized". */ setFinalizedL1BlockNumber(blockNumber) {
|
|
165
|
+
this.finalizedL1BlockNumber = blockNumber;
|
|
166
|
+
}
|
|
155
167
|
/** Marks a checkpoint as proven. Updates provenCheckpointNumber. */ markCheckpointAsProven(checkpointNumber) {
|
|
156
168
|
this.provenCheckpointNumber = checkpointNumber;
|
|
157
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* Simulates what `rollup.getProvenCheckpointNumber({ blockNumber: atL1Block })` would return.
|
|
172
|
+
*/ getProvenCheckpointNumberAtL1Block(atL1Block) {
|
|
173
|
+
if (this.provenCheckpointNumber === 0) {
|
|
174
|
+
return CheckpointNumber(0);
|
|
175
|
+
}
|
|
176
|
+
const checkpoint = this.checkpoints.find((cp)=>cp.checkpointNumber === this.provenCheckpointNumber);
|
|
177
|
+
if (checkpoint && checkpoint.l1BlockNumber <= atL1Block) {
|
|
178
|
+
return this.provenCheckpointNumber;
|
|
179
|
+
}
|
|
180
|
+
return CheckpointNumber(0);
|
|
181
|
+
}
|
|
158
182
|
/** Sets the target committee size for attestation validation. */ setTargetCommitteeSize(size) {
|
|
159
183
|
this.targetCommitteeSize = size;
|
|
160
184
|
}
|
|
185
|
+
/** Sets whether the rollup contract would allow pruning at the next block. */ setCanPrune(value) {
|
|
186
|
+
this.canPruneResult = value;
|
|
187
|
+
}
|
|
161
188
|
/**
|
|
162
189
|
* Removes all entries for a checkpoint number (simulates L1 reorg or prune).
|
|
163
190
|
* Note: Does NOT remove messages for this checkpoint (use numL1ToL2Messages: 0 when re-adding).
|
|
@@ -238,6 +265,11 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
238
265
|
archiveOfMyCheckpoint: this.getArchiveAt(localCheckpointNum)
|
|
239
266
|
});
|
|
240
267
|
});
|
|
268
|
+
mockRollup.getProvenCheckpointNumber.mockImplementation((options)=>{
|
|
269
|
+
const atBlock = options?.blockNumber ?? this.l1BlockNumber;
|
|
270
|
+
return Promise.resolve(this.getProvenCheckpointNumberAtL1Block(atBlock));
|
|
271
|
+
});
|
|
272
|
+
mockRollup.canPruneAtTime.mockImplementation(()=>Promise.resolve(this.canPruneResult));
|
|
241
273
|
// Mock the wrapper method for fetching checkpoint events
|
|
242
274
|
mockRollup.getCheckpointProposedEvents.mockImplementation((fromBlock, toBlock)=>Promise.resolve(this.getCheckpointProposedLogs(fromBlock, toBlock)));
|
|
243
275
|
Object.defineProperty(mockRollup, 'address', {
|
|
@@ -247,23 +279,39 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
247
279
|
}
|
|
248
280
|
/** Creates mock InboxContract that reads from this fake state. */ createMockInboxContract(_publicClient) {
|
|
249
281
|
const mockInbox = mock();
|
|
250
|
-
mockInbox.getState.mockImplementation(()=>
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
282
|
+
mockInbox.getState.mockImplementation((opts = {})=>{
|
|
283
|
+
// Filter messages visible at the given block number (or all if not specified)
|
|
284
|
+
const blockNumber = opts.blockNumber ?? this.l1BlockNumber;
|
|
285
|
+
const visibleMessages = this.messages.filter((m)=>m.l1BlockNumber <= blockNumber);
|
|
286
|
+
// treeInProgress must be > any sealed checkpoint. On L1, a checkpoint can only be proposed
|
|
287
|
+
// after its messages are sealed, so treeInProgress > checkpointNumber for all published checkpoints.
|
|
288
|
+
const maxFromMessages = visibleMessages.length > 0 ? Math.max(...visibleMessages.map((m)=>Number(m.checkpointNumber))) + 1 : 0;
|
|
289
|
+
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;
|
|
290
|
+
const treeInProgress = Math.max(maxFromMessages, maxFromCheckpoints, INITIAL_CHECKPOINT_NUMBER);
|
|
291
|
+
// Compute rolling hash only for visible messages
|
|
292
|
+
const rollingHash = visibleMessages.length > 0 ? visibleMessages[visibleMessages.length - 1].rollingHash : Buffer16.ZERO;
|
|
293
|
+
return Promise.resolve({
|
|
294
|
+
messagesRollingHash: rollingHash,
|
|
295
|
+
totalMessagesInserted: BigInt(visibleMessages.length),
|
|
296
|
+
treeInProgress: BigInt(treeInProgress)
|
|
297
|
+
});
|
|
298
|
+
});
|
|
255
299
|
// Mock the wrapper methods for fetching message events
|
|
256
300
|
mockInbox.getMessageSentEvents.mockImplementation((fromBlock, toBlock)=>Promise.resolve(this.getMessageSentLogs(fromBlock, toBlock)));
|
|
257
|
-
mockInbox.getMessageSentEventByHash.mockImplementation((
|
|
301
|
+
mockInbox.getMessageSentEventByHash.mockImplementation((msgHash, l1BlockHash)=>Promise.resolve(this.getMessageSentLogByHash(msgHash, l1BlockHash)));
|
|
258
302
|
return mockInbox;
|
|
259
303
|
}
|
|
260
304
|
/** Creates mock PublicClient that reads from this fake state. */ createMockPublicClient() {
|
|
261
305
|
const publicClient = mock();
|
|
262
306
|
publicClient.getChainId.mockResolvedValue(1);
|
|
263
307
|
publicClient.getBlockNumber.mockImplementation(()=>Promise.resolve(this.l1BlockNumber));
|
|
264
|
-
// Use async function pattern that existing test uses for getBlock
|
|
265
308
|
publicClient.getBlock.mockImplementation(async (args = {})=>{
|
|
266
|
-
|
|
309
|
+
let blockNum;
|
|
310
|
+
if (args.blockTag === 'finalized') {
|
|
311
|
+
blockNum = this.finalizedL1BlockNumber;
|
|
312
|
+
} else {
|
|
313
|
+
blockNum = args.blockNumber ?? await publicClient.getBlockNumber();
|
|
314
|
+
}
|
|
267
315
|
return {
|
|
268
316
|
number: blockNum,
|
|
269
317
|
timestamp: BigInt(blockNum) * BigInt(this.config.ethereumSlotDuration) + this.config.l1GenesisTime,
|
|
@@ -310,10 +358,8 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
310
358
|
checkpointNumber: cpData.checkpointNumber,
|
|
311
359
|
archive: cpData.checkpoint.archive.root,
|
|
312
360
|
versionedBlobHashes: cpData.blobHashes.map((h)=>Buffer.from(h.slice(2), 'hex')),
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
payloadDigest: undefined,
|
|
316
|
-
attestationsHash: undefined
|
|
361
|
+
attestationsHash: cpData.attestationsHash,
|
|
362
|
+
payloadDigest: cpData.payloadDigest
|
|
317
363
|
}
|
|
318
364
|
}));
|
|
319
365
|
}
|
|
@@ -330,13 +376,31 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
330
376
|
}
|
|
331
377
|
}));
|
|
332
378
|
}
|
|
333
|
-
|
|
379
|
+
getMessageSentLogByHash(msgHash, l1BlockHash) {
|
|
380
|
+
const msg = this.messages.find((msg)=>msg.leaf.toString() === msgHash && Buffer32.fromBigInt(msg.l1BlockNumber).toString() === l1BlockHash);
|
|
381
|
+
if (!msg) {
|
|
382
|
+
return undefined;
|
|
383
|
+
}
|
|
384
|
+
return {
|
|
385
|
+
l1BlockNumber: msg.l1BlockNumber,
|
|
386
|
+
l1BlockHash: Buffer32.fromBigInt(msg.l1BlockNumber),
|
|
387
|
+
l1TransactionHash: `0x${msg.l1BlockNumber.toString(16)}`,
|
|
388
|
+
args: {
|
|
389
|
+
checkpointNumber: msg.checkpointNumber,
|
|
390
|
+
index: msg.index,
|
|
391
|
+
leaf: msg.leaf,
|
|
392
|
+
rollingHash: msg.rollingHash
|
|
393
|
+
}
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
async makeRollupTx(checkpoint, signers) {
|
|
334
397
|
const attestations = signers.map((signer)=>makeCheckpointAttestationFromCheckpoint(checkpoint, signer)).map((attestation)=>CommitteeAttestation.fromSignature(attestation.signature)).map((committeeAttestation)=>committeeAttestation.toViem());
|
|
335
398
|
const header = checkpoint.header.toViem();
|
|
336
|
-
const blobInput = getPrefixedEthBlobCommitments(getBlobsPerL1Block(checkpoint.toBlobFields()));
|
|
399
|
+
const blobInput = getPrefixedEthBlobCommitments(await getBlobsPerL1Block(checkpoint.toBlobFields()));
|
|
337
400
|
const archive = toHex(checkpoint.archive.root.toBuffer());
|
|
338
401
|
const attestationsAndSigners = new CommitteeAttestationsAndSigners(attestations.map((attestation)=>CommitteeAttestation.fromViem(attestation)));
|
|
339
402
|
const attestationsAndSignersSignature = makeAndSignCommitteeAttestationsAndSigners(attestationsAndSigners, signers[0]);
|
|
403
|
+
const packedAttestations = attestationsAndSigners.getPackedAttestations();
|
|
340
404
|
const rollupInput = encodeFunctionData({
|
|
341
405
|
abi: RollupAbi,
|
|
342
406
|
functionName: 'propose',
|
|
@@ -348,7 +412,7 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
348
412
|
feeAssetPriceModifier: 0n
|
|
349
413
|
}
|
|
350
414
|
},
|
|
351
|
-
|
|
415
|
+
packedAttestations,
|
|
352
416
|
attestationsAndSigners.getSigners().map((signer)=>signer.toString()),
|
|
353
417
|
attestationsAndSignersSignature.toViemSignature(),
|
|
354
418
|
blobInput
|
|
@@ -367,17 +431,47 @@ import { updateRollingHash } from '../structs/inbox_message.js';
|
|
|
367
431
|
]
|
|
368
432
|
]
|
|
369
433
|
});
|
|
370
|
-
|
|
434
|
+
// Compute attestationsHash (same logic as CalldataRetriever)
|
|
435
|
+
const attestationsHash = Buffer32.fromString(keccak256(encodeAbiParameters([
|
|
436
|
+
this.getCommitteeAttestationsStructDef()
|
|
437
|
+
], [
|
|
438
|
+
packedAttestations
|
|
439
|
+
])));
|
|
440
|
+
// Compute payloadDigest (same logic as CalldataRetriever)
|
|
441
|
+
const consensusPayload = ConsensusPayload.fromCheckpoint(checkpoint);
|
|
442
|
+
const payloadToSign = consensusPayload.getPayloadToSign(SignatureDomainSeparator.checkpointAttestation);
|
|
443
|
+
const payloadDigest = Buffer32.fromString(keccak256(payloadToSign));
|
|
444
|
+
const tx = {
|
|
371
445
|
input: multiCallInput,
|
|
372
446
|
hash: archive,
|
|
373
447
|
blockHash: archive,
|
|
374
448
|
to: MULTI_CALL_3_ADDRESS
|
|
375
449
|
};
|
|
450
|
+
return {
|
|
451
|
+
tx,
|
|
452
|
+
attestationsHash,
|
|
453
|
+
payloadDigest
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
/** Extracts the CommitteeAttestations struct definition from RollupAbi for hash computation. */ getCommitteeAttestationsStructDef() {
|
|
457
|
+
const proposeFunction = RollupAbi.find((item)=>item.type === 'function' && item.name === 'propose');
|
|
458
|
+
if (!proposeFunction) {
|
|
459
|
+
throw new Error('propose function not found in RollupAbi');
|
|
460
|
+
}
|
|
461
|
+
const attestationsParam = proposeFunction.inputs.find((param)=>param.name === '_attestations');
|
|
462
|
+
if (!attestationsParam) {
|
|
463
|
+
throw new Error('_attestations parameter not found in propose function');
|
|
464
|
+
}
|
|
465
|
+
const tupleParam = attestationsParam;
|
|
466
|
+
return {
|
|
467
|
+
type: 'tuple',
|
|
468
|
+
components: tupleParam.components || []
|
|
469
|
+
};
|
|
376
470
|
}
|
|
377
|
-
makeVersionedBlobHashes(checkpoint) {
|
|
378
|
-
return getBlobsPerL1Block(checkpoint.toBlobFields()).map((b)=>`0x${b.getEthVersionedBlobHash().toString('hex')}`);
|
|
471
|
+
async makeVersionedBlobHashes(checkpoint) {
|
|
472
|
+
return (await getBlobsPerL1Block(checkpoint.toBlobFields())).map((b)=>`0x${b.getEthVersionedBlobHash().toString('hex')}`);
|
|
379
473
|
}
|
|
380
|
-
makeBlobsFromCheckpoint(checkpoint) {
|
|
381
|
-
return getBlobsPerL1Block(checkpoint.toBlobFields());
|
|
474
|
+
async makeBlobsFromCheckpoint(checkpoint) {
|
|
475
|
+
return await getBlobsPerL1Block(checkpoint.toBlobFields());
|
|
382
476
|
}
|
|
383
477
|
}
|
|
@@ -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,11 @@ 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
|
+
getBlockDataByArchive(archive: Fr): Promise<BlockData | undefined>;
|
|
74
84
|
getBlockHeader(number: number | 'latest'): Promise<BlockHeader | undefined>;
|
|
75
85
|
getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]>;
|
|
86
|
+
getCheckpointsDataForEpoch(epochNumber: EpochNumber): Promise<CheckpointData[]>;
|
|
76
87
|
getCheckpointedBlocksForEpoch(epochNumber: EpochNumber): Promise<CheckpointedL2Block[]>;
|
|
77
88
|
getBlocksForSlot(slotNumber: SlotNumber): Promise<L2Block[]>;
|
|
78
89
|
getCheckpointedBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]>;
|
|
@@ -94,8 +105,8 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
94
105
|
*/
|
|
95
106
|
getSettledTxReceipt(txHash: TxHash): Promise<TxReceipt | undefined>;
|
|
96
107
|
getL2Tips(): Promise<L2Tips>;
|
|
97
|
-
|
|
98
|
-
|
|
108
|
+
getSyncedL2EpochNumber(): Promise<EpochNumber>;
|
|
109
|
+
getSyncedL2SlotNumber(): Promise<SlotNumber>;
|
|
99
110
|
isEpochComplete(_epochNumber: EpochNumber): Promise<boolean>;
|
|
100
111
|
getL1Constants(): Promise<L1RollupConstants>;
|
|
101
112
|
getGenesisValues(): Promise<{
|
|
@@ -121,5 +132,15 @@ export declare class MockL2BlockSource implements L2BlockSource, ContractDataSou
|
|
|
121
132
|
syncImmediate(): Promise<void>;
|
|
122
133
|
isPendingChainInvalid(): Promise<boolean>;
|
|
123
134
|
getPendingChainValidationStatus(): Promise<ValidateCheckpointResult>;
|
|
135
|
+
getProposedCheckpoint(): Promise<ProposedCheckpointData | undefined>;
|
|
136
|
+
getProposedCheckpointOnly(): Promise<ProposedCheckpointData | undefined>;
|
|
137
|
+
/** Returns checkpoints whose slot falls within the given epoch. */
|
|
138
|
+
private getCheckpointsInEpoch;
|
|
139
|
+
/** Creates a mock L1PublishedData for a checkpoint. */
|
|
140
|
+
private mockL1DataForCheckpoint;
|
|
141
|
+
/** Creates a CheckpointedL2Block from a block using stored checkpoint info. */
|
|
142
|
+
private toCheckpointedBlock;
|
|
143
|
+
/** Finds the checkpoint number for a block, or undefined if the block is not in any checkpoint. */
|
|
144
|
+
private findCheckpointNumberForBlock;
|
|
124
145
|
}
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
146
|
+
//# 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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"}
|