diff --git a/polkadot/consensus/Cargo.toml b/polkadot/consensus/Cargo.toml index 5af40035e2..68ad826551 100644 --- a/polkadot/consensus/Cargo.toml +++ b/polkadot/consensus/Cargo.toml @@ -11,6 +11,7 @@ ed25519 = { path = "../../substrate/ed25519" } error-chain = "0.12" log = "0.3" exit-future = "0.1" +rhododendron = "0.2" polkadot-api = { path = "../api" } polkadot-parachain = { path = "../parachain" } polkadot-primitives = { path = "../primitives" } diff --git a/polkadot/consensus/src/lib.rs b/polkadot/consensus/src/lib.rs index 9db60b3797..6c39dc66e7 100644 --- a/polkadot/consensus/src/lib.rs +++ b/polkadot/consensus/src/lib.rs @@ -47,6 +47,7 @@ extern crate substrate_client as client; extern crate exit_future; extern crate tokio; +extern crate rhododendron; #[macro_use] extern crate error_chain; @@ -530,7 +531,7 @@ impl bft::Proposer for Proposer } fn import_misbehavior(&self, misbehavior: Vec<(AuthorityId, bft::Misbehavior)>) { - use bft::generic::Misbehavior as GenericMisbehavior; + use rhododendron::Misbehavior as GenericMisbehavior; use runtime_primitives::bft::{MisbehaviorKind, MisbehaviorReport}; use runtime_primitives::MaybeUnsigned; use polkadot_runtime::{Call, Extrinsic, BareExtrinsic, UncheckedExtrinsic, ConsensusCall}; diff --git a/polkadot/network/Cargo.toml b/polkadot/network/Cargo.toml index ad07af5c12..71ab17d2af 100644 --- a/polkadot/network/Cargo.toml +++ b/polkadot/network/Cargo.toml @@ -20,3 +20,4 @@ ed25519 = { path = "../../substrate/ed25519" } futures = "0.1" tokio = "0.1.7" log = "0.4" +rhododendron = "0.2" diff --git a/polkadot/network/src/consensus.rs b/polkadot/network/src/consensus.rs index a2a4950258..0eb14d9381 100644 --- a/polkadot/network/src/consensus.rs +++ b/polkadot/network/src/consensus.rs @@ -53,8 +53,8 @@ impl Sink for BftSink { fn start_send(&mut self, message: bft::Communication) -> ::futures::StartSend, E> { let network_message = net::LocalizedBftMessage { message: match message { - bft::generic::Communication::Consensus(c) => msg::BftMessage::Consensus(match c { - bft::generic::LocalizedMessage::Propose(proposal) => msg::SignedConsensusMessage::Propose(msg::SignedConsensusProposal { + ::rhododendron::Communication::Consensus(c) => msg::BftMessage::Consensus(match c { + ::rhododendron::LocalizedMessage::Propose(proposal) => msg::SignedConsensusMessage::Propose(msg::SignedConsensusProposal { round_number: proposal.round_number as u32, proposal: proposal.proposal, digest: proposal.digest, @@ -62,17 +62,20 @@ impl Sink for BftSink { digest_signature: proposal.digest_signature.signature, full_signature: proposal.full_signature.signature, }), - bft::generic::LocalizedMessage::Vote(vote) => msg::SignedConsensusMessage::Vote(msg::SignedConsensusVote { + ::rhododendron::LocalizedMessage::Vote(vote) => msg::SignedConsensusMessage::Vote(msg::SignedConsensusVote { sender: vote.sender, signature: vote.signature.signature, vote: match vote.vote { - bft::generic::Vote::Prepare(r, h) => msg::ConsensusVote::Prepare(r as u32, h), - bft::generic::Vote::Commit(r, h) => msg::ConsensusVote::Commit(r as u32, h), - bft::generic::Vote::AdvanceRound(r) => msg::ConsensusVote::AdvanceRound(r as u32), + ::rhododendron::Vote::Prepare(r, h) => msg::ConsensusVote::Prepare(r as u32, h), + ::rhododendron::Vote::Commit(r, h) => msg::ConsensusVote::Commit(r as u32, h), + ::rhododendron::Vote::AdvanceRound(r) => msg::ConsensusVote::AdvanceRound(r as u32), } }), }), - bft::generic::Communication::Auxiliary(justification) => msg::BftMessage::Auxiliary(justification.uncheck().into()), + ::rhododendron::Communication::Auxiliary(justification) => { + let unchecked: bft::UncheckedJustification<_> = justification.uncheck().into(); + msg::BftMessage::Auxiliary(unchecked.into()) + } }, parent_hash: self.parent_hash, }; @@ -90,10 +93,10 @@ impl Sink for BftSink { // check signature and authority validity of message. fn process_bft_message(msg: msg::LocalizedBftMessage, local_id: &SessionKey, authorities: &[SessionKey]) -> Result>, bft::Error> { Ok(Some(match msg.message { - msg::BftMessage::Consensus(c) => bft::generic::Communication::Consensus(match c { - msg::SignedConsensusMessage::Propose(proposal) => bft::generic::LocalizedMessage::Propose({ + msg::BftMessage::Consensus(c) => ::rhododendron::Communication::Consensus(match c { + msg::SignedConsensusMessage::Propose(proposal) => ::rhododendron::LocalizedMessage::Propose({ if &proposal.sender == local_id { return Ok(None) } - let proposal = bft::generic::LocalizedProposal { + let proposal = ::rhododendron::LocalizedProposal { round_number: proposal.round_number as usize, proposal: proposal.proposal, digest: proposal.digest, @@ -112,18 +115,18 @@ fn process_bft_message(msg: msg::LocalizedBftMessage, local_id: &Se trace!(target: "bft", "importing proposal message for round {} from {}", proposal.round_number, Hash::from(proposal.sender.0)); proposal }), - msg::SignedConsensusMessage::Vote(vote) => bft::generic::LocalizedMessage::Vote({ + msg::SignedConsensusMessage::Vote(vote) => ::rhododendron::LocalizedMessage::Vote({ if &vote.sender == local_id { return Ok(None) } - let vote = bft::generic::LocalizedVote { + let vote = ::rhododendron::LocalizedVote { sender: vote.sender, signature: ed25519::LocalizedSignature { signature: vote.signature, signer: ed25519::Public(vote.sender.0), }, vote: match vote.vote { - msg::ConsensusVote::Prepare(r, h) => bft::generic::Vote::Prepare(r as usize, h), - msg::ConsensusVote::Commit(r, h) => bft::generic::Vote::Commit(r as usize, h), - msg::ConsensusVote::AdvanceRound(r) => bft::generic::Vote::AdvanceRound(r as usize), + msg::ConsensusVote::Prepare(r, h) => ::rhododendron::Vote::Prepare(r as usize, h), + msg::ConsensusVote::Commit(r, h) => ::rhododendron::Vote::Commit(r as usize, h), + msg::ConsensusVote::AdvanceRound(r) => ::rhododendron::Vote::AdvanceRound(r as usize), } }; bft::check_vote::(authorities, &msg.parent_hash, &vote)?; @@ -137,7 +140,7 @@ fn process_bft_message(msg: msg::LocalizedBftMessage, local_id: &Se // TODO: get proper error let justification: Result<_, bft::Error> = bft::check_prepare_justification::(authorities, msg.parent_hash, justification) .map_err(|_| bft::ErrorKind::InvalidJustification.into()); - bft::generic::Communication::Auxiliary(justification?) + ::rhododendron::Communication::Auxiliary(justification?) }, })) } diff --git a/polkadot/network/src/lib.rs b/polkadot/network/src/lib.rs index f909d0581b..91c53338e6 100644 --- a/polkadot/network/src/lib.rs +++ b/polkadot/network/src/lib.rs @@ -38,6 +38,7 @@ extern crate ed25519; extern crate futures; extern crate parking_lot; extern crate tokio; +extern crate rhododendron; #[macro_use] extern crate log;