diff --git a/beacon_node/network/src/message_handler.rs b/beacon_node/network/src/message_handler.rs index 2b9b10d8592..fb9bc3b7cdb 100644 --- a/beacon_node/network/src/message_handler.rs +++ b/beacon_node/network/src/message_handler.rs @@ -146,15 +146,9 @@ impl MessageHandler { ) { // an error could have occurred. match error_response { - RPCErrorResponse::InvalidRequest(error) => { - warn!(self.log, "Peer indicated invalid request";"peer_id" => format!("{:?}", peer_id), "error" => error.as_string()) - } - RPCErrorResponse::ServerError(error) => { - warn!(self.log, "Peer internal server error";"peer_id" => format!("{:?}", peer_id), "error" => error.as_string()) - } - RPCErrorResponse::Unknown(error) => { - warn!(self.log, "Unknown peer error";"peer" => format!("{:?}", peer_id), "error" => error.as_string()) - } + RPCErrorResponse::InvalidRequest(error) => warn!(self.log, "Peer indicated invalid request";"peer_id" => format!("{:?}", peer_id), "error" => error.as_string()), + RPCErrorResponse::ServerError(error) => warn!(self.log, "Peer internal server error";"peer_id" => format!("{:?}", peer_id), "error" => error.as_string()), + RPCErrorResponse::Unknown(error) => warn!(self.log, "Unknown peer error";"peer" => format!("{:?}", peer_id), "error" => error.as_string()), RPCErrorResponse::Success(response) => { match response { RPCResponse::Hello(hello_message) => { @@ -207,7 +201,8 @@ impl MessageHandler { match gossip_message { PubsubMessage::Block(message) => match self.decode_gossip_block(message) { Ok(block) => { - self.message_processor.on_block_gossip(peer_id.clone(), block.clone()); + self.message_processor + .on_block_gossip(peer_id.clone(), block.clone()); if self.message_processor.should_forward_block(block) { self.propagate_message(id, peer_id.clone()); } @@ -218,8 +213,12 @@ impl MessageHandler { }, PubsubMessage::Attestation(message) => match self.decode_gossip_attestation(message) { Ok(attestation) => { - self.message_processor.on_attestation_gossip(peer_id.clone(), attestation.clone()); - if self.message_processor.should_forward_attestation(attestation) { + self.message_processor + .on_attestation_gossip(peer_id.clone(), attestation.clone()); + if self + .message_processor + .should_forward_attestation(attestation) + { self.propagate_message(id, peer_id); } } diff --git a/beacon_node/network/src/sync/simple_sync.rs b/beacon_node/network/src/sync/simple_sync.rs index d0331a2af26..e3be68fb585 100644 --- a/beacon_node/network/src/sync/simple_sync.rs +++ b/beacon_node/network/src/sync/simple_sync.rs @@ -3,18 +3,23 @@ use crate::service::NetworkMessage; use beacon_chain::{ AttestationProcessingOutcome, BeaconChain, BeaconChainTypes, BlockProcessingOutcome, }; +use bls::SignatureSet; use eth2_libp2p::rpc::methods::*; use eth2_libp2p::rpc::{RPCEvent, RPCRequest, RPCResponse, RequestId}; use eth2_libp2p::PeerId; use slog::{debug, error, info, o, trace, warn}; use ssz::Encode; +use state_processing::{ + common::get_indexed_attestation, + per_block_processing::signature_sets::indexed_attestation_signature_set, per_slot_processing, +}; use std::sync::Arc; use store::Store; use tokio::sync::{mpsc, oneshot}; use tree_hash::SignedRoot; -use types::{Attestation, BeaconBlock, Epoch, EthSpec, Hash256, Slot, BeaconState, RelativeEpoch, Domain}; -use bls::SignatureSet; -use state_processing::{per_slot_processing, common::get_indexed_attestation, per_block_processing::signature_sets::indexed_attestation_signature_set}; +use types::{ + Attestation, BeaconBlock, BeaconState, Domain, Epoch, EthSpec, Hash256, RelativeEpoch, Slot, +}; //TODO: Put a maximum limit on the number of block that can be requested. //TODO: Rate limit requests @@ -433,11 +438,11 @@ impl MessageProcessor { pub fn should_forward_block(&mut self, block: BeaconBlock) -> bool { // Retrieve the parent block used to generate the signature. // This will eventually return false if this operation fails or returns an empty option. - let parent_block_opt = if let Ok(Some(parent_block)) = self - .chain - .store - .get::>(&block.parent_root) { - + let parent_block_opt = if let Ok(Some(parent_block)) = + self.chain + .store + .get::>(&block.parent_root) + { // Check if the parent block's state root is equal to the current state, if it is, then // we can validate the block using the state in our chain head. This saves us from // having to make an unecessary database read. @@ -453,7 +458,7 @@ impl MessageProcessor { // should never be the case though. match state_res { Ok(Some(state)) => Some((parent_block, state)), - _ => None + _ => None, } } else { None @@ -466,7 +471,7 @@ impl MessageProcessor { let relative_epoch = if let Ok(relative_epoch) = RelativeEpoch::from_slot( parent_block.slot, block.slot, - T::EthSpec::slots_per_epoch() + T::EthSpec::slots_per_epoch(), ) { relative_epoch } else { @@ -489,7 +494,10 @@ impl MessageProcessor { // Compute the committee cache so we can check the proposer. // TODO: Downvote peer - if state.build_committee_cache(RelativeEpoch::Current, &self.chain.spec).is_err() { + if state + .build_committee_cache(RelativeEpoch::Current, &self.chain.spec) + .is_err() + { return false; } @@ -499,17 +507,14 @@ impl MessageProcessor { // Compute the proposer for the block's slot. let proposer_result = state - .get_beacon_proposer_index( - block.slot, - relative_epoch, - &self.chain.spec - ).map( |i| state.validators.get(i)); + .get_beacon_proposer_index(block.slot, relative_epoch, &self.chain.spec) + .map(|i| state.validators.get(i)); // Generate the domain that should have been used to create the signature. let domain = self.chain.spec.get_domain( block.slot.epoch(T::EthSpec::slots_per_epoch()), Domain::BeaconProposer, - &state.fork + &state.fork, ); // Verify the signature if we were able to get a proposer, otherwise, we eventually @@ -519,7 +524,7 @@ impl MessageProcessor { &block.signature, &proposer.pubkey, block.signed_root(), - domain + domain, ); // TODO: Downvote if the signature is invalid. @@ -577,7 +582,7 @@ impl MessageProcessor { &head_state, &indexed_attestation.signature, &indexed_attestation, - &self.chain.spec + &self.chain.spec, ) { // An invalid signature here does not necessarily mean the attestation is invalid. // It could be the case that our state has a different validator registry. @@ -595,7 +600,11 @@ impl MessageProcessor { .get::>(&attestation.data.beacon_block_root) { // Retrieve the block's state. - if let Ok(Some(state)) = self.chain.store.get::>(&block.state_root) { + if let Ok(Some(state)) = self + .chain + .store + .get::>(&block.state_root) + { // Convert the attestation to an indexed attestation. if let Ok(indexed_attestation) = get_indexed_attestation(&state, &attestation) { // Check if the signature is valid against the state we got from the database. @@ -603,7 +612,7 @@ impl MessageProcessor { &state, &indexed_attestation.signature, &indexed_attestation, - &self.chain.spec + &self.chain.spec, ) { // TODO: Maybe downvote peer if the signature is invalid. return signature.is_valid();