mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-10 04:01:51 +00:00
Retrospective invalidation of exec. payloads for opt. sync (#2837)
## Issue Addressed
NA
## Proposed Changes
Adds the functionality to allow blocks to be validated/invalidated after their import as per the [optimistic sync spec](https://github.com/ethereum/consensus-specs/blob/dev/sync/optimistic.md#how-to-optimistically-import-blocks). This means:
- Updating `ProtoArray` to allow flipping the `execution_status` of ancestors/descendants based on payload validity updates.
- Creating separation between `execution_layer` and the `beacon_chain` by creating a `PayloadStatus` struct.
- Refactoring how the `execution_layer` selects a `PayloadStatus` from the multiple statuses returned from multiple EEs.
- Adding testing framework for optimistic imports.
- Add `ExecutionBlockHash(Hash256)` new-type struct to avoid confusion between *beacon block roots* and *execution payload hashes*.
- Add `merge` to [`FORKS`](c3a793fd73/Makefile (L17)) in the `Makefile` to ensure we test the beacon chain with merge settings.
- Fix some tests here that were failing due to a missing execution layer.
## TODO
- [ ] Balance tests
Co-authored-by: Mark Mackey <mark@sigmaprime.io>
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
use types::{Checkpoint, Epoch, Hash256};
|
||||
use types::{Checkpoint, Epoch, ExecutionBlockHash, Hash256};
|
||||
|
||||
#[derive(Clone, PartialEq, Debug)]
|
||||
pub enum Error {
|
||||
FinalizedNodeUnknown(Hash256),
|
||||
JustifiedNodeUnknown(Hash256),
|
||||
NodeUnknown(Hash256),
|
||||
InvalidFinalizedRootChange,
|
||||
InvalidNodeIndex(usize),
|
||||
InvalidParentIndex(usize),
|
||||
@@ -15,6 +16,7 @@ pub enum Error {
|
||||
DeltaOverflow(usize),
|
||||
ProposerBoostOverflow(usize),
|
||||
IndexOverflow(&'static str),
|
||||
InvalidExecutionDeltaOverflow(usize),
|
||||
InvalidDeltaLen {
|
||||
deltas: usize,
|
||||
indices: usize,
|
||||
@@ -26,7 +28,21 @@ pub enum Error {
|
||||
InvalidBestNode(Box<InvalidBestNodeInfo>),
|
||||
InvalidAncestorOfValidPayload {
|
||||
ancestor_block_root: Hash256,
|
||||
ancestor_payload_block_hash: Hash256,
|
||||
ancestor_payload_block_hash: ExecutionBlockHash,
|
||||
},
|
||||
ValidExecutionStatusBecameInvalid {
|
||||
block_root: Hash256,
|
||||
payload_block_hash: ExecutionBlockHash,
|
||||
},
|
||||
InvalidJustifiedCheckpointExecutionStatus {
|
||||
justified_root: Hash256,
|
||||
},
|
||||
UnknownLatestValidAncestorHash {
|
||||
block_root: Hash256,
|
||||
latest_valid_ancestor_hash: Option<ExecutionBlockHash>,
|
||||
},
|
||||
IrrelevantDescendant {
|
||||
block_root: Hash256,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user