@aztec/archiver 4.0.0-nightly.20260116 → 4.0.0-nightly.20260117
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 +10 -2
- package/dest/archiver.d.ts +3 -2
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +7 -6
- package/dest/modules/data_source_base.d.ts +2 -1
- package/dest/modules/data_source_base.d.ts.map +1 -1
- package/dest/modules/data_source_base.js +3 -0
- package/dest/modules/data_store_updater.d.ts +29 -6
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +117 -29
- package/dest/modules/l1_synchronizer.d.ts +5 -3
- package/dest/modules/l1_synchronizer.d.ts.map +1 -1
- package/dest/modules/l1_synchronizer.js +98 -52
- package/dest/store/block_store.d.ts +16 -2
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +62 -8
- package/dest/store/kv_archiver_store.d.ts +14 -2
- package/dest/store/kv_archiver_store.d.ts.map +1 -1
- package/dest/store/kv_archiver_store.js +14 -0
- package/dest/store/log_store.d.ts +1 -1
- package/dest/store/log_store.d.ts.map +1 -1
- package/dest/store/log_store.js +69 -48
- package/dest/test/fake_l1_state.d.ts +18 -1
- package/dest/test/fake_l1_state.d.ts.map +1 -1
- package/dest/test/fake_l1_state.js +36 -17
- package/dest/test/mock_l2_block_source.d.ts +2 -1
- package/dest/test/mock_l2_block_source.d.ts.map +1 -1
- package/dest/test/mock_l2_block_source.js +4 -0
- package/package.json +13 -13
- package/src/archiver.ts +8 -6
- package/src/modules/data_source_base.ts +4 -0
- package/src/modules/data_store_updater.ts +143 -42
- package/src/modules/l1_synchronizer.ts +113 -61
- package/src/store/block_store.ts +79 -10
- package/src/store/kv_archiver_store.ts +19 -1
- package/src/store/log_store.ts +112 -76
- package/src/test/fake_l1_state.ts +62 -24
- package/src/test/mock_l2_block_source.ts +5 -0
package/README.md
CHANGED
|
@@ -10,7 +10,8 @@ The interfaces `L2BlockSource`, `L2LogsSource`, and `ContractDataSource` define
|
|
|
10
10
|
|
|
11
11
|
The archiver emits events for other subsystems to react to state changes:
|
|
12
12
|
|
|
13
|
-
- **`
|
|
13
|
+
- **`L2PruneUnproven`**: Emitted before unwinding checkpoints due to epoch prune. Contains the epoch number and affected blocks. Subscribers (e.g., world-state) use this to prepare for the unwind.
|
|
14
|
+
- **`L2PruneUncheckpointed`**: Emitted when provisional blocks are pruned due to checkpoint mismatch or slot expiration. Contains the slot number and affected blocks.
|
|
14
15
|
- **`L2BlockProven`**: Emitted when the proven checkpoint advances. Contains the block number, slot, and epoch.
|
|
15
16
|
- **`InvalidAttestationsCheckpointDetected`**: Emitted when a checkpoint with invalid attestations is encountered during sync.
|
|
16
17
|
|
|
@@ -29,6 +30,7 @@ sync()
|
|
|
29
30
|
└── syncFromL1()
|
|
30
31
|
├── handleL1ToL2Messages() # Sync messages from Inbox contract
|
|
31
32
|
├── handleCheckpoints() # Sync checkpoints from Rollup contract
|
|
33
|
+
├── pruneUncheckpointedBlocks() # Prune provisional blocks from expired slots
|
|
32
34
|
├── handleEpochPrune() # Proactive unwind before proof window expires
|
|
33
35
|
└── checkForNewCheckpointsBeforeL1SyncPoint() # Handle L1 reorg edge case
|
|
34
36
|
```
|
|
@@ -89,6 +91,12 @@ archiver.addBlock(block); // Queues block for processing
|
|
|
89
91
|
|
|
90
92
|
Queued blocks are processed at the start of each sync iteration. This allows the sequencer to make blocks available locally before checkpoint publication. This is used to make the `proposed` chain (ie blocks that have been broadcasted via p2p but not checkpointed on L1) available to consumers.
|
|
91
93
|
|
|
94
|
+
Blocks added via `addBlock()` are considered "provisional" until they appear in an L1 checkpoint. These provisional blocks may need to be reconciled when:
|
|
95
|
+
- **Checkpoint mismatch**: A checkpoint lands on L1 with different blocks than stored locally (e.g., a different proposer won the slot)
|
|
96
|
+
- **Slot expiration**: An L2 slot ends without any checkpoint being mined on L1
|
|
97
|
+
|
|
98
|
+
When `handleCheckpoints()` processes incoming checkpoints, it compares archive roots of local blocks against the checkpoint's blocks. If they differ, local blocks are pruned and replaced with the checkpoint's blocks. After checkpoint sync, `pruneUncheckpointedBlocks()` removes any remaining provisional blocks from slots that have ended. Both cases emit `L2PruneUncheckpointed`.
|
|
99
|
+
|
|
92
100
|
### Edge Cases
|
|
93
101
|
|
|
94
102
|
#### L1 Reorgs
|
|
@@ -115,7 +123,7 @@ This handles the case where an epoch's proof submission window has passed withou
|
|
|
115
123
|
**Example**: The proven checkpoint is 10, and pending checkpoints 11-15 exist locally. The proof submission window for the epoch containing checkpoint 11 will expire. On sync:
|
|
116
124
|
1. Archiver calls `canPruneAtTime()` with the next L1 block's timestamp — returns true
|
|
117
125
|
2. Archiver unwinds checkpoints 11-15
|
|
118
|
-
3. Emits `
|
|
126
|
+
3. Emits `L2PruneUnproven` event so subscribed subsystems can react
|
|
119
127
|
4. Local state now shows checkpoint 10 as latest
|
|
120
128
|
|
|
121
129
|
#### Checkpoints Behind Syncpoint
|
package/dest/archiver.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export declare class Archiver extends ArchiverDataSourceBase implements L2BlockS
|
|
|
44
44
|
genesisArchiveRoot: Fr;
|
|
45
45
|
};
|
|
46
46
|
private readonly log;
|
|
47
|
-
/** Event emitter for archiver events (L2BlockProven,
|
|
47
|
+
/** Event emitter for archiver events (L2BlockProven, L2PruneUnproven, L2PruneUncheckpointed, etc). */
|
|
48
48
|
readonly events: ArchiverEmitter;
|
|
49
49
|
/** A loop in which we will be continually fetching new checkpoints. */
|
|
50
50
|
private runningPromise;
|
|
@@ -127,8 +127,9 @@ export declare class Archiver extends ArchiverDataSourceBase implements L2BlockS
|
|
|
127
127
|
/** Returns whether the archiver has completed an initial sync run successfully. */
|
|
128
128
|
isInitialSyncComplete(): boolean;
|
|
129
129
|
unwindCheckpoints(from: CheckpointNumber, checkpointsToUnwind: number): Promise<boolean>;
|
|
130
|
+
/** Used by TXE to add checkpoints directly without syncing from L1. */
|
|
130
131
|
addCheckpoints(checkpoints: PublishedCheckpoint[], pendingChainValidationStatus?: ValidateCheckpointResult): Promise<boolean>;
|
|
131
132
|
getL2Tips(): Promise<L2Tips>;
|
|
132
133
|
rollbackTo(targetL2BlockNumber: BlockNumber): Promise<void>;
|
|
133
134
|
}
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQXVCLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hGLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFcEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFHcEIsVUFBVSxFQUNWLEtBQUssV0FBVyxFQUNoQixLQUFLLE1BQU0sRUFDWCxLQUFLLHdCQUF3QixFQUM5QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFDTCxLQUFLLGlCQUFpQixFQUt2QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLFNBQVMsRUFB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
|
package/dest/archiver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../src/archiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAuB,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACzG,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,KAAK,eAAe,EAGpB,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,KAAK,iBAAiB,EAKvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAEvG,OAAO,EAAE,KAAK,cAAc,EAAqB,MAAM,aAAa,CAAC;AAGrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,2DAA2D;AAC3D,YAAY,EAAE,eAAe,EAAE,CAAC;AAShC,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,mBAAmB,CAAC;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,sBAAuB,YAAW,WAAW,EAAE,SAAS;IAsClF,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAI5B,QAAQ,CAAC,SAAS,EAAE,mBAAmB;IACvC,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,QAAQ,CAAC,UAAU;uBAEC,WAAW,EAAE,iBAAiB,GAAG;QAAE,gBAAgB,EAAE,QAAQ,CAAC;QAAC,kBAAkB,EAAE,EAAE,CAAA;KAAE;IAGnH,OAAO,CAAC,QAAQ,CAAC,GAAG;IAzDtB
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../src/archiver.ts"],"names":[],"mappings":"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"}
|
package/dest/archiver.js
CHANGED
|
@@ -412,7 +412,7 @@ _dec = trackSpan('Archiver.sync');
|
|
|
412
412
|
]
|
|
413
413
|
], []));
|
|
414
414
|
}
|
|
415
|
-
/** Event emitter for archiver events (L2BlockProven,
|
|
415
|
+
/** Event emitter for archiver events (L2BlockProven, L2PruneUnproven, L2PruneUncheckpointed, etc). */ events;
|
|
416
416
|
/** A loop in which we will be continually fetching new checkpoints. */ runningPromise;
|
|
417
417
|
/** L1 synchronizer that handles fetching checkpoints and messages from L1. */ synchronizer;
|
|
418
418
|
initialSyncComplete;
|
|
@@ -512,7 +512,7 @@ _dec = trackSpan('Archiver.sync');
|
|
|
512
512
|
// Process each block individually to properly resolve/reject each promise
|
|
513
513
|
for (const { block, resolve, reject } of queuedItems){
|
|
514
514
|
try {
|
|
515
|
-
await this.updater.
|
|
515
|
+
await this.updater.addBlocks([
|
|
516
516
|
block
|
|
517
517
|
]);
|
|
518
518
|
this.log.debug(`Added block ${block.number} to store`);
|
|
@@ -628,10 +628,11 @@ _dec = trackSpan('Archiver.sync');
|
|
|
628
628
|
return this.initialSyncComplete;
|
|
629
629
|
}
|
|
630
630
|
unwindCheckpoints(from, checkpointsToUnwind) {
|
|
631
|
-
return this.updater.
|
|
631
|
+
return this.updater.unwindCheckpoints(from, checkpointsToUnwind);
|
|
632
632
|
}
|
|
633
|
-
addCheckpoints(checkpoints, pendingChainValidationStatus) {
|
|
634
|
-
|
|
633
|
+
/** Used by TXE to add checkpoints directly without syncing from L1. */ async addCheckpoints(checkpoints, pendingChainValidationStatus) {
|
|
634
|
+
await this.updater.setNewCheckpointData(checkpoints, pendingChainValidationStatus);
|
|
635
|
+
return true;
|
|
635
636
|
}
|
|
636
637
|
async getL2Tips() {
|
|
637
638
|
const [latestBlockNumber, provenBlockNumber, checkpointedBlockNumber] = await Promise.all([
|
|
@@ -746,7 +747,7 @@ _dec = trackSpan('Archiver.sync');
|
|
|
746
747
|
}
|
|
747
748
|
const targetL1BlockHash = Buffer32.fromString(targetL1Block.hash);
|
|
748
749
|
this.log.info(`Unwinding ${blocksToUnwind} checkpoints from L2 block ${currentL2Block}`);
|
|
749
|
-
await this.updater.
|
|
750
|
+
await this.updater.unwindCheckpoints(CheckpointNumber(currentL2Block), blocksToUnwind);
|
|
750
751
|
this.log.info(`Unwinding L1 to L2 messages to checkpoint ${targetCheckpointNumber}`);
|
|
751
752
|
await this.store.rollbackL1ToL2MessagesToCheckpoint(targetCheckpointNumber);
|
|
752
753
|
this.log.info(`Setting L1 syncpoints to ${targetL1BlockNumber}`);
|
|
@@ -70,6 +70,7 @@ export declare abstract class ArchiverDataSourceBase implements ArchiverDataSour
|
|
|
70
70
|
getL1ToL2Messages(checkpointNumber: CheckpointNumber): Promise<Fr[]>;
|
|
71
71
|
getL1ToL2MessageIndex(l1ToL2Message: Fr): Promise<bigint | undefined>;
|
|
72
72
|
getPublishedCheckpoints(checkpointNumber: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
|
|
73
|
+
getBlocksForSlot(slotNumber: SlotNumber): Promise<L2BlockNew[]>;
|
|
73
74
|
getBlocksForEpoch(epochNumber: EpochNumber): Promise<L2Block[]>;
|
|
74
75
|
getBlockHeadersForEpoch(epochNumber: EpochNumber): Promise<BlockHeader[]>;
|
|
75
76
|
getCheckpointsForEpoch(epochNumber: EpochNumber): Promise<Checkpoint[]>;
|
|
@@ -80,4 +81,4 @@ export declare abstract class ArchiverDataSourceBase implements ArchiverDataSour
|
|
|
80
81
|
getPublishedBlockByArchive(archive: Fr): Promise<PublishedL2Block | undefined>;
|
|
81
82
|
private buildOldBlockFromCheckpointedBlock;
|
|
82
83
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9zb3VyY2VfYmFzZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZHVsZXMvZGF0YV9zb3VyY2VfYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkgsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyxtQkFBbUIsRUFFeEIsT0FBTyxFQUNQLEtBQUssVUFBVSxFQUNmLEtBQUssTUFBTSxFQUNYLGdCQUFnQixFQUNqQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ILE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUF3QixNQUFNLDZCQUE2QixDQUFDO0FBQzNGLE9BQU8sS0FBSyxFQUFFLDRCQUE0QixFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0csT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkYsT0FBTyxLQUFL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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_source_base.d.ts","sourceRoot":"","sources":["../../src/modules/data_source_base.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"data_source_base.d.ts","sourceRoot":"","sources":["../../src/modules/data_source_base.ts"],"names":[],"mappings":"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"}
|
|
@@ -167,6 +167,9 @@ import { getSlotRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
|
|
|
167
167
|
}
|
|
168
168
|
return fullCheckpoints;
|
|
169
169
|
}
|
|
170
|
+
getBlocksForSlot(slotNumber) {
|
|
171
|
+
return this.store.getBlocksForSlot(slotNumber);
|
|
172
|
+
}
|
|
170
173
|
async getBlocksForEpoch(epochNumber) {
|
|
171
174
|
if (!this.l1Constants) {
|
|
172
175
|
throw new Error('L1 constants not set');
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { BlockNumber, type CheckpointNumber } from '@aztec/foundation/branded-types';
|
|
2
2
|
import type { L2BlockNew, ValidateCheckpointResult } from '@aztec/stdlib/block';
|
|
3
3
|
import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
4
4
|
import type { KVArchiverDataStore } from '../store/kv_archiver_store.js';
|
|
5
|
+
/** Result of adding checkpoints with information about any pruned blocks. */
|
|
6
|
+
type ReconcileCheckpointsResult = {
|
|
7
|
+
/** Blocks that were pruned due to conflict with L1 checkpoints. */
|
|
8
|
+
prunedBlocks: L2BlockNew[] | undefined;
|
|
9
|
+
/** Last block number that was already inserted locally, or undefined if none. */
|
|
10
|
+
lastAlreadyInsertedBlockNumber: BlockNumber | undefined;
|
|
11
|
+
};
|
|
5
12
|
/** Archiver helper module to handle updates to the data store. */
|
|
6
13
|
export declare class ArchiverDataStoreUpdater {
|
|
7
14
|
private store;
|
|
@@ -16,17 +23,28 @@ export declare class ArchiverDataStoreUpdater {
|
|
|
16
23
|
* @param pendingChainValidationStatus - Optional validation status to set.
|
|
17
24
|
* @returns True if the operation is successful.
|
|
18
25
|
*/
|
|
19
|
-
|
|
26
|
+
addBlocks(blocks: L2BlockNew[], pendingChainValidationStatus?: ValidateCheckpointResult): Promise<boolean>;
|
|
20
27
|
/**
|
|
28
|
+
* Reconciles local blocks with incoming checkpoints from L1.
|
|
21
29
|
* Adds checkpoints to the store with contract class/instance extraction from logs.
|
|
30
|
+
* Prunes any local blocks that conflict with checkpoint data (by comparing archive roots).
|
|
22
31
|
* Extracts ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated events,
|
|
23
32
|
* and individually broadcasted functions from the checkpoint block logs.
|
|
24
33
|
*
|
|
25
34
|
* @param checkpoints - The published checkpoints to add.
|
|
26
35
|
* @param pendingChainValidationStatus - Optional validation status to set.
|
|
27
|
-
* @returns
|
|
36
|
+
* @returns Result with information about any pruned blocks.
|
|
37
|
+
*/
|
|
38
|
+
setNewCheckpointData(checkpoints: PublishedCheckpoint[], pendingChainValidationStatus?: ValidateCheckpointResult): Promise<ReconcileCheckpointsResult>;
|
|
39
|
+
private pruneMismatchingLocalBlocks;
|
|
40
|
+
/**
|
|
41
|
+
* Removes all blocks strictly after the specified block number and cleans up associated contract data.
|
|
42
|
+
* This handles removal of provisionally added blocks along with their contract classes/instances.
|
|
43
|
+
*
|
|
44
|
+
* @param blockNumber - Remove all blocks with number greater than this.
|
|
45
|
+
* @returns The removed blocks.
|
|
28
46
|
*/
|
|
29
|
-
|
|
47
|
+
removeBlocksAfter(blockNumber: BlockNumber): Promise<L2BlockNew[]>;
|
|
30
48
|
/**
|
|
31
49
|
* Unwinds checkpoints from the store with reverse contract extraction.
|
|
32
50
|
* Deletes ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated data
|
|
@@ -36,11 +54,16 @@ export declare class ArchiverDataStoreUpdater {
|
|
|
36
54
|
* @param checkpointsToUnwind - The number of checkpoints to unwind.
|
|
37
55
|
* @returns True if the operation is successful.
|
|
38
56
|
*/
|
|
39
|
-
|
|
57
|
+
unwindCheckpoints(from: CheckpointNumber, checkpointsToUnwind: number): Promise<boolean>;
|
|
58
|
+
/** Extracts and stores contract data from a single block. */
|
|
40
59
|
private addBlockDataToDB;
|
|
60
|
+
/** Removes contract data associated with a block. */
|
|
61
|
+
private removeBlockDataFromDB;
|
|
62
|
+
private editContractBlockData;
|
|
41
63
|
private updatePublishedContractClasses;
|
|
42
64
|
private updateDeployedContractInstances;
|
|
43
65
|
private updateUpdatedContractInstances;
|
|
44
66
|
private storeBroadcastedIndividualFunctions;
|
|
45
67
|
}
|
|
46
|
-
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9zdG9yZV91cGRhdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlcy9kYXRhX3N0b3JlX3VwZGF0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFZckYsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEYsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQWFwRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBUXpFLDZFQUE2RTtBQUM3RSxLQUFLLDBCQUEwQixHQUFHO0lBQ2hDLG1FQUFtRTtJQUNuRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQ3ZDLGlGQUFpRjtJQUNqRiw4QkFBOEIsRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDO0NBQ3pELENBQUM7QUFFRixrRUFBa0U7QUFDbEUscUJBQWEsd0JBQXdCO0lBR3ZCLE9BQU8sQ0FBQyxLQUFLO0lBRnpCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUEwQztJQUU5RCxZQUFvQixLQUFLLEVBQUUsbUJBQW1CLEVBQUk7SUFFbEQ7Ozs7Ozs7O09BUUc7SUFDSSxTQUFTLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLDRCQUE0QixDQUFDLEVBQUUsd0JBQXdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQWVoSDtJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxvQkFBb0IsQ0FDekIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLEVBQ2xDLDRCQUE0QixDQUFDLEVBQUUsd0JBQXdCLEdBQ3RELE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQXVCckM7WUFRYSwyQkFBMkI7SUFtRXpDOzs7Ozs7T0FNRztJQUNJLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBYXhFO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDVSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0E4QnBHO0lBRUQsNkRBQTZEO0lBQzdELE9BQU8sQ0FBQyxnQkFBZ0I7SUFJeEIscURBQXFEO0lBQ3JELE9BQU8sQ0FBQyxxQkFBcUI7WUFLZixxQkFBcUI7WUFvQnJCLDhCQUE4QjtZQTRCOUIsK0JBQStCO1lBeUIvQiw4QkFBOEI7WUE2QjlCLG1DQUFtQztDQXdEbEQifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_store_updater.d.ts","sourceRoot":"","sources":["../../src/modules/data_store_updater.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"data_store_updater.d.ts","sourceRoot":"","sources":["../../src/modules/data_store_updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAYrF,OAAO,KAAK,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAapE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAQzE,6EAA6E;AAC7E,KAAK,0BAA0B,GAAG;IAChC,mEAAmE;IACnE,YAAY,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IACvC,iFAAiF;IACjF,8BAA8B,EAAE,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,kEAAkE;AAClE,qBAAa,wBAAwB;IAGvB,OAAO,CAAC,KAAK;IAFzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0C;IAE9D,YAAoB,KAAK,EAAE,mBAAmB,EAAI;IAElD;;;;;;;;OAQG;IACI,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,4BAA4B,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC,CAehH;IAED;;;;;;;;;;OAUG;IACI,oBAAoB,CACzB,WAAW,EAAE,mBAAmB,EAAE,EAClC,4BAA4B,CAAC,EAAE,wBAAwB,GACtD,OAAO,CAAC,0BAA0B,CAAC,CAuBrC;YAQa,2BAA2B;IAmEzC;;;;;;OAMG;IACI,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAaxE;IAED;;;;;;;;OAQG;IACU,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BpG;IAED,6DAA6D;IAC7D,OAAO,CAAC,gBAAgB;IAIxB,qDAAqD;IACrD,OAAO,CAAC,qBAAqB;YAKf,qBAAqB;YAoBrB,8BAA8B;YA4B9B,+BAA+B;YAyB/B,8BAA8B;YA6B9B,mCAAmC;CAwDlD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
4
|
import { ContractClassPublishedEvent, PrivateFunctionBroadcastedEvent, UtilityFunctionBroadcastedEvent } from '@aztec/protocol-contracts/class-registry';
|
|
@@ -24,7 +25,7 @@ import groupBy from 'lodash.groupby';
|
|
|
24
25
|
* @param blocks - The L2 blocks to add.
|
|
25
26
|
* @param pendingChainValidationStatus - Optional validation status to set.
|
|
26
27
|
* @returns True if the operation is successful.
|
|
27
|
-
*/
|
|
28
|
+
*/ addBlocks(blocks, pendingChainValidationStatus) {
|
|
28
29
|
return this.store.transactionAsync(async ()=>{
|
|
29
30
|
await this.store.addBlocks(blocks);
|
|
30
31
|
const opResults = await Promise.all([
|
|
@@ -39,26 +40,120 @@ import groupBy from 'lodash.groupby';
|
|
|
39
40
|
});
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
43
|
+
* Reconciles local blocks with incoming checkpoints from L1.
|
|
42
44
|
* Adds checkpoints to the store with contract class/instance extraction from logs.
|
|
45
|
+
* Prunes any local blocks that conflict with checkpoint data (by comparing archive roots).
|
|
43
46
|
* Extracts ContractClassPublished, ContractInstancePublished, ContractInstanceUpdated events,
|
|
44
47
|
* and individually broadcasted functions from the checkpoint block logs.
|
|
45
48
|
*
|
|
46
49
|
* @param checkpoints - The published checkpoints to add.
|
|
47
50
|
* @param pendingChainValidationStatus - Optional validation status to set.
|
|
48
|
-
* @returns
|
|
49
|
-
*/
|
|
51
|
+
* @returns Result with information about any pruned blocks.
|
|
52
|
+
*/ setNewCheckpointData(checkpoints, pendingChainValidationStatus) {
|
|
50
53
|
return this.store.transactionAsync(async ()=>{
|
|
54
|
+
// Before adding checkpoints, check for conflicts with local blocks if any
|
|
55
|
+
const { prunedBlocks, lastAlreadyInsertedBlockNumber } = await this.pruneMismatchingLocalBlocks(checkpoints);
|
|
51
56
|
await this.store.addCheckpoints(checkpoints);
|
|
52
|
-
|
|
53
|
-
const
|
|
57
|
+
// Filter out blocks that were already inserted via addBlocks() to avoid duplicating logs/contract data
|
|
58
|
+
const newBlocks = checkpoints.flatMap((ch)=>ch.checkpoint.blocks).filter((b)=>lastAlreadyInsertedBlockNumber === undefined || b.number > lastAlreadyInsertedBlockNumber);
|
|
59
|
+
await Promise.all([
|
|
54
60
|
// Update the pending chain validation status if provided
|
|
55
61
|
pendingChainValidationStatus && this.store.setPendingChainValidationStatus(pendingChainValidationStatus),
|
|
56
62
|
// Add any logs emitted during the retrieved blocks
|
|
57
|
-
this.store.addLogs(
|
|
63
|
+
this.store.addLogs(newBlocks),
|
|
58
64
|
// Unroll all logs emitted during the retrieved blocks and extract any contract classes and instances from them
|
|
59
|
-
...
|
|
65
|
+
...newBlocks.map((block)=>this.addBlockDataToDB(block))
|
|
60
66
|
]);
|
|
61
|
-
return
|
|
67
|
+
return {
|
|
68
|
+
prunedBlocks,
|
|
69
|
+
lastAlreadyInsertedBlockNumber
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Checks for local proposed blocks that do not match the ones to be checkpointed and prunes them.
|
|
75
|
+
* This method handles multiple checkpoints but returns after pruning the first conflict found.
|
|
76
|
+
* This is correct because pruning from the first conflict point removes all subsequent blocks,
|
|
77
|
+
* and when checkpoints are added afterward, they include all the correct blocks.
|
|
78
|
+
*/ async pruneMismatchingLocalBlocks(checkpoints) {
|
|
79
|
+
const [lastCheckpointedBlockNumber, lastBlockNumber] = await Promise.all([
|
|
80
|
+
this.store.getCheckpointedL2BlockNumber(),
|
|
81
|
+
this.store.getLatestBlockNumber()
|
|
82
|
+
]);
|
|
83
|
+
// Exit early if there are no local uncheckpointed blocks
|
|
84
|
+
if (lastBlockNumber === lastCheckpointedBlockNumber) {
|
|
85
|
+
return {
|
|
86
|
+
prunedBlocks: undefined,
|
|
87
|
+
lastAlreadyInsertedBlockNumber: undefined
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Get all uncheckpointed local blocks
|
|
91
|
+
const uncheckpointedLocalBlocks = await this.store.getBlocks(BlockNumber.add(lastCheckpointedBlockNumber, 1), lastBlockNumber - lastCheckpointedBlockNumber);
|
|
92
|
+
let lastAlreadyInsertedBlockNumber;
|
|
93
|
+
for (const publishedCheckpoint of checkpoints){
|
|
94
|
+
const checkpointBlocks = publishedCheckpoint.checkpoint.blocks;
|
|
95
|
+
const slot = publishedCheckpoint.checkpoint.slot;
|
|
96
|
+
const localBlocksInSlot = uncheckpointedLocalBlocks.filter((b)=>b.slot === slot);
|
|
97
|
+
if (checkpointBlocks.length === 0) {
|
|
98
|
+
this.log.warn(`Checkpoint ${publishedCheckpoint.checkpoint.number} for slot ${slot} has no blocks`);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// Find the first checkpoint block that conflicts with an existing local block and prune local afterwards
|
|
102
|
+
for (const checkpointBlock of checkpointBlocks){
|
|
103
|
+
const blockNumber = checkpointBlock.number;
|
|
104
|
+
const existingBlock = localBlocksInSlot.find((b)=>b.number === blockNumber);
|
|
105
|
+
const blockInfos = {
|
|
106
|
+
existingBlock: existingBlock?.toBlockInfo(),
|
|
107
|
+
checkpointBlock: checkpointBlock.toBlockInfo()
|
|
108
|
+
};
|
|
109
|
+
if (!existingBlock) {
|
|
110
|
+
this.log.verbose(`No local block found for checkpointed block number ${blockNumber}`, blockInfos);
|
|
111
|
+
} else if (existingBlock.archive.root.equals(checkpointBlock.archive.root)) {
|
|
112
|
+
this.log.verbose(`Block number ${blockNumber} already inserted and matches checkpoint`, blockInfos);
|
|
113
|
+
lastAlreadyInsertedBlockNumber = blockNumber;
|
|
114
|
+
} else {
|
|
115
|
+
this.log.warn(`Conflict detected at block ${blockNumber} between checkpointed and local block`, blockInfos);
|
|
116
|
+
const prunedBlocks = await this.removeBlocksAfter(BlockNumber(blockNumber - 1));
|
|
117
|
+
return {
|
|
118
|
+
prunedBlocks,
|
|
119
|
+
lastAlreadyInsertedBlockNumber
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// If local has more blocks than the checkpoint (e.g., local has [2,3,4] but checkpoint has [2,3]),
|
|
124
|
+
// we need to prune the extra local blocks so they match what was checkpointed
|
|
125
|
+
const lastCheckpointBlockNumber = checkpointBlocks.at(-1).number;
|
|
126
|
+
const lastLocalBlockNumber = localBlocksInSlot.at(-1)?.number;
|
|
127
|
+
if (lastLocalBlockNumber !== undefined && lastLocalBlockNumber > lastCheckpointBlockNumber) {
|
|
128
|
+
this.log.warn(`Local chain for slot ${slot} ends at block ${lastLocalBlockNumber} but checkpoint ends at ${lastCheckpointBlockNumber}. Pruning blocks after block ${lastCheckpointBlockNumber}.`);
|
|
129
|
+
const prunedBlocks = await this.removeBlocksAfter(lastCheckpointBlockNumber);
|
|
130
|
+
return {
|
|
131
|
+
prunedBlocks,
|
|
132
|
+
lastAlreadyInsertedBlockNumber
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
prunedBlocks: undefined,
|
|
138
|
+
lastAlreadyInsertedBlockNumber
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Removes all blocks strictly after the specified block number and cleans up associated contract data.
|
|
143
|
+
* This handles removal of provisionally added blocks along with their contract classes/instances.
|
|
144
|
+
*
|
|
145
|
+
* @param blockNumber - Remove all blocks with number greater than this.
|
|
146
|
+
* @returns The removed blocks.
|
|
147
|
+
*/ removeBlocksAfter(blockNumber) {
|
|
148
|
+
return this.store.transactionAsync(async ()=>{
|
|
149
|
+
// First get the blocks to be removed so we can clean up contract data
|
|
150
|
+
const removedBlocks = await this.store.removeBlocksAfter(blockNumber);
|
|
151
|
+
// Clean up contract data and logs for the removed blocks
|
|
152
|
+
await Promise.all([
|
|
153
|
+
this.store.deleteLogs(removedBlocks),
|
|
154
|
+
...removedBlocks.map((block)=>this.removeBlockDataFromDB(block))
|
|
155
|
+
]);
|
|
156
|
+
return removedBlocks;
|
|
62
157
|
});
|
|
63
158
|
}
|
|
64
159
|
/**
|
|
@@ -69,7 +164,7 @@ import groupBy from 'lodash.groupby';
|
|
|
69
164
|
* @param from - The checkpoint number to unwind from (must be the current tip).
|
|
70
165
|
* @param checkpointsToUnwind - The number of checkpoints to unwind.
|
|
71
166
|
* @returns True if the operation is successful.
|
|
72
|
-
*/ async
|
|
167
|
+
*/ async unwindCheckpoints(from, checkpointsToUnwind) {
|
|
73
168
|
if (checkpointsToUnwind <= 0) {
|
|
74
169
|
throw new Error(`Cannot unwind ${checkpointsToUnwind} blocks`);
|
|
75
170
|
}
|
|
@@ -91,35 +186,28 @@ import groupBy from 'lodash.groupby';
|
|
|
91
186
|
this.store.setPendingChainValidationStatus({
|
|
92
187
|
valid: true
|
|
93
188
|
}),
|
|
94
|
-
//
|
|
95
|
-
...blocks.map(
|
|
96
|
-
const contractClassLogs = block.body.txEffects.flatMap((txEffect)=>txEffect.contractClassLogs);
|
|
97
|
-
// ContractInstancePublished event logs are broadcast in privateLogs.
|
|
98
|
-
const privateLogs = block.body.txEffects.flatMap((txEffect)=>txEffect.privateLogs);
|
|
99
|
-
const publicLogs = block.body.txEffects.flatMap((txEffect)=>txEffect.publicLogs);
|
|
100
|
-
return (await Promise.all([
|
|
101
|
-
this.updatePublishedContractClasses(contractClassLogs, block.number, 1),
|
|
102
|
-
this.updateDeployedContractInstances(privateLogs, block.number, 1),
|
|
103
|
-
this.updateUpdatedContractInstances(publicLogs, block.header.globalVariables.timestamp, 1)
|
|
104
|
-
])).every(Boolean);
|
|
105
|
-
}),
|
|
189
|
+
// Remove contract data for all blocks being unwound
|
|
190
|
+
...blocks.map((block)=>this.removeBlockDataFromDB(block)),
|
|
106
191
|
this.store.deleteLogs(blocks),
|
|
107
192
|
this.store.unwindCheckpoints(from, checkpointsToUnwind)
|
|
108
193
|
]);
|
|
109
194
|
return opResults.every(Boolean);
|
|
110
195
|
}
|
|
111
|
-
/**
|
|
112
|
-
|
|
113
|
-
|
|
196
|
+
/** Extracts and stores contract data from a single block. */ addBlockDataToDB(block) {
|
|
197
|
+
return this.editContractBlockData(block, 0);
|
|
198
|
+
}
|
|
199
|
+
/** Removes contract data associated with a block. */ removeBlockDataFromDB(block) {
|
|
200
|
+
return this.editContractBlockData(block, 1);
|
|
201
|
+
}
|
|
202
|
+
/** Adds or remove contract data associated with a block. */ async editContractBlockData(block, operation) {
|
|
114
203
|
const contractClassLogs = block.body.txEffects.flatMap((txEffect)=>txEffect.contractClassLogs);
|
|
115
|
-
// ContractInstancePublished event logs are broadcast in privateLogs.
|
|
116
204
|
const privateLogs = block.body.txEffects.flatMap((txEffect)=>txEffect.privateLogs);
|
|
117
205
|
const publicLogs = block.body.txEffects.flatMap((txEffect)=>txEffect.publicLogs);
|
|
118
206
|
return (await Promise.all([
|
|
119
|
-
this.updatePublishedContractClasses(contractClassLogs, block.number,
|
|
120
|
-
this.updateDeployedContractInstances(privateLogs, block.number,
|
|
121
|
-
this.updateUpdatedContractInstances(publicLogs, block.header.globalVariables.timestamp,
|
|
122
|
-
this.storeBroadcastedIndividualFunctions(contractClassLogs, block.number)
|
|
207
|
+
this.updatePublishedContractClasses(contractClassLogs, block.number, operation),
|
|
208
|
+
this.updateDeployedContractInstances(privateLogs, block.number, operation),
|
|
209
|
+
this.updateUpdatedContractInstances(publicLogs, block.header.globalVariables.timestamp, operation),
|
|
210
|
+
operation === 0 ? this.storeBroadcastedIndividualFunctions(contractClassLogs, block.number) : Promise.resolve(true)
|
|
123
211
|
])).every(Boolean);
|
|
124
212
|
}
|
|
125
213
|
/**
|
|
@@ -29,10 +29,11 @@ export declare class ArchiverL1Synchronizer implements Traceable {
|
|
|
29
29
|
private readonly epochCache;
|
|
30
30
|
private readonly dateProvider;
|
|
31
31
|
private readonly instrumentation;
|
|
32
|
-
private readonly
|
|
32
|
+
private readonly l1Constants;
|
|
33
33
|
private readonly events;
|
|
34
34
|
private readonly log;
|
|
35
35
|
private l1BlockNumber;
|
|
36
|
+
private l1BlockHash;
|
|
36
37
|
private l1Timestamp;
|
|
37
38
|
private readonly updater;
|
|
38
39
|
readonly tracer: Tracer;
|
|
@@ -42,7 +43,7 @@ export declare class ArchiverL1Synchronizer implements Traceable {
|
|
|
42
43
|
batchSize: number;
|
|
43
44
|
skipValidateCheckpointAttestations?: boolean;
|
|
44
45
|
maxAllowedEthClientDriftSeconds: number;
|
|
45
|
-
}, blobClient: BlobClientInterface, epochCache: EpochCache, dateProvider: DateProvider, instrumentation: ArchiverInstrumentation,
|
|
46
|
+
}, blobClient: BlobClientInterface, epochCache: EpochCache, dateProvider: DateProvider, instrumentation: ArchiverInstrumentation, l1Constants: L1RollupConstants & {
|
|
46
47
|
l1StartBlockHash: Buffer32;
|
|
47
48
|
genesisArchiveRoot: Fr;
|
|
48
49
|
}, events: ArchiverEmitter, tracer: Tracer, log?: Logger);
|
|
@@ -59,6 +60,7 @@ export declare class ArchiverL1Synchronizer implements Traceable {
|
|
|
59
60
|
/** Checks that the ethereum node we are connected to has a latest timestamp no more than the allowed drift. Throw if not. */
|
|
60
61
|
testEthereumNodeSynced(): Promise<void>;
|
|
61
62
|
syncFromL1(initialSyncComplete: boolean): Promise<void>;
|
|
63
|
+
private pruneUncheckpointedBlocks;
|
|
62
64
|
private canPrune;
|
|
63
65
|
private handleEpochPrune;
|
|
64
66
|
private nextRange;
|
|
@@ -70,4 +72,4 @@ export declare class ArchiverL1Synchronizer implements Traceable {
|
|
|
70
72
|
private checkForNewCheckpointsBeforeL1SyncPoint;
|
|
71
73
|
private getCheckpointHeader;
|
|
72
74
|
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDFfc3luY2hyb25pemVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlcy9sMV9zeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRWpGLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHckYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXBELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxZQUFZLEVBQWtCLE1BQU0seUJBQXlCLENBQUM7QUFFdkUsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFzRCxNQUFNLHFCQUFxQixDQUFDO0FBRS9HLE9BQU8sRUFBRSxLQUFLLGlCQUFpQixFQUFzQyxNQUFNLDZCQUE2QixDQUFDO0FBRXpHLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBeUIsTUFBTSx5QkFBeUIsQ0FBQztBQVM3RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR3pFLE9BQU8sS0FBSyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFhcEU7OztHQUdHO0FBQ0gscUJBQWEs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"l1_synchronizer.d.ts","sourceRoot":"","sources":["../../src/modules/l1_synchronizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAEjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGrF,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,YAAY,EAAkB,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,KAAK,eAAe,EAAsD,MAAM,qBAAqB,CAAC;AAE/G,OAAO,EAAE,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"l1_synchronizer.d.ts","sourceRoot":"","sources":["../../src/modules/l1_synchronizer.ts"],"names":[],"mappings":"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"}
|