@lodestar/beacon-node
Version:
A Typescript implementation of the beacon chain
40 lines • 2.2 kB
JavaScript
/**
* Backfill sync relies on verified connected ranges (which are represented as key,value
* with a verified jump from a key back to value). Since the node could have progressed
* ahead from, we need to save the forward progress of this node as another backfill
* range entry, that backfill sync will use to jump back if this node is restarted
* for any reason.
* The current backfill has its own backfill entry from anchor slot to last backfilled
* slot. And this would create the entry from the current finalized slot to the anchor
* slot.
*/
export async function updateBackfillRange({ chain, db, logger }, finalized) {
try {
// Mark the sequence in backfill db from finalized block's slot till anchor slot as
// filled.
const finalizedBlockFC = chain.forkChoice.getBlockHexDefaultStatus(finalized.rootHex);
if (finalizedBlockFC && finalizedBlockFC.slot > chain.anchorStateLatestBlockSlot) {
await db.backfilledRanges.put(finalizedBlockFC.slot, chain.anchorStateLatestBlockSlot);
// Clear previously marked sequence till anchorStateLatestBlockSlot, without
// touching backfill sync process sequence which are at
// <=anchorStateLatestBlockSlot i.e. clear >anchorStateLatestBlockSlot
// and < currentSlot
const filteredSeqs = await db.backfilledRanges.entries({
gt: chain.anchorStateLatestBlockSlot,
lt: finalizedBlockFC.slot,
});
logger.debug("updated backfilledRanges", {
key: finalizedBlockFC.slot,
value: chain.anchorStateLatestBlockSlot,
});
if (filteredSeqs.length > 0) {
await db.backfilledRanges.batchDelete(filteredSeqs.map((entry) => entry.key));
logger.debug(`Forward Sync - cleaned up backfilledRanges between ${finalizedBlockFC.slot},${chain.anchorStateLatestBlockSlot}`, { seqs: JSON.stringify(filteredSeqs) });
}
}
}
catch (e) {
logger.error("Error updating backfilledRanges on finalization", { epoch: finalized.epoch }, e);
}
}
//# sourceMappingURL=updateBackfillRange.js.map