@aztec/archiver 0.0.1-commit.3100065 → 0.0.1-commit.330febf
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 +3 -1
- package/dest/archiver.d.ts +1 -1
- package/dest/archiver.d.ts.map +1 -1
- package/dest/archiver.js +1 -1
- package/dest/modules/data_store_updater.d.ts +1 -1
- package/dest/modules/data_store_updater.d.ts.map +1 -1
- package/dest/modules/data_store_updater.js +2 -7
- package/dest/modules/outbox_trees_resolver.d.ts +4 -2
- package/dest/modules/outbox_trees_resolver.d.ts.map +1 -1
- package/dest/modules/outbox_trees_resolver.js +35 -13
- package/dest/store/block_store.d.ts +2 -1
- package/dest/store/block_store.d.ts.map +1 -1
- package/dest/store/block_store.js +53 -13
- package/package.json +13 -14
- package/src/archiver.ts +1 -0
- package/src/modules/data_store_updater.ts +2 -11
- package/src/modules/outbox_trees_resolver.ts +34 -13
- package/src/store/block_store.ts +58 -12
package/README.md
CHANGED
|
@@ -103,7 +103,7 @@ Blocks added via `addBlock()` are considered "provisional" until they appear in
|
|
|
103
103
|
- **Slot expiration**: An L2 slot ends without any checkpoint being mined on L1
|
|
104
104
|
- **Orphan proposed block**: Under proposer pipelining, a proposer can broadcast a block-only proposal but never the matching `CheckpointProposal` (e.g. it crashes before assembling the checkpoint). The provisional block then has no proposed checkpoint backing it.
|
|
105
105
|
|
|
106
|
-
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. Independently, `pruneOrphanProposedBlocks()` runs on wall-clock time (so it fires during quiet L1 periods) and removes a block-only tip
|
|
106
|
+
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. Independently, `pruneOrphanProposedBlocks()` runs on wall-clock time (so it fires during quiet L1 periods) and removes a block-only tip once its build slot ended without a matching proposed checkpoint, plus a grace window configured via `orphanProposedBlockPruneGraceSeconds`. All three cases emit `L2PruneUncheckpointed`.
|
|
107
107
|
|
|
108
108
|
### Querying Block Data
|
|
109
109
|
|
|
@@ -175,3 +175,5 @@ The archiver exposes `pendingChainValidationStatus` for the sequencer to know if
|
|
|
175
175
|
2. Checkpoint 11 purged, new invalid checkpoint 11 posted → status updates to new checkpoint 11
|
|
176
176
|
3. Checkpoint 12 with invalid attestations posted → no change (status still points to 11)
|
|
177
177
|
4. Checkpoint 11 purged and reposted with valid attestations → archiver syncs checkpoint 11, status becomes valid
|
|
178
|
+
|
|
179
|
+
|
package/dest/archiver.d.ts
CHANGED
|
@@ -191,4 +191,4 @@ export declare class Archiver extends ArchiverDataSourceBase implements L2BlockS
|
|
|
191
191
|
getL2Tips(): Promise<L2Tips>;
|
|
192
192
|
rollbackTo(targetL2BlockNumber: BlockNumber): Promise<void>;
|
|
193
193
|
}
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcmNoaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQXVCLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRyxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckYsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXBELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRWxFLE9BQU8sRUFBRSxjQUFjLEVBQTJCLE1BQU0sbUNBQW1DLENBQUM7QUFDNUYsT0FBTyxFQUFFLFlBQVksRUFBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxTQUFTLEVBQ2QsT0FBTyxFQUNQLEtBQUssV0FBVyxFQUVoQixLQUFLLE1BQU0sRUFDWCxLQUFLLHdCQUF3QixFQUU5QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxLQUFLLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0YsT0FB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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":"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
|
|
1
|
+
{"version":3,"file":"archiver.d.ts","sourceRoot":"","sources":["../src/archiver.ts"],"names":[],"mappings":"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"}
|
package/dest/archiver.js
CHANGED
|
@@ -472,7 +472,7 @@ _dec = trackSpan('Archiver.sync');
|
|
|
472
472
|
});
|
|
473
473
|
// The resolver reads its witness data from this archiver and pins its lazy Outbox-root fetches
|
|
474
474
|
// to the archiver's synced L1 block. No method on `this` is invoked during construction.
|
|
475
|
-
this.outboxTreesResolver = new OutboxTreesResolver(this.outbox, this, ()=>Promise.resolve(this.getL1BlockNumber()), l1Constants.epochDuration);
|
|
475
|
+
this.outboxTreesResolver = new OutboxTreesResolver(this.outbox, this, this.dataStores.db, ()=>Promise.resolve(this.getL1BlockNumber()), l1Constants.epochDuration);
|
|
476
476
|
// Running promise starts with a small interval inbetween runs, so all iterations needed for the initial sync
|
|
477
477
|
// are done as fast as possible. This then gets updated once the initial sync completes.
|
|
478
478
|
this.runningPromise = new RunningPromise(()=>this.sync(), this.log, this.config.pollingIntervalMs / 10, makeLoggingErrorHandler(this.log, NoBlobBodiesFoundError, BlockTagTooOldError));
|
|
@@ -102,4 +102,4 @@ export declare class ArchiverDataStoreUpdater {
|
|
|
102
102
|
private updateUpdatedContractInstances;
|
|
103
103
|
}
|
|
104
104
|
export {};
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9zdG9yZV91cGRhdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlcy9kYXRhX3N0b3JlX3VwZGF0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBUWhGLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25HLE9BQU8sRUFDTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyx1QkFBdUIsRUFDNUIsS0FBSyxtQkFBbUIsRUFFekIsTUFBTSwwQkFBMEIsQ0FBQztBQVNsQyxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xFLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBUTdELDZFQUE2RTtBQUM3RSxLQUFLLDBCQUEwQixHQUFHO0lBQ2hDLG1FQUFtRTtJQUNuRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQ3BDLGlGQUFpRjtJQUNqRiw4QkFBOEIsRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDO0NBQ3pELENBQUM7QUFFRixrRUFBa0U7QUFDbEUscUJBQWEsd0JBQXdCO0lBSWpDLE9BQU8sQ0FBQyxNQUFNO0lBQ2QsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUNwQixPQUFPLENBQUMsSUFBSTtJQUxkLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUEwQztJQUU5RCxZQUNVLE1BQU0sRUFBRSxrQkFBa0IsRUFDMUIsV0FBVyxDQUFDLHlCQUFhLEVBQ3pCLElBQUksR0FBRTtRQUFFLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFPLEVBQzdDO0lBRUo7Ozs7Ozs7O09BUUc7SUFDVSxnQkFBZ0IsQ0FDM0IsS0FBSyxFQUFFLE9BQU8sRUFDZCw0QkFBNEIsQ0FBQyxFQUFFLHdCQUF3QixHQUN0RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBa0JsQjtJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNVLGNBQWMsQ0FDekIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLEVBQ2xDLDRCQUE0QixDQUFDLEVBQUUsd0JBQXdCLEVBQ3ZELGVBQWUsQ0FBQyxFQUFFO1FBQ2hCLEVBQUUsRUFBRSxlQUFlLENBQUM7UUFDcEIsWUFBWSxFQUFFLG9CQUFvQixFQUFFLENBQUM7UUFDckMsVUFBVSxFQUFFLG1CQUFtQixDQUFDO0tBQ2pDLEVBQ0QsaUJBQWlCLENBQUMsRUFBRSxnQkFBZ0IsR0FDbkMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBK0NyQztJQUVZLHFCQUFxQixDQUFDLGtCQUFrQixFQUFFLHVCQUF1QixpQkFNN0U7WUFnQmEsMkJBQTJCO0lBdUV6Qzs7Ozs7Ozs7T0FRRztJQUNVLCtCQUErQixDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBaUJ6RjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNVLDBDQUEwQyxDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBY3BHO1lBT2EsdUNBQXVDO1lBWXZDLGlCQUFpQjtJQWEvQjs7Ozs7Ozs7T0FRRztJQUNVLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FnQnhGO0lBRUQ7OztPQUdHO0lBQ1UseUJBQXlCLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUt4RjtJQUVEOzs7T0FHRztJQUNVLDRCQUE0QixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FLM0Y7SUFFRCw2REFBNkQ7SUFDN0QsT0FBTyxDQUFDLG1CQUFtQjtJQUkzQixxREFBcUQ7SUFDckQsT0FBTyxDQUFDLHdCQUF3QjtZQUtsQixzQkFBc0I7WUFpQnRCLDhCQUE4QjtZQStDOUIsK0JBQStCO1lBMEMvQiw4QkFBOEI7Q0FzQjdDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_store_updater.d.ts","sourceRoot":"","sources":["../../src/modules/data_store_updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQhF,OAAO,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EAEzB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"data_store_updater.d.ts","sourceRoot":"","sources":["../../src/modules/data_store_updater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQhF,OAAO,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EAEzB,MAAM,0BAA0B,CAAC;AASlC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAQ7D,6EAA6E;AAC7E,KAAK,0BAA0B,GAAG;IAChC,mEAAmE;IACnE,YAAY,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IACpC,iFAAiF;IACjF,8BAA8B,EAAE,WAAW,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,kEAAkE;AAClE,qBAAa,wBAAwB;IAIjC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,IAAI;IALd,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA0C;IAE9D,YACU,MAAM,EAAE,kBAAkB,EAC1B,WAAW,CAAC,yBAAa,EACzB,IAAI,GAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAO,EAC7C;IAEJ;;;;;;;;OAQG;IACU,gBAAgB,CAC3B,KAAK,EAAE,OAAO,EACd,4BAA4B,CAAC,EAAE,wBAAwB,GACtD,OAAO,CAAC,OAAO,CAAC,CAkBlB;IAED;;;;;;;;;;;;OAYG;IACU,cAAc,CACzB,WAAW,EAAE,mBAAmB,EAAE,EAClC,4BAA4B,CAAC,EAAE,wBAAwB,EACvD,eAAe,CAAC,EAAE;QAChB,EAAE,EAAE,eAAe,CAAC;QACpB,YAAY,EAAE,oBAAoB,EAAE,CAAC;QACrC,UAAU,EAAE,mBAAmB,CAAC;KACjC,EACD,iBAAiB,CAAC,EAAE,gBAAgB,GACnC,OAAO,CAAC,0BAA0B,CAAC,CA+CrC;IAEY,qBAAqB,CAAC,kBAAkB,EAAE,uBAAuB,iBAM7E;YAgBa,2BAA2B;IAuEzC;;;;;;;;OAQG;IACU,+BAA+B,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAiBzF;IAED;;;;;;;;;OASG;IACU,0CAA0C,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAcpG;YAOa,uCAAuC;YAYvC,iBAAiB;IAa/B;;;;;;;;OAQG;IACU,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBxF;IAED;;;OAGG;IACU,yBAAyB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxF;IAED;;;OAGG;IACU,4BAA4B,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3F;IAED,6DAA6D;IAC7D,OAAO,CAAC,mBAAmB;IAI3B,qDAAqD;IACrD,OAAO,CAAC,wBAAwB;YAKlB,sBAAsB;YAiBtB,8BAA8B;YA+C9B,+BAA+B;YA0C/B,8BAA8B;CAsB7C"}
|
|
@@ -5,7 +5,6 @@ import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-reg
|
|
|
5
5
|
import { ContractInstancePublishedEvent, ContractInstanceUpdatedEvent } from '@aztec/protocol-contracts/instance-registry';
|
|
6
6
|
import { validateCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
7
7
|
import { computeContractAddressFromInstance, computeContractClassId } from '@aztec/stdlib/contract';
|
|
8
|
-
import { MAX_CAPACITY_BLOCKS_PER_CHECKPOINT } from '@aztec/stdlib/deserialization';
|
|
9
8
|
/** Operation type for contract data updates. */ var Operation = /*#__PURE__*/ function(Operation) {
|
|
10
9
|
Operation[Operation["Store"] = 0] = "Store";
|
|
11
10
|
Operation[Operation["Delete"] = 1] = "Delete";
|
|
@@ -61,18 +60,14 @@ import { MAX_CAPACITY_BLOCKS_PER_CHECKPOINT } from '@aztec/stdlib/deserializatio
|
|
|
61
60
|
* @param promoteProposed - Optional promotion of the current proposed checkpoint (fast path when blocks are already local).
|
|
62
61
|
* @returns Result with information about any pruned blocks.
|
|
63
62
|
*/ async addCheckpoints(checkpoints, pendingChainValidationStatus, promoteProposed, evictProposedFrom) {
|
|
64
|
-
// Checkpoints here are already accepted by L1, so tolerate up to the physical blob-capacity
|
|
65
|
-
// ceiling rather than the conservative attestable limit used when building/attesting.
|
|
66
63
|
for (const checkpoint of checkpoints){
|
|
67
64
|
validateCheckpoint(checkpoint.checkpoint, {
|
|
68
|
-
rollupManaLimit: this.opts?.rollupManaLimit
|
|
69
|
-
maxBlocksPerCheckpoint: MAX_CAPACITY_BLOCKS_PER_CHECKPOINT
|
|
65
|
+
rollupManaLimit: this.opts?.rollupManaLimit
|
|
70
66
|
});
|
|
71
67
|
}
|
|
72
68
|
if (promoteProposed) {
|
|
73
69
|
validateCheckpoint(promoteProposed.checkpoint.checkpoint, {
|
|
74
|
-
rollupManaLimit: this.opts?.rollupManaLimit
|
|
75
|
-
maxBlocksPerCheckpoint: MAX_CAPACITY_BLOCKS_PER_CHECKPOINT
|
|
70
|
+
rollupManaLimit: this.opts?.rollupManaLimit
|
|
76
71
|
});
|
|
77
72
|
}
|
|
78
73
|
const result = await this.stores.db.transactionAsync(async ()=>{
|
|
@@ -2,6 +2,7 @@ import type { OutboxContract } from '@aztec/ethereum/contracts';
|
|
|
2
2
|
import type { BlockNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
4
|
import { type Logger } from '@aztec/foundation/log';
|
|
5
|
+
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
5
6
|
import type { L2Block } from '@aztec/stdlib/block';
|
|
6
7
|
import type { CheckpointData } from '@aztec/stdlib/checkpoint';
|
|
7
8
|
import { type L2ToL1MembershipWitness } from '@aztec/stdlib/messaging';
|
|
@@ -42,10 +43,11 @@ export declare class OutboxTreesResolver {
|
|
|
42
43
|
#private;
|
|
43
44
|
private readonly outbox;
|
|
44
45
|
private readonly archiver;
|
|
46
|
+
private readonly store;
|
|
45
47
|
private readonly getSyncedL1BlockNumber;
|
|
46
48
|
private readonly epochDuration;
|
|
47
49
|
private readonly log;
|
|
48
|
-
constructor(outbox: OutboxContract, archiver: OutboxTreesArchiverView, getSyncedL1BlockNumber: () => Promise<bigint | undefined>, epochDuration: number, log?: Logger);
|
|
50
|
+
constructor(outbox: OutboxContract, archiver: OutboxTreesArchiverView, store: AztecAsyncKVStore, getSyncedL1BlockNumber: () => Promise<bigint | undefined>, epochDuration: number, log?: Logger);
|
|
49
51
|
/**
|
|
50
52
|
* Builds the L2-to-L1 membership witness for `message` in tx `txHash`. Returns `undefined` if the
|
|
51
53
|
* tx isn't yet in a block/epoch, or if the Outbox holds no covering partial-proof root for the
|
|
@@ -59,4 +61,4 @@ export declare class OutboxTreesResolver {
|
|
|
59
61
|
*/
|
|
60
62
|
private makeNodeView;
|
|
61
63
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym94X3RyZWVzX3Jlc29sdmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kdWxlcy9vdXRib3hfdHJlZXNfcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWhGLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxLQUFLLHVCQUF1QixFQUFrQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZHLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRTs7O0dBR0c7QUFDSCxNQUFNLFdBQVcsdUJBQXVCO0lBQ3RDLFNBQVMsQ0FBQyxLQUFLLEVBQUU7UUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDO1FBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFBO0tBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRixRQUFRLENBQUMsS0FBSyxFQUFFO1FBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQTtLQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQztJQUN2RSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUU7UUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFBO0tBQUUsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUM3RSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0NBQ25FO0FBVUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxxQkFBYSxtQkFBbUI7O0lBVzVCLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUN2QixPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7SUFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO0lBQ3RCLE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQXNCO0lBQ3ZDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYTtJQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUc7SUFOdEIsWUFDbUIsTUFBTSxFQUFFLGNBQWMsRUFDdEIsUUFBUSxFQUFFLHVCQUF1QixFQUNqQyxLQUFLLEVBQUUsaUJBQWlCLEVBQ3hCLHNCQUFzQixFQUFFLE1BQU0sT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFDekQsYUFBYSxFQUFFLE1BQU0sRUFDckIsR0FBRyxHQUFFLE1BQXdDLEVBRy9EO0lBRUQ7Ozs7T0FJRztJQUNVLDBCQUEwQixDQUNyQyxNQUFNLEVBQUUsTUFBTSxFQUNkLE9BQU8sRUFBRSxFQUFFLEVBQ1gsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEdBQ3hCLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUMsQ0E2RDlDO0lBaUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsWUFBWTtDQVlyQiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbox_trees_resolver.d.ts","sourceRoot":"","sources":["../../src/modules/outbox_trees_resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,KAAK,uBAAuB,EAAkC,MAAM,yBAAyB,CAAC;AACvG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,gBAAgB,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACrF,QAAQ,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACvE,kBAAkB,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7E,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;CACnE;AAUD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,mBAAmB;;IAW5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG;
|
|
1
|
+
{"version":3,"file":"outbox_trees_resolver.d.ts","sourceRoot":"","sources":["../../src/modules/outbox_trees_resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,KAAK,uBAAuB,EAAkC,MAAM,yBAAyB,CAAC;AACvG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,gBAAgB,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACrF,QAAQ,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACvE,kBAAkB,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC7E,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;CACnE;AAUD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,mBAAmB;;IAW5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG;IANtB,YACmB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,uBAAuB,EACjC,KAAK,EAAE,iBAAiB,EACxB,sBAAsB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,EACzD,aAAa,EAAE,MAAM,EACrB,GAAG,GAAE,MAAwC,EAG/D;IAED;;;;OAIG;IACU,0BAA0B,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,EAAE,EACX,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC,CA6D9C;IAiED;;;;OAIG;IACH,OAAO,CAAC,YAAY;CAYrB"}
|
|
@@ -19,15 +19,17 @@ import { computeL2ToL1MembershipWitness } from '@aztec/stdlib/messaging';
|
|
|
19
19
|
*/ export class OutboxTreesResolver {
|
|
20
20
|
outbox;
|
|
21
21
|
archiver;
|
|
22
|
+
store;
|
|
22
23
|
getSyncedL1BlockNumber;
|
|
23
24
|
epochDuration;
|
|
24
25
|
log;
|
|
25
26
|
/** In-memory cache of per-epoch Outbox roots, keyed by epoch number. */ #cache;
|
|
26
27
|
/** Single-flight registry for in-flight roots fetches, keyed by epoch number. */ #pending;
|
|
27
28
|
/** Adapter exposing the slice of the node API that `computeL2ToL1MembershipWitness` requires. */ #node;
|
|
28
|
-
constructor(outbox, archiver, getSyncedL1BlockNumber, epochDuration, log = createLogger('archiver:outbox')){
|
|
29
|
+
constructor(outbox, archiver, store, getSyncedL1BlockNumber, epochDuration, log = createLogger('archiver:outbox')){
|
|
29
30
|
this.outbox = outbox;
|
|
30
31
|
this.archiver = archiver;
|
|
32
|
+
this.store = store;
|
|
31
33
|
this.getSyncedL1BlockNumber = getSyncedL1BlockNumber;
|
|
32
34
|
this.epochDuration = epochDuration;
|
|
33
35
|
this.log = log;
|
|
@@ -40,6 +42,9 @@ import { computeL2ToL1MembershipWitness } from '@aztec/stdlib/messaging';
|
|
|
40
42
|
* tx isn't yet in a block/epoch, or if the Outbox holds no covering partial-proof root for the
|
|
41
43
|
* tx's checkpoint as of the node's synced L1 block — callers should retry in that case.
|
|
42
44
|
*/ async getL2ToL1MembershipWitness(txHash, message, messageIndexInTx) {
|
|
45
|
+
// Read the tx effect once up front only to learn which epoch's Outbox roots to fetch. The roots
|
|
46
|
+
// read hits L1, so it stays outside the store transaction below: holding the archiver's writer
|
|
47
|
+
// lock across a network round-trip would stall block sync.
|
|
43
48
|
const indexed = await this.archiver.getTxEffect(txHash);
|
|
44
49
|
if (!indexed) {
|
|
45
50
|
this.log.trace(`No tx effect for tx, no witness available`, {
|
|
@@ -56,22 +61,39 @@ import { computeL2ToL1MembershipWitness } from '@aztec/stdlib/messaging';
|
|
|
56
61
|
if (roots === undefined) {
|
|
57
62
|
return undefined;
|
|
58
63
|
}
|
|
59
|
-
const receipt = {
|
|
60
|
-
txHash,
|
|
61
|
-
epochNumber,
|
|
62
|
-
blockNumber: indexed.l2BlockNumber,
|
|
63
|
-
txIndexInBlock: indexed.txIndexInBlock
|
|
64
|
-
};
|
|
65
64
|
const syncedBefore = await this.getSyncedL1BlockNumber();
|
|
66
65
|
try {
|
|
67
|
-
|
|
66
|
+
// Assemble the witness inside a single store transaction so every archiver read it depends on
|
|
67
|
+
// (the tx effect, the epoch's blocks, the target block and the checkpoint metadata) observes one
|
|
68
|
+
// consistent snapshot. `transactionAsync` serializes against writers, and the substore reads
|
|
69
|
+
// below bind to it automatically, so no store commit can land mid-assembly and splice together
|
|
70
|
+
// two different chain states — which would otherwise surface as a spurious "message does not
|
|
71
|
+
// exist" error even when the tx-effect index is healthy.
|
|
72
|
+
return await this.store.transactionAsync(async ()=>{
|
|
73
|
+
// Re-read the tx effect within the snapshot so the receipt's block number and tx index stay
|
|
74
|
+
// consistent with the block and checkpoint data read while building the witness. The epoch is
|
|
75
|
+
// reused from the pre-transaction read (it selected the roots above); if a reorg moved the tx
|
|
76
|
+
// to a different epoch in between, the block lookups simply miss and the helper returns
|
|
77
|
+
// undefined for the caller to retry.
|
|
78
|
+
const indexedInSnapshot = await this.archiver.getTxEffect(txHash);
|
|
79
|
+
if (!indexedInSnapshot) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
const receipt = {
|
|
83
|
+
txHash,
|
|
84
|
+
epochNumber,
|
|
85
|
+
blockNumber: indexedInSnapshot.l2BlockNumber,
|
|
86
|
+
txIndexInBlock: indexedInSnapshot.txIndexInBlock
|
|
87
|
+
};
|
|
88
|
+
return await computeL2ToL1MembershipWitness(this.#node, roots, message, receipt, messageIndexInTx);
|
|
89
|
+
});
|
|
68
90
|
} catch (err) {
|
|
69
91
|
// The helper throws if the locally-assembled epoch root disagrees with the cached Outbox root.
|
|
70
|
-
// The cached roots are pinned to the node's synced L1 block, but the
|
|
71
|
-
//
|
|
72
|
-
// different heights and produce a transient mismatch. When the synced block moved
|
|
73
|
-
// assembly we treat the mismatch as transient and return undefined so the caller can
|
|
74
|
-
// mismatch at a stable synced block is a genuine node/L1 disagreement and must surface.
|
|
92
|
+
// The cached roots are pinned to the node's synced L1 block, but the block / checkpoint data is
|
|
93
|
+
// read from a store snapshot taken after that fetch, so if the archiver advanced in between the
|
|
94
|
+
// two can reflect different heights and produce a transient mismatch. When the synced block moved
|
|
95
|
+
// during assembly we treat the mismatch as transient and return undefined so the caller can
|
|
96
|
+
// retry; a mismatch at a stable synced block is a genuine node/L1 disagreement and must surface.
|
|
75
97
|
const syncedAfter = await this.getSyncedL1BlockNumber();
|
|
76
98
|
if (syncedBefore !== syncedAfter && err instanceof Error && err.message.includes('does not match Outbox')) {
|
|
77
99
|
this.log.debug(`Transient outbox root mismatch during sync, returning no witness`, {
|
|
@@ -98,6 +98,7 @@ export declare class BlockStore {
|
|
|
98
98
|
private validateCheckpointBlocks;
|
|
99
99
|
private addBlockToDatabase;
|
|
100
100
|
private deleteBlock;
|
|
101
|
+
private deleteTxEffect;
|
|
101
102
|
/**
|
|
102
103
|
* Removes all checkpoints with checkpoint number > checkpointNumber.
|
|
103
104
|
* Also removes ALL blocks (both checkpointed and uncheckpointed) after the last block of the given checkpoint.
|
|
@@ -300,4 +301,4 @@ export declare class BlockStore {
|
|
|
300
301
|
private advanceSynchedL1BlockNumber;
|
|
301
302
|
private rejectedCheckpointFromStorage;
|
|
302
303
|
}
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
304
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZS9ibG9ja19zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUF5QixVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuSCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFNcEQsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQTZDLE1BQU0saUJBQWlCLENBQUM7QUFDcEcsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUNMLEtBQUssU0FBUyxFQUNkLFNBQVMsRUFFVCxvQkFBb0IsRUFFcEIsT0FBTyxFQUVQLEtBQUssTUFBTSxFQUNYLEtBQUssd0JBQXdCLEVBRzlCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUVMLEtBQUssY0FBYyxFQUNuQixLQUFLLG9CQUFvQixFQUN6QixlQUFlLEVBQ2YsS0FBSyxzQkFBc0IsRUFDM0IsS0FBSyx1QkFBdUIsRUFDNUIsbUJBQW1CLEVBQ3BCLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUVMLEtBQUssZUFBZSxFQUVwQixNQUFNLEVBR1AsTUFBTSxrQkFBa0IsQ0FBQztBQW1CMUIsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFZcEUsb0RBQW9EO0FBQ3BELE1BQU0sTUFBTSx3QkFBd0IsR0FBRyxzQkFBc0IsR0FBRyxvQ0FBb0MsQ0FBQztBQUVyRzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxNQUFNLGtCQUFrQixHQUFHO0lBQy9CLCtDQUErQztJQUMvQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQztJQUNuQywwR0FBMEc7SUFDMUcsV0FBVyxFQUFFLEVBQUUsQ0FBQztJQUNoQixrRkFBa0Y7SUFD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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../src/store/block_store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAyB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAMpD,OAAO,KAAK,EAAE,iBAAiB,EAA6C,MAAM,iBAAiB,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,KAAK,SAAS,EACd,SAAS,EAET,oBAAoB,EAEpB,OAAO,EAEP,KAAK,MAAM,EACX,KAAK,wBAAwB,EAG9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAEL,KAAK,eAAe,EAEpB,MAAM,EAGP,MAAM,kBAAkB,CAAC;AAmB1B,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAYpE,oDAAoD;AACpD,MAAM,MAAM,wBAAwB,GAAG,sBAAsB,GAAG,oCAAoC,CAAC;AAErG;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,+CAA+C;IAC/C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,0GAA0G;IAC1G,WAAW,EAAE,EAAE,CAAC;IAChB,kFAAkF;IAClF,iBAAiB,EAAE,EAAE,CAAC;IACtB,8CAA8C;IAC9C,UAAU,EAAE,UAAU,CAAC;IACvB,uFAAuF;IACvF,EAAE,EAAE,eAAe,CAAC;IACpB,kCAAkC;IAClC,MAAM,EAAE,wBAAwB,CAAC;CAClC,CAAC;AAiCF,MAAM,MAAM,uBAAuB,GAAG;IAAE,aAAa,EAAE,OAAO,EAAE,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/E;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,EAAE,CAAA;CAAE,CAAC;AAEjG;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEnG;;GAEG;AACH,qBAAa,UAAU;;IAgDT,OAAO,CAAC,EAAE;IAAtB,YAAoB,EAAE,EAAE,iBAAiB,EAgBxC;IAED;;;;OAIG;IACG,yBAAyB,IAAI,OAAO,CAAC,WAAW,CAAC,CAUtD;IAED;;;;;;OAMG;IACG,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAmEvF;IAED;;;;;;;OAOG;IACG,cAAc,CAClB,WAAW,EAAE,mBAAmB,EAAE,EAClC,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAC7B,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAgFhC;YAMa,oCAAoC;YA6CpC,0BAA0B;IAuBxC;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;YAiClB,kBAAkB;YA8BlB,WAAW;
|
|
1
|
+
{"version":3,"file":"block_store.d.ts","sourceRoot":"","sources":["../../src/store/block_store.ts"],"names":[],"mappings":"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"}
|
|
@@ -313,17 +313,51 @@ import { BlockAlreadyCheckpointedError, BlockArchiveNotConsistentError, BlockChe
|
|
|
313
313
|
await this.#blockHashIndex.set(blockHash.toString(), block.number);
|
|
314
314
|
await this.#blockArchiveIndex.set(block.archive.root.toString(), block.number);
|
|
315
315
|
}
|
|
316
|
-
/** Deletes a block and all associated data (tx effects, indices). */ async deleteBlock(
|
|
316
|
+
/** Deletes a block and all associated data (tx effects, indices). */ async deleteBlock(blockNumber, blockStorage) {
|
|
317
317
|
// Delete the block from the main blocks map
|
|
318
|
-
await this.#blocks.delete(
|
|
319
|
-
|
|
320
|
-
|
|
318
|
+
await this.#blocks.delete(blockNumber);
|
|
319
|
+
const blockHash = bufferToHex(blockStorage.blockHash);
|
|
320
|
+
// Delete the tx effects of the block's txs, skipping entries that no longer point at this block: if
|
|
321
|
+
// another stored block also contains the tx, the entry points at that block, and deleting it here would
|
|
322
|
+
// orphan that block's index. Honest chains never store the same tx twice (duplicate nullifiers are
|
|
323
|
+
// rejected at build, re-execution, and world-state sync), so the store must not turn such a state into
|
|
324
|
+
// corruption of the surviving block if it ever appears.
|
|
325
|
+
const blockTxsBuffer = await this.#blockTxs.getAsync(blockHash);
|
|
326
|
+
if (blockTxsBuffer !== undefined) {
|
|
327
|
+
const reader = BufferReader.asReader(blockTxsBuffer);
|
|
328
|
+
const txHashes = [];
|
|
329
|
+
while(!reader.isEmpty()){
|
|
330
|
+
txHashes.push(reader.readObject(TxHash).toString());
|
|
331
|
+
}
|
|
332
|
+
await Promise.all(txHashes.map((txHash)=>this.deleteTxEffect(txHash, blockStorage.blockHash)));
|
|
333
|
+
}
|
|
321
334
|
// Delete block txs mapping
|
|
322
|
-
const blockHash = (await block.hash()).toString();
|
|
323
335
|
await this.#blockTxs.delete(blockHash);
|
|
324
336
|
// Clean up indices
|
|
325
337
|
await this.#blockHashIndex.delete(blockHash);
|
|
326
|
-
await this.#blockArchiveIndex.delete(
|
|
338
|
+
await this.#blockArchiveIndex.delete(AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive).root.toString());
|
|
339
|
+
}
|
|
340
|
+
/** Deletes a tx effect only if it is still owned by (points at) the given block. */ async deleteTxEffect(txHash, blockHash) {
|
|
341
|
+
const stored = await this.#txEffects.getAsync(txHash);
|
|
342
|
+
if (stored === undefined) {
|
|
343
|
+
this.#log.warn(`Missing tx effect for tx ${txHash} while removing its block`, {
|
|
344
|
+
txHash,
|
|
345
|
+
blockHash: bufferToHex(blockHash)
|
|
346
|
+
});
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
// An IndexedTxEffect starts with the owning block hash (32 bytes) — see getTxLocation.
|
|
350
|
+
if (!Buffer.from(stored.buffer, stored.byteOffset, 32).equals(blockHash)) {
|
|
351
|
+
// Fires only when two stored blocks listed the same tx — a state upstream validation should make
|
|
352
|
+
// unreachable. Keep the entry (it belongs to the surviving block) but flag the duplication loudly.
|
|
353
|
+
this.#log.warn(`Tx effect for tx ${txHash} is owned by a block other than the one being removed`, {
|
|
354
|
+
txHash,
|
|
355
|
+
removedBlockHash: bufferToHex(blockHash),
|
|
356
|
+
owningBlockHash: bufferToHex(Buffer.from(stored.buffer, stored.byteOffset, 32))
|
|
357
|
+
});
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
await this.#txEffects.delete(txHash);
|
|
327
361
|
}
|
|
328
362
|
/**
|
|
329
363
|
* Removes all checkpoints with checkpoint number > checkpointNumber.
|
|
@@ -504,16 +538,22 @@ import { BlockAlreadyCheckpointedError, BlockArchiveNotConsistentError, BlockChe
|
|
|
504
538
|
const latestBlockNumber = await this.getLatestL2BlockNumber();
|
|
505
539
|
// Iterate from blockNumber + 1 to latestBlockNumber
|
|
506
540
|
for(let bn = blockNumber + 1; bn <= latestBlockNumber; bn++){
|
|
507
|
-
const
|
|
508
|
-
|
|
509
|
-
});
|
|
510
|
-
if (block === undefined) {
|
|
541
|
+
const blockStorage = await this.#blocks.getAsync(bn);
|
|
542
|
+
if (blockStorage === undefined) {
|
|
511
543
|
this.#log.warn(`Cannot remove block ${bn} from the store since we don't have it`);
|
|
512
544
|
continue;
|
|
513
545
|
}
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
this
|
|
546
|
+
// Load the full block for the returned list when possible, but clean up from the raw row regardless:
|
|
547
|
+
// a block whose body can no longer be fully loaded must still release its row, tx effects, and indices,
|
|
548
|
+
// or later inserts at this number leave stale tx-effect entries pointing into the new chain.
|
|
549
|
+
const block = await this.getBlockFromBlockStorage(bn, blockStorage);
|
|
550
|
+
if (block !== undefined) {
|
|
551
|
+
removedBlocks.push(block);
|
|
552
|
+
} else {
|
|
553
|
+
this.#log.warn(`Removing block ${bn} whose body could not be fully loaded`);
|
|
554
|
+
}
|
|
555
|
+
await this.deleteBlock(bn, blockStorage);
|
|
556
|
+
this.#log.debug(`Removed block ${bn} ${bufferToHex(blockStorage.blockHash)}`);
|
|
517
557
|
}
|
|
518
558
|
return removedBlocks;
|
|
519
559
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/archiver",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.330febf",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -65,19 +65,18 @@
|
|
|
65
65
|
]
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@aztec/blob-client": "0.0.1-commit.
|
|
69
|
-
"@aztec/blob-lib": "0.0.1-commit.
|
|
70
|
-
"@aztec/constants": "0.0.1-commit.
|
|
71
|
-
"@aztec/epoch-cache": "0.0.1-commit.
|
|
72
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
73
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
74
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
75
|
-
"@aztec/l1-artifacts": "0.0
|
|
76
|
-
"@aztec/
|
|
77
|
-
"@aztec/
|
|
78
|
-
"@aztec/
|
|
79
|
-
"@aztec/
|
|
80
|
-
"@aztec/telemetry-client": "0.0.1-commit.3100065",
|
|
68
|
+
"@aztec/blob-client": "0.0.1-commit.330febf",
|
|
69
|
+
"@aztec/blob-lib": "0.0.1-commit.330febf",
|
|
70
|
+
"@aztec/constants": "0.0.1-commit.330febf",
|
|
71
|
+
"@aztec/epoch-cache": "0.0.1-commit.330febf",
|
|
72
|
+
"@aztec/ethereum": "0.0.1-commit.330febf",
|
|
73
|
+
"@aztec/foundation": "0.0.1-commit.330febf",
|
|
74
|
+
"@aztec/kv-store": "0.0.1-commit.330febf",
|
|
75
|
+
"@aztec/l1-artifacts": "6.0.0-nightly.20260807",
|
|
76
|
+
"@aztec/protocol-contracts": "0.0.1-commit.330febf",
|
|
77
|
+
"@aztec/standard-contracts": "0.0.1-commit.330febf",
|
|
78
|
+
"@aztec/stdlib": "0.0.1-commit.330febf",
|
|
79
|
+
"@aztec/telemetry-client": "0.0.1-commit.330febf",
|
|
81
80
|
"lodash.groupby": "^4.6.0",
|
|
82
81
|
"lodash.omit": "^4.5.0",
|
|
83
82
|
"tslib": "^2.5.0",
|
package/src/archiver.ts
CHANGED
|
@@ -203,6 +203,7 @@ export class Archiver extends ArchiverDataSourceBase implements L2BlockSink, Tra
|
|
|
203
203
|
this.outboxTreesResolver = new OutboxTreesResolver(
|
|
204
204
|
this.outbox,
|
|
205
205
|
this,
|
|
206
|
+
this.dataStores.db,
|
|
206
207
|
() => Promise.resolve(this.getL1BlockNumber()),
|
|
207
208
|
l1Constants.epochDuration,
|
|
208
209
|
);
|
|
@@ -18,7 +18,6 @@ import {
|
|
|
18
18
|
computeContractAddressFromInstance,
|
|
19
19
|
computeContractClassId,
|
|
20
20
|
} from '@aztec/stdlib/contract';
|
|
21
|
-
import { MAX_CAPACITY_BLOCKS_PER_CHECKPOINT } from '@aztec/stdlib/deserialization';
|
|
22
21
|
import type { ContractClassLog, PrivateLog, PublicLog } from '@aztec/stdlib/logs';
|
|
23
22
|
import type { UInt64 } from '@aztec/stdlib/types';
|
|
24
23
|
|
|
@@ -104,19 +103,11 @@ export class ArchiverDataStoreUpdater {
|
|
|
104
103
|
},
|
|
105
104
|
evictProposedFrom?: CheckpointNumber,
|
|
106
105
|
): Promise<ReconcileCheckpointsResult> {
|
|
107
|
-
// Checkpoints here are already accepted by L1, so tolerate up to the physical blob-capacity
|
|
108
|
-
// ceiling rather than the conservative attestable limit used when building/attesting.
|
|
109
106
|
for (const checkpoint of checkpoints) {
|
|
110
|
-
validateCheckpoint(checkpoint.checkpoint, {
|
|
111
|
-
rollupManaLimit: this.opts?.rollupManaLimit,
|
|
112
|
-
maxBlocksPerCheckpoint: MAX_CAPACITY_BLOCKS_PER_CHECKPOINT,
|
|
113
|
-
});
|
|
107
|
+
validateCheckpoint(checkpoint.checkpoint, { rollupManaLimit: this.opts?.rollupManaLimit });
|
|
114
108
|
}
|
|
115
109
|
if (promoteProposed) {
|
|
116
|
-
validateCheckpoint(promoteProposed.checkpoint.checkpoint, {
|
|
117
|
-
rollupManaLimit: this.opts?.rollupManaLimit,
|
|
118
|
-
maxBlocksPerCheckpoint: MAX_CAPACITY_BLOCKS_PER_CHECKPOINT,
|
|
119
|
-
});
|
|
110
|
+
validateCheckpoint(promoteProposed.checkpoint.checkpoint, { rollupManaLimit: this.opts?.rollupManaLimit });
|
|
120
111
|
}
|
|
121
112
|
|
|
122
113
|
const result = await this.stores.db.transactionAsync(async () => {
|
|
@@ -3,6 +3,7 @@ import type { BlockNumber, EpochNumber } from '@aztec/foundation/branded-types';
|
|
|
3
3
|
import { chunkBy } from '@aztec/foundation/collection';
|
|
4
4
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
6
|
+
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
6
7
|
import type { L2Block } from '@aztec/stdlib/block';
|
|
7
8
|
import type { CheckpointData } from '@aztec/stdlib/checkpoint';
|
|
8
9
|
import { getEpochAtSlot } from '@aztec/stdlib/epoch-helpers';
|
|
@@ -56,6 +57,7 @@ export class OutboxTreesResolver {
|
|
|
56
57
|
constructor(
|
|
57
58
|
private readonly outbox: OutboxContract,
|
|
58
59
|
private readonly archiver: OutboxTreesArchiverView,
|
|
60
|
+
private readonly store: AztecAsyncKVStore,
|
|
59
61
|
private readonly getSyncedL1BlockNumber: () => Promise<bigint | undefined>,
|
|
60
62
|
private readonly epochDuration: number,
|
|
61
63
|
private readonly log: Logger = createLogger('archiver:outbox'),
|
|
@@ -73,6 +75,9 @@ export class OutboxTreesResolver {
|
|
|
73
75
|
message: Fr,
|
|
74
76
|
messageIndexInTx?: number,
|
|
75
77
|
): Promise<L2ToL1MembershipWitness | undefined> {
|
|
78
|
+
// Read the tx effect once up front only to learn which epoch's Outbox roots to fetch. The roots
|
|
79
|
+
// read hits L1, so it stays outside the store transaction below: holding the archiver's writer
|
|
80
|
+
// lock across a network round-trip would stall block sync.
|
|
76
81
|
const indexed = await this.archiver.getTxEffect(txHash);
|
|
77
82
|
if (!indexed) {
|
|
78
83
|
this.log.trace(`No tx effect for tx, no witness available`, { txHash });
|
|
@@ -87,23 +92,39 @@ export class OutboxTreesResolver {
|
|
|
87
92
|
return undefined;
|
|
88
93
|
}
|
|
89
94
|
|
|
90
|
-
const receipt = {
|
|
91
|
-
txHash,
|
|
92
|
-
epochNumber,
|
|
93
|
-
blockNumber: indexed.l2BlockNumber,
|
|
94
|
-
txIndexInBlock: indexed.txIndexInBlock,
|
|
95
|
-
};
|
|
96
|
-
|
|
97
95
|
const syncedBefore = await this.getSyncedL1BlockNumber();
|
|
98
96
|
try {
|
|
99
|
-
|
|
97
|
+
// Assemble the witness inside a single store transaction so every archiver read it depends on
|
|
98
|
+
// (the tx effect, the epoch's blocks, the target block and the checkpoint metadata) observes one
|
|
99
|
+
// consistent snapshot. `transactionAsync` serializes against writers, and the substore reads
|
|
100
|
+
// below bind to it automatically, so no store commit can land mid-assembly and splice together
|
|
101
|
+
// two different chain states — which would otherwise surface as a spurious "message does not
|
|
102
|
+
// exist" error even when the tx-effect index is healthy.
|
|
103
|
+
return await this.store.transactionAsync(async () => {
|
|
104
|
+
// Re-read the tx effect within the snapshot so the receipt's block number and tx index stay
|
|
105
|
+
// consistent with the block and checkpoint data read while building the witness. The epoch is
|
|
106
|
+
// reused from the pre-transaction read (it selected the roots above); if a reorg moved the tx
|
|
107
|
+
// to a different epoch in between, the block lookups simply miss and the helper returns
|
|
108
|
+
// undefined for the caller to retry.
|
|
109
|
+
const indexedInSnapshot = await this.archiver.getTxEffect(txHash);
|
|
110
|
+
if (!indexedInSnapshot) {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
const receipt = {
|
|
114
|
+
txHash,
|
|
115
|
+
epochNumber,
|
|
116
|
+
blockNumber: indexedInSnapshot.l2BlockNumber,
|
|
117
|
+
txIndexInBlock: indexedInSnapshot.txIndexInBlock,
|
|
118
|
+
};
|
|
119
|
+
return await computeL2ToL1MembershipWitness(this.#node, roots, message, receipt, messageIndexInTx);
|
|
120
|
+
});
|
|
100
121
|
} catch (err) {
|
|
101
122
|
// The helper throws if the locally-assembled epoch root disagrees with the cached Outbox root.
|
|
102
|
-
// The cached roots are pinned to the node's synced L1 block, but the
|
|
103
|
-
//
|
|
104
|
-
// different heights and produce a transient mismatch. When the synced block moved
|
|
105
|
-
// assembly we treat the mismatch as transient and return undefined so the caller can
|
|
106
|
-
// mismatch at a stable synced block is a genuine node/L1 disagreement and must surface.
|
|
123
|
+
// The cached roots are pinned to the node's synced L1 block, but the block / checkpoint data is
|
|
124
|
+
// read from a store snapshot taken after that fetch, so if the archiver advanced in between the
|
|
125
|
+
// two can reflect different heights and produce a transient mismatch. When the synced block moved
|
|
126
|
+
// during assembly we treat the mismatch as transient and return undefined so the caller can
|
|
127
|
+
// retry; a mismatch at a stable synced block is a genuine node/L1 disagreement and must surface.
|
|
107
128
|
const syncedAfter = await this.getSyncedL1BlockNumber();
|
|
108
129
|
if (syncedBefore !== syncedAfter && err instanceof Error && err.message.includes('does not match Outbox')) {
|
|
109
130
|
this.log.debug(`Transient outbox root mismatch during sync, returning no witness`, {
|
package/src/store/block_store.ts
CHANGED
|
@@ -537,20 +537,58 @@ export class BlockStore {
|
|
|
537
537
|
}
|
|
538
538
|
|
|
539
539
|
/** Deletes a block and all associated data (tx effects, indices). */
|
|
540
|
-
private async deleteBlock(
|
|
540
|
+
private async deleteBlock(blockNumber: number, blockStorage: BlockStorage): Promise<void> {
|
|
541
541
|
// Delete the block from the main blocks map
|
|
542
|
-
await this.#blocks.delete(
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
542
|
+
await this.#blocks.delete(blockNumber);
|
|
543
|
+
|
|
544
|
+
const blockHash = bufferToHex(blockStorage.blockHash);
|
|
545
|
+
|
|
546
|
+
// Delete the tx effects of the block's txs, skipping entries that no longer point at this block: if
|
|
547
|
+
// another stored block also contains the tx, the entry points at that block, and deleting it here would
|
|
548
|
+
// orphan that block's index. Honest chains never store the same tx twice (duplicate nullifiers are
|
|
549
|
+
// rejected at build, re-execution, and world-state sync), so the store must not turn such a state into
|
|
550
|
+
// corruption of the surviving block if it ever appears.
|
|
551
|
+
const blockTxsBuffer = await this.#blockTxs.getAsync(blockHash);
|
|
552
|
+
if (blockTxsBuffer !== undefined) {
|
|
553
|
+
const reader = BufferReader.asReader(blockTxsBuffer);
|
|
554
|
+
const txHashes: string[] = [];
|
|
555
|
+
while (!reader.isEmpty()) {
|
|
556
|
+
txHashes.push(reader.readObject(TxHash).toString());
|
|
557
|
+
}
|
|
558
|
+
await Promise.all(txHashes.map(txHash => this.deleteTxEffect(txHash, blockStorage.blockHash)));
|
|
559
|
+
}
|
|
546
560
|
|
|
547
561
|
// Delete block txs mapping
|
|
548
|
-
const blockHash = (await block.hash()).toString();
|
|
549
562
|
await this.#blockTxs.delete(blockHash);
|
|
550
563
|
|
|
551
564
|
// Clean up indices
|
|
552
565
|
await this.#blockHashIndex.delete(blockHash);
|
|
553
|
-
await this.#blockArchiveIndex.delete(
|
|
566
|
+
await this.#blockArchiveIndex.delete(AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive).root.toString());
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
/** Deletes a tx effect only if it is still owned by (points at) the given block. */
|
|
570
|
+
private async deleteTxEffect(txHash: string, blockHash: Buffer): Promise<void> {
|
|
571
|
+
const stored = await this.#txEffects.getAsync(txHash);
|
|
572
|
+
if (stored === undefined) {
|
|
573
|
+
this.#log.warn(`Missing tx effect for tx ${txHash} while removing its block`, {
|
|
574
|
+
txHash,
|
|
575
|
+
blockHash: bufferToHex(blockHash),
|
|
576
|
+
});
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
// An IndexedTxEffect starts with the owning block hash (32 bytes) — see getTxLocation.
|
|
580
|
+
if (!Buffer.from(stored.buffer, stored.byteOffset, 32).equals(blockHash)) {
|
|
581
|
+
// Fires only when two stored blocks listed the same tx — a state upstream validation should make
|
|
582
|
+
// unreachable. Keep the entry (it belongs to the surviving block) but flag the duplication loudly.
|
|
583
|
+
this.#log.warn(`Tx effect for tx ${txHash} is owned by a block other than the one being removed`, {
|
|
584
|
+
txHash,
|
|
585
|
+
removedBlockHash: bufferToHex(blockHash),
|
|
586
|
+
owningBlockHash: bufferToHex(Buffer.from(stored.buffer, stored.byteOffset, 32)),
|
|
587
|
+
});
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
await this.#txEffects.delete(txHash);
|
|
554
592
|
}
|
|
555
593
|
|
|
556
594
|
/**
|
|
@@ -749,16 +787,24 @@ export class BlockStore {
|
|
|
749
787
|
|
|
750
788
|
// Iterate from blockNumber + 1 to latestBlockNumber
|
|
751
789
|
for (let bn = blockNumber + 1; bn <= latestBlockNumber; bn++) {
|
|
752
|
-
const
|
|
790
|
+
const blockStorage = await this.#blocks.getAsync(bn);
|
|
753
791
|
|
|
754
|
-
if (
|
|
792
|
+
if (blockStorage === undefined) {
|
|
755
793
|
this.#log.warn(`Cannot remove block ${bn} from the store since we don't have it`);
|
|
756
794
|
continue;
|
|
757
795
|
}
|
|
758
796
|
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
this
|
|
797
|
+
// Load the full block for the returned list when possible, but clean up from the raw row regardless:
|
|
798
|
+
// a block whose body can no longer be fully loaded must still release its row, tx effects, and indices,
|
|
799
|
+
// or later inserts at this number leave stale tx-effect entries pointing into the new chain.
|
|
800
|
+
const block = await this.getBlockFromBlockStorage(bn, blockStorage);
|
|
801
|
+
if (block !== undefined) {
|
|
802
|
+
removedBlocks.push(block);
|
|
803
|
+
} else {
|
|
804
|
+
this.#log.warn(`Removing block ${bn} whose body could not be fully loaded`);
|
|
805
|
+
}
|
|
806
|
+
await this.deleteBlock(bn, blockStorage);
|
|
807
|
+
this.#log.debug(`Removed block ${bn} ${bufferToHex(blockStorage.blockHash)}`);
|
|
762
808
|
}
|
|
763
809
|
|
|
764
810
|
return removedBlocks;
|