mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-03 00:31:50 +00:00
fix linter complaints
This commit is contained in:
@@ -159,50 +159,46 @@ fn load_snapshot<T: BeaconChainTypes>(
|
||||
|
||||
// TODO(EIP-7732): add metrics here
|
||||
|
||||
let result = {
|
||||
// Load the parent block's state from the database, returning an error if it is not found.
|
||||
// It is an error because if we know the parent block we should also know the parent state.
|
||||
// Retrieve any state that is advanced through to at most `block.slot()`: this is
|
||||
// particularly important if `block` descends from the finalized/split block, but at a slot
|
||||
// prior to the finalized slot (which is invalid and inaccessible in our DB schema).
|
||||
let (parent_state_root, state) = chain
|
||||
.store
|
||||
// TODO(EIP-7732): the state doesn't need to be advanced here because we're applying an envelope
|
||||
// but this function does use a lot of caches that could be more efficient. Is there
|
||||
// a better way to do this?
|
||||
.get_advanced_hot_state(
|
||||
beacon_block_root,
|
||||
proto_beacon_block.slot,
|
||||
proto_beacon_block.state_root,
|
||||
)
|
||||
.map_err(|e| EnvelopeError::BeaconChainError(Arc::new(e.into())))?
|
||||
.ok_or_else(|| {
|
||||
BeaconChainError::DBInconsistent(format!(
|
||||
"Missing state for parent block {beacon_block_root:?}",
|
||||
))
|
||||
})?;
|
||||
|
||||
if state.slot() == proto_beacon_block.slot {
|
||||
// Sanity check.
|
||||
if parent_state_root != proto_beacon_block.state_root {
|
||||
return Err(BeaconChainError::DBInconsistent(format!(
|
||||
"Parent state at slot {} has the wrong state root: {:?} != {:?}",
|
||||
state.slot(),
|
||||
parent_state_root,
|
||||
proto_beacon_block.state_root,
|
||||
))
|
||||
.into());
|
||||
}
|
||||
}
|
||||
|
||||
Ok(EnvelopeProcessingSnapshot {
|
||||
pre_state: state,
|
||||
state_root: parent_state_root,
|
||||
// Load the parent block's state from the database, returning an error if it is not found.
|
||||
// It is an error because if we know the parent block we should also know the parent state.
|
||||
// Retrieve any state that is advanced through to at most `block.slot()`: this is
|
||||
// particularly important if `block` descends from the finalized/split block, but at a slot
|
||||
// prior to the finalized slot (which is invalid and inaccessible in our DB schema).
|
||||
let (parent_state_root, state) = chain
|
||||
.store
|
||||
// TODO(EIP-7732): the state doesn't need to be advanced here because we're applying an envelope
|
||||
// but this function does use a lot of caches that could be more efficient. Is there
|
||||
// a better way to do this?
|
||||
.get_advanced_hot_state(
|
||||
beacon_block_root,
|
||||
})
|
||||
};
|
||||
proto_beacon_block.slot,
|
||||
proto_beacon_block.state_root,
|
||||
)
|
||||
.map_err(|e| EnvelopeError::BeaconChainError(Arc::new(e.into())))?
|
||||
.ok_or_else(|| {
|
||||
BeaconChainError::DBInconsistent(format!(
|
||||
"Missing state for parent block {beacon_block_root:?}",
|
||||
))
|
||||
})?;
|
||||
|
||||
result
|
||||
if state.slot() == proto_beacon_block.slot {
|
||||
// Sanity check.
|
||||
if parent_state_root != proto_beacon_block.state_root {
|
||||
return Err(BeaconChainError::DBInconsistent(format!(
|
||||
"Parent state at slot {} has the wrong state root: {:?} != {:?}",
|
||||
state.slot(),
|
||||
parent_state_root,
|
||||
proto_beacon_block.state_root,
|
||||
))
|
||||
.into());
|
||||
}
|
||||
}
|
||||
|
||||
Ok(EnvelopeProcessingSnapshot {
|
||||
pre_state: state,
|
||||
state_root: parent_state_root,
|
||||
beacon_block_root,
|
||||
})
|
||||
}
|
||||
|
||||
/// A wrapper around a `SignedExecutionPayloadEnvelope` that indicates it has been approved for re-gossiping on
|
||||
@@ -320,7 +316,7 @@ impl<T: BeaconChainTypes> GossipVerifiedEnvelope<T> {
|
||||
builder_index: envelope.builder_index(),
|
||||
})?;
|
||||
signed_envelope.verify_signature(
|
||||
&builder_pubkey,
|
||||
builder_pubkey,
|
||||
&fork,
|
||||
chain.genesis_validators_root,
|
||||
&chain.spec,
|
||||
|
||||
@@ -119,7 +119,7 @@ pub fn envelope_processing<E: EthSpec>(
|
||||
if verify_signatures.is_true() {
|
||||
// Verify Signed Envelope Signature
|
||||
// TODO(EIP-7732): there is probably a more efficient way to do this..
|
||||
if !signed_envelope.verify_signature_with_state(&state, spec)? {
|
||||
if !signed_envelope.verify_signature_with_state(state, spec)? {
|
||||
return Err(EnvelopeProcessingError::BadSignature);
|
||||
}
|
||||
}
|
||||
@@ -205,18 +205,16 @@ pub fn envelope_processing<E: EthSpec>(
|
||||
state: *state.get_randao_mix(state.current_epoch())?,
|
||||
envelope: payload.prev_randao(),
|
||||
}
|
||||
.into()
|
||||
);
|
||||
|
||||
// Verify the timestamp
|
||||
let state_timestamp = compute_timestamp_at_slot(&state, state.slot(), spec)?;
|
||||
let state_timestamp = compute_timestamp_at_slot(state, state.slot(), spec)?;
|
||||
envelope_verify!(
|
||||
payload.timestamp() == state_timestamp,
|
||||
EnvelopeProcessingError::TimestampMismatch {
|
||||
state: state_timestamp,
|
||||
envelope: payload.timestamp(),
|
||||
}
|
||||
.into()
|
||||
);
|
||||
|
||||
// Verify the commitments are under limit
|
||||
@@ -227,7 +225,6 @@ pub fn envelope_processing<E: EthSpec>(
|
||||
max: max_blobs,
|
||||
envelope: envelope.blob_kzg_commitments().len(),
|
||||
}
|
||||
.into()
|
||||
);
|
||||
|
||||
// process electra operations
|
||||
@@ -242,7 +239,9 @@ pub fn envelope_processing<E: EthSpec>(
|
||||
let mut payment = state
|
||||
.builder_pending_payments()?
|
||||
.get(payment_index)
|
||||
.ok_or_else(|| EnvelopeProcessingError::BuilderPaymentIndexOutOfBounds(payment_index))?
|
||||
.ok_or(EnvelopeProcessingError::BuilderPaymentIndexOutOfBounds(
|
||||
payment_index,
|
||||
))?
|
||||
.clone();
|
||||
let amount = payment.withdrawal.amount;
|
||||
if amount > 0 {
|
||||
@@ -257,8 +256,9 @@ pub fn envelope_processing<E: EthSpec>(
|
||||
*state
|
||||
.builder_pending_payments_mut()?
|
||||
.get_mut(payment_index)
|
||||
.ok_or_else(|| EnvelopeProcessingError::BuilderPaymentIndexOutOfBounds(payment_index))? =
|
||||
BuilderPendingPayment::default();
|
||||
.ok_or(EnvelopeProcessingError::BuilderPaymentIndexOutOfBounds(
|
||||
payment_index,
|
||||
))? = BuilderPendingPayment::default();
|
||||
|
||||
// cache the execution payload hash
|
||||
let availability_index = state
|
||||
@@ -268,7 +268,7 @@ pub fn envelope_processing<E: EthSpec>(
|
||||
state
|
||||
.execution_payload_availability_mut()?
|
||||
.set(availability_index, true)
|
||||
.map_err(|e| EnvelopeProcessingError::BitFieldError(e))?;
|
||||
.map_err(EnvelopeProcessingError::BitFieldError)?;
|
||||
*state.latest_block_hash_mut()? = payload.block_hash();
|
||||
|
||||
// verify the state root
|
||||
|
||||
@@ -53,16 +53,15 @@ async fn build_state<E: EthSpec>(validator_count: usize) -> BeaconState<E> {
|
||||
.head_beacon_state_cloned()
|
||||
}
|
||||
|
||||
/// TODO(EIP-7732): Add tests for PTC (Payload Timeliness Committee) functions:
|
||||
/// - get_ptc: Test committee selection, size, balance-weighted selection
|
||||
/// - get_ptc_attester_seed: Test seed generation and determinism
|
||||
/// - compute_balance_weighted_selection: Test selection algorithm with various balances
|
||||
/// - compute_balance_weighted_acceptance: Test acceptance probability
|
||||
/// These tests require being able to build Gloas states with initialized committee caches,
|
||||
/// which currently fails due to incomplete Gloas block structure as mentioned here:
|
||||
/// https://github.com/sigp/lighthouse/pull/8273
|
||||
/// Similar to existing committee_consistency_test suite for get_beacon_committee.
|
||||
|
||||
// TODO(EIP-7732): Add tests for PTC (Payload Timeliness Committee) functions:
|
||||
// - get_ptc: Test committee selection, size, balance-weighted selection
|
||||
// - get_ptc_attester_seed: Test seed generation and determinism
|
||||
// - compute_balance_weighted_selection: Test selection algorithm with various balances
|
||||
// - compute_balance_weighted_acceptance: Test acceptance probability
|
||||
// These tests require being able to build Gloas states with initialized committee caches,
|
||||
// which currently fails due to incomplete Gloas block structure as mentioned here:
|
||||
// https://github.com/sigp/lighthouse/pull/8273
|
||||
// Similar to existing committee_consistency_test suite for get_beacon_committee.
|
||||
async fn test_beacon_proposer_index<E: EthSpec>() {
|
||||
let spec = E::default_spec();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user