Rust 1.71 lints (#4503)

## Issue Addressed

N/A

## Proposed Changes

Add lints for rust 1.71

[3789134](3789134ae2) is probably the one that needs most attention as it changes beacon state code. I changed the `is_in_inactivity_leak ` function to return a `ArithError` as not all consumers of that function work well with a `BeaconState::Error`.
This commit is contained in:
Pawan Dhananjay 2023-07-17 00:14:19 +00:00
parent d4a61756ca
commit f2223feb21
20 changed files with 56 additions and 50 deletions

View File

@ -86,7 +86,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
let ideal_reward = reward_numerator let ideal_reward = reward_numerator
.safe_div(active_increments)? .safe_div(active_increments)?
.safe_div(WEIGHT_DENOMINATOR)?; .safe_div(WEIGHT_DENOMINATOR)?;
if !state.is_in_inactivity_leak(previous_epoch, spec) { if !state.is_in_inactivity_leak(previous_epoch, spec)? {
ideal_rewards_hashmap ideal_rewards_hashmap
.insert((flag_index, effective_balance), (ideal_reward, penalty)); .insert((flag_index, effective_balance), (ideal_reward, penalty));
} else { } else {

View File

@ -163,7 +163,7 @@ impl<T: EthSpec, Payload: AbstractExecPayload<T>> BlockProposalContents<T, Paylo
BlockProposalContents::Payload { BlockProposalContents::Payload {
payload: Payload::default_at_fork(fork_name)?, payload: Payload::default_at_fork(fork_name)?,
block_value: Uint256::zero(), block_value: Uint256::zero(),
_phantom: PhantomData::default(), _phantom: PhantomData,
} }
} }
}) })
@ -858,7 +858,7 @@ impl<T: EthSpec> ExecutionLayer<T> {
BlockProposalContents::Payload { BlockProposalContents::Payload {
payload: relay.data.message.header, payload: relay.data.message.header,
block_value: relay.data.message.value, block_value: relay.data.message.value,
_phantom: PhantomData::default(), _phantom: PhantomData,
}, },
)), )),
Err(reason) if !reason.payload_invalid() => { Err(reason) if !reason.payload_invalid() => {
@ -913,7 +913,7 @@ impl<T: EthSpec> ExecutionLayer<T> {
BlockProposalContents::Payload { BlockProposalContents::Payload {
payload: relay.data.message.header, payload: relay.data.message.header,
block_value: relay.data.message.value, block_value: relay.data.message.value,
_phantom: PhantomData::default(), _phantom: PhantomData,
}, },
)), )),
// If the payload is valid then use it. The local EE failed // If the payload is valid then use it. The local EE failed
@ -922,7 +922,7 @@ impl<T: EthSpec> ExecutionLayer<T> {
BlockProposalContents::Payload { BlockProposalContents::Payload {
payload: relay.data.message.header, payload: relay.data.message.header,
block_value: relay.data.message.value, block_value: relay.data.message.value,
_phantom: PhantomData::default(), _phantom: PhantomData,
}, },
)), )),
Err(reason) => { Err(reason) => {
@ -1129,7 +1129,7 @@ impl<T: EthSpec> ExecutionLayer<T> {
Ok(BlockProposalContents::Payload { Ok(BlockProposalContents::Payload {
payload: execution_payload.into(), payload: execution_payload.into(),
block_value, block_value,
_phantom: PhantomData::default(), _phantom: PhantomData,
}) })
}) })
.await .await
@ -2018,6 +2018,22 @@ async fn timed_future<F: Future<Output = T>, T>(metric: &str, future: F) -> (T,
(result, duration) (result, duration)
} }
fn noop<T: EthSpec>(
_: &ExecutionLayer<T>,
_: ExecutionPayloadRef<T>,
) -> Option<ExecutionPayload<T>> {
None
}
#[cfg(test)]
/// Returns the duration since the unix epoch.
fn timestamp_now() -> u64 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap_or_else(|_| Duration::from_secs(0))
.as_secs()
}
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use super::*; use super::*;
@ -2164,19 +2180,3 @@ mod test {
.await; .await;
} }
} }
fn noop<T: EthSpec>(
_: &ExecutionLayer<T>,
_: ExecutionPayloadRef<T>,
) -> Option<ExecutionPayload<T>> {
None
}
#[cfg(test)]
/// Returns the duration since the unix epoch.
fn timestamp_now() -> u64 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap_or_else(|_| Duration::from_secs(0))
.as_secs()
}

View File

