Networking fixes
This commit is contained in:
parent
5ce27152b4
commit
51584f5202
@ -13,20 +13,11 @@
|
|||||||
/// 4. Maintain sync by handling NewBlocks/NewHashes messages
|
/// 4. Maintain sync by handling NewBlocks/NewHashes messages
|
||||||
///
|
///
|
||||||
|
|
||||||
use std::collections::{HashSet, HashMap};
|
use util::*;
|
||||||
use std::cmp::{min, max};
|
|
||||||
use std::mem::{replace};
|
use std::mem::{replace};
|
||||||
use util::network::{PeerId, PacketId};
|
|
||||||
use util::hash::{H256, FixedHash};
|
|
||||||
use util::bytes::{Bytes};
|
|
||||||
use util::uint::{U256};
|
|
||||||
use util::rlp::{Rlp, UntrustedRlp, RlpStream, self};
|
|
||||||
use util::rlp::rlptraits::{Stream, View};
|
|
||||||
use util::rlp::rlperrors::DecoderError;
|
|
||||||
use util::sha3::Hashable;
|
|
||||||
use client::{BlockNumber, BlockChainClient, BlockStatus, QueueStatus, ImportResult};
|
|
||||||
use views::{HeaderView};
|
use views::{HeaderView};
|
||||||
use header::{Header as BlockHeader};
|
use header::{Header as BlockHeader};
|
||||||
|
use client::{BlockNumber, BlockChainClient, BlockStatus, QueueStatus, ImportResult};
|
||||||
use sync::range_collection::{RangeCollection, ToUsize, FromUsize};
|
use sync::range_collection::{RangeCollection, ToUsize, FromUsize};
|
||||||
use sync::io::SyncIo;
|
use sync::io::SyncIo;
|
||||||
|
|
||||||
@ -66,6 +57,8 @@ const NODE_DATA_PACKET: u8 = 0x0e;
|
|||||||
const GET_RECEIPTS_PACKET: u8 = 0x0f;
|
const GET_RECEIPTS_PACKET: u8 = 0x0f;
|
||||||
const RECEIPTS_PACKET: u8 = 0x10;
|
const RECEIPTS_PACKET: u8 = 0x10;
|
||||||
|
|
||||||
|
const NETWORK_ID: U256 = ONE_U256; //TODO: get this from parent
|
||||||
|
|
||||||
struct Header {
|
struct Header {
|
||||||
/// Header data
|
/// Header data
|
||||||
data: Bytes,
|
data: Bytes,
|
||||||
@ -241,7 +234,19 @@ impl ChainSync {
|
|||||||
asking_blocks: Vec::new(),
|
asking_blocks: Vec::new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
trace!(target: "sync", "New peer (protocol: {}, network: {:?}, difficulty: {:?}, latest:{}, genesis:{})", peer.protocol_version, peer.network_id, peer.difficulty, peer.latest, peer.genesis);
|
trace!(target: "sync", "New peer {} (protocol: {}, network: {:?}, difficulty: {:?}, latest:{}, genesis:{})", peer_id, peer.protocol_version, peer.network_id, peer.difficulty, peer.latest, peer.genesis);
|
||||||
|
|
||||||
|
let chain_info = io.chain().chain_info();
|
||||||
|
if peer.genesis != chain_info.genesis_hash {
|
||||||
|
io.disable_peer(peer_id);
|
||||||
|
trace!(target: "sync", "Peer {} genesis hash not matched", peer_id);
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
if peer.network_id != NETWORK_ID {
|
||||||
|
io.disable_peer(peer_id);
|
||||||
|
trace!(target: "sync", "Peer {} network id not matched", peer_id);
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
let old = self.peers.insert(peer_id.clone(), peer);
|
let old = self.peers.insert(peer_id.clone(), peer);
|
||||||
if old.is_some() {
|
if old.is_some() {
|
||||||
@ -449,9 +454,11 @@ impl ChainSync {
|
|||||||
/// Called by peer when it is disconnecting
|
/// Called by peer when it is disconnecting
|
||||||
pub fn on_peer_aborting(&mut self, io: &mut SyncIo, peer: &PeerId) {
|
pub fn on_peer_aborting(&mut self, io: &mut SyncIo, peer: &PeerId) {
|
||||||
trace!(target: "sync", "== Disconnected {}", peer);
|
trace!(target: "sync", "== Disconnected {}", peer);
|
||||||
|
if self.peers.contains_key(&peer) {
|
||||||
self.clear_peer_download(peer);
|
self.clear_peer_download(peer);
|
||||||
self.continue_sync(io);
|
self.continue_sync(io);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Called when a new peer is connected
|
/// Called when a new peer is connected
|
||||||
pub fn on_peer_connected(&mut self, io: &mut SyncIo, peer: &PeerId) {
|
pub fn on_peer_connected(&mut self, io: &mut SyncIo, peer: &PeerId) {
|
||||||
@ -769,7 +776,7 @@ impl ChainSync {
|
|||||||
let mut packet = RlpStream::new_list(5);
|
let mut packet = RlpStream::new_list(5);
|
||||||
let chain = io.chain().chain_info();
|
let chain = io.chain().chain_info();
|
||||||
packet.append(&(PROTOCOL_VERSION as u32));
|
packet.append(&(PROTOCOL_VERSION as u32));
|
||||||
packet.append(&0u32); //TODO: network id
|
packet.append(&NETWORK_ID); //TODO: network id
|
||||||
packet.append(&chain.total_difficulty);
|
packet.append(&chain.total_difficulty);
|
||||||
packet.append(&chain.best_block_hash);
|
packet.append(&chain.best_block_hash);
|
||||||
packet.append(&chain.genesis_hash);
|
packet.append(&chain.genesis_hash);
|
||||||
|
Loading…
Reference in New Issue
Block a user