diff --git a/beacon_chain/beacon_chain_db.nim b/beacon_chain/beacon_chain_db.nim index dcbfbf099..12e307911 100644 --- a/beacon_chain/beacon_chain_db.nim +++ b/beacon_chain/beacon_chain_db.nim @@ -795,6 +795,11 @@ proc putBlobSidecar*( value: BlobSidecar) = db.blobs.putSZSSZ(blobkey(value.block_root, value.index), value) +proc delBlobSidecar*( + db: BeaconChainDB, + root: Eth2Digest, index: BlobIndex) : bool = + db.blobs.del(blobkey(root, index)).expectDb() + proc updateImmutableValidators*( db: BeaconChainDB, validators: openArray[Validator]) = # Must be called before storing a state that references the new validators diff --git a/beacon_chain/nimbus_beacon_node.nim b/beacon_chain/nimbus_beacon_node.nim index 1926d1767..74cdc0f83 100644 --- a/beacon_chain/nimbus_beacon_node.nim +++ b/beacon_chain/nimbus_beacon_node.nim @@ -1170,6 +1170,25 @@ proc onSlotEnd(node: BeaconNode, slot: Slot) {.async.} = # This is the last pruning to do as it clears the "needPruning" condition. node.consensusManager[].pruneStateCachesAndForkChoice() + # prune blobs + let blobPruneEpoch = (slot.epoch - + MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS - 1) + if slot.is_epoch() and blobPruneEpoch >= node.dag.cfg.DENEB_FORK_EPOCH: + var blocks: array[SLOTS_PER_EPOCH.int, BlockId] + var count = 0 + let + startIndex = node.dag.getBlockRange(blobPruneEpoch.start_slot, 1, + blocks.toOpenArray(0, SLOTS_PER_EPOCH - 1)) + for i in startIndex..