mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-29 20:27:14 +00:00
Merge branch 'release-v7.0.0' into v7-backmerge
This commit is contained in:
@@ -738,7 +738,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
///
|
||||
/// - `slot` always increases by `1`.
|
||||
/// - Skipped slots contain the root of the closest prior
|
||||
/// non-skipped slot (identical to the way they are stored in `state.block_roots`).
|
||||
/// non-skipped slot (identical to the way they are stored in `state.block_roots`).
|
||||
/// - Iterator returns `(Hash256, Slot)`.
|
||||
///
|
||||
/// Will return a `BlockOutOfRange` error if the requested start slot is before the period of
|
||||
@@ -802,7 +802,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
///
|
||||
/// - `slot` always decreases by `1`.
|
||||
/// - Skipped slots contain the root of the closest prior
|
||||
/// non-skipped slot (identical to the way they are stored in `state.block_roots`) .
|
||||
/// non-skipped slot (identical to the way they are stored in `state.block_roots`) .
|
||||
/// - Iterator returns `(Hash256, Slot)`.
|
||||
/// - The provided `block_root` is included as the first item in the iterator.
|
||||
pub fn rev_iter_block_roots_from(
|
||||
@@ -831,7 +831,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
/// - `slot` always decreases by `1`.
|
||||
/// - Iterator returns `(Hash256, Slot)`.
|
||||
/// - As this iterator starts at the `head` of the chain (viz., the best block), the first slot
|
||||
/// returned may be earlier than the wall-clock slot.
|
||||
/// returned may be earlier than the wall-clock slot.
|
||||
pub fn rev_iter_state_roots_from<'a>(
|
||||
&'a self,
|
||||
state_root: Hash256,
|
||||
|
||||
@@ -178,7 +178,7 @@ pub fn compute_proposer_duties_from_head<T: BeaconChainTypes>(
|
||||
/// - Returns an error if `state.current_epoch() > target_epoch`.
|
||||
/// - No-op if `state.current_epoch() == target_epoch`.
|
||||
/// - It must be the case that `state.canonical_root() == state_root`, but this function will not
|
||||
/// check that.
|
||||
/// check that.
|
||||
pub fn ensure_state_is_in_epoch<E: EthSpec>(
|
||||
state: &mut BeaconState<E>,
|
||||
state_root: Hash256,
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
//! - Verification for gossip blocks (i.e., should we gossip some block from the network).
|
||||
//! - Verification for normal blocks (e.g., some block received on the RPC during a parent lookup).
|
||||
//! - Verification for chain segments (e.g., some chain of blocks received on the RPC during a
|
||||
//! sync).
|
||||
//! sync).
|
||||
//!
|
||||
//! The primary source of complexity here is that we wish to avoid doing duplicate work as a block
|
||||
//! moves through the verification process. For example, if some block is verified for gossip, we
|
||||
|
||||
@@ -33,7 +33,7 @@ pub struct CacheItem<E: EthSpec> {
|
||||
///
|
||||
/// - Produce an attestation without using `chain.canonical_head`.
|
||||
/// - Verify that a block root exists (i.e., will be imported in the future) during attestation
|
||||
/// verification.
|
||||
/// verification.
|
||||
/// - Provide a block which can be sent to peers via RPC.
|
||||
#[derive(Default)]
|
||||
pub struct EarlyAttesterCache<E: EthSpec> {
|
||||
|
||||
@@ -461,7 +461,7 @@ pub mod tests {
|
||||
let last_finalized_eth1 = eth1s_by_count
|
||||
.range(0..(finalized_deposits + 1))
|
||||
.map(|(_, eth1)| eth1)
|
||||
.last()
|
||||
.next_back()
|
||||
.cloned();
|
||||
assert_eq!(
|
||||
eth1cache.finalize(finalized_checkpoint),
|
||||
|
||||
@@ -1282,7 +1282,7 @@ impl InvalidHeadSetup {
|
||||
///
|
||||
/// 1. A chain where the only viable head block has an invalid execution payload.
|
||||
/// 2. A block (`fork_block`) which will become the head of the chain when
|
||||
/// it is imported.
|
||||
/// it is imported.
|
||||
async fn new() -> InvalidHeadSetup {
|
||||
let slots_per_epoch = E::slots_per_epoch();
|
||||
let mut rig = InvalidPayloadRig::new().enable_attestations();
|
||||
|
||||
@@ -1682,7 +1682,7 @@ impl<E: EthSpec> ExecutionLayer<E> {
|
||||
///
|
||||
/// - `Some(true)` if the given `block_hash` is the terminal proof-of-work block.
|
||||
/// - `Some(false)` if the given `block_hash` is certainly *not* the terminal proof-of-work
|
||||
/// block.
|
||||
/// block.
|
||||
/// - `None` if the `block_hash` or its parent were not present on the execution engine.
|
||||
/// - `Err(_)` if there was an error connecting to the execution engine.
|
||||
///
|
||||
|
||||
@@ -991,23 +991,23 @@ impl<E: EthSpec> PeerManager<E> {
|
||||
/// - Do not prune outbound peers to exceed our outbound target.
|
||||
/// - Do not prune more peers than our target peer count.
|
||||
/// - If we have an option to remove a number of peers, remove ones that have the least
|
||||
/// long-lived subnets.
|
||||
/// long-lived subnets.
|
||||
/// - When pruning peers based on subnet count. If multiple peers can be chosen, choose a peer
|
||||
/// that is not subscribed to a long-lived sync committee subnet.
|
||||
/// that is not subscribed to a long-lived sync committee subnet.
|
||||
/// - When pruning peers based on subnet count, do not prune a peer that would lower us below the
|
||||
/// MIN_SYNC_COMMITTEE_PEERS peer count. To keep it simple, we favour a minimum number of sync-committee-peers over
|
||||
/// uniformity subnet peers. NOTE: We could apply more sophisticated logic, but the code is
|
||||
/// simpler and easier to maintain if we take this approach. If we are pruning subnet peers
|
||||
/// below the MIN_SYNC_COMMITTEE_PEERS and maintaining the sync committee peers, this should be
|
||||
/// fine as subnet peers are more likely to be found than sync-committee-peers. Also, we're
|
||||
/// in a bit of trouble anyway if we have so few peers on subnets. The
|
||||
/// MIN_SYNC_COMMITTEE_PEERS
|
||||
/// number should be set low as an absolute lower bound to maintain peers on the sync
|
||||
/// committees.
|
||||
/// MIN_SYNC_COMMITTEE_PEERS peer count. To keep it simple, we favour a minimum number of sync-committee-peers over
|
||||
/// uniformity subnet peers. NOTE: We could apply more sophisticated logic, but the code is
|
||||
/// simpler and easier to maintain if we take this approach. If we are pruning subnet peers
|
||||
/// below the MIN_SYNC_COMMITTEE_PEERS and maintaining the sync committee peers, this should be
|
||||
/// fine as subnet peers are more likely to be found than sync-committee-peers. Also, we're
|
||||
/// in a bit of trouble anyway if we have so few peers on subnets. The
|
||||
/// MIN_SYNC_COMMITTEE_PEERS
|
||||
/// number should be set low as an absolute lower bound to maintain peers on the sync
|
||||
/// committees.
|
||||
/// - Do not prune trusted peers. NOTE: This means if a user has more trusted peers than the
|
||||
/// excess peer limit, all of the following logic is subverted as we will not prune any peers.
|
||||
/// Also, the more trusted peers a user has, the less room Lighthouse has to efficiently manage
|
||||
/// its peers across the subnets.
|
||||
/// excess peer limit, all of the following logic is subverted as we will not prune any peers.
|
||||
/// Also, the more trusted peers a user has, the less room Lighthouse has to efficiently manage
|
||||
/// its peers across the subnets.
|
||||
///
|
||||
/// Prune peers in the following order:
|
||||
/// 1. Remove worst scoring peers
|
||||
|
||||
@@ -153,7 +153,7 @@ impl<E: EthSpec> PeerDB<E> {
|
||||
matches!(
|
||||
self.connection_status(peer_id),
|
||||
Some(PeerConnectionStatus::Disconnected { .. })
|
||||
| Some(PeerConnectionStatus::Unknown { .. })
|
||||
| Some(PeerConnectionStatus::Unknown)
|
||||
| None
|
||||
) && !self.score_state_banned_or_disconnected(peer_id)
|
||||
}
|
||||
@@ -771,8 +771,8 @@ impl<E: EthSpec> PeerDB<E> {
|
||||
NewConnectionState::Connected { .. } // We have established a new connection (peer may not have been seen before)
|
||||
| NewConnectionState::Disconnecting { .. }// We are disconnecting from a peer that may not have been registered before
|
||||
| NewConnectionState::Dialing { .. } // We are dialing a potentially new peer
|
||||
| NewConnectionState::Disconnected { .. } // Dialing a peer that responds by a different ID can be immediately
|
||||
// disconnected without having being stored in the db before
|
||||
| NewConnectionState::Disconnected // Dialing a peer that responds by a different ID can be immediately
|
||||
// disconnected without having being stored in the db before
|
||||
) {
|
||||
warn!(%peer_id, ?new_state, "Updating state of unknown peer");
|
||||
}
|
||||
|
||||
@@ -1010,7 +1010,7 @@ mod tests {
|
||||
BeaconBlockBellatrix::empty(&Spec::default_spec());
|
||||
|
||||
let tx = VariableList::from(vec![0; 1024]);
|
||||
let txs = VariableList::from(std::iter::repeat(tx).take(5000).collect::<Vec<_>>());
|
||||
let txs = VariableList::from(std::iter::repeat_n(tx, 5000).collect::<Vec<_>>());
|
||||
|
||||
block.body.execution_payload.execution_payload.transactions = txs;
|
||||
|
||||
@@ -1030,7 +1030,7 @@ mod tests {
|
||||
BeaconBlockBellatrix::empty(&Spec::default_spec());
|
||||
|
||||
let tx = VariableList::from(vec![0; 1024]);
|
||||
let txs = VariableList::from(std::iter::repeat(tx).take(100000).collect::<Vec<_>>());
|
||||
let txs = VariableList::from(std::iter::repeat_n(tx, 100000).collect::<Vec<_>>());
|
||||
|
||||
block.body.execution_payload.execution_payload.transactions = txs;
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ type E = MinimalEthSpec;
|
||||
fn bellatrix_block_small(fork_context: &ForkContext, spec: &ChainSpec) -> BeaconBlock<E> {
|
||||
let mut block = BeaconBlockBellatrix::<E>::empty(spec);
|
||||
let tx = VariableList::from(vec![0; 1024]);
|
||||
let txs = VariableList::from(std::iter::repeat(tx).take(5000).collect::<Vec<_>>());
|
||||
let txs = VariableList::from(std::iter::repeat_n(tx, 5000).collect::<Vec<_>>());
|
||||
|
||||
block.body.execution_payload.execution_payload.transactions = txs;
|
||||
|
||||
@@ -40,7 +40,7 @@ fn bellatrix_block_small(fork_context: &ForkContext, spec: &ChainSpec) -> Beacon
|
||||
fn bellatrix_block_large(fork_context: &ForkContext, spec: &ChainSpec) -> BeaconBlock<E> {
|
||||
let mut block = BeaconBlockBellatrix::<E>::empty(spec);
|
||||
let tx = VariableList::from(vec![0; 1024]);
|
||||
let txs = VariableList::from(std::iter::repeat(tx).take(100000).collect::<Vec<_>>());
|
||||
let txs = VariableList::from(std::iter::repeat_n(tx, 100000).collect::<Vec<_>>());
|
||||
|
||||
block.body.execution_payload.execution_payload.transactions = txs;
|
||||
|
||||
|
||||
@@ -821,7 +821,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
|
||||
| GossipDataColumnError::ProposerIndexMismatch { .. }
|
||||
| GossipDataColumnError::IsNotLaterThanParent { .. }
|
||||
| GossipDataColumnError::InvalidSubnetId { .. }
|
||||
| GossipDataColumnError::InvalidInclusionProof { .. }
|
||||
| GossipDataColumnError::InvalidInclusionProof
|
||||
| GossipDataColumnError::InvalidKzgProof { .. }
|
||||
| GossipDataColumnError::UnexpectedDataColumn
|
||||
| GossipDataColumnError::InvalidColumnIndex(_)
|
||||
|
||||
@@ -685,7 +685,7 @@ impl<T: BeaconChainTypes> SyncManager<T> {
|
||||
if new_state.is_synced()
|
||||
&& !matches!(
|
||||
old_state,
|
||||
SyncState::Synced { .. } | SyncState::BackFillSyncing { .. }
|
||||
SyncState::Synced | SyncState::BackFillSyncing { .. }
|
||||
)
|
||||
{
|
||||
self.network.subscribe_core_topics();
|
||||
|
||||
@@ -1297,7 +1297,7 @@ impl TestRig {
|
||||
.sync_manager
|
||||
.get_sampling_request_status(block_root, index)
|
||||
.unwrap_or_else(|| panic!("No request state for {index}"));
|
||||
if !matches!(status, crate::sync::peer_sampling::Status::NoPeers { .. }) {
|
||||
if !matches!(status, crate::sync::peer_sampling::Status::NoPeers) {
|
||||
panic!("expected {block_root} {index} request to be no peers: {status:?}");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user