mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-09 03:17:55 +00:00
Gloas cold DB (#8991)
Closes: - https://github.com/sigp/lighthouse/issues/8958 - Update the `HotColdStore` to handle storage of cold states. - Update `BeaconSnapshot` to hold the execution envelope. This is required to make `chain_dump`-related checks sane, and will be generally useful (see: https://github.com/sigp/lighthouse/issues/8956). - Bug fix in the `BlockReplayer` for the case where the starting state is already `Full` (we should not try to apply another payload). This happens on the cold DB path because we try to replay from the closest cached state (which is often full). - Update `test_gloas_hot_state_hierarchy` to cover the cold DB migration. Co-Authored-By: Michael Sproul <michael@sigmaprime.io> Co-Authored-By: Michael Sproul <michaelsproul@users.noreply.github.com>
This commit is contained in:
@@ -319,6 +319,10 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
|
||||
.spec
|
||||
.fulu_fork_epoch
|
||||
.map(|epoch| epoch.start_slot(E::slots_per_epoch()));
|
||||
let gloas_fork_slot = self
|
||||
.spec
|
||||
.gloas_fork_epoch
|
||||
.map(|epoch| epoch.start_slot(E::slots_per_epoch()));
|
||||
let oldest_blob_slot = self.get_blob_info().oldest_blob_slot;
|
||||
let oldest_data_column_slot = self.get_data_column_info().oldest_data_column_slot;
|
||||
|
||||
@@ -343,17 +347,28 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
|
||||
}
|
||||
|
||||
// Invariant 5: execution payload consistency.
|
||||
// TODO(gloas): reconsider this invariant
|
||||
if check_payloads
|
||||
&& let Some(bellatrix_slot) = bellatrix_fork_slot
|
||||
&& slot >= bellatrix_slot
|
||||
&& !self.execution_payload_exists(&block_root)?
|
||||
&& !self.payload_envelope_exists(&block_root)?
|
||||
{
|
||||
result.add_violation(InvariantViolation::ExecutionPayloadMissing {
|
||||
block_root,
|
||||
slot,
|
||||
});
|
||||
if let Some(gloas_slot) = gloas_fork_slot
|
||||
&& slot >= gloas_slot
|
||||
{
|
||||
// For Gloas there is never a true payload stored at slot 0.
|
||||
// TODO(gloas): still need to account for non-canonical payloads once pruning
|
||||
// is implemented.
|
||||
if slot != 0 && !self.payload_envelope_exists(&block_root)? {
|
||||
result.add_violation(InvariantViolation::ExecutionPayloadMissing {
|
||||
block_root,
|
||||
slot,
|
||||
});
|
||||
}
|
||||
} else if !self.execution_payload_exists(&block_root)? {
|
||||
result.add_violation(InvariantViolation::ExecutionPayloadMissing {
|
||||
block_root,
|
||||
slot,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Invariant 6: blob sidecar consistency.
|
||||
|
||||
Reference in New Issue
Block a user