@ -75,7 +75,7 @@ impl<T: EthSpec> PackingEfficiencyHandler<T> {
available_attestations: HashSet::new(), available_attestations: HashSet::new(),
included_attestations: HashMap::new(), included_attestations: HashMap::new(),
committee_store: CommitteeStore::new(), committee_store: CommitteeStore::new(),
_phantom: PhantomData::default(), _phantom: PhantomData,
}; };
handler.compute_epoch(start_epoch, &starting_state, spec)?; handler.compute_epoch(start_epoch, &starting_state, spec)?;

View File

@ -2,7 +2,7 @@
#![cfg_attr( #![cfg_attr(
not(test), not(test),
deny( deny(
clippy::integer_arithmetic, clippy::arithmetic_side_effects,
clippy::disallowed_methods, clippy::disallowed_methods,
clippy::indexing_slicing, clippy::indexing_slicing,
clippy::unwrap_used, clippy::unwrap_used,

View File

@ -1,4 +1,4 @@
#![allow(clippy::integer_arithmetic)] #![allow(clippy::arithmetic_side_effects)]
use super::signature_sets::{Error as SignatureSetError, *}; use super::signature_sets::{Error as SignatureSetError, *};
use crate::per_block_processing::errors::{AttestationInvalid, BlockOperationError}; use crate::per_block_processing::errors::{AttestationInvalid, BlockOperationError};

View File

@ -960,7 +960,7 @@ async fn fork_spanning_exit() {
spec.bellatrix_fork_epoch = Some(Epoch::new(4)); spec.bellatrix_fork_epoch = Some(Epoch::new(4));
spec.shard_committee_period = 0; spec.shard_committee_period = 0;
let harness = BeaconChainHarness::builder(MainnetEthSpec::default()) let harness = BeaconChainHarness::builder(MainnetEthSpec)
.spec(spec.clone()) .spec(spec.clone())
.deterministic_keypairs(VALIDATOR_COUNT) .deterministic_keypairs(VALIDATOR_COUNT)
.mock_execution_layer() .mock_execution_layer()

View File

@ -34,7 +34,7 @@ pub fn process_inactivity_updates<T: EthSpec>(
.safe_add_assign(spec.inactivity_score_bias)?; .safe_add_assign(spec.inactivity_score_bias)?;
} }
// Decrease the score of all validators for forgiveness when not during a leak // Decrease the score of all validators for forgiveness when not during a leak
if !state.is_in_inactivity_leak(previous_epoch, spec) { if !state.is_in_inactivity_leak(previous_epoch, spec)? {
let inactivity_score = state.get_inactivity_score_mut(index)?; let inactivity_score = state.get_inactivity_score_mut(index)?;
inactivity_score inactivity_score
.safe_sub_assign(min(spec.inactivity_score_recovery_rate, *inactivity_score))?; .safe_sub_assign(min(spec.inactivity_score_recovery_rate, *inactivity_score))?;

View File

@ -77,7 +77,7 @@ pub fn get_flag_index_deltas<T: EthSpec>(
let mut delta = Delta::default(); let mut delta = Delta::default();
if unslashed_participating_indices.contains(index)? { if unslashed_participating_indices.contains(index)? {
if !state.is_in_inactivity_leak(previous_epoch, spec) { if !state.is_in_inactivity_leak(previous_epoch, spec)? {
let reward_numerator = base_reward let reward_numerator = base_reward
.safe_mul(weight)? .safe_mul(weight)?
.safe_mul(unslashed_participating_increments)?; .safe_mul(unslashed_participating_increments)?;

View File

@ -138,7 +138,7 @@ impl<E: EthSpec> VerifyOperation<E> for SignedVoluntaryExit {
Ok(SigVerifiedOp::new(self, state)) Ok(SigVerifiedOp::new(self, state))
} }
#[allow(clippy::integer_arithmetic)] #[allow(clippy::arithmetic_side_effects)]
fn verification_epochs(&self) -> SmallVec<[Epoch; MAX_FORKS_VERIFIED_AGAINST]> { fn verification_epochs(&self) -> SmallVec<[Epoch; MAX_FORKS_VERIFIED_AGAINST]> {
smallvec![self.message.epoch] smallvec![self.message.epoch]
} }
@ -156,7 +156,7 @@ impl<E: EthSpec> VerifyOperation<E> for AttesterSlashing<E> {
Ok(SigVerifiedOp::new(self, state)) Ok(SigVerifiedOp::new(self, state))
} }
#[allow(clippy::integer_arithmetic)] #[allow(clippy::arithmetic_side_effects)]
fn verification_epochs(&self) -> SmallVec<[Epoch; MAX_FORKS_VERIFIED_AGAINST]> { fn verification_epochs(&self) -> SmallVec<[Epoch; MAX_FORKS_VERIFIED_AGAINST]> {
smallvec![ smallvec![
self.attestation_1.data.target.epoch, self.attestation_1.data.target.epoch,
@ -177,7 +177,7 @@ impl<E: EthSpec> VerifyOperation<E> for ProposerSlashing {
Ok(SigVerifiedOp::new(self, state)) Ok(SigVerifiedOp::new(self, state))
} }
#[allow(clippy::integer_arithmetic)] #[allow(clippy::arithmetic_side_effects)]
fn verification_epochs(&self) -> SmallVec<[Epoch; MAX_FORKS_VERIFIED_AGAINST]> { fn verification_epochs(&self) -> SmallVec<[Epoch; MAX_FORKS_VERIFIED_AGAINST]> {
// Only need a single epoch because the slots of the two headers must be equal. // Only need a single epoch because the slots of the two headers must be equal.
smallvec![self smallvec![self
@ -200,7 +200,7 @@ impl<E: EthSpec> VerifyOperation<E> for SignedBlsToExecutionChange {
Ok(SigVerifiedOp::new(self, state)) Ok(SigVerifiedOp::new(self, state))
} }
#[allow(clippy::integer_arithmetic)] #[allow(clippy::arithmetic_side_effects)]
fn verification_epochs(&self) -> SmallVec<[Epoch; MAX_FORKS_VERIFIED_AGAINST]> { fn verification_epochs(&self) -> SmallVec<[Epoch; MAX_FORKS_VERIFIED_AGAINST]> {
smallvec![] smallvec![]
} }

View File

@ -442,7 +442,7 @@ impl<T: EthSpec> BeaconState<T> {
} }
/// Specialised deserialisation method that uses the `ChainSpec` as context. /// Specialised deserialisation method that uses the `ChainSpec` as context.
#[allow(clippy::integer_arithmetic)] #[allow(clippy::arithmetic_side_effects)]
pub fn from_ssz_bytes(bytes: &[u8], spec: &ChainSpec) -> Result<Self, ssz::DecodeError> { pub fn from_ssz_bytes(bytes: &[u8], spec: &ChainSpec) -> Result<Self, ssz::DecodeError> {
// Slot is after genesis_time (u64) and genesis_validators_root (Hash256). // Slot is after genesis_time (u64) and genesis_validators_root (Hash256).
let slot_start = <u64 as Decode>::ssz_fixed_len() + <Hash256 as Decode>::ssz_fixed_len(); let slot_start = <u64 as Decode>::ssz_fixed_len() + <Hash256 as Decode>::ssz_fixed_len();
@ -1734,16 +1734,22 @@ impl<T: EthSpec> BeaconState<T> {
previous_epoch: Epoch, previous_epoch: Epoch,
val_index: usize, val_index: usize,
) -> Result<bool, Error> { ) -> Result<bool, Error> {
self.get_validator(val_index).map(|val| { let val = self.get_validator(val_index)?;
val.is_active_at(previous_epoch) Ok(val.is_active_at(previous_epoch)
|| (val.slashed && previous_epoch + Epoch::new(1) < val.withdrawable_epoch) || (val.slashed && previous_epoch.safe_add(Epoch::new(1))? < val.withdrawable_epoch))
})
} }
/// Passing `previous_epoch` to this function rather than computing it internally provides /// Passing `previous_epoch` to this function rather than computing it internally provides
/// a tangible speed improvement in state processing. /// a tangible speed improvement in state processing.
pub fn is_in_inactivity_leak(&self, previous_epoch: Epoch, spec: &ChainSpec) -> bool { pub fn is_in_inactivity_leak(
(previous_epoch - self.finalized_checkpoint().epoch) > spec.min_epochs_to_inactivity_penalty &self,
previous_epoch: Epoch,
spec: &ChainSpec,
) -> Result<bool, safe_arith::ArithError> {
Ok(
(previous_epoch.safe_sub(self.finalized_checkpoint().epoch)?)
> spec.min_epochs_to_inactivity_penalty,
)
} }
/// Get the `SyncCommittee` associated with the next slot. Useful because sync committees /// Get the `SyncCommittee` associated with the next slot. Useful because sync committees

View File

@ -1,4 +1,4 @@
#![allow(clippy::integer_arithmetic)] #![allow(clippy::arithmetic_side_effects)]
use super::BeaconState; use super::BeaconState;
use crate::*; use crate::*;

View File

@ -1,4 +1,4 @@
#![allow(clippy::integer_arithmetic)] #![allow(clippy::arithmetic_side_effects)]
#![allow(clippy::disallowed_methods)] #![allow(clippy::disallowed_methods)]
#![allow(clippy::indexing_slicing)] #![allow(clippy::indexing_slicing)]

View File

@ -451,7 +451,7 @@ impl ChainSpec {
Hash256::from(domain) Hash256::from(domain)
} }
#[allow(clippy::integer_arithmetic)] #[allow(clippy::arithmetic_side_effects)]
pub const fn attestation_subnet_prefix_bits(&self) -> u32 { pub const fn attestation_subnet_prefix_bits(&self) -> u32 {
let attestation_subnet_count_bits = self.attestation_subnet_count.ilog2(); let attestation_subnet_count_bits = self.attestation_subnet_count.ilog2();
self.attestation_subnet_extra_bits as u32 + attestation_subnet_count_bits self.attestation_subnet_extra_bits as u32 + attestation_subnet_count_bits

View File

@ -106,7 +106,7 @@ impl<T: EthSpec> ExecutionPayload<T> {
} }
} }
#[allow(clippy::integer_arithmetic)] #[allow(clippy::arithmetic_side_effects)]
/// Returns the maximum size of an execution payload. /// Returns the maximum size of an execution payload.
pub fn max_execution_payload_merge_size() -> usize { pub fn max_execution_payload_merge_size() -> usize {
// Fixed part // Fixed part
@ -117,7 +117,7 @@ impl<T: EthSpec> ExecutionPayload<T> {
+ (T::max_transactions_per_payload() * (ssz::BYTES_PER_LENGTH_OFFSET + T::max_bytes_per_transaction())) + (T::max_transactions_per_payload() * (ssz::BYTES_PER_LENGTH_OFFSET + T::max_bytes_per_transaction()))
} }
#[allow(clippy::integer_arithmetic)] #[allow(clippy::arithmetic_side_effects)]
/// Returns the maximum size of an execution payload. /// Returns the maximum size of an execution payload.
pub fn max_execution_payload_capella_size() -> usize { pub fn max_execution_payload_capella_size() -> usize {
// Fixed part // Fixed part

View File

@ -3,7 +3,7 @@
#![cfg_attr( #![cfg_attr(
not(test), not(test),
deny( deny(
clippy::integer_arithmetic, clippy::arithmetic_side_effects,
clippy::disallowed_methods, clippy::disallowed_methods,
clippy::indexing_slicing clippy::indexing_slicing
) )

View File

@ -1,4 +1,4 @@
#![allow(clippy::integer_arithmetic)] #![allow(clippy::arithmetic_side_effects)]
use crate::{Hash256, ParticipationFlags, Unsigned, VariableList}; use crate::{Hash256, ParticipationFlags, Unsigned, VariableList};
use cached_tree_hash::{int_log, CacheArena, CachedTreeHash, Error, TreeHashCache}; use cached_tree_hash::{int_log, CacheArena, CachedTreeHash, Error, TreeHashCache};

View File

@ -72,7 +72,7 @@ impl SubnetId {
.into()) .into())
} }
#[allow(clippy::integer_arithmetic)] #[allow(clippy::arithmetic_side_effects)]
/// Computes the set of subnets the node should be subscribed to during the current epoch, /// Computes the set of subnets the node should be subscribed to during the current epoch,
/// along with the first epoch in which these subscriptions are no longer valid. /// along with the first epoch in which these subscriptions are no longer valid.
pub fn compute_subnets_for_epoch<T: EthSpec>( pub fn compute_subnets_for_epoch<T: EthSpec>(

View File

@ -1,4 +1,4 @@
#![allow(clippy::integer_arithmetic)] #![allow(clippy::arithmetic_side_effects)]
use std::fmt::Debug; use std::fmt::Debug;

View File

@ -28,7 +28,7 @@ pub trait TestRandom {
impl<T> TestRandom for PhantomData<T> { impl<T> TestRandom for PhantomData<T> {
fn random_for_test(_rng: &mut impl RngCore) -> Self { fn random_for_test(_rng: &mut impl RngCore) -> Self {
PhantomData::default() PhantomData
} }
} }

View File

@ -1,4 +1,4 @@
#![cfg(all(feature = "lmdb"))] #![cfg(feature = "lmdb")]
use slasher::{config::MDBX_DATA_FILENAME, Config, DatabaseBackend, DatabaseBackendOverride}; use slasher::{config::MDBX_DATA_FILENAME, Config, DatabaseBackend, DatabaseBackendOverride};
use std::fs::File; use std::fs::File;