Altair consensus changes and refactors (#2279)

## Proposed Changes

Implement the consensus changes necessary for the upcoming Altair hard fork.

## Additional Info

This is quite a heavy refactor, with pivotal types like the `BeaconState` and `BeaconBlock` changing from structs to enums. This ripples through the whole codebase with field accesses changing to methods, e.g. `state.slot` => `state.slot()`.


Co-authored-by: realbigsean <seananderson33@gmail.com>
This commit is contained in:
Michael Sproul
2021-07-09 06:15:32 +00:00
parent 89361573d4
commit b4689e20c6
271 changed files with 9652 additions and 8444 deletions

View File

@@ -11,6 +11,8 @@ use types::*;
/// (e.g., when processing attestations instead of when processing deposits).
#[derive(Debug, PartialEq, Clone)]
pub enum BlockProcessingError {
/// Logic error indicating that the wrong state type was provided.
IncorrectStateType,
RandaoSignatureInvalid,
BulkSignatureVerificationFailed,
StateRootMismatch,
@@ -45,11 +47,16 @@ pub enum BlockProcessingError {
index: usize,
reason: ExitInvalid,
},
SyncAggregateInvalid {
reason: SyncAggregateInvalid,
},
BeaconStateError(BeaconStateError),
SignatureSetError(SignatureSetError),
SszTypesError(ssz_types::Error),
MerkleTreeError(MerkleTreeError),
ArithError(ArithError),
InconsistentBlockFork(InconsistentFork),
InconsistentStateFork(InconsistentFork),
}
impl From<BeaconStateError> for BlockProcessingError {
@@ -76,6 +83,12 @@ impl From<ArithError> for BlockProcessingError {
}
}
impl From<SyncAggregateInvalid> for BlockProcessingError {
fn from(reason: SyncAggregateInvalid) -> Self {
BlockProcessingError::SyncAggregateInvalid { reason }
}
}
impl From<BlockOperationError<HeaderInvalid>> for BlockProcessingError {
fn from(e: BlockOperationError<HeaderInvalid>) -> BlockProcessingError {
match e {
@@ -339,3 +352,11 @@ pub enum ExitInvalid {
/// been invalid or an internal error occurred.
SignatureSetError(SignatureSetError),
}
#[derive(Debug, PartialEq, Clone)]
pub enum SyncAggregateInvalid {
/// One or more of the aggregate public keys is invalid.
PubkeyInvalid,
/// The signature is invalid.
SignatureInvalid,
}