From 66c9580cf490d768f406fb1bb16ab9407001baf9 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Tue, 19 Feb 2019 13:59:29 -0300 Subject: [PATCH] Interchain message-passing (#117) * compute ingress and routing in polkadot runtime * extract parent candidates from block when beginning consensus * fetch incoming messages when validating * fix consensus tests * parachain wasm execution uses messages * update parachain tests to check if messages are executed * abstract out network service to make room for network tests * skeleton for incoming data fetch * collate ingress from consensus-gossip * keep track of validated candidates in the shared-table * add some shared_table tests for new behavior * broadcast egress messages on gossip * test compute_ingress * move network tests to module folder * dummy network for consensus-network tests * make consensus network generic over executor * test egress broadcast and ingress fetch * fix test compilation * address some grumbles * address grumbles and fix parachain shuffle * remove broadcast parameter from consensus network trait --- Cargo.lock | 30 +- consensus/src/attestation_service.rs | 76 ++- consensus/src/collation.rs | 99 +++- consensus/src/lib.rs | 260 ++++++---- consensus/src/shared_table/mod.rs | 352 ++++++++++--- network/Cargo.toml | 6 +- network/src/consensus.rs | 145 ++++-- network/src/lib.rs | 18 +- network/src/router.rs | 399 ++++++++++++--- network/src/tests/consensus.rs | 466 ++++++++++++++++++ network/src/{tests.rs => tests/mod.rs} | 2 + parachain/src/lib.rs | 15 +- parachain/src/wasm_api.rs | 4 +- parachain/tests/adder.rs | 48 +- parachain/tests/res/adder.wasm | Bin 32808 -> 452959 bytes primitives/src/parachain.rs | 5 +- runtime/src/lib.rs | 5 +- runtime/src/parachains.rs | 116 ++++- .../release/polkadot_runtime.compact.wasm | Bin 647077 -> 650789 bytes .../release/polkadot_runtime.wasm | Bin 685293 -> 689316 bytes service/src/lib.rs | 1 + test-parachains/adder/collator/src/main.rs | 8 +- test-parachains/adder/src/lib.rs | 27 +- test-parachains/adder/wasm/Cargo.toml | 3 +- test-parachains/adder/wasm/src/lib.rs | 12 +- test-parachains/build.sh | 2 +- 26 files changed, 1732 insertions(+), 367 deletions(-) create mode 100644 network/src/tests/consensus.rs rename network/src/{tests.rs => tests/mod.rs} (99%) diff --git a/Cargo.lock b/Cargo.lock index 77c18e918d1d7..41c7da9793339 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2257,8 +2257,10 @@ dependencies = [ "polkadot-availability-store 0.1.0", "polkadot-consensus 0.1.0", "polkadot-primitives 0.1.0", - "rhododendron 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "slice-group-by 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-client 0.1.0 (git+https://github.com/paritytech/substrate)", + "substrate-keyring 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-network 0.1.0 (git+https://github.com/paritytech/substrate)", "substrate-primitives 0.1.0 (git+https://github.com/paritytech/substrate)", "tokio 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2681,16 +2683,6 @@ dependencies = [ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rhododendron" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "ring" version = "0.14.5" @@ -2819,6 +2811,11 @@ name = "scopeguard" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "sdset" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "secp256k1" version = "0.12.2" @@ -2952,6 +2949,14 @@ name = "slab" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "slice-group-by" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "sdset 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "slog" version = "2.4.1" @@ -4963,7 +4968,6 @@ dependencies = [ "checksum regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37e7cbbd370869ce2e8dff25c7018702d10b21a20ef7135316f8daecd6c25b7f" "checksum regex-syntax 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8c2f35eedad5295fdf00a63d7d4b238135723f92b434ec06774dad15c7ab0861" "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" -"checksum rhododendron 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e20523445e693f394c0e487113ae656071311c9ee4c1e914441bece8c929b21d" "checksum ring 0.14.5 (registry+https://github.com/rust-lang/crates.io-index)" = "148fc853f6d85f53f5f315d46701eaacc565cdfb3cb1959730c96e81e7e49999" "checksum rocksdb 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39be726e556e6f21d54d21cdf1be9f6df30c0411a5856c1abf3f4bb12498f2ed" "checksum rocksdb 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f1651697fefd273bfb4fd69466cc2a9d20de557a0213b97233b22b5e95924b5e" @@ -4980,6 +4984,7 @@ dependencies = [ "checksum schnorrkel 0.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fe554f318830b48e5da8ab1ccb1ffd02b79228364dac7766b7cd1ec461ca5116" "checksum scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" +"checksum sdset 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c6959a7341a17cbff280a619c3a3c0001d2d6b54661e6d04c3741c3af07cc2c5" "checksum secp256k1 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfaccd3a23619349e0878d9a241f34b1982343cdf67367058cd7d078d326b63e" "checksum security-framework 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfab8dda0e7a327c696d893df9ffa19cadc4bd195797997f5223cf5831beaf05" "checksum security-framework-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3d6696852716b589dff9e886ff83778bb635150168e83afa8ac6b8a78cb82abc" @@ -4995,6 +5000,7 @@ dependencies = [ "checksum sha3 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "34a5e54083ce2b934bf059fdf38e7330a154177e029ab6c4e18638f2f624053a" "checksum shell32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9ee04b46101f57121c9da2b151988283b6beb79b34f5bb29a58ee48cb695122c" "checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +"checksum slice-group-by 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "35538e9d2853b9f041156791bf1b871f27d45f0a2fc816fd90ebea6c63bb3f93" "checksum slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1e1a2eec401952cd7b12a84ea120e2d57281329940c3f93c2bf04f462539508e" "checksum slog-async 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e544d16c6b230d84c866662fe55e31aacfca6ae71e6fc49ae9a311cb379bfc2f" "checksum slog-json 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddc0d2aff1f8f325ef660d9a0eb6e6dcd20b30b3f581a5897f58bf42d061c37a" diff --git a/consensus/src/attestation_service.rs b/consensus/src/attestation_service.rs index d0cb980c981f5..9ed584642ab77 100644 --- a/consensus/src/attestation_service.rs +++ b/consensus/src/attestation_service.rs @@ -27,22 +27,41 @@ use std::thread; use std::time::{Duration, Instant}; use std::sync::Arc; -use client::{BlockchainEvents, ChainHead, BlockBody}; +use client::{error::Result as ClientResult, BlockchainEvents, ChainHead, BlockBody}; use client::block_builder::api::BlockBuilder; use client::blockchain::HeaderBackend; use client::runtime_api::Core; use primitives::ed25519; use futures::prelude::*; use polkadot_primitives::{Block, BlockId}; -use polkadot_primitives::parachain::ParachainHost; +use polkadot_primitives::parachain::{CandidateReceipt, ParachainHost}; use extrinsic_store::Store as ExtrinsicStore; -use runtime_primitives::traits::ProvideRuntimeApi; +use runtime_primitives::traits::{ProvideRuntimeApi, Header as HeaderT}; use tokio::runtime::TaskExecutor; use tokio::runtime::current_thread::Runtime as LocalRuntime; use tokio::timer::Interval; -use super::{Network, Collators}; +use super::{Network, Collators, TableRouter}; + +/// Gets a list of the candidates in a block. +pub(crate) fn fetch_candidates>(client: &P, block: &BlockId) + -> ClientResult>> +{ + use codec::{Encode, Decode}; + use polkadot_runtime::{Call, ParachainsCall, UncheckedExtrinsic as RuntimeExtrinsic}; + + let extrinsics = client.block_body(block)?; + Ok(extrinsics + .into_iter() + .filter_map(|ex| RuntimeExtrinsic::decode(&mut ex.encode().as_slice())) + .filter_map(|ex| match ex.function { + Call::Parachains(ParachainsCall::set_heads(heads)) => + Some(heads.into_iter().map(|c| c.candidate)), + _ => None, + }) + .next()) +} // creates a task to prune redundant entries in availability store upon block finalization // @@ -52,47 +71,20 @@ fn prune_unneeded_availability

(client: Arc

, extrinsic_store: ExtrinsicStor -> impl Future + Send where P: Send + Sync + BlockchainEvents + BlockBody + 'static { - use codec::{Encode, Decode}; - use polkadot_primitives::BlockId; - - enum NotifyError { - BodyFetch(::client::error::Error), - } - - impl NotifyError { - fn log(&self, hash: &::polkadot_primitives::Hash) { - match *self { - NotifyError::BodyFetch(ref err) => warn!("Failed to fetch block body for imported block {:?}: {:?}", hash, err), - } - } - } - client.finality_notification_stream() .for_each(move |notification| { - use polkadot_runtime::{Call, ParachainsCall, UncheckedExtrinsic as RuntimeExtrinsic}; - let hash = notification.hash; let parent_hash = notification.header.parent_hash; - let extrinsics = client.block_body(&BlockId::hash(hash)) - .map_err(NotifyError::BodyFetch); - - let extrinsics = match extrinsics { - Ok(r) => r, - Err(e) => { e.log(&hash); return Ok(()) } - }; - - let candidate_hashes = match extrinsics - .iter() - .filter_map(|ex| RuntimeExtrinsic::decode(&mut ex.encode().as_slice())) - .filter_map(|ex| match ex.function { - Call::Parachains(ParachainsCall::set_heads(ref heads)) => - Some(heads.iter().map(|c| c.candidate.hash()).collect()), - _ => None, - }) - .next() - { - Some(x) => x, - None => return Ok(()), + let candidate_hashes = match fetch_candidates(&*client, &BlockId::hash(hash)) { + Ok(Some(candidates)) => candidates.map(|c| c.hash()).collect(), + Ok(None) => { + warn!("Could not extract candidates from block body of imported block {:?}", hash); + return Ok(()) + } + Err(e) => { + warn!("Failed to fetch block body for imported block {:?}: {:?}", hash, e); + return Ok(()) + } }; if let Err(e) = extrinsic_store.candidates_finalized(parent_hash, candidate_hashes) { @@ -125,6 +117,7 @@ pub(crate) fn start( P::Api: ParachainHost + Core + BlockBuilder, N: Network + Send + Sync + 'static, N::TableRouter: Send + 'static, + <::FetchIncoming as IntoFuture>::Future: Send + 'static, { const TIMER_DELAY: Duration = Duration::from_secs(5); const TIMER_INTERVAL: Duration = Duration::from_secs(30); @@ -148,6 +141,7 @@ pub(crate) fn start( .and_then(|authorities| { consensus.get_or_instantiate( parent_hash, + notification.header.parent_hash().clone(), &authorities, key.clone(), ) diff --git a/consensus/src/collation.rs b/consensus/src/collation.rs index 369de98f6817a..af1918e3890f5 100644 --- a/consensus/src/collation.rs +++ b/consensus/src/collation.rs @@ -26,6 +26,7 @@ use polkadot_primitives::parachain::{Id as ParaId, Collation, Extrinsic, Outgoin use polkadot_primitives::parachain::{CandidateReceipt, ParachainHost}; use runtime_primitives::traits::ProvideRuntimeApi; use parachain::{wasm_executor::{self, ExternalitiesError}, MessageRef}; +use super::Incoming; use futures::prelude::*; @@ -34,7 +35,7 @@ use futures::prelude::*; /// This is expected to be a lightweight, shared type like an `Arc`. pub trait Collators: Clone { /// Errors when producing collations. - type Error; + type Error: std::fmt::Debug; /// A full collation. type Collation: IntoFuture; @@ -54,25 +55,33 @@ pub trait Collators: Clone { /// A future which resolves when a collation is available. /// /// This future is fused. -pub struct CollationFetch { +pub struct CollationFetch { parachain: ParaId, relay_parent_hash: Hash, relay_parent: BlockId, collators: C, + incoming: Incoming, live_fetch: Option<::Future>, client: Arc

, } -impl CollationFetch { +impl CollationFetch { /// Create a new collation fetcher for the given chain. - pub fn new(parachain: ParaId, relay_parent: BlockId, relay_parent_hash: Hash, collators: C, client: Arc

) -> Self { + pub fn new( + parachain: ParaId, + relay_parent_hash: Hash, + collators: C, + client: Arc

, + incoming: Incoming, + ) -> Self { CollationFetch { + relay_parent: BlockId::hash(relay_parent_hash), relay_parent_hash, - relay_parent, collators, client, parachain, live_fetch: None, + incoming, } } @@ -80,6 +89,11 @@ impl CollationFetch { pub fn relay_parent(&self) -> Hash { self.relay_parent_hash } + + /// Access the local parachain ID. + pub fn parachain(&self) -> ParaId { + self.parachain + } } impl Future for CollationFetch @@ -100,7 +114,7 @@ impl Future for CollationFetch try_ready!(poll) }; - match validate_collation(&*self.client, &self.relay_parent, &x) { + match validate_collation(&*self.client, &self.relay_parent, &x, &self.incoming) { Ok(e) => { return Ok(Async::Ready((x, e))) } @@ -148,14 +162,39 @@ error_chain! { } } -/// Compute the egress trie root for a set of messages. -pub fn egress_trie_root>(messages: I) -> Hash +/// Compute a trie root for a set of messages. +pub fn message_queue_root>(messages: I) -> Hash where A: AsRef<[u8]> { ::trie::ordered_trie_root::(messages) } -fn check_and_compute_extrinsic( +/// Compute the set of egress roots for all given outgoing messages. +pub fn egress_roots(mut outgoing: Vec) -> Vec<(ParaId, Hash)> { + // stable sort messages by parachain ID. + outgoing.sort_by_key(|msg| ParaId::from(msg.target)); + + let mut egress_roots = Vec::new(); + { + let mut messages_iter = outgoing.iter().peekable(); + while let Some(batch_target) = messages_iter.peek().map(|o| o.target) { + // we borrow the iterator mutably to ensure it advances so the + // next iteration of the loop starts with `messages_iter` pointing to + // the next batch. + let messages_to = messages_iter + .clone() + .take_while(|o| o.target == batch_target) + .map(|o| { let _ = messages_iter.next(); &o.data[..] }); + + let computed_root = message_queue_root(messages_to); + egress_roots.push((batch_target, computed_root)); + } + } + + egress_roots +} + +fn check_extrinsic( mut outgoing: Vec, expected_egress_roots: &[(ParaId, Hash)], ) -> Result { @@ -183,7 +222,7 @@ fn check_and_compute_extrinsic( .take_while(|o| o.target == batch_target) .map(|o| { let _ = messages_iter.next(); &o.data[..] }); - let computed_root = egress_trie_root(messages_to); + let computed_root = message_queue_root(messages_to); if &computed_root != expected_root { return Err(ErrorKind::EgressRootMismatch( batch_target, @@ -231,7 +270,7 @@ impl Externalities { self, candidate: &CandidateReceipt, ) -> Result { - check_and_compute_extrinsic( + check_extrinsic( self.outgoing, &candidate.egress_queue_roots[..], ) @@ -242,15 +281,17 @@ impl Externalities { /// /// This assumes that basic validity checks have been done: /// - Block data hash is the same as linked in candidate receipt. +/// - incoming messages have been validated against canonical ingress roots pub fn validate_collation

( client: &P, relay_parent: &BlockId, - collation: &Collation + collation: &Collation, + incoming: &Incoming, ) -> Result where P: ProvideRuntimeApi, P::Api: ParachainHost, { - use parachain::ValidationParams; + use parachain::{IncomingMessage, ValidationParams}; let api = client.runtime_api(); let para_id = collation.receipt.parachain_index; @@ -263,6 +304,15 @@ pub fn validate_collation

( let params = ValidationParams { parent_head: chain_head, block_data: collation.block_data.0.clone(), + ingress: incoming.iter() + .flat_map(|&(para_id, ref messages)| { + let source: u32 = para_id.into(); + messages.iter().map(move |msg| IncomingMessage { + source, + data: msg.0.clone(), + }) + }) + .collect() }; let mut ext = Externalities { @@ -291,7 +341,7 @@ mod tests { use parachain::wasm_executor::Externalities as ExternalitiesTrait; #[test] - fn egress_roots() { + fn compute_and_check_egress() { let messages = vec![ OutgoingMessage { target: 3.into(), data: vec![1, 1, 1] }, OutgoingMessage { target: 1.into(), data: vec![1, 2, 3] }, @@ -299,29 +349,36 @@ mod tests { OutgoingMessage { target: 1.into(), data: vec![7, 8, 9] }, ]; - let root_1 = egress_trie_root(&[vec![1, 2, 3], vec![7, 8, 9]]); - let root_2 = egress_trie_root(&[vec![4, 5, 6]]); - let root_3 = egress_trie_root(&[vec![1, 1, 1]]); + let root_1 = message_queue_root(&[vec![1, 2, 3], vec![7, 8, 9]]); + let root_2 = message_queue_root(&[vec![4, 5, 6]]); + let root_3 = message_queue_root(&[vec![1, 1, 1]]); - assert!(check_and_compute_extrinsic( + assert!(check_extrinsic( messages.clone(), &[(1.into(), root_1), (2.into(), root_2), (3.into(), root_3)], ).is_ok()); + let egress_roots = egress_roots(messages.clone()); + + assert!(check_extrinsic( + messages.clone(), + &egress_roots[..], + ).is_ok()); + // missing root. - assert!(check_and_compute_extrinsic( + assert!(check_extrinsic( messages.clone(), &[(1.into(), root_1), (3.into(), root_3)], ).is_err()); // extra root. - assert!(check_and_compute_extrinsic( + assert!(check_extrinsic( messages.clone(), &[(1.into(), root_1), (2.into(), root_2), (3.into(), root_3), (4.into(), Default::default())], ).is_err()); // root mismatch. - assert!(check_and_compute_extrinsic( + assert!(check_extrinsic( messages.clone(), &[(1.into(), root_2), (2.into(), root_1), (3.into(), root_3)], ).is_err()); diff --git a/consensus/src/lib.rs b/consensus/src/lib.rs index b4219e2e83ca4..0722675b42eb7 100644 --- a/consensus/src/lib.rs +++ b/consensus/src/lib.rs @@ -77,13 +77,11 @@ use parking_lot::Mutex; use polkadot_primitives::{Hash, Block, BlockId, BlockNumber, Header, SessionKey}; use polkadot_primitives::parachain::{ Id as ParaId, Chain, DutyRoster, BlockData, Extrinsic as ParachainExtrinsic, CandidateReceipt, - CandidateSignature -}; -use polkadot_primitives::parachain::{ - AttestedCandidate, ParachainHost, Statement as PrimitiveStatement + CandidateSignature, ParachainHost, AttestedCandidate, Statement as PrimitiveStatement, Message, + OutgoingMessage, }; use primitives::{Ed25519AuthorityId as AuthorityId, ed25519}; -use runtime_primitives::{traits::ProvideRuntimeApi, ApplyError}; +use runtime_primitives::{traits::{ProvideRuntimeApi, Header as HeaderT}, ApplyError}; use tokio::runtime::TaskExecutor; use tokio::timer::{Delay, Interval}; use transaction_pool::txpool::{Pool, ChainApi as PoolChainApi}; @@ -97,11 +95,11 @@ use inherents::InherentData; use runtime_aura::timestamp::TimestampInherentData; use aura::SlotDuration; -pub use self::collation::{validate_collation, egress_trie_root, Collators}; +pub use self::collation::{validate_collation, message_queue_root, egress_roots, Collators}; pub use self::error::{ErrorKind, Error}; pub use self::shared_table::{ SharedTable, ParachainWork, PrimedParachainWork, Validated, Statement, SignedStatement, - GenericStatement + GenericStatement, }; mod attestation_service; @@ -115,14 +113,40 @@ pub mod collation; // block size limit. const MAX_TRANSACTIONS_SIZE: usize = 4 * 1024 * 1024; +/// Incoming messages; a series of sorted (ParaId, Message) pairs. +pub type Incoming = Vec<(ParaId, Vec)>; + +/// Outgoing messages from various candidates. +pub type Outgoing = Vec; + +/// Some messages from a parachain. +pub struct MessagesFrom { + /// The parachain originating the messages. + pub from: ParaId, + /// The messages themselves. + pub messages: ParachainExtrinsic, +} + +impl MessagesFrom { + /// Construct from the raw messages. + pub fn from_messages(from: ParaId, messages: Vec) -> Self { + MessagesFrom { + from, + messages: ParachainExtrinsic { outgoing_messages: messages }, + } + } +} + /// A handle to a statement table router. /// /// This is expected to be a lightweight, shared type like an `Arc`. pub trait TableRouter: Clone { /// Errors when fetching data from the network. - type Error; + type Error: std::fmt::Debug; /// Future that resolves when candidate data is fetched. type FetchCandidate: IntoFuture; + /// Fetch incoming messages for a candidate. + type FetchIncoming: IntoFuture; /// Call with local candidate data. This will make the data available on the network, /// and sign, import, and broadcast a statement about the candidate. @@ -130,6 +154,14 @@ pub trait TableRouter: Clone { /// Fetch block data for a specific candidate. fn fetch_block_data(&self, candidate: &CandidateReceipt) -> Self::FetchCandidate; + + /// Fetches the incoming message data to a parachain from the network. Incoming data should be + /// checked. + /// + /// The `ParachainHost::ingress` function can be used to fetch incoming roots, + /// and the `message_queue_root` function can be used to check that messages actually have + /// expected root. + fn fetch_incoming(&self, id: ParaId) -> Self::FetchIncoming; } /// A long-lived network which can create parachain statement and BFT message routing processes on demand. @@ -138,12 +170,12 @@ pub trait Network { /// routing statements to peers, and driving completion of any `StatementProducers`. type TableRouter: TableRouter; - /// Instantiate a table router using the given shared table and task executor. + /// Instantiate a table router using the given shared table. + /// Also pass through any outgoing messages to be broadcast to peers. fn communication_for( &self, - validators: &[SessionKey], table: Arc, - task_executor: TaskExecutor + outgoing: Outgoing, ) -> Self::TableRouter; } @@ -179,7 +211,12 @@ pub fn check_statement(statement: &Statement, signature: &CandidateSignature, si signature.verify(&encoded[..], &signer.into()) } -fn make_group_info(roster: DutyRoster, authorities: &[AuthorityId], local_id: AuthorityId) -> Result<(HashMap, LocalDuty), Error> { +/// Compute group info out of a duty roster and a local authority set. +pub fn make_group_info( + roster: DutyRoster, + authorities: &[AuthorityId], + local_id: AuthorityId, +) -> Result<(HashMap, LocalDuty), Error> { if roster.validator_duty.len() != authorities.len() { bail!(ErrorKind::InvalidDutyRosterLength(authorities.len(), roster.validator_duty.len())) } @@ -232,25 +269,31 @@ struct ParachainConsensus { handle: TaskExecutor, /// Store for extrinsic data. extrinsic_store: ExtrinsicStore, - /// Live agreements. + /// Live agreements. Maps relay chain parent hashes to attestation + /// instances. live_instances: Mutex>>, } impl ParachainConsensus where C: Collators + Send + 'static, N: Network, - P: ProvideRuntimeApi + HeaderBackend + Send + Sync + 'static, + P: ProvideRuntimeApi + HeaderBackend + BlockBody + Send + Sync + 'static, P::Api: ParachainHost + BlockBuilderApi, ::Future: Send + 'static, N::TableRouter: Send + 'static, + <::FetchIncoming as IntoFuture>::Future: Send + 'static, { /// Get an attestation table for given parent hash. /// - /// This starts a parachain agreement process for given parent hash if + /// This starts a parachain agreement process on top of the parent hash if /// one has not already started. + /// + /// Additionally, this will trigger broadcast of data to the new block's duty + /// roster. fn get_or_instantiate( &self, parent_hash: Hash, + grandparent_hash: Hash, authorities: &[AuthorityId], sign_with: Arc, ) @@ -262,6 +305,29 @@ impl ParachainConsensus where } let id = BlockId::hash(parent_hash); + + // compute the parent candidates, if we know of them. + // this will allow us to circulate outgoing messages to other peers as necessary. + let parent_candidates: Vec<_> = ::attestation_service::fetch_candidates(&*self.client, &id) + .ok() + .and_then(|x| x) + .map(|x| x.collect()) + .unwrap_or_default(); + + let outgoing: Vec<_> = { + // extract all extrinsic data that we have and propagate to peers. + live_instances.get(&grandparent_hash).map(|parent_consensus| { + parent_candidates.iter().filter_map(|c| { + let para_id = c.parachain_index; + let hash = c.hash(); + parent_consensus.table.extrinsic_data(&hash).map(|ex| MessagesFrom { + from: para_id, + messages: ex, + }) + }).collect() + }).unwrap_or_default() + }; + let duty_roster = self.client.runtime_api().duty_roster(&id)?; let (group_info, local_duty) = make_group_info( @@ -279,31 +345,19 @@ impl ParachainConsensus where let table = Arc::new(SharedTable::new(group_info, sign_with.clone(), parent_hash, self.extrinsic_store.clone())); let router = self.network.communication_for( - authorities, table.clone(), - self.handle.clone() + outgoing, ); - let validation_para = match local_duty.validation { + let drop_signal = match local_duty.validation { + Chain::Parachain(id) => Some(self.launch_work( + parent_hash, + id, + router, + )), Chain::Relay => None, - Chain::Parachain(id) => Some(id), }; - let collation_work = validation_para.map(|para| CollationFetch::new( - para, - id.clone(), - parent_hash.clone(), - self.collators.clone(), - self.client.clone(), - )); - - let drop_signal = dispatch_collation_work( - router.clone(), - &self.handle, - collation_work, - self.extrinsic_store.clone(), - ); - let tracker = Arc::new(AttestationTracker { table, started: Instant::now(), @@ -319,11 +373,80 @@ impl ParachainConsensus where fn retain bool>(&self, mut pred: F) { self.live_instances.lock().retain(|k, _| pred(k)) } + + // launch parachain work asynchronously. + fn launch_work( + &self, + relay_parent: Hash, + validation_para: ParaId, + router: N::TableRouter, + ) -> exit_future::Signal { + use extrinsic_store::Data; + + let (signal, exit) = exit_future::signal(); + + let fetch_incoming = router.fetch_incoming(validation_para) + .into_future() + .map_err(|e| format!("{:?}", e)); + + // fetch incoming messages to our parachain from network and + // then fetch a local collation. + let (collators, client) = (self.collators.clone(), self.client.clone()); + let collation_work = fetch_incoming + .map_err(|e| String::clone(&e)) + .and_then(move |incoming| { + CollationFetch::new( + validation_para, + relay_parent, + collators, + client, + incoming, + ).map_err(|e| format!("{:?}", e)) + }); + + let extrinsic_store = self.extrinsic_store.clone(); + let handled_work = collation_work.then(move |result| match result { + Ok((collation, extrinsic)) => { + let res = extrinsic_store.make_available(Data { + relay_parent, + parachain_id: collation.receipt.parachain_index, + candidate_hash: collation.receipt.hash(), + block_data: collation.block_data.clone(), + extrinsic: Some(extrinsic.clone()), + }); + + match res { + Ok(()) => { + // TODO: https://github.com/paritytech/polkadot/issues/51 + // Erasure-code and provide merkle branches. + router.local_candidate(collation.receipt, collation.block_data, extrinsic) + } + Err(e) => warn!( + target: "consensus", + "Failed to make collation data available: {:?}", + e, + ), + } + + Ok(()) + } + Err(e) => { + warn!(target: "consensus", "Failed to collate candidate: {}", e); + Ok(()) + } + }); + + let cancellable_work = handled_work.select(exit).then(|_| Ok(())); + + // spawn onto thread pool. + self.handle.spawn(cancellable_work); + signal + } } /// Parachain consensus for a single block. struct AttestationTracker { - _drop_signal: exit_future::Signal, + _drop_signal: Option, table: Arc, started: Instant, } @@ -345,6 +468,7 @@ impl ProposerFactory where P::Api: ParachainHost + Core + BlockBuilderApi, N: Network + Send + Sync + 'static, N::TableRouter: Send + 'static, + <::FetchIncoming as IntoFuture>::Future: Send + 'static, TxApi: PoolChainApi, { /// Create a new proposer factory. @@ -389,10 +513,11 @@ impl consensus::Environment for ProposerFactory, - P: ProvideRuntimeApi + HeaderBackend + Send + Sync + 'static, + P: ProvideRuntimeApi + HeaderBackend + BlockBody + Send + Sync + 'static, P::Api: ParachainHost + BlockBuilderApi, ::Future: Send + 'static, N::TableRouter: Send + 'static, + <::FetchIncoming as IntoFuture>::Future: Send + 'static, { type Proposer = Proposer; type Error = Error; @@ -407,6 +532,7 @@ impl consensus::Environment for ProposerFactory consensus::Environment for ProposerFactory( - router: R, - handle: &TaskExecutor, - work: Option>, - extrinsic_store: ExtrinsicStore, -) -> exit_future::Signal where - C: Collators + Send + 'static, - P: ProvideRuntimeApi + HeaderBackend + Send + Sync + 'static, - P::Api: ParachainHost, - ::Future: Send + 'static, - R: TableRouter + Send + 'static, -{ - use extrinsic_store::Data; - - let (signal, exit) = exit_future::signal(); - - let work = match work { - Some(w) => w, - None => return signal, - }; - - let relay_parent = work.relay_parent(); - let handled_work = work.then(move |result| match result { - Ok((collation, extrinsic)) => { - let res = extrinsic_store.make_available(Data { - relay_parent, - parachain_id: collation.receipt.parachain_index, - candidate_hash: collation.receipt.hash(), - block_data: collation.block_data.clone(), - extrinsic: Some(extrinsic.clone()), - }); - - match res { - Ok(()) => { - // TODO: https://github.com/paritytech/polkadot/issues/51 - // Erasure-code and provide merkle branches. - router.local_candidate(collation.receipt, collation.block_data, extrinsic) - } - Err(e) => - warn!(target: "consensus", "Failed to make collation data available: {:?}", e), - } - - Ok(()) - } - Err(_e) => { - warn!(target: "consensus", "Failed to collate candidate"); - Ok(()) - } - }); - - let cancellable_work = handled_work.select(exit).then(|_| Ok(())); - - // spawn onto thread pool. - handle.spawn(cancellable_work); - signal -} - -struct LocalDuty { +/// The local duty of a validator. +pub struct LocalDuty { validation: Chain, } diff --git a/consensus/src/shared_table/mod.rs b/consensus/src/shared_table/mod.rs index 8a7967ea76466..829ad76642748 100644 --- a/consensus/src/shared_table/mod.rs +++ b/consensus/src/shared_table/mod.rs @@ -17,7 +17,7 @@ //! Parachain statement table meant to be shared with a message router //! and a consensus proposer. -use std::collections::{HashMap, HashSet}; +use std::collections::hash_map::{HashMap, Entry}; use std::sync::Arc; use extrinsic_store::{Data, Store as ExtrinsicStore}; @@ -29,9 +29,9 @@ use polkadot_primitives::parachain::{ }; use parking_lot::Mutex; -use futures::prelude::*; +use futures::{future, prelude::*}; -use super::{GroupInfo, TableRouter}; +use super::{GroupInfo, Incoming, TableRouter}; use self::includable::IncludabilitySender; use primitives::ed25519; use runtime_primitives::{traits::ProvideRuntimeApi}; @@ -74,13 +74,40 @@ impl TableContext { } } +pub(crate) enum Validation { + Valid(BlockData, Extrinsic), + Invalid(BlockData), // should take proof. +} + +enum ValidationWork { + Done(Validation), + InProgress, + Error(String), +} + +#[cfg(test)] +impl ValidationWork { + fn is_in_progress(&self) -> bool { + match *self { + ValidationWork::InProgress => true, + _ => false, + } + } + + fn is_done(&self) -> bool { + match *self { + ValidationWork::Done(_) => true, + _ => false, + } + } +} + // A shared table object. struct SharedTableInner { table: Table, - proposed_digest: Option, - checked_validity: HashSet, trackers: Vec, extrinsic_store: ExtrinsicStore, + validated: HashMap, } impl SharedTableInner { @@ -94,9 +121,10 @@ impl SharedTableInner { context: &TableContext, router: &R, statement: table::SignedStatement, - ) -> Option Option::Future, - >> { + ::Future, + >>> { let summary = match self.table.import_statement(context, statement) { Some(summary) => summary, None => return None, @@ -111,20 +139,34 @@ impl SharedTableInner { let digest = &summary.candidate; // TODO: consider a strategy based on the number of candidate votes as well. - // only check validity if this wasn't locally proposed. - let extra_work = para_member - && self.proposed_digest.as_ref().map_or(true, |d| d != digest) - && self.checked_validity.insert(digest.clone()); + let do_validation = para_member && match self.validated.entry(digest.clone()) { + Entry::Occupied(_) => false, + Entry::Vacant(entry) => { + entry.insert(ValidationWork::InProgress); + true + } + }; - let work = if extra_work { + let work = if do_validation { + let fetch_incoming = router.fetch_incoming(summary.group_id); match self.table.get_candidate(&digest) { - None => None, // TODO: handle table inconsistency somehow? + None => { + let message = format!( + "Table inconsistency detected. Summary returned for candidate {} \ + but receipt not present in table.", + digest, + ); + + warn!(target: "consensus", "{}", message); + self.validated.insert(digest.clone(), ValidationWork::Error(message)); + None + } Some(candidate) => { let fetch_block_data = router.fetch_block_data(candidate).into_future(); Some(Work { candidate_receipt: candidate.clone(), - fetch_block_data, + fetch: fetch_block_data.join(fetch_incoming), }) } } @@ -152,37 +194,83 @@ impl SharedTableInner { /// Produced after validating a candidate. pub struct Validated { /// A statement about the validity of the candidate. - pub validity: table::Statement, - /// Block data to ensure availability of. - pub block_data: BlockData, - /// Extrinsic data to ensure availability of. - pub extrinsic: Option, + statement: table::Statement, + /// The result of validation. + result: Validation, +} + +impl Validated { + /// Note that we've validated a candidate with given hash and it is bad. + pub fn known_bad(hash: Hash, block_data: BlockData) -> Self { + Validated { + statement: GenericStatement::Invalid(hash), + result: Validation::Invalid(block_data), + } + } + + /// Note that we've validated a candidate with given hash and it is good. + /// Extrinsic data required. + pub fn known_good(hash: Hash, block_data: BlockData, extrinsic: Extrinsic) -> Self { + Validated { + statement: GenericStatement::Valid(hash), + result: Validation::Valid(block_data, extrinsic), + } + } + + /// Note that we've collated a candidate. + /// Extrinsic data required. + pub fn collated_local( + receipt: CandidateReceipt, + block_data: BlockData, + extrinsic: Extrinsic, + ) -> Self { + Validated { + statement: GenericStatement::Candidate(receipt), + result: Validation::Valid(block_data, extrinsic), + } + } + + /// Get a reference to the block data. + pub fn block_data(&self) -> &BlockData { + match self.result { + Validation::Valid(ref b, _) | Validation::Invalid(ref b) => b, + } + } + + /// Get a reference to the extrinsic data, if any. + pub fn extrinsic(&self) -> Option<&Extrinsic> { + match self.result { + Validation::Valid(_, ref ex) => Some(ex), + Validation::Invalid(_) => None, + } + } } /// Future that performs parachain validation work. -pub struct ParachainWork { - work: Work, +pub struct ParachainWork { + work: Work, relay_parent: Hash, extrinsic_store: ExtrinsicStore, } -impl ParachainWork { +impl ParachainWork { /// Prime the parachain work with an API reference for extracting /// chain information. pub fn prime(self, api: Arc

) -> PrimedParachainWork< - D, - impl Send + FnMut(&BlockId, &Collation) -> Result, + Fetch, + impl Send + FnMut(&BlockId, &Collation, &Incoming) -> Result, > where P: Send + Sync + 'static, P::Api: ParachainHost, { - let validate = move |id: &_, collation: &_| { + let validate = move |id: &_, collation: &_, incoming: &_| { let res = ::collation::validate_collation( &*api, id, collation, + incoming, ); match res { @@ -198,28 +286,28 @@ impl ParachainWork { } /// Prime the parachain work with a custom validation function. - pub fn prime_with(self, validate: F) -> PrimedParachainWork - where F: FnMut(&BlockId, &Collation) -> Result + pub fn prime_with(self, validate: F) -> PrimedParachainWork + where F: FnMut(&BlockId, &Collation, &Incoming) -> Result { PrimedParachainWork { inner: self, validate } } } -struct Work { +struct Work { candidate_receipt: CandidateReceipt, - fetch_block_data: D, + fetch: Fetch } /// Primed statement producer. -pub struct PrimedParachainWork { - inner: ParachainWork, +pub struct PrimedParachainWork { + inner: ParachainWork, validate: F, } -impl Future for PrimedParachainWork +impl Future for PrimedParachainWork where - D: Future, - F: FnMut(&BlockId, &Collation) -> Result, + Fetch: Future, + F: FnMut(&BlockId, &Collation, &Incoming) -> Result, Err: From<::std::io::Error>, { type Item = Validated; @@ -229,10 +317,11 @@ impl Future for PrimedParachainWork let work = &mut self.inner.work; let candidate = &work.candidate_receipt; - let block = try_ready!(work.fetch_block_data.poll()); + let (block, incoming) = try_ready!(work.fetch.poll()); let validation_res = (self.validate)( &BlockId::hash(self.inner.relay_parent), &Collation { block_data: block.clone(), receipt: candidate.clone() }, + &incoming, ); let candidate_hash = candidate.hash(); @@ -240,8 +329,11 @@ impl Future for PrimedParachainWork debug!(target: "consensus", "Making validity statement about candidate {}: is_good? {:?}", candidate_hash, validation_res.is_ok()); - let (extrinsic, validity_statement) = match validation_res { - Err(()) => (None, GenericStatement::Invalid(candidate_hash)), + let (validity_statement, result) = match validation_res { + Err(()) => ( + GenericStatement::Invalid(candidate_hash), + Validation::Invalid(block), + ), Ok(extrinsic) => { self.inner.extrinsic_store.make_available(Data { relay_parent: self.inner.relay_parent, @@ -251,14 +343,16 @@ impl Future for PrimedParachainWork extrinsic: Some(extrinsic.clone()), })?; - (Some(extrinsic), GenericStatement::Valid(candidate_hash)) + ( + GenericStatement::Valid(candidate_hash), + Validation::Valid(block, extrinsic) + ) } }; Ok(Async::Ready(Validated { - validity: validity_statement, - block_data: block, - extrinsic, + statement: validity_statement, + result, })) } } @@ -293,8 +387,7 @@ impl SharedTable { context: Arc::new(TableContext { groups, key, parent_hash }), inner: Arc::new(Mutex::new(SharedTableInner { table: Table::default(), - proposed_digest: None, - checked_validity: HashSet::new(), + validated: HashMap::new(), trackers: Vec::new(), extrinsic_store, })) @@ -316,6 +409,19 @@ impl SharedTable { &self.context.groups } + /// Get extrinsic data for candidate with given hash, if any. + /// + /// This will return `Some` for any candidates that have been validated + /// locally. + pub(crate) fn extrinsic_data(&self, hash: &Hash) -> Option { + self.inner.lock().validated.get(hash).and_then(|x| match *x { + ValidationWork::Error(_) => None, + ValidationWork::InProgress => None, + ValidationWork::Done(Validation::Invalid(_)) => None, + ValidationWork::Done(Validation::Valid(_, ref ex)) => Some(ex.clone()), + }) + } + /// Import a single statement with remote source, whose signature has already been checked. /// /// The statement producer, if any, will produce only statements concerning the same candidate @@ -324,9 +430,10 @@ impl SharedTable { &self, router: &R, statement: table::SignedStatement, - ) -> Option Option::Future, - >> { + ::Future, + >>> { self.inner.lock().import_remote_statement(&*self.context, router, statement) } @@ -340,9 +447,10 @@ impl SharedTable { where R: TableRouter, I: IntoIterator, - U: ::std::iter::FromIterator::Future, - >>>, + ::Future, + >>>>, { let mut inner = self.inner.lock(); @@ -351,23 +459,20 @@ impl SharedTable { }).collect() } - /// Sign and import a local statement. - pub fn sign_and_import(&self, statement: table::Statement) + /// Sign and import the result of candidate validation. + pub fn import_validated(&self, validated: Validated) -> SignedStatement { - let proposed_digest = match statement { - GenericStatement::Candidate(ref c) => Some(c.hash()), - _ => None, + let digest = match validated.statement { + GenericStatement::Candidate(ref c) => c.hash(), + GenericStatement::Valid(h) | GenericStatement::Invalid(h) => h, }; - let signed_statement = self.context.sign_statement(statement); + let signed_statement = self.context.sign_statement(validated.statement); let mut inner = self.inner.lock(); - if proposed_digest.is_some() { - inner.proposed_digest = proposed_digest; - } - inner.table.import_statement(&*self.context, signed_statement.clone()); + inner.validated.insert(digest, ValidationWork::Done(validated.result)); signed_statement } @@ -447,13 +552,19 @@ mod tests { impl TableRouter for DummyRouter { type Error = ::std::io::Error; type FetchCandidate = ::futures::future::FutureResult; + type FetchIncoming = ::futures::future::FutureResult; fn local_candidate(&self, _candidate: CandidateReceipt, _block_data: BlockData, _extrinsic: Extrinsic) { } + fn fetch_block_data(&self, _candidate: &CandidateReceipt) -> Self::FetchCandidate { future::ok(BlockData(vec![1, 2, 3, 4, 5])) } + + fn fetch_incoming(&self, _para_id: ParaId) -> Self::FetchIncoming { + future::ok(Vec::new()) + } } #[test] @@ -579,18 +690,18 @@ mod tests { let producer: ParachainWork> = ParachainWork { work: Work { candidate_receipt: candidate, - fetch_block_data: future::ok(block_data.clone()), + fetch: future::ok((block_data.clone(), Vec::new())), }, relay_parent, extrinsic_store: store.clone(), }; - let produced = producer.prime_with(|_, _| Ok(Extrinsic { outgoing_messages: Vec::new() })) + let validated = producer.prime_with(|_, _, _| Ok(Extrinsic { outgoing_messages: Vec::new() })) .wait() .unwrap(); - assert_eq!(produced.block_data, block_data); - assert_eq!(produced.validity, GenericStatement::Valid(hash)); + assert_eq!(validated.block_data(), &block_data); + assert_eq!(validated.statement, GenericStatement::Valid(hash)); assert_eq!(store.block_data(relay_parent, hash).unwrap(), block_data); assert!(store.extrinsic(relay_parent, hash).is_some()); @@ -619,19 +730,132 @@ mod tests { let producer = ParachainWork { work: Work { candidate_receipt: candidate, - fetch_block_data: future::ok::<_, ::std::io::Error>(block_data.clone()), + fetch: future::ok::<_, ::std::io::Error>((block_data.clone(), Vec::new())), }, relay_parent, extrinsic_store: store.clone(), }; - let produced = producer.prime_with(|_, _| Ok(Extrinsic { outgoing_messages: Vec::new() })) + let validated = producer.prime_with(|_, _, _| Ok(Extrinsic { outgoing_messages: Vec::new() })) .wait() .unwrap(); - assert_eq!(produced.block_data, block_data); + assert_eq!(validated.block_data(), &block_data); assert_eq!(store.block_data(relay_parent, hash).unwrap(), block_data); assert!(store.extrinsic(relay_parent, hash).is_some()); } + + #[test] + fn does_not_dispatch_work_after_starting_validation() { + let mut groups = HashMap::new(); + + let para_id = ParaId::from(1); + let local_id = Keyring::Alice.to_raw_public().into(); + let local_key = Arc::new(Keyring::Alice.pair()); + + let validity_other = Keyring::Bob.to_raw_public().into(); + let validity_other_key = Keyring::Bob.pair(); + let parent_hash = Default::default(); + + groups.insert(para_id, GroupInfo { + validity_guarantors: [local_id, validity_other].iter().cloned().collect(), + needed_validity: 1, + }); + + let shared_table = SharedTable::new( + groups, + local_key.clone(), + parent_hash, + ExtrinsicStore::new_in_memory(), + ); + + let candidate = CandidateReceipt { + parachain_index: para_id, + collator: [1; 32].into(), + signature: Default::default(), + head_data: ::polkadot_primitives::parachain::HeadData(vec![1, 2, 3, 4]), + balance_uploads: Vec::new(), + egress_queue_roots: Vec::new(), + fees: 1_000_000, + block_data_hash: [2; 32].into(), + }; + + let hash = candidate.hash(); + let candidate_statement = GenericStatement::Candidate(candidate); + + let signature = ::sign_table_statement(&candidate_statement, &validity_other_key, &parent_hash); + let signed_statement = ::table::generic::SignedStatement { + statement: candidate_statement, + signature: signature.into(), + sender: validity_other, + }; + + let _a = shared_table.import_remote_statement( + &DummyRouter, + signed_statement.clone(), + ).expect("should produce work"); + + assert!(shared_table.inner.lock().validated.get(&hash).expect("validation has started").is_in_progress()); + + let b = shared_table.import_remote_statement( + &DummyRouter, + signed_statement.clone(), + ); + + assert!(b.is_none(), "cannot work when validation has started"); + } + + #[test] + fn does_not_dispatch_after_local_candidate() { + let mut groups = HashMap::new(); + + let para_id = ParaId::from(1); + let local_id = Keyring::Alice.to_raw_public().into(); + let local_key = Arc::new(Keyring::Alice.pair()); + let block_data = BlockData(vec![1, 2, 3]); + let extrinsic = Extrinsic { outgoing_messages: Vec::new() }; + + let validity_other = Keyring::Bob.to_raw_public().into(); + let parent_hash = Default::default(); + + groups.insert(para_id, GroupInfo { + validity_guarantors: [local_id, validity_other].iter().cloned().collect(), + needed_validity: 1, + }); + + let shared_table = SharedTable::new( + groups, + local_key.clone(), + parent_hash, + ExtrinsicStore::new_in_memory(), + ); + + let candidate = CandidateReceipt { + parachain_index: para_id, + collator: [1; 32].into(), + signature: Default::default(), + head_data: ::polkadot_primitives::parachain::HeadData(vec![1, 2, 3, 4]), + balance_uploads: Vec::new(), + egress_queue_roots: Vec::new(), + fees: 1_000_000, + block_data_hash: [2; 32].into(), + }; + + let hash = candidate.hash(); + let signed_statement = shared_table.import_validated(Validated::collated_local( + candidate, + block_data, + extrinsic, + )); + + assert!(shared_table.inner.lock().validated.get(&hash).expect("validation has started").is_done()); + + let a = shared_table.import_remote_statement( + &DummyRouter, + signed_statement, + ); + + assert!(a.is_none()); + } } diff --git a/network/Cargo.toml b/network/Cargo.toml index 17fad6c193630..3ab6274dc1e18 100644 --- a/network/Cargo.toml +++ b/network/Cargo.toml @@ -18,4 +18,8 @@ sr-primitives = { git = "https://github.com/paritytech/substrate" } futures = "0.1" tokio = "0.1.7" log = "0.4" -rhododendron = "0.3" +slice-group-by = "0.2.2" + +[dev-dependencies] +substrate-client = { git = "https://github.com/paritytech/substrate" } +substrate-keyring = { git = "https://github.com/paritytech/substrate" } diff --git a/network/src/consensus.rs b/network/src/consensus.rs index da3a27ddcf91d..3f62995aff30f 100644 --- a/network/src/consensus.rs +++ b/network/src/consensus.rs @@ -20,13 +20,14 @@ //! each time consensus begins on a new chain head. use sr_primitives::traits::ProvideRuntimeApi; -use substrate_network::consensus_gossip::ConsensusMessage; -use polkadot_consensus::{Network, SharedTable, Collators, Statement, GenericStatement}; +use substrate_network::{consensus_gossip::ConsensusMessage, Context as NetContext}; +use polkadot_consensus::{Network as ParachainNetwork, SharedTable, Collators, Statement, GenericStatement}; use polkadot_primitives::{AccountId, Block, Hash, SessionKey}; use polkadot_primitives::parachain::{Id as ParaId, Collation, Extrinsic, ParachainHost, BlockData}; use codec::Decode; use futures::prelude::*; +use futures::future::Executor as FutureExecutor; use futures::sync::mpsc; use std::collections::HashMap; @@ -36,22 +37,95 @@ use arrayvec::ArrayVec; use tokio::runtime::TaskExecutor; use parking_lot::Mutex; -use super::NetworkService; use router::Router; +use super::PolkadotProtocol; + +/// An executor suitable for dispatching async consensus tasks. +pub trait Executor { + fn spawn + Send + 'static>(&self, f: F); +} + +/// A wrapped futures::future::Executor. +pub struct WrappedExecutor(pub T); + +impl Executor for WrappedExecutor + where T: FutureExecutor + Send + 'static>> +{ + fn spawn + Send + 'static>(&self, f: F) { + if let Err(e) = self.0.execute(Box::new(f)) { + warn!(target: "consensus", "could not spawn consensus task: {:?}", e); + } + } +} + +impl Executor for TaskExecutor { + fn spawn + Send + 'static>(&self, f: F) { + TaskExecutor::spawn(self, f) + } +} + +/// Basic functionality that a network has to fulfill. +pub trait NetworkService: Send + Sync + 'static { + /// Get a stream of gossip messages for a given hash. + fn gossip_messages_for(&self, topic: Hash) -> mpsc::UnboundedReceiver; + + /// Gossip a message on given topic. + fn gossip_message(&self, topic: Hash, message: Vec); + + /// Drop a gossip topic. + fn drop_gossip(&self, topic: Hash); + + /// Execute a closure with the polkadot protocol. + fn with_spec(&self, with: F) + where F: FnOnce(&mut PolkadotProtocol, &mut NetContext); +} + +impl NetworkService for super::NetworkService { + fn gossip_messages_for(&self, topic: Hash) -> mpsc::UnboundedReceiver { + let (tx, rx) = std::sync::mpsc::channel(); + + self.with_gossip(move |gossip, _| { + let inner_rx = gossip.messages_for(topic); + let _ = tx.send(inner_rx); + }); + + match rx.recv() { + Ok(rx) => rx, + Err(_) => mpsc::unbounded().1, // return empty channel. + } + } + + fn gossip_message(&self, topic: Hash, message: Vec) { + self.gossip_consensus_message(topic, message, false); + } + + fn drop_gossip(&self, topic: Hash) { + self.with_gossip(move |gossip, _| { + gossip.collect_garbage_for_topic(topic); + }) + } + + fn with_spec(&self, with: F) + where F: FnOnce(&mut PolkadotProtocol, &mut NetContext) + { + super::NetworkService::with_spec(self, with) + } +} // task that processes all gossipped consensus messages, // checking signatures -struct MessageProcessTask { +struct MessageProcessTask { inner_stream: mpsc::UnboundedReceiver, parent_hash: Hash, - table_router: Router

, - exit: E, + table_router: Router, } -impl MessageProcessTask where +impl MessageProcessTask where P: ProvideRuntimeApi + Send + Sync + 'static, P::Api: ParachainHost, E: Future + Clone + Send + 'static, + N: NetworkService, + T: Clone + Executor + Send + 'static, { fn process_message(&self, msg: ConsensusMessage) -> Option> { use polkadot_consensus::SignedStatement; @@ -64,7 +138,7 @@ impl MessageProcessTask where statement.sender, &self.parent_hash ) { - self.table_router.import_statement(statement, self.exit.clone()); + self.table_router.import_statement(statement); } } @@ -72,10 +146,12 @@ impl MessageProcessTask where } } -impl Future for MessageProcessTask where +impl Future for MessageProcessTask where P: ProvideRuntimeApi + Send + Sync + 'static, P::Api: ParachainHost, E: Future + Clone + Send + 'static, + N: NetworkService, + T: Clone + Executor + Send + 'static, { type Item = (); type Error = (); @@ -95,43 +171,45 @@ impl Future for MessageProcessTask where } /// Wrapper around the network service -pub struct ConsensusNetwork { - network: Arc, +pub struct ConsensusNetwork { + network: Arc, api: Arc

, + executor: T, exit: E, } -impl ConsensusNetwork { +impl ConsensusNetwork { /// Create a new consensus networking object. - pub fn new(network: Arc, exit: E, api: Arc

) -> Self { - ConsensusNetwork { network, exit, api } + pub fn new(network: Arc, exit: E, api: Arc

, executor: T) -> Self { + ConsensusNetwork { network, exit, api, executor } } } -impl Clone for ConsensusNetwork { +impl Clone for ConsensusNetwork { fn clone(&self) -> Self { ConsensusNetwork { network: self.network.clone(), exit: self.exit.clone(), api: self.api.clone(), + executor: self.executor.clone(), } } } /// A long-lived network which can create parachain statement routing processes on demand. -impl Network for ConsensusNetwork where +impl ParachainNetwork for ConsensusNetwork where P: ProvideRuntimeApi + Send + Sync + 'static, P::Api: ParachainHost, E: Clone + Future + Send + 'static, + N: NetworkService, + T: Clone + Executor + Send + 'static, { - type TableRouter = Router

; + type TableRouter = Router; - /// Instantiate a table router using the given shared table. fn communication_for( &self, - _validators: &[SessionKey], table: Arc, - task_executor: TaskExecutor, + outgoing: polkadot_consensus::Outgoing, ) -> Self::TableRouter { let parent_hash = table.consensus_parent_hash().clone(); @@ -142,41 +220,34 @@ impl Network for ConsensusNetwork where table, self.network.clone(), self.api.clone(), - task_executor.clone(), + self.executor.clone(), parent_hash, knowledge.clone(), + self.exit.clone(), ); - let attestation_topic = table_router.gossip_topic(); - let exit = self.exit.clone(); + table_router.broadcast_egress(outgoing); - let (tx, rx) = std::sync::mpsc::channel(); - self.network.with_gossip(move |gossip, _| { - let inner_rx = gossip.messages_for(attestation_topic); - let _ = tx.send(inner_rx); - }); + let attestation_topic = table_router.gossip_topic(); let table_router_clone = table_router.clone(); - let executor = task_executor.clone(); + let executor = self.executor.clone(); // spin up a task in the background that processes all incoming statements // TODO: propagate statements on a timer? + let inner_stream = self.network.gossip_messages_for(attestation_topic); self.network .with_spec(move |spec, ctx| { spec.new_consensus(ctx, parent_hash, CurrentConsensus { knowledge, local_session_key, }); - let inner_stream = match rx.try_recv() { - Ok(inner_stream) => inner_stream, - _ => unreachable!("1. The with_gossip closure executed first, 2. the reply should be available") - }; let process_task = MessageProcessTask { inner_stream, parent_hash, table_router: table_router_clone, - exit, }; + executor.spawn(process_task); }); @@ -213,8 +284,10 @@ impl Future for AwaitingCollation { } } -impl Collators for ConsensusNetwork - where P::Api: ParachainHost, +impl Collators for ConsensusNetwork where + P: ProvideRuntimeApi + Send + Sync + 'static, + P::Api: ParachainHost, + N: NetworkService, { type Error = NetworkDown; type Collation = AwaitingCollation; diff --git a/network/src/lib.rs b/network/src/lib.rs index 3e3280c5b5088..1d2a9f734f8a9 100644 --- a/network/src/lib.rs +++ b/network/src/lib.rs @@ -16,9 +16,8 @@ //! Polkadot-specific network implementation. //! -//! This manages gossip of consensus messages for BFT and for parachain statements, -//! parachain block and extrinsic data fetching, communication between collators and validators, -//! and more. +//! This manages routing for parachain statements, parachain block and extrinsic data fetching, +//! communication between collators and validators, and more. extern crate parity_codec as codec; extern crate substrate_network; @@ -30,16 +29,23 @@ extern crate polkadot_availability_store as av_store; extern crate polkadot_primitives; extern crate arrayvec; -extern crate futures; extern crate parking_lot; extern crate tokio; -extern crate rhododendron; +extern crate slice_group_by; +#[macro_use] +extern crate futures; #[macro_use] extern crate log; #[macro_use] extern crate parity_codec_derive; +#[cfg(test)] +extern crate substrate_client; + +#[cfg(test)] +extern crate substrate_keyring; + mod collator_pool; mod local_collations; mod router; @@ -256,7 +262,7 @@ impl PolkadotProtocol { send_polkadot_message( ctx, who, - Message::RequestBlockData(req_id, parent, c_hash) + Message::RequestBlockData(req_id, parent, c_hash), ); in_flight.insert((req_id, who), pending); diff --git a/network/src/router.rs b/network/src/router.rs index 78fb544a0af41..d2e9d901d812e 100644 --- a/network/src/router.rs +++ b/network/src/router.rs @@ -23,21 +23,28 @@ //! and dispatch evaluation work as necessary when new statements come in. use sr_primitives::traits::{ProvideRuntimeApi, BlakeTwo256, Hash as HashT}; -use polkadot_consensus::{SharedTable, TableRouter, SignedStatement, GenericStatement, ParachainWork}; +use polkadot_consensus::{ + SharedTable, TableRouter, SignedStatement, GenericStatement, ParachainWork, Incoming, + Validated, Outgoing, +}; use polkadot_primitives::{Block, Hash, SessionKey}; -use polkadot_primitives::parachain::{BlockData, Extrinsic, CandidateReceipt, ParachainHost}; +use polkadot_primitives::parachain::{ + BlockData, Extrinsic, CandidateReceipt, ParachainHost, Id as ParaId, Message +}; -use codec::Encode; -use futures::prelude::*; -use tokio::runtime::TaskExecutor; +use codec::{Encode, Decode}; +use futures::{future, prelude::*}; +use futures::sync::oneshot::{self, Receiver}; use parking_lot::Mutex; -use std::collections::{HashMap, HashSet}; -use std::io; +use std::collections::{hash_map::{Entry, HashMap}, HashSet}; +use std::{io, mem}; use std::sync::Arc; -use consensus::Knowledge; -use super::NetworkService; +use consensus::{NetworkService, Knowledge, Executor}; + +type IngressPair = (ParaId, Vec); +type IngressPairRef<'a> = (ParaId, &'a [Message]); fn attestation_topic(parent_hash: Hash) -> Hash { let mut v = parent_hash.as_ref().to_vec(); @@ -46,26 +53,88 @@ fn attestation_topic(parent_hash: Hash) -> Hash { BlakeTwo256::hash(&v[..]) } +fn incoming_message_topic(parent_hash: Hash, parachain: ParaId) -> Hash { + let mut v = parent_hash.as_ref().to_vec(); + parachain.using_encoded(|s| v.extend(s)); + v.extend(b"incoming"); + + BlakeTwo256::hash(&v[..]) +} + +/// Receiver for block data. +pub struct BlockDataReceiver { + outer: Receiver>, + inner: Option> +} + +impl Future for BlockDataReceiver { + type Item = BlockData; + type Error = io::Error; + + fn poll(&mut self) -> Poll { + let map_err = |_| io::Error::new( + io::ErrorKind::Other, + "Sending end of channel hung up", + ); + + if let Some(ref mut inner) = self.inner { + return inner.poll().map_err(map_err); + } + match self.outer.poll().map_err(map_err)? { + Async::Ready(mut inner) => { + let poll_result = inner.poll(); + self.inner = Some(inner); + poll_result.map_err(map_err) + } + Async::NotReady => Ok(Async::NotReady), + } + } +} +/// receiver for incoming data. +#[derive(Clone)] +pub struct IncomingReceiver { + inner: future::Shared> +} + +impl Future for IncomingReceiver { + type Item = Incoming; + type Error = io::Error; + + fn poll(&mut self) -> Poll { + match self.inner.poll() { + Ok(Async::NotReady) => Ok(Async::NotReady), + Ok(Async::Ready(i)) => Ok(Async::Ready(Incoming::clone(&*i))), + Err(_) => Err(io::Error::new( + io::ErrorKind::Other, + "Sending end of channel hung up", + )), + } + } +} + /// Table routing implementation. -pub struct Router

{ +pub struct Router { table: Arc, - network: Arc, + network: Arc, api: Arc

, - task_executor: TaskExecutor, + exit: E, + task_executor: T, parent_hash: Hash, attestation_topic: Hash, knowledge: Arc>, + fetch_incoming: Arc>>, deferred_statements: Arc>, } -impl

Router

{ +impl Router { pub(crate) fn new( table: Arc, - network: Arc, + network: Arc, api: Arc

, - task_executor: TaskExecutor, + task_executor: T, parent_hash: Hash, knowledge: Arc>, + exit: E, ) -> Self { Router { table, @@ -75,7 +144,9 @@ impl

Router

{ parent_hash, attestation_topic: attestation_topic(parent_hash), knowledge, + fetch_incoming: Arc::new(Mutex::new(HashMap::new())), deferred_statements: Arc::new(Mutex::new(DeferredStatements::new())), + exit, } } @@ -85,7 +156,7 @@ impl

Router

{ } } -impl

Clone for Router

{ +impl Clone for Router { fn clone(&self) -> Self { Router { table: self.table.clone(), @@ -95,18 +166,21 @@ impl

Clone for Router

{ parent_hash: self.parent_hash.clone(), attestation_topic: self.attestation_topic.clone(), deferred_statements: self.deferred_statements.clone(), + fetch_incoming: self.fetch_incoming.clone(), knowledge: self.knowledge.clone(), + exit: self.exit.clone(), } } } -impl Router

- where P::Api: ParachainHost +impl Router where + P::Api: ParachainHost, + N: NetworkService, + T: Clone + Executor + Send + 'static, + E: Future + Clone + Send + 'static, { /// Import a statement whose signature has been checked already. - pub(crate) fn import_statement(&self, statement: SignedStatement, exit: Exit) - where Exit: Future + Clone + Send + 'static - { + pub(crate) fn import_statement(&self, statement: SignedStatement) { trace!(target: "p_net", "importing consensus statement {:?}", statement.statement); // defer any statements for which we haven't imported the candidate yet @@ -146,15 +220,47 @@ impl Router

if let Some(work) = producer.map(|p| self.create_work(c_hash, p)) { trace!(target: "consensus", "driving statement work to completion"); - self.task_executor.spawn(work.select(exit.clone()).then(|_| Ok(()))); + let work = work.select2(self.exit.clone()).then(|_| Ok(())); + self.task_executor.spawn(work); + } + } + } + + /// Broadcast outgoing messages to peers. + pub(crate) fn broadcast_egress(&self, outgoing: Outgoing) { + use slice_group_by::LinearGroupBy; + + let mut group_messages = Vec::new(); + for egress in outgoing { + let source = egress.from; + let messages = egress.messages.outgoing_messages; + + let groups = LinearGroupBy::new(&messages, |a, b| a.target == b.target); + for group in groups { + let target = match group.get(0) { + Some(msg) => msg.target, + None => continue, // skip empty. + }; + + group_messages.clear(); // reuse allocation from previous iterations. + group_messages.extend(group.iter().map(|msg| msg.data.clone()).map(Message)); + + debug!(target: "consensus", "Circulating messages from {:?} to {:?} at {}", + source, target, self.parent_hash); + + // this is the ingress from source to target, with given messages. + let target_incoming = incoming_message_topic(self.parent_hash, target); + let ingress_for: IngressPairRef = (source, &group_messages[..]); + + self.network.gossip_message(target_incoming, ingress_for.encode()); } } } fn create_work(&self, candidate_hash: Hash, producer: ParachainWork) - -> impl Future + -> impl Future + Send + 'static where - D: Future + Send + 'static, + D: Future + Send + 'static, { let table = self.table.clone(); let network = self.network.clone(); @@ -162,36 +268,97 @@ impl Router

let attestation_topic = self.attestation_topic.clone(); producer.prime(self.api.clone()) - .map(move |produced| { + .map(move |validated| { // store the data before broadcasting statements, so other peers can fetch. knowledge.lock().note_candidate( candidate_hash, - Some(produced.block_data), - produced.extrinsic, + Some(validated.block_data().clone()), + validated.extrinsic().cloned(), ); // propagate the statement. // consider something more targeted than gossip in the future. - let signed = table.sign_and_import(produced.validity); - network.gossip_consensus_message(attestation_topic, signed.encode(), false); + let signed = table.import_validated(validated); + network.gossip_message(attestation_topic, signed.encode()); }) .map_err(|e| debug!(target: "p_net", "Failed to produce statements: {:?}", e)) } + +} + +impl Router where + P::Api: ParachainHost, + N: NetworkService, + T: Executor, + E: Future + Clone + Send + 'static, +{ + fn do_fetch_incoming(&self, parachain: ParaId) -> IncomingReceiver { + use polkadot_primitives::BlockId; + let (tx, rx) = { + let mut fetching = self.fetch_incoming.lock(); + match fetching.entry(parachain) { + Entry::Occupied(entry) => return entry.get().clone(), + Entry::Vacant(entry) => { + // has not been requested yet. + let (tx, rx) = oneshot::channel(); + let rx = IncomingReceiver { inner: rx.shared() }; + entry.insert(rx.clone()); + + (tx, rx) + } + } + }; + + let parent_hash = self.parent_hash; + let topic = incoming_message_topic(parent_hash, parachain); + let gossip_messages = self.network.gossip_messages_for(topic) + .map_err(|()| panic!("unbounded receivers do not throw errors; qed")) + .filter_map(|msg| IngressPair::decode(&mut msg.as_slice())); + + let canon_roots = self.api.runtime_api().ingress(&BlockId::hash(parent_hash), parachain) + .map_err(|e| format!("Cannot fetch ingress for parachain {:?} at {:?}: {:?}", + parachain, parent_hash, e) + ); + + let work = canon_roots.into_future() + .and_then(move |ingress_roots| match ingress_roots { + None => Err(format!("No parachain {:?} registered at {}", parachain, parent_hash)), + Some(roots) => Ok(roots.into_iter().collect()) + }) + .and_then(move |ingress_roots| ComputeIngress { + inner: gossip_messages, + ingress_roots, + incoming: Vec::new(), + }) + .map(move |incoming| if let Some(i) = incoming { let _ = tx.send(i); }) + .select2(self.exit.clone()) + .then(|_| Ok(())); + + self.task_executor.spawn(work); + + rx + } } -impl TableRouter for Router

- where P::Api: ParachainHost +impl TableRouter for Router where + P::Api: ParachainHost, + N: NetworkService, + T: Clone + Executor + Send + 'static, + E: Future + Clone + Send + 'static, { type Error = io::Error; type FetchCandidate = BlockDataReceiver; + type FetchIncoming = IncomingReceiver; fn local_candidate(&self, receipt: CandidateReceipt, block_data: BlockData, extrinsic: Extrinsic) { - // give to network to make available. + // produce a signed statement let hash = receipt.hash(); - let candidate = self.table.sign_and_import(GenericStatement::Candidate(receipt)); + let validated = Validated::collated_local(receipt, block_data.clone(), extrinsic.clone()); + let statement = self.table.import_validated(validated); + // give to network to make available. self.knowledge.lock().note_candidate(hash, Some(block_data), Some(extrinsic)); - self.network.gossip_consensus_message(self.attestation_topic, candidate.encode(), false); + self.network.gossip_message(self.attestation_topic, statement.encode()); } fn fetch_block_data(&self, candidate: &CandidateReceipt) -> BlockDataReceiver { @@ -204,44 +371,27 @@ impl TableRouter for Router

}); BlockDataReceiver { outer: rx, inner: None } } + + fn fetch_incoming(&self, parachain: ParaId) -> Self::FetchIncoming { + self.do_fetch_incoming(parachain) + } } -impl

Drop for Router

{ +impl Drop for Router { fn drop(&mut self) { let parent_hash = self.parent_hash.clone(); self.network.with_spec(move |spec, _| spec.remove_consensus(&parent_hash)); - } -} + self.network.drop_gossip(self.attestation_topic); -/// Receiver for block data. -pub struct BlockDataReceiver { - outer: ::futures::sync::oneshot::Receiver<::futures::sync::oneshot::Receiver>, - inner: Option<::futures::sync::oneshot::Receiver> -} - -impl Future for BlockDataReceiver { - type Item = BlockData; - type Error = io::Error; - - fn poll(&mut self) -> Poll { - if let Some(ref mut inner) = self.inner { - return inner - .poll() - .map_err(|_| io::Error::new( - io::ErrorKind::Other, - "Sending end of channel hung up", - )) - } - if let Ok(futures::Async::Ready(mut inner)) = self.outer.poll() { - let poll_result = inner.poll(); - self.inner = Some(inner); - return poll_result - .map_err(|_| io::Error::new( - io::ErrorKind::Other, - "Sending end of channel hung up", - )) + { + let mut incoming_fetched = self.fetch_incoming.lock(); + for (para_id, _) in incoming_fetched.drain() { + self.network.drop_gossip(incoming_message_topic( + self.parent_hash, + para_id, + )); + } } - Ok(futures::Async::NotReady) } } @@ -300,10 +450,63 @@ impl DeferredStatements { } } +// computes ingress from incoming stream of messages. +// returns `None` if the stream concludes too early. +#[must_use = "futures do nothing unless polled"] +struct ComputeIngress { + ingress_roots: HashMap, + incoming: Vec, + inner: S, +} + +impl Future for ComputeIngress where S: Stream { + type Item = Option; + type Error = S::Error; + + fn poll(&mut self) -> Poll, Self::Error> { + loop { + if self.ingress_roots.is_empty() { + return Ok(Async::Ready( + Some(mem::replace(&mut self.incoming, Vec::new())) + )) + } + + let (para_id, messages) = match try_ready!(self.inner.poll()) { + None => return Ok(Async::Ready(None)), + Some(next) => next, + }; + + match self.ingress_roots.entry(para_id) { + Entry::Vacant(_) => continue, + Entry::Occupied(occupied) => { + let canon_root = occupied.get().clone(); + let messages = messages.iter().map(|m| &m.0[..]); + if ::polkadot_consensus::message_queue_root(messages) != canon_root { + continue; + } + + occupied.remove(); + } + } + + let pos = self.incoming.binary_search_by_key( + ¶_id, + |&(id, _)| id, + ) + .err() + .expect("incoming starts empty and only inserted when \ + para_id not inserted before; qed"); + + self.incoming.insert(pos, (para_id, messages)); + } + } +} + #[cfg(test)] mod tests { use super::*; use substrate_primitives::H512; + use futures::stream; #[test] fn deferred_statements_works() { @@ -345,4 +548,70 @@ mod tests { assert!(traces.is_empty()); } } + + #[test] + fn compute_ingress_works() { + let actual_messages = [ + ( + ParaId::from(1), + vec![Message(vec![1, 3, 5, 6]), Message(vec![4, 4, 4, 4])], + ), + ( + ParaId::from(2), + vec![ + Message(vec![1, 3, 7, 9, 1, 2, 3, 4, 5, 6]), + Message(b"hello world".to_vec()), + ], + ), + ( + ParaId::from(5), + vec![Message(vec![1, 2, 3, 4, 5]), Message(vec![6, 9, 6, 9])], + ), + ]; + + let roots: HashMap<_, _> = actual_messages.iter() + .map(|&(para_id, ref messages)| ( + para_id, + ::polkadot_consensus::message_queue_root(messages.iter().map(|m| &m.0)), + )) + .collect(); + + let inputs = [ + ( + ParaId::from(1), // wrong message. + vec![Message(vec![1, 1, 2, 2]), Message(vec![3, 3, 4, 4])], + ), + ( + ParaId::from(1), + vec![Message(vec![1, 3, 5, 6]), Message(vec![4, 4, 4, 4])], + ), + ( + ParaId::from(1), // duplicate + vec![Message(vec![1, 3, 5, 6]), Message(vec![4, 4, 4, 4])], + ), + + ( + ParaId::from(5), // out of order + vec![Message(vec![1, 2, 3, 4, 5]), Message(vec![6, 9, 6, 9])], + ), + ( + ParaId::from(1234), // un-routed parachain. + vec![Message(vec![9, 9, 9, 9])], + ), + ( + ParaId::from(2), + vec![ + Message(vec![1, 3, 7, 9, 1, 2, 3, 4, 5, 6]), + Message(b"hello world".to_vec()), + ], + ), + ]; + let ingress = ComputeIngress { + ingress_roots: roots, + incoming: Vec::new(), + inner: stream::iter_ok::<_, ()>(inputs.iter().cloned()), + }; + + assert_eq!(ingress.wait().unwrap().unwrap(), actual_messages); + } } diff --git a/network/src/tests/consensus.rs b/network/src/tests/consensus.rs new file mode 100644 index 0000000000000..990238d84e1dc --- /dev/null +++ b/network/src/tests/consensus.rs @@ -0,0 +1,466 @@ +// Copyright 2019 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! Tests and helpers for consensus networking. + +use consensus::NetworkService; +use substrate_network::{consensus_gossip::ConsensusMessage, Context as NetContext}; +use substrate_primitives::{Ed25519AuthorityId, NativeOrEncoded}; +use substrate_keyring::Keyring; +use {PolkadotProtocol}; + +use polkadot_consensus::{SharedTable, MessagesFrom, Network, TableRouter}; +use polkadot_primitives::{AccountId, Block, Hash, Header, BlockId}; +use polkadot_primitives::parachain::{Id as ParaId, Chain, DutyRoster, ParachainHost, OutgoingMessage}; +use parking_lot::Mutex; +use substrate_client::error::Result as ClientResult; +use substrate_client::runtime_api::{Core, RuntimeVersion, ApiExt}; +use sr_primitives::ExecutionContext; +use sr_primitives::traits::{ApiRef, ProvideRuntimeApi}; + +use std::collections::HashMap; +use std::sync::Arc; +use futures::{prelude::*, sync::mpsc}; +use tokio::runtime::{Runtime, TaskExecutor}; + +use super::TestContext; + +#[derive(Clone, Copy)] +struct NeverExit; + +impl Future for NeverExit { + type Item = (); + type Error = (); + + fn poll(&mut self) -> Poll<(), ()> { + Ok(Async::NotReady) + } +} + +struct GossipRouter { + incoming_messages: mpsc::UnboundedReceiver<(Hash, ConsensusMessage)>, + incoming_streams: mpsc::UnboundedReceiver<(Hash, mpsc::UnboundedSender)>, + outgoing: Vec<(Hash, mpsc::UnboundedSender)>, + messages: Vec<(Hash, ConsensusMessage)>, +} + +impl GossipRouter { + fn add_message(&mut self, topic: Hash, message: ConsensusMessage) { + self.outgoing.retain(|&(ref o_topic, ref sender)| { + o_topic != &topic || sender.unbounded_send(message.clone()).is_ok() + }); + self.messages.push((topic, message)); + } + + fn add_outgoing(&mut self, topic: Hash, sender: mpsc::UnboundedSender) { + for message in self.messages.iter() + .filter(|&&(ref t, _)| t == &topic) + .map(|&(_, ref msg)| msg.clone()) + { + if let Err(_) = sender.unbounded_send(message) { return } + } + + self.outgoing.push((topic, sender)); + } +} + +impl Future for GossipRouter { + type Item = (); + type Error = (); + + fn poll(&mut self) -> Poll<(), ()> { + loop { + match self.incoming_messages.poll().unwrap() { + Async::Ready(Some((topic, message))) => self.add_message(topic, message), + Async::Ready(None) => panic!("ended early."), + Async::NotReady => break, + } + } + + loop { + match self.incoming_streams.poll().unwrap() { + Async::Ready(Some((topic, sender))) => self.add_outgoing(topic, sender), + Async::Ready(None) => panic!("ended early."), + Async::NotReady => break, + } + } + + Ok(Async::NotReady) + } +} + + +#[derive(Clone)] +struct GossipHandle { + send_message: mpsc::UnboundedSender<(Hash, ConsensusMessage)>, + send_listener: mpsc::UnboundedSender<(Hash, mpsc::UnboundedSender)>, +} + +fn make_gossip() -> (GossipRouter, GossipHandle) { + let (message_tx, message_rx) = mpsc::unbounded(); + let (listener_tx, listener_rx) = mpsc::unbounded(); + + ( + GossipRouter { + incoming_messages: message_rx, + incoming_streams: listener_rx, + outgoing: Vec::new(), + messages: Vec::new(), + }, + GossipHandle { send_message: message_tx, send_listener: listener_tx }, + ) +} + +struct TestNetwork { + proto: Arc>, + gossip: GossipHandle, +} + +impl NetworkService for TestNetwork { + fn gossip_messages_for(&self, topic: Hash) -> mpsc::UnboundedReceiver { + let (tx, rx) = mpsc::unbounded(); + let _ = self.gossip.send_listener.unbounded_send((topic, tx)); + rx + } + + fn gossip_message(&self, topic: Hash, message: ConsensusMessage) { + let _ = self.gossip.send_message.unbounded_send((topic, message)); + } + + fn drop_gossip(&self, _topic: Hash) {} + + fn with_spec(&self, with: F) + where F: FnOnce(&mut PolkadotProtocol, &mut NetContext) + { + let mut context = TestContext::default(); + let res = with(&mut *self.proto.lock(), &mut context); + // TODO: send context to worker for message routing. + res + } +} + +#[derive(Default)] +struct ApiData { + validators: Vec, + duties: Vec, + active_parachains: Vec, + ingress: HashMap>, +} + +#[derive(Default, Clone)] +struct TestApi { + data: Arc>, +} + +struct RuntimeApi { + data: Arc>, +} + +impl ProvideRuntimeApi for TestApi { + type Api = RuntimeApi; + + fn runtime_api<'a>(&'a self) -> ApiRef<'a, Self::Api> { + RuntimeApi { data: self.data.clone() }.into() + } +} + +impl Core for RuntimeApi { + fn version_runtime_api_impl( + &self, + _: &BlockId, + _: ExecutionContext, + _: Option<()>, + _: Vec, + ) -> ClientResult> { + unimplemented!("Not required for testing!") + } + + fn authorities_runtime_api_impl( + &self, + _: &BlockId, + _: ExecutionContext, + _: Option<()>, + _: Vec, + ) -> ClientResult>> { + unimplemented!("Not required for testing!") + } + + fn execute_block_runtime_api_impl( + &self, + _: &BlockId, + _: ExecutionContext, + _: Option<(Block)>, + _: Vec, + ) -> ClientResult> { + unimplemented!("Not required for testing!") + } + + fn initialise_block_runtime_api_impl( + &self, + _: &BlockId, + _: ExecutionContext, + _: Option<&Header>, + _: Vec, + ) -> ClientResult> { + unimplemented!("Not required for testing!") + } +} + +impl ApiExt for RuntimeApi { + fn map_api_result Result, R, E>( + &self, + _: F + ) -> Result { + unimplemented!("Not required for testing!") + } + + fn runtime_version_at(&self, _: &BlockId) -> ClientResult { + unimplemented!("Not required for testing!") + } +} + +impl ParachainHost for RuntimeApi { + fn validators_runtime_api_impl( + &self, + _at: &BlockId, + _: ExecutionContext, + _: Option<()>, + _: Vec, + ) -> ClientResult>> { + Ok(NativeOrEncoded::Native(self.data.lock().validators.clone())) + } + + fn duty_roster_runtime_api_impl( + &self, + _at: &BlockId, + _: ExecutionContext, + _: Option<()>, + _: Vec, + ) -> ClientResult> { + + Ok(NativeOrEncoded::Native(DutyRoster { + validator_duty: self.data.lock().duties.clone(), + })) + } + + fn active_parachains_runtime_api_impl( + &self, + _at: &BlockId, + _: ExecutionContext, + _: Option<()>, + _: Vec, + ) -> ClientResult>> { + Ok(NativeOrEncoded::Native(self.data.lock().active_parachains.clone())) + } + + fn parachain_head_runtime_api_impl( + &self, + _at: &BlockId, + _: ExecutionContext, + _: Option, + _: Vec, + ) -> ClientResult>>> { + Ok(NativeOrEncoded::Native(Some(Vec::new()))) + } + + fn parachain_code_runtime_api_impl( + &self, + _at: &BlockId, + _: ExecutionContext, + _: Option, + _: Vec, + ) -> ClientResult>>> { + Ok(NativeOrEncoded::Native(Some(Vec::new()))) + } + + fn ingress_runtime_api_impl( + &self, + _at: &BlockId, + _: ExecutionContext, + id: Option, + _: Vec, + ) -> ClientResult>>> { + let id = id.unwrap(); + Ok(NativeOrEncoded::Native(self.data.lock().ingress.get(&id).cloned())) + } +} + +type TestConsensusNetwork = ::consensus::ConsensusNetwork< + TestApi, + NeverExit, + TestNetwork, + TaskExecutor, +>; + +struct Built { + gossip: GossipRouter, + api_handle: Arc>, + networks: Vec, +} + +fn build_network(n: usize, executor: TaskExecutor) -> Built { + let (gossip_router, gossip_handle) = make_gossip(); + let api_handle = Arc::new(Mutex::new(Default::default())); + let runtime_api = Arc::new(TestApi { data: api_handle.clone() }); + + let networks = (0..n).map(|_| { + let net = Arc::new(TestNetwork { + proto: Arc::new(Mutex::new(PolkadotProtocol::new(None))), + gossip: gossip_handle.clone(), + }); + + TestConsensusNetwork::new( + net, + NeverExit, + runtime_api.clone(), + executor.clone(), + ) + }); + + let networks: Vec<_> = networks.collect(); + + Built { + gossip: gossip_router, + api_handle, + networks, + } +} + +#[derive(Default)] +struct IngressBuilder { + egress: HashMap<(ParaId, ParaId), Vec>>, +} + +impl IngressBuilder { + fn add_messages(&mut self, source: ParaId, messages: &[OutgoingMessage]) { + for message in messages { + let target = message.target; + self.egress.entry((source, target)).or_insert_with(Vec::new).push(message.data.clone()); + } + } + + fn build(self) -> HashMap> { + let mut map = HashMap::new(); + for ((source, target), messages) in self.egress { + map.entry(target).or_insert_with(Vec::new) + .push((source, polkadot_consensus::message_queue_root(&messages))); + } + + for roots in map.values_mut() { + roots.sort_by_key(|&(para_id, _)| para_id); + } + + map + } +} + +fn make_table(data: &ApiData, local_key: &Keyring, parent_hash: Hash) -> Arc { + use ::av_store::Store; + + let store = Store::new_in_memory(); + let authorities: Vec<_> = data.validators.iter().map(|v| v.to_fixed_bytes().into()).collect(); + let (group_info, _) = ::polkadot_consensus::make_group_info( + DutyRoster { validator_duty: data.duties.clone() }, + &authorities, + local_key.to_raw_public().into() + ).unwrap(); + + Arc::new(SharedTable::new( + group_info, + Arc::new(local_key.pair()), + parent_hash, + store, + )) +} + +#[test] +fn ingress_fetch_works() { + let mut runtime = Runtime::new().unwrap(); + let built = build_network(3, runtime.executor()); + + let id_a: ParaId = 1.into(); + let id_b: ParaId = 2.into(); + let id_c: ParaId = 3.into(); + + let key_a = Keyring::Alice; + let key_b = Keyring::Bob; + let key_c = Keyring::Charlie; + + let messages_from_a = vec![ + OutgoingMessage { target: id_b, data: vec![1, 2, 3] }, + OutgoingMessage { target: id_b, data: vec![3, 4, 5] }, + OutgoingMessage { target: id_c, data: vec![9, 9, 9] }, + ]; + + let messages_from_b = vec![ + OutgoingMessage { target: id_a, data: vec![1, 1, 1, 1, 1,] }, + OutgoingMessage { target: id_c, data: b"hello world".to_vec() }, + ]; + + let messages_from_c = vec![ + OutgoingMessage { target: id_a, data: b"dog42".to_vec() }, + OutgoingMessage { target: id_b, data: b"dogglesworth".to_vec() }, + ]; + + let ingress = { + let mut builder = IngressBuilder::default(); + builder.add_messages(id_a, &messages_from_a); + builder.add_messages(id_b, &messages_from_b); + builder.add_messages(id_c, &messages_from_c); + + builder.build() + }; + + let parent_hash = [1; 32].into(); + + let (router_a, router_b, router_c) = { + let mut api_handle = built.api_handle.lock(); + *api_handle = ApiData { + active_parachains: vec![id_a, id_b, id_c], + duties: vec![Chain::Parachain(id_a), Chain::Parachain(id_b), Chain::Parachain(id_c)], + validators: vec![ + key_a.to_raw_public().into(), + key_b.to_raw_public().into(), + key_c.to_raw_public().into(), + ], + ingress, + }; + + ( + built.networks[0].communication_for( + make_table(&*api_handle, &key_a, parent_hash), + vec![MessagesFrom::from_messages(id_a, messages_from_a)], + ), + built.networks[1].communication_for( + make_table(&*api_handle, &key_b, parent_hash), + vec![MessagesFrom::from_messages(id_b, messages_from_b)], + ), + built.networks[2].communication_for( + make_table(&*api_handle, &key_c, parent_hash), + vec![MessagesFrom::from_messages(id_c, messages_from_c)], + ), + ) + }; + + // make sure everyone can get ingress for their own parachain. + let fetch_a = router_a.fetch_incoming(id_a).map_err(|_| format!("Could not fetch ingress_a")); + let fetch_b = router_b.fetch_incoming(id_b).map_err(|_| format!("Could not fetch ingress_b")); + let fetch_c = router_c.fetch_incoming(id_c).map_err(|_| format!("Could not fetch ingress_c")); + + let work = fetch_a.join3(fetch_b, fetch_c); + runtime.spawn(built.gossip.then(|_| Ok(()))); // in background. + runtime.block_on(work).unwrap(); +} diff --git a/network/src/tests.rs b/network/src/tests/mod.rs similarity index 99% rename from network/src/tests.rs rename to network/src/tests/mod.rs index 20ed401f555e5..60cd03f7dffdb 100644 --- a/network/src/tests.rs +++ b/network/src/tests/mod.rs @@ -34,6 +34,8 @@ use substrate_network::{ use std::sync::Arc; use futures::Future; +mod consensus; + #[derive(Default)] struct TestContext { disabled: Vec, diff --git a/parachain/src/lib.rs b/parachain/src/lib.rs index 90a8df3ccfaf3..434b560c75707 100644 --- a/parachain/src/lib.rs +++ b/parachain/src/lib.rs @@ -72,7 +72,7 @@ pub mod wasm_executor; pub mod wasm_api; /// Validation parameters for evaluating the parachain validity function. -// TODO: consolidated ingress and balance downloads +// TODO: balance downloads #[derive(PartialEq, Eq, Decode)] #[cfg_attr(feature = "std", derive(Debug, Encode))] pub struct ValidationParams { @@ -80,6 +80,8 @@ pub struct ValidationParams { pub block_data: Vec, /// Previous head-data. pub parent_head: Vec, + /// Incoming messages. + pub ingress: Vec, } /// The result of parachain validation. @@ -91,8 +93,17 @@ pub struct ValidationResult { pub head_data: Vec, } +/// An incoming message. +#[derive(PartialEq, Eq, Decode)] +#[cfg_attr(feature = "std", derive(Debug, Encode))] +pub struct IncomingMessage { + /// The source parachain. + pub source: u32, + /// The data of the message. + pub data: Vec, +} + /// A reference to a message. -#[cfg(feature = "std")] pub struct MessageRef<'a> { /// The target parachain. pub target: u32, diff --git a/parachain/src/wasm_api.rs b/parachain/src/wasm_api.rs index 0fa8a2de1a42a..8cda5c3da6cbd 100644 --- a/parachain/src/wasm_api.rs +++ b/parachain/src/wasm_api.rs @@ -17,7 +17,7 @@ //! Utilities for writing parachain WASM. use codec::{Encode, Decode}; -use super::{ValidationParams, ValidationResult, Message}; +use super::{ValidationParams, ValidationResult, MessageRef}; mod ll { extern "C" { @@ -55,7 +55,7 @@ pub fn write_result(result: ValidationResult) -> usize { } /// Post a message to another parachain. -pub fn post_message(message: &Message) { +pub fn post_message(message: MessageRef) { let data_ptr = message.data.as_ptr(); let data_len = message.data.len(); diff --git a/parachain/tests/adder.rs b/parachain/tests/adder.rs index b0086e4a72343..c03cc98579746 100644 --- a/parachain/tests/adder.rs +++ b/parachain/tests/adder.rs @@ -22,7 +22,7 @@ extern crate parity_codec as codec; extern crate polkadot_parachain as parachain; extern crate tiny_keccak; -use parachain::{MessageRef, ValidationParams}; +use parachain::{MessageRef, IncomingMessage, ValidationParams}; use parachain::wasm_executor::{Externalities, ExternalitiesError}; use codec::{Decode, Encode}; @@ -46,6 +46,12 @@ struct BlockData { add: u64, } +#[derive(Encode, Decode)] +struct AddMessage { + /// amount to add. + amount: u64, +} + struct DummyExt; impl Externalities for DummyExt { fn post_message(&mut self, _message: MessageRef) -> Result<(), ExternalitiesError> { @@ -81,6 +87,7 @@ fn execute_good_on_parent() { ValidationParams { parent_head: parent_head.encode(), block_data: block_data.encode(), + ingress: Vec::new(), }, &mut DummyExt, ).unwrap(); @@ -115,6 +122,7 @@ fn execute_good_chain_on_parent() { ValidationParams { parent_head: parent_head.encode(), block_data: block_data.encode(), + ingress: Vec::new(), }, &mut DummyExt, ).unwrap(); @@ -149,7 +157,45 @@ fn execute_bad_on_parent() { ValidationParams { parent_head: parent_head.encode(), block_data: block_data.encode(), + ingress: Vec::new(), }, &mut DummyExt, ).unwrap_err(); } + +#[test] +fn processes_messages() { + let parent_head = HeadData { + number: 0, + parent_hash: [0; 32], + post_state: hash_state(0), + }; + + let block_data = BlockData { + state: 0, + add: 512, + }; + + let bad_message_data = vec![1]; + assert!(AddMessage::decode(&mut &bad_message_data[..]).is_none()); + + let ret = parachain::wasm_executor::validate_candidate( + TEST_CODE, + ValidationParams { + parent_head: parent_head.encode(), + block_data: block_data.encode(), + ingress: vec![ + IncomingMessage { source: 1, data: (AddMessage { amount: 256 }).encode() }, + IncomingMessage { source: 2, data: bad_message_data }, + IncomingMessage { source: 3, data: (AddMessage { amount: 256 }).encode() }, + ], + }, + &mut DummyExt, + ).unwrap(); + + let new_head = HeadData::decode(&mut &ret.head_data[..]).unwrap(); + + assert_eq!(new_head.number, 1); + assert_eq!(new_head.parent_hash, hash_head(&parent_head)); + assert_eq!(new_head.post_state, hash_state(1024)); +} diff --git a/parachain/tests/res/adder.wasm b/parachain/tests/res/adder.wasm index 3261356729834aea80d99e8ecce4b35b1e9e8654..387e3367772045584a443c9f9827171409253ee7 100644 GIT binary patch literal 452959 zcmeFa37lO=aqoZ5x%)EGm8|idtM%L~*&cb*Xdf9H<_c`f7=qb?2oOt_$Cf2qn`I#g zSYyI~WMfbg7O?~bA)v4X1xPSp5)r@=yOIYF10m5PPGSh~7YPYUSp5I~s{7n?W+Xj? zW8UZgKA-QmKS-CbQ>RbAbu&k(G?{kAX&g7CV&b-6uz_Jn)ZMV1D^x^Pb*B(Q>D zU7li+`9dzA55k}pQmtN6jUdPu!fj!>Tx{j` zgx#^RBSCFX(0%#uWS*rb=3Ccaf6JB|Z`m=rVdwQX-LYlE&Re!_xqj#R8*Uw?wd=3n zIJ$n@^*5})eKZ$VufP7r^*h&JKf2|{TvXn*{?=PSM}w%+7Y5z1R=RA?vQ;ZDSy4T5 zU--m4-PbJnWVJx|cjop)cZPfB2i@b*=1#OAh@&`&!^SM0QFq3s!6@kDRz%+mg%3vc zPJTu7Fv#j)W$r*2jp#oJ9}YK>9tbye%Z&@V<*WN>XCVZQ3)=->FtDi;s1_wg*x1ww zvv_%v$6V7B8jWc*wnn>qqfOm`O>wX==i5?7V^bVX$S7~>6cdIvbxKK@V`^n?FN1Ww zc@|1%)%T!v?bsjKlr-8U8wQe5WwXnh;#2w_gz{+MTXLi6RZ+e*?Y;c_Y-Z4&OdCg%JXlKFJ(}dDIu{pA ziJ9kxxiu?u`)&3Y<_1^h4g<=*NS#qSaX!q9RU7?Igsa1+_lYbc=}j=#=*}dQi8;Y2 zSBGx2sv%W7rV6gbV_00daefb{8HUh}Gg*hpa<~!0%^$>aaUI zZM&$tJG*(hrQmq92}f9)S~KU|oz)l)YTY;Er@J!^Ja+eypfMEGt_dS~&W1V8#`MVf z!t$oZIh|ai7KcxhDa2tMG^Vw~dRPMq8hvem2!Se&Nfj0eV6r*)z$`=WZT1`b<|DQ%DB8hxFp zFRXO~a>Sd8;W~_S*UpkoK;NKIYkvk0<2kC`*yDs{BjLo2?9}mhLUo>qK$yW{qprCM zyUbT(Wag=YDO135l&e(@h@(cnR`(!-DAYVbkwvXrt~J!wOEz5+1l`>BZg6$&`-`IK zta6Ev9{rPce-vKp^{T_fkx|>!-MwAUYi4zF-Q2EDzB_Mwr?9IN(mNv*>)k!Kcf;** zev>G6vMeD!sdUI}bxMND_(`o-S7DRDE26q(#5nSR>0(++G&AzFzIoOqHFs}sqe))b zD_8baps7Y96qo56fp+KNAamVE9(klBmUG?ngt zJS~UtpQkwt!Uq)jxCm7k*Sd3db@SWhe@!G;&r-oGdac1-n+knFEiPW!SBQ%kP{|Bv zFxsDcY9Gy_P!e!l*x8LpkPF!69os#yePgF=5-%mqOUgBMRKzbx`d9T;>5vtuZW)q& zP-oQ$(BeDe+zYpZ!vr$O?bP(`SP_Zs9P3UT;;*`)<&>sUMeYlh3f+9W-re2q6KlrM z_KjJ&PU(qDVxQWb(Qd?3+SB4GgHfY1{mQ;3^}~8g@-@k6bu0BnCU1s`__y~)8dn&r zm%?efQW1_WC%rJgs5xRnpT?No3|+I`mTrd9=+w*(<5FClrTLO3&Vq$nn`v^3Yf+S1JVod99H?Rp!!tZH`Dz+)4QnA;oX8 zV(eoDAgq_Y)FDe|gvoSMa3CkCsXk`*G;8rdZj+WYn(FRPKxlkbASM&>r1QxFWbK*V z<+>jj!*t8t#;y_B?4GOo&ZTl=r{s06WAI>(8e?NG+1{zr)`|$+7=LFD(?(I^@-?$o zMDHZm27@|lg*${6RobCu$2kEhR0l?C(n^pr!A($~A$1hzrksF`2a!@4wPk(7RX8Qo zNE}UB!*Q}n#uDRb2HMm0s7w3hYJlm&`toEspe|}um)IQt?Eq$ z5fi%vFJ$M|P(KL*Ny{(d`j9HKgAkadP|u(IE+qF zl(kujTf!HRPyAJzrN99J*4p_9F*4^+n}O3eJv+6P!^M@*N<$Jwo_VJb)BB3`ibgv< z&NDt_)y~(Xt`Y@yF1Ntsxd+=GLW4l!I*>!`Hd-QtM5FIVOPvMP&}7Zo{Y+GiW(7Yo zZ$)%O(jemy&+dm4RSdfCgRbgiH)9h;I3}n3#3!KICaKgok$@K{m(7$B8Mn&4Sh?|J z+GWZeoJ@PUa)&0nt>y0}f1)7YV)^?|p?|046If58 zf1l+aJca(lmVf9J`ui>a@G114w*31}q5p#AA325oE0%xs6#Bol{9~ukKVe`@(BPN9D}n-t`K3jM1re=M3T|F?Mappv#BHaX7!SG#LHu_6ZN z-GDZA2eteLxY{wO@5{+mh3qhK4~i`-S|f`wYiO?KtWqv+cCz?(XV2{?TfALA%;$LaZ16Nqq@ z;kn5Hf+5BtvAh2$d&EV{Kr8?jiD>}{o#SWKqCk$nY>r>+UArvD&*HnQBk>c%ipIsT z>g@cuc-j~?)SgB&Q#LOiwiz=qfV?=Xl-xJF8TWumb%LTWo*ZXBOr;ghrhza~6$M4f ze@=R~s2~bx#B%`8bjXZ!YQ4}Z=F}^UiI+4A7MVCOc8Ik!%S0|{gg7l*K#gL%fSMK+ zP#3k1p+UWXxRY1&Uats-(VDjAK8fViofb2T6#O{-sB>E122L3@EO}N~h0xtxA{>cI zs?7A1P*zDt^Briaw64Jz{}jaBp98LLYUg7@7m3J+FLC}V#-0Q%wYbt@B@a61NbAul zCzDFM9I;G0i`DvU%Oel!Ib+DvdZJ@M(iXBd$GOezTrwfalZlbts2}xi%(5~YBY7t! zY2Eg2cy%AzEu)%hIvKJ4o6{f=(w0_?;uf^1GezvZv>_PlbDY|zP5Yu$lyQcFn&AjV0dDr{|?<(Dwi0RFC3ABeEigkHc;}#p1cQrCJ z)J8)A-d4kqi}7VW{mdhYeCpD0wNs@yC_+3HJ(V5O3RLXnZ13i0tv3mYKEVeYX7965 z!i>+#o!)2VdOnNOnx4~+FmVE%qHq11I zNq|mA*0uy85BaU~nf;c{ul$ztwHd!vN*zf~eyilXuXcWk-!ffx3!S*dt8fs2&v$-{ z78AdvO~@p_#iVIHG{03wv9u>a*RaBv?&P;nm@;dKjn&88?3d-Y;MT?5@=Jc?u;tmo zIMEE8hNIz;&~!udTipofuA_;w`!5cs6vA9S3Z(I|Ifl3oE;r-%rqa*UYdYbq_EgHI z#Q@Xd=^eLM@0-eWg!OZ3@s!w|Urg_t7NhqA_-P*X4mK;l0<4Xe4a$$S#@2(=49TF4 zL}_N4VdgTg?d#JR>KwV9BNA3`4osff$B}~VkJI?bT%hx!h$QhxrwNsCYWeOuMHY%H z5S|%4r&i@IUL9|~Fbdi;m?iu~1yuuGX|^_FCE`8Pc7-jh>pbWl2Gq9MEEIEWhguoB zwnt^^nEj4S%RInUeX?*3%v+_!MVnbllbx)#O-#J3F+{;@6ReROc`c~vF^M1uSe!Lt zAJfbelDgF)afd9W)S%S)Le_X#EVfG+eux~BjiyC;e(NZC;PzlO**cb-Ppmm#j8)<$ zuIwvWtOCP!-X?uKKQ5mkRw-+Jg=B&&MMWkBs%VY|u0WOGqk$$7s5%FTKgJwQp)h`P zrL^ZH> zC02C@V%WvRV3BIJBu>L;BqSCvPW3aK!#BrMnPg<|7E6nzO!NWTg7Yn%a$+EJPNyD` z6Nr^85Hm9>xg~)(#_#22Um9eYh21*~GeLYEnF??4FGLJQ<0Ro3p-+q>S+L}jeQ00} z*(z1WfaL%P+MGWwA}c3U4Iy$zsS0_L{}`%FS+k&X4;M;KO-2xKNYe9>HMwLR1QJT- zaXnMrnEdLg_gPW}sR2CTl_y7&WmKCZyo^_7w_}sf5wpB9k|Bu8M3eNGi6(8d=K2{q z-8rqdy^jJUI@j=F%q{0)hyxN-q?iawVyhR3ju`}J*e(RL2QM0wsovb)M!JTtSkX(3#UqwZhq!RK&{6#0{Sp4ZH> zald3!r=VtwxJ0>tGyliHZ}|Z@eS~%g-0ERnf*|384e)Uz7xW7T%8oTqfst$chjl^ z0@Sr)%NEsVbaF0$=Y3tEY^}*GTDc^Ex7Y0mo+Zlyya+PA9wg2pCT+BF8f0lVX#spS z3E*>ab;7DcU+JoY$mmR~PSsYOs#cwfRvjC6&aFB&FnY69hxXj6LqiR{T{IO^0B>Zh zIyM>#2xc`56Rj(AL$^1OfmB3sd?j6N2;5P5JDMn9Fw&3-YFwK*%gOAXLWjCXwB)=5 ztE99a8KpW;X@lKc*j9vF`(ZsS?vYNigE*Z_NIWLKI^521IoHNFgw92wI-A;2TFv_e z967P11e^B}jo$)y3N+^|-roHcTIrR(?>ygA}sB zn>rswX=k7B6r_^2lpAH<6fZ8gD2lmhbn-6tcZyj`6tm#o8#&Rz4}GSJsRdI*;PB2A zQ)hADC??|KEw@ul8yT1>Cha-Jq#^ng*Vw)k)5x@c(5NWDw`n+9ynNY&on@HSNU>+) zhanUI=Wdc?1;Am4ezpPGd&=eW)*W@AeTA_cy?8fY0P4AU4u_H%!OF^d9ijQ9fyqLC^M{kZS=rguaC07R^TgP`p4eUfp#6wEN zz_467x5-Lm2b_VXl%}j3n_l(l)pW9E;SA6$8k?wD<|E|Des!8fpOZ9;aZS*y+}UXs z4V_-IY*g}(PP3fz)Fcl~(5zfmvrabw?LS`0D_ma(` z5vi!$uEJ#Jr10?NcA$_l(!K@l*BL8n&^xb)*tg_w?&LD(6~H>L$T>%W8e1F@wOL*w zX_GDv_~;t_(|HAYQ0C?gYc6Kyk17-znQ^o2TuVB}_bPJVH zoaz;Fnf1n92s?GX$(_}DL!YTvz<@EfNnRnE>=kTer>r+L)aV#5I83cKM#g$$qx!{O z!QV;Kv94mm)BopY#Z(nzN>?E}ICg3PC>6F5J1q#}= zO1UNIG!t%7y)8kgINBlo(8|LpfGt72D)Lb(JfJf_>}c{5p;hU=oYQ#SmaBrZvPr)= z3#d}vc8J0Y-G#baWcMc8Q4Y~KJHYgH!-?37s1AL+R`2bAiNT$z>S)S0$a{ZPMVXKZ zOp3~G7zJcKGS8B0IS)I+tZ6%1Wdlo(S~t^yYPqz50`vwdsAmjVlGaTgGKTaxf3h(Y z^p3%Vr=ynC80a)}nD0X`bVn~P6stTorr=j?e>1_xYold8x_g*bbK#Q%GsZN@P#E5X z<0}}`3!r@r=2+U?x^6vr7(D1 zWUb}X-A$3YxaHHX*=a&pKGDD4@)@#x=5FrfGs`Eime0IfKCwSruR<-KxJWrgbkFVc zVNl!s-tx&7D00iEyn+i+wTDQS&s^3!Fjzdb`2@XMb$sj9Dhq)#pWfLL@5As1?v{=2 z(zv&#D6?#tt+TPAl~fD1_~uxiBPOB=w|LTavUti%qzC^=;NM$3^W6QtJs28((6`)XH&)Y*b*!c+A$3Tz8KJz?d#}FUcU0)bepX zr?>o!-P`3?+<>;vLHCF^`daPZqp;wQl)57bgUv^`aqTQ_Q^t{wtOx+KY-Nv_xWdrrOoKjHpC<3|Ynr>S1A_f)c5z&FKW#uS{9s4lq9LI7TlSp9*eQ3%bvcVQ} zpfd`8VA$aR$q#@fMypC=lbzn#-h}}t45=^MfJCJa7AORwcI;r^6D{ zaPJX14r;ICs~cV8Z zs*XS|#wQnOUcwpdl=T>Dv>24#7AHEftKz0QMi%MflKpaf7*>J2tEIjml!kFAuT0b)H7V@oCq!&d`3}S9lpfwVj43Xtr;`u7Gu#1 z7^0tWA)hV;=o?qJ;sOllQySd_V^-XE3RV~kci%G@juaG|_9_ocD%{rZeRCjj`n=vZ z2Z26SaCFHx2djg&U6$hu5W*hS;WqkzmUAt>9-48dzQ;KdwnIG+ggUZYnA@iKd0}pi zLgvWxVVQ#oRMUMt= z<9Hkj+YLR(LSD-8T+97N9z$)e&1-sQ=y5P?_v^X4&1KDnx$D|ZJqFtYdIarO_sE^? znS=yW;;G|t-*{Xfk89(dS*yc+@j%=fkDKH1x#MyFcxU!_XHI<1czZ4yU5TsXad|v0 zjmO3D&b)Xweft6VFr5Iq{6~c=~ueZ9Hy_ zcPeUP>iFu%@9WH8y=VNl<2mH6j`npHj3duZ+>R^O{!}MTrjls?yUwy&8&Uqpq zM+#h<9$!7YuXBDpj}fe%y03GAZ)y7Y>gvAE;5c#|pZw68O79Cew4 z;3e9*t1q@rXT&qRCtijQqXhA6XkEYK?N)q#yfD7d8tbqWP}4frEY3lL+wuH(fh(Pj zB3~GvZ|z>d9HY+{$Nh$0GTu2Kyf9mqw^xa~kZ$rK0Sou)d7`-|~x z2kr-)3BwTI209?21>2?JU2F-r!$&w;@(^08!9@D%bQ8of|8h(tB14u)^0LT4art z$}h*@5c?lm>JXeMgcNnRkt8~Gt)uvU@vBv zD#Az4C6`WAxtOV3q%z~+Ws|scYzyEE_1RWzA6r2-K=${TBJB0+s zp-G^R>Q9i!kLO~?4 z#)uBo0p`2M72eTi-o9C#;V%H>5i>^+ zU0RgtUcRYoo3lK|plodz$^OFl5oEnK&LivSDQbcNt%%kDLB5Rq+)6I4px$8LpcuNR72YveGQAEAVgGM z+2FsFycZNDkbk_lNjhk$@bN@$M8_y--*}9 zD7|xg*)`KE9+GZ7PjobqRTJ)H9(}Fa!(o(XD~AJi-_4TG!0O42xhK-m!8N9IK{u}h z9L-;2Aq%33*$Wv=Le5LbD3K1w@uLVBcCbmdV$_eRAK6ix`eFG%JmxDx)+q_xXiVU= zz!X^n4rj z=#n6(eLklG$dU}K!@Z5*)d}OUsix2TWkDT{m)+Sshda7hn%;EVoHEtjXcxy37LXYW zj|;1=Ue)SU;bDi^Q2z{kQCMvZc7OT^Z!lC*ZOb@uISHn_z+GM2Nd~0}RQDz@Q!^Mu zpHMSb-@d)g@xn|sbX`d{BO|a$@9EKTIV8RYe|<`?i!(c>RAQ__QadSl zC-;6Lk=c9SEfZgzf5p3<|6o(;-Y4c8CHW4H-8g*gsdQ?OT&yBm!gauKoqtt4nbg+1 zhrIJsTB3B-9|FEbun4&l=PY*An9zn;+|1A?j=GdYK*#s7#4*Ho#kcC*Pt= zP{jHMaiDKkLAl|qu+c6O6yiFuGk0rv9bj`(b#r2O!^~mTPw%1}8ya~%H^K<&TGcJH z?%uj-sB*M*gusXk`uh?EbpkOLXXJ{jnLiSscn;5dG2TF9!7CI3VdEho9#xWc9v$bT z5L4BZOX2KApI&C8Ym_Sm>@k#wAyYwY z%EA+SnIPX->g2?lcaxqq=Oe|MtscI2UCy`pQtx73VZP);1X6njG6c3BN%90zIITE> zBb7_M%7xm!6>>ERgIbl(*1QRG(zw+H=)|*Tyw2ot zl1`~E_ECP!=;ZexR7e{%M*b+$1I_vEznGQ5!P zf`z=(U~mhu>YN_3ab56{pGG{|bQ3gpU;9c8ij!}Jbn==yQgjsT&X~n^Fn-*Um7iCQ~ z-d4#u>p#~5%^eSAA-o6BOZmKSV2Ui1BZ>A@T?eVhecd8&scLSin?h@t%@iD=a*51n z?1VKlRn0{BJ6Ok?`_^iDOQc5XYJ?BODB}Q|V-{PbV9@g9S&KU%o4%7E=R~l5M_k(h zhht-(4z6NRb5#h9bp%n_?2ZcZID1ah5i)C8O+wcPBB(3|fnZrQrv)gj0%%_G#07Vy zEon3`QP}#*j3Yvb^rsDQ$C{$@CPdyHS)*BFV$?68$t>EDjsuXdrB`h;Q<_EKT{Y=&v~_PxYvkZDrjFV`$xN1JsO8P2rb zAL?ii#nmN6UOoIow^-8 zwibv}#Hm_NsQBOuZ2B&AR3wudajnuwLf=Q2#NR#HlUOw~Y1Y8JNiDQFaw{*}pz1_L zWB#!b)DRl`O9QBh)5Q+r@!H7T(stS^vmLq5cXQ0Yn(UF%Ud{HJ&hqja8l|UIaZQH( z<(+)(ixKB;&Wp21buVyl7p+~+h4z0bz~q$+4^g+m77kxQj1!|PD&2zH;&H3~O2$KA z7~anAEA|};HZ2N*#|3zc?w#xaG02A?np~KpB`p@+M?U$rMc1P3g*G)3!L$pg0}4@~ zt{j=`pY}RAHkxEVq7YrZ2Cj9(C-yHX(5P!D=vJPbwu4>Kj$VOr$||}E?FW;1wHV2~ zdpF@^Qb0UR!rcWfibCSc*fl#Jt`i^>Tzjfv9{j-t z1;YxPbnni}R`Y2(+cLefLqIIT*dGD8Y>3Zs_3$@>hA3wPIp~~2HdUkLj(ZD;nh^Dp zktaA#?{V>hk=M_<%FTrG?TaNiEawZ+wK8hP-Zsa}Pll;6v^mINw73gS8FC}kD-ny} zzI9g3d8vyBbwDJc-+ewo1oRKdZ4=t%+mNg&(JPjD^ja!hAC@y)AIThyRpQ z*9X1ixacm)5t{DgqLcYc%||jlezyGd=xi`@(}Ovwo`gu29aByV1HylHK5}9OnZCWV z)-tNs$f#L~d1l4n+KB=ln*irPtu37b(RF6AmJii#TE(e)vwkINjh8x&TC-Y9t$Am_ zI83eSR{M16v)&arwsj;6BDQ%sAhvnW;MkVLVB3A?o^bEkmMXfzn<0TJu1MTHA&5SM zQO}~&H&N0_HK?~X8lwp_sYSrR>uuz&^;b%HM8~Nye*$(ht9i=#`U$ z?qTH;)w$dZQV&)i{n6{*b>crh^+!wWkDHm3SCVfmt^H$CW&fAnlGxhKrVejds@kD7 zBi+;yqP`r>sZVEm0na4M_80PvNYV%z%bCXrp(2~0_K6x7Ve!J8mK7H`9oGke-HR+h zv~g>t;$E!&E)|D+e28T$g%q!18hncWwm(wIgyL?+$^wF-m<8Z;px*W^9)5@Bg z81gOF)p30=;m*v)m<5>PMWkK7j2^@3C1~n^jmWmA@RB3GO>m+QuaZHM>iD>t&u(N5#aO+j0eKekOGen2M2|IT)LqL?lkGnVID8bl66ILNzDlM6P-xKA{oUYDTUV z_AI|puB_Upk!x?iaz+e#k$*eGJzoL7BXdp(UKOBPl4r?+}`P2qq zaqjA2@%CSd#NxMx>GeZXet~q1*}(_ur$5Woyz95JG6tC@@u;A(XC!HO93kU zxfMUpM=tng<|1H=$yT6ym%S@N&AQ*&dnD+xq^UK^x>QTTd{C`0IKmu7ItzUDFU`=( zUnxHqvyd|?J6}LDNQL#lVskBSS}j?YB3qV%+KST=Bl--z?5?eaIaBRP{yf-vVe-@q zL6iARyrhSC8>#S6!nLzirkSY4UIoX6&9&NFr{$3S*pZ<2rRptP>~D?7+t%+G-Lf<0 zFOuIF-?VkdZR>YlniSn|>(&jMWBqmVq-1pW=!QG=x6I?4*57jL9Xm#E-?3rQt+(88 z>5khMJ^S`i(j8lG7~QdR(WM*K@3?vEq8+0*-*WrT9WPoWx|?s=x$%x0F5R&8wo4X| zZrHG5$*NU1-mq$P!|;-&i+0|!ct) zCH;+gx`dCiYj``_2uE zZd!5E`VGsLELncjveEU+hKCoAu3Efo#Z5!&7caYM$%Y%3uDD@%{e~q=Zc653!`2<6 zi*CR5mJOqeZrgez^L~xjqg%FYyJM#*%c&z>H+bvlO*`W&u84Qsa`VQW3)fZSSUH!) z>(*Udb(w;Z$>{B>S;(W&N%3=#Cv*cU%^u=+wM1zGKUd(e)cP>d*1V8@Ap!`rnf|7Ie$b z7hR%;He9mw(xFR-Ojw2^AkW~(LEjQkNS-f-OD8kwj-*S5#-$0RYM@Y^Fnq@%ip0-UQyX>+% zw!Co1`fY;?*TvZA`gq;1ZQU}uF2>UDNKDm)wAIK{=1wCyagwmIWBrz!N96MT#7cXA2cbn((9 zOP4NPwsiT@6-!qx9bUR>+0e4Z%a$x#x@_69<;zwqTe)m_*{bD3%NH+SvV7_CWy_Z@ zU$K1U^5NyHRt&9Jykg0Ur7M=LSiWM#ij^ydSFBn&v~uyvB`cS%T()xg$`vbDt{h&u zYItaP@$i!2rNhgHmk+NPUO7BGylNFJuA=)@G`)&ytH=tv`m^G-6VdXZ5fHcsSMkI( z1W(~#AOE(6jbM-`|E~(cZ}5Bt{|fxO4m#nB@fVd0zQp4JuQk??|IZYvz25-8gy$=H z)_MLO&m7O!^IXRB3p@vSzOUrkdk9?p)^m;E1w0q>PyLL6i_cqlHhF$Ga{Ls5^`rZM zCW6;e9`pP#&*?lL;CT_xAM)(y`CJI~6rFxa{*=6HZ*IO3sLcgDJ3Na##osM3q48e@ zelE}F^OT&D@~ysnn=fBVdm2ZAKLK3)vk$x%!GBsZ`2T?Z~R^UNKQ20HP z;tJ4uzVs>luHv3qp#Qx`MX?ztIXx7n1Wa2=e9fhj@IAT!`O6Qmjx^&X?W;+{SY9 zLFq?;Mw~DG9Pk_b3xi(0vhWg>JTDb9urMe*pS;3GC0j_Ux04k47rx95=3f|6@hc>B z_S@t?BzA(*YXEO(x8(5@wJ<0h0{k?@QBc;DSfj-cIx>~nJY~xI z{)NmSoZLi-34(n!>YDh5BU2Nur?jkZ8N^6n5*JTaZczT8)NoDwo0EW=P-eC)C|pfX z#k)wD=4*MF9tWl80PYtrJPYedin~anaLQZAoGST*tX`#!07pa?1dXtC8<_MAEGVid z%8F8@QCQl+!|G?s=;IH`wrT%50Mo814eB2dQWsBA{RnBU{yEZo{mZ0GW}!u5wJvbV z67vY^^Mz1)DbKS?infy>%%;P`V~UzPb7`%PbP(RXrB*MSg&LgiPahdpw>1X zLH!OP_1_|uZorL3^XCB5K2A~!r=8RzZ?5T>__Sto-vsooNfp*=CZ0{QkK$>62v7>9 z{jna=^y4&qPFbDRf*C&{uUwiwA2OF$5AssSMG#GwO1NCOQR`i5`3|1~=sT3RTLP(( z+?bMV&5+RkJqgJxQHu!n!cyq;_x zBuBrs{EIe}ns4^_6!6@J^1vT@T#-lat;L}E9-r}KN6`GR$5*I<+2z&;JYIZT*!=TM z<-+#bz(=!qw?++q{n7_x>Pj&2Kl7Qzz(Nuj$`mWuc{)4~?4VdbMH@zvC&OCMqVilw zX1$J_VGs`a`)f(5=wC$X><{?{6uw1Y3i{7YD0Y$|WcF7*g#x|kZ-V}n;Qd!Cd4ZCf zlx$P-5+x?vmkWATFL{TcZz}l?iE+1*#@u+em$H!3s~MDf6uIQ0S5#=YtDtr<)?|sUqAc23_9htD(K(U>*Ov$8b$v{ zm3%|VKPj0`Etkv`v|7nJC4Z>oi%Nd1WIh3H|M|USu^>xU0U76?fUEnZabwWy$J_j% zaUg8n4L(F+$99C!_I{q3QRa2;@NgB#&)U_ZkB0?%TEK}+hORiW{=uq9PE28|F=wKg3z~2Bt(*_i zI2g|Pq{nB2mp(b?{)y;ECZZplfHvQsLGxdV1|IUbR5kzUsCmfarcIxTX8%D3pQ4CT zzaB>eAdNSs9BD6?;mD&2M;=W$a%hhup>WjW!0-$Q!cz_s``2!<@s6-(|H8BOFPzEm znV?$9?JNz*ALyqQE%6Blq!8XG90pE&!coEACma{-eZooL$v#2i%K8Muvpzu{90F2j zFHfhD3HEXsC5`ulJ^Ps>{C&=T8nD|q?CfU{II*7*;KY8`0(<+}Ch)B7XD`%^KXLYR z7&x(?2Z0m&A>``WPb}Em&j|3NwV!p={Xb_vA569N|0DME-jpM0=l>b|Nqov&Y1f~n z9L$)=fkzVy_Gn_k4((a6(6hGSo_@>IG(H^mR`gXKPgZo{S&J5awidlxD(WqIKX78v zhXi|zJ|fs#^n<{^v_Zv;+U^Il-@nhyy)8`nIL4XdXwjb?s=?vGF#IOyNbDEseK za=(%XmHb#qjv@Cql+07oQL<9WRZ5-OU@2@Z1s3j=3G-&(8(FwF1e`2aYX$poPg{>w|3+wkuoZ9QhoS5tcv{WM&hN>lq2{cQN_!lw2pJ^ZF>Q~Q)2KD|1i zy-I?6Pu2@5QB}2xkl*gdtyYm+^DP;?u(r~CLl)m$9r)cWJ_lEUiX>5J4AS~SFA5dP z5|*qO9!*vZhxS$sq1h-@yUnwXLi^t$1^!eoIV$KYO8!~N_m%XcCjASQT&CplO1RGy z^xMwU%-~rDlFO%(+@Qqz-6_a= zd#j-LDfw3=*2*fZw|}h?t7gf#(9bLRj*=o$u*6LAPSoq`i@cM$52SU2i~o)RCr;*J z;Ka%3g-5bO6nHjHrgZ}vKLmAaL)dx&@LJ%?>!a3M;4#5VBRi!yB>0D6OQ#gafU_qQ zQm=yCu2DWL%Ku8wGfaUq=NX2Jdf;YR8$YQPHQZ?kadYL7v^I1T`ZD~~+K+?-w`N-l zqGoco!b}B~LiCHzS9<)QKdLcPEe?pEBB6TF`Yq5Q(AK7~wF~$eY+#uw z3@d}{6+8a}Uyr#EkIlDc@Jg=QYggr3uCs?tuHEM6eHEQHsEG$WuBD>&%CPy#4Bq@< ze$M?_e0B398FcQdK$Cd z6s3M9+SyT4)cTpIGBpfWjoy5ke$8gfo2gNm%ZAhAHW~AN=@#crYOy`3#m+C&B7P#^ zOUsE`ydcH#MkrK@+f;LvDVY2BjN-Ti`|j2^08a{>70&!Ba0BTz|CNZ%eytynHAq(L zuCVnT;5EQf+J6Jq4`&lpMpLD23tv-eNohBV_9^9-6m|^w(JE{6r0-0IT)C#y(?rA9 zmU@~f+-c&#BCp;TI{p~bG@r9ex_DREtb1H9p`@Fo432I#qYU1^u+;pSXF~M-PcEA0 zJHV*=7ZlC&9nomL=X+SN_k3kkDeL*nd@SHhyp7FE#`_sX#{2bZ^t97vo*GFD=C3jy z@E5mW`g^JeG=Dk>$64=Z){)`I@KgP%_kJU)E$`Qgk>Fae{_~2hS-@k0k=(h!hXh|( z8aU5O84b*+ojapD22JZ_?u_AK;N*;f*8{zvZ9uRO+J*%uXLP^{+Aj3%%N7XQdO@7V z@Mwd$y|g_kh?6+8XL!QT?hLPYK#a;L;OZR^8_r>nokkzj(C#SxN+Ui^f!mq}F2KKn zN&Kf?Gyw-KPL^~UtDQp*$c`W{TT@6I0wT_=jn5AhBl6(eTH{9L;zRtG|pXo~7}eYKjw$`%woY3UpmC z(m!9Z;xZ-IC|RrICMB;>@@ggbDG6~%{TC{Env$0&d7qLWC~0uq-Tw?FKUDG;9OU$W zi^=GJ9H!R)QYGJ2VkZSpZ34Ys$zLd0z!`A=vy|*pV!bVD0lh%UXOt|TN%9O5Gu)>m zzJE(p@Hj(h9d#;r5;#%82F9JJ;2^M9!4ZMKlnTmiwmzGxpzy2;np-`6Uc&^ZOXKkA!Os?Gb(RyWuQVYF5afv8CAqmC#b&Rr~2_8&oW0X|7&uuk0+!H6dnP?V-AU_#7Ub-DAe{9; zzvhc#dj`+oQGck|{B4g9gZDo_YTlW}Usr7YuE)`MEv3zSv-sYn z3@T)_z8E(DB7>{fk7aOro%5#|ygkx9oJH&5ocCt%&Zar<%A(tvZ_l6{jWypg34cQd z?|+?(ootKjW2ZI9Cvn*81pC-&FYvF(Sx>acjFp_xB6~KbiNLNV#@&J6^NRb7vp!4r z?_;MUs%;kXKfJ{L7kz2czm&yMiqCrdZptO`#G-^V-8~!83!&54NYMOe-@wy+1K*y6 ze=CCz^o7j_C*eQz_+>#5w5Nv6?`3eNxLIgZz%S9-Ad6G}lh}%_oc0I)BZH%lu5fbN z|H_$&;~pjdrX*dJw$1|mkdn1*_WCbo-2KnseMSEVmHda2Q7+E)e@=-lO2@G7`EmEp8)RvSYco; zuzsK{RmIkCfS0ENzoXcCHgGKXpww!Mt*Zbx3ap27yTD_>olSEu z2RtBfTWclYVL%;qF9AO4;Y)yz11FYtQn0tQ0S=84OB)vKEo~$4|6P{0SKL2pOFO9A zW@%fHmVV#npDgW`ERLey=<$0fm!(~w!I|=AvRIj=EelUsj)LaPe2u617G63D-<`o_ zYPV0qU*+-3s4r7{Wd@h29rSo&YH!Zsl)pZM%hY}+gP+mV((@qcF9RJ&0(0R+MM&$? z`6RDbk{aUl1)#sK+ZapHCu{?|-9`@*v4=O1`3`xRB%uCErnECTSMB>_X5z zNm@gCBreQvO%q z!yf)V@KIp2y7e&daR)c~J7e}sET)#hWibmpo>sCkkydul=0hxXei(aI%vc0roqowF1v#C)H}v_BOTmiO^oJ z9Z-9fvPIrU1pAYkMcv6f(L+gSom1H;XO=SkJ(^CBH4op}RwJJOloT*=Nslk|yP>$$+kfODnD zE_$B;&VMLA&A( zNx}Z^XoI!Gd&AyvjG4>}z+^bRD_K+2`Dwop>DPCgHuKj(b0q?8uF&3xpSi12dZ*oR zKJ)5*h@@`nwZcRx>O-XDwirzZ^?IQvMd9MT_ZmKFA-NDDTpn=3$m&xkbuoFOL@;@x zOwNPIs!ntL+Y+tONT0zVTeBXA`l$FR#g;y-S__=pTRdefsNCzNcL$TiWOWH=m<7cj@v zNapgT3bU6lwRGt65J^vHYo?xn!lZSpIAD}?=c<}t+&7vz=;KxX9If+ zj0JlO90vZSEl^9I?KxVy6nPy@h*e#P+^DA4R$96YIVN~>wWW)Y2L#VaFHdQ#g}!R< z%1UA@WFyYUUC!ACH8ej`#G``w@FtOzc|dHFU;lSC@47^2Q$9eJa%L`kJjWnZtJh1- zOM&$>n+H#H+web6uNv3{ShM{n6CG+&?2s<6{G}x4D!E9> zWlGkQ7-Mhp?X*5YJ1521m&&dCfEyf`)>jl;9|9f(&iz)@`b*$7f}a>o{5^;N4Twv!Jh5!@Kum;$BhIIme8PA|`WjupW z*+$|S40oRj1+#SMu$vBA4``f!o{SFZ+nf$Oa|DPVb`sQ^m7xE#lES|#`AI^2D`j#p zy|1C9CH3nn&0Qk^{1lPapI+&G9VM;G{Z>9`j*S5EQ$P&CoZlJ|=J3)dds=8(_qj?> zxf3nyEj*U-`ATn95Pr(SlcR;n3y&=u`z7};$zuD@W7)P3NlhaeV4$4lv${b17-Udi zUuizq<5R#ZYtp+yTJQ?9ECL1!-oQT{o7g+#L+ZtE;*MxaGk1<85W>SVhKv0wKg)3O zIBh>>;bQ+HhHtW14-2yL*63;!SY!D}*%Z6M=|Jw4WmD`y;6$-U1UtoED-yrtZ3Fg- zy;tBbqu3I6MzMuv729yH*sS)qhCx2KgDJ^}n_+x*@IKOeFXAo%PyN>LA}2Zl68*c9 z|5Oq#CaIF-rjdM)Cc`Q2bMZyW+>&HAT;>av`B9P*Iv&n&nV(W-aS5lW%ItTU{MpeU z_e_$uGS79HFHq(|l1r7@beZo}<_VI=DRZXF{0VpvjVxs}SCOotD4G?zvKNv8I!6*<~gqQuaHry zVxg8h?sMmoQF<21+eQ0PpZj}cl;1?o9)K{cY~m4AZWU75N*YzRljbV7ljbXTkQOSt zNsE;ila?wkB`q@(a1@2BWJ@Fi9d=22^=_d?o%6TVfO}Hcw z6jpU%JYQVFn&bci3w51$tOZXGnqy~j6vDetq-$*<# zv2W!}>iZGsJ+Jpfz4mpBpZ1kw^un$E=$**U=KNy-NdG-Ng31SkRQ{Bd8YENTy>K%L zP0!$Avl$dG2V7}lC_V?!)UaHW291K&ROBS`lNBbB|G^`0QV$X^U;G;26^_BAYEXFf z6}=kE`)wSmVW6vVy{qwj9KSk)$u5uTm4d_S8|_heHFc1-G(&&nBOlbBM)!`V7rV0m zg3@VCQ9T%#FXjRNST)MUQ9v8nf^?AQrR_v@$_r~rW+NLOUadNS)>yf?Fahhu<$z)# z-zavI+!@7d0e_v`aDWMC+GjYHXRr{$^3h_V4ClJCcS5erFvxcJQF6abZoX_a%yfq3~VnwDtyc%8a9M;&PSNw)7<#o3Jl3Zs|`lHay8P zbVJKk`LWA*f07YIKZS!Rz`GZoK*DG$JnqL1QLANuZVD-02vW{Z?c=d+nu@1>9>@41 zfeiLGyzD@}crU8(*%?+@4L=#5i?w|OMw>9j-$siLK@q)|q%cD60;fF}p-uF6lL9i;EJl;T-9Ypu&-UgGW&Ldm)v7B#kQHBW1N(2tC~XBehd* zr;vFbt_&XFb{g2Q$D(2r>{^fIifyoGI4mfr+QcCgRCi)lRSlH$Rn;uhK~T7u8Gz<~ zG9E8k2gP})!_@+rpNgqQ@h>U8ll2)da}@B`%-;ru_fWblpUNUgg_Tc*HDqFWx0_Q5 z%fLpeF$2Y?(9k1V9^-V<2a(g|=x+2?yoxPL{{etBzr`b{d`E~cc+O>3FvugQTq2}0 zOd3@lPnxT&A@RB2L{YWl3Ns{yIl`^m$0-oV4F*c$<7Qyi9yZv!;{pm{)FsI1bb zxZVp_T2{Ty9wi;f5;E75;|4MecDKi(;^kn6JeDhtfPLIy{NX5&3G5c1mkg#{+>n6v zpr97dL>Ls*!-UeHs%{!^6YT&f>>@d%GYF!)L~}0+na|h%6W-Es?WJV4G>F!U_n?xlw#dLNHW(I-m*RatjK#xe!lF z(!G=fg{w%}9$k^t2#O;KST1Uzus$2bCnmWALG?MnteEX9A4A6U7n2C5wKN)I)qioF zyxev2QXWs!;OIGs6!aE`uQCPIis%C1bdK2XYf+hQ=PcFWoTm1p`5Ci#luMZ+{?9{F zx_lPlFRP^`Q?kgcVA`{pG}rdi3E|O$h6~pG^vLFIC+Te7K$v(A*`@M1*YhYu(=_q@ z#vj8z=dV>3PTS4QyN1VtbG5#I0;)o;QRJ_#{u)7vvVy#oe9cNEji$CBuB5O6b-=Fl z_SA0*dJ4ju8udAkqH~5wO8Ilv@rXie?tF~L#Y9c*n0#|{kn9?lqMbsfqZ{`R6G~WqMM1K#F=tLeeJROXA{`L|Xge zgycyni9T!cTxu5fBqTSdBs)@)e@72Ll#tw=lDsY@(JX&GA$fmFa$idFNx+97IY;jv zOOez6l=9mtrR4jaq_O`>NebumxYqf|kJQ)+l0w-UTR@%{!J?E>f3b5u;gOMCosv8w zCHVm)Hzp*TQj$AT62*J>KyuDrl9FrewJGJ>Qpyr`e1Fo|M^ci%Oi6TgnEy9E*UC3i zl7CD|6!qx;G0nLCSxQo7o%Iu^(C14DNld;U`$Z{3Hg@aV^e(9f~BiPQm zIr)IsLQ%NYR$%jnQ~FOK>tijsMho?`T<9*R>CZ*7t?4vmrFwrcz!X;Jf$M1NO8~9k zBSx61Xn*E9l3+leG=EqWs`E?$6U|+ec>%u)(9gkhnC$XDai*?5{;wCVS|zU zRZ8+VDT&sodP4Hul;q!25^a8`B_w_4_IMcp^t>pr8%#)sQWAZY=t-UgcrzpePX%}~ zK=lbE9NVgVLt14^T1BTX<4LQpNJ)MtCD9SdJ0K~%iNsInedJA=P`SfbCoSo!m>1_a z)0X7j-w3CVa$vOgu^ z|2-_Y=ZU_RLn+CJQj$MIP#=DhC;5Cz@;_4&g@soU9@h z2K0kg2`PzU=LZs!=cFVzq$G-BA4y1FoRW;EBwwPVCtc;){r!~WP)c$U z6L3pHawH}Bd`j{az;Q^pN}i(Rc}i|n zvQ5d$mAs~xyh+dlO04b|1$|e^kCcRKNX}EzYhWJT2ZvcoKevm`(kEeRH!OyoST|P= z09Jq2{ygAez}gL!&I70tifXV6-)Hs>2zd@&m1IE$$q&Nt3R)Q;n9EnvdgHo-m4_8QSya&}0>DQ9SM zmNTJe;Or#K9;I@)Ag<4XjLEI?f076|An^Cv5#SJDZEdCVGl&NBf!*{zYJKv0{=7>i?X<; zV*Z6bN0UX3Ip<~YKK%i8>vWykenB{2oarZBsXjlPufFsXp6xH0`lLU@)gQlDV%krG z;dv&eBWl};=|O=`OeX*nF_q7oAf^~J5z~lZFQ$#aV&d$Ev{y9~IUW__<#@t1X>uGm zf8w|b@c-YD<1p<#rgGd!gW>rm#{+8H$?>p2C�Ji5!m$PSx$CsJyxjTmbClI0Ah3 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

ROkFI`I{d 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 z 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 diff --git a/primitives/src/parachain.rs b/primitives/src/parachain.rs index c304cb1bf0abd..d5a3b77a64d8a 100644 --- a/primitives/src/parachain.rs +++ b/primitives/src/parachain.rs @@ -177,7 +177,7 @@ pub struct Collation { /// Parachain ingress queue message. #[derive(PartialEq, Eq, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Encode, Decode, Debug))] pub struct Message(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec); /// Consolidated ingress queue data. @@ -288,6 +288,9 @@ decl_runtime_apis! { fn parachain_head(id: Id) -> Option>; /// Get the given parachain's head code blob. fn parachain_code(id: Id) -> Option>; + /// Get the ingress roots to a specific parachain at a + /// block. + fn ingress(to: Id) -> Option>; } } diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 8de8ccd90c53f..7814df01fe599 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -28,11 +28,9 @@ extern crate secp256k1; #[cfg(test)] extern crate tiny_keccak; - #[macro_use] extern crate bitvec; -#[macro_use] extern crate parity_codec_derive; extern crate parity_codec as codec; @@ -364,6 +362,9 @@ impl_runtime_apis! { fn parachain_code(id: parachain::Id) -> Option> { Parachains::parachain_code(&id) } + fn ingress(to: parachain::Id) -> Option> { + Parachains::ingress(to) + } } impl fg_primitives::GrandpaApi for Runtime { diff --git a/runtime/src/parachains.rs b/runtime/src/parachains.rs index 8e1b4c11491cd..504109c3b3819 100644 --- a/runtime/src/parachains.rs +++ b/runtime/src/parachains.rs @@ -21,6 +21,7 @@ use codec::Decode; use bitvec::BigEndian; use sr_primitives::traits::{Hash as HashT, BlakeTwo256}; +use primitives::Hash; use primitives::parachain::{Id as ParaId, Chain, DutyRoster, AttestedCandidate, Statement}; use {system, session}; @@ -45,8 +46,10 @@ decl_storage! { pub Parachains get(active_parachains): Vec; // The parachains registered at present. pub Code get(parachain_code): map ParaId => Option>; - // The heads of the parachains registered at present. these are kept sorted. + // The heads of the parachains registered at present. pub Heads get(parachain_head): map ParaId => Option>; + // message routing roots (from, to). + pub Routing: map (ParaId, ParaId) => Option; // Did the parachain heads get updated in this block? DidUpdate: bool; @@ -68,6 +71,7 @@ decl_storage! { for (id, code, genesis) in p { let code_key = Self::hash(&>::key_for(&id)).to_vec(); let head_key = Self::hash(&>::key_for(&id)).to_vec(); + // no ingress -- a chain cannot be routed to until it is live. storage.insert(code_key, code.encode()); storage.insert(head_key, genesis.encode()); @@ -116,6 +120,11 @@ decl_module! { for head in heads { let id = head.parachain_index(); >::insert(id, head.candidate.head_data.0); + + // update egress. + for &(to, root) in &head.candidate.egress_queue_roots { + >::insert((id, to), root); + } } >::put(true); @@ -144,12 +153,20 @@ decl_module! { let mut parachains = Self::active_parachains(); match parachains.binary_search(&id) { Ok(idx) => { parachains.remove(idx); } - Err(_) => {} + Err(_) => return Ok(()), } >::remove(id); >::remove(id); + + // clear all routing entries to and from other parachains. + for other in parachains.iter().cloned() { + >::remove((id, other)); + >::remove((other, id)); + } + >::put(parachains); + Ok(()) } @@ -193,17 +210,17 @@ impl Module { // shuffle for i in 0..(validator_count - 1) { - // 8 bytes of entropy used per cycle, 32 bytes entropy per hash - let offset = (i * 8 % 32) as usize; + // 4 bytes of entropy used per cycle, 32 bytes entropy per hash + let offset = (i * 4 % 32) as usize; // number of roles remaining to select from. let remaining = (validator_count - i) as usize; - // 4 * 2 32-bit ints per 256-bit seed. + // 8 32-bit ints per 256-bit seed. let val_index = u32::decode(&mut &seed[offset..offset + 4]).expect("using 4 bytes for a 32-bit quantity") as usize % remaining; - if offset == 24 { - // into the last 8 bytes - rehash to gather new entropy + if offset == 28 { + // into the last 4 bytes - rehash to gather new entropy seed = BlakeTwo256::hash(seed.as_ref()); } @@ -216,6 +233,21 @@ impl Module { } } + /// Calculate the ingress to a specific parachain. + /// + /// Yields a list of parachains being routed from, and the egress + /// queue roots to consider. + pub fn ingress(to: ParaId) -> Option> { + let active_parachains = Self::active_parachains(); + if !active_parachains.contains(&to) { return None } + + Some(active_parachains.into_iter().filter(|i| i != &to) + .filter_map(move |from| { + >::get((from, to.clone())).map(move |h| (from, h)) + }) + .collect()) + } + // check the attestations on these candidates. The candidates should have been checked // that each candidates' chain ID is valid. fn check_attestations(attested_candidates: &[AttestedCandidate]) -> Result { @@ -687,4 +719,74 @@ mod tests { ).is_err()); }); } + + #[test] + fn ingress_works() { + let parachains = vec![ + (0u32.into(), vec![], vec![]), + (1u32.into(), vec![], vec![]), + (99u32.into(), vec![1, 2, 3], vec![4, 5, 6]), + ]; + + with_externalities(&mut new_test_ext(parachains), || { + system::Module::::set_random_seed([0u8; 32].into()); + let from_a = vec![(1.into(), [1; 32].into())]; + let mut candidate_a = AttestedCandidate { + validity_votes: vec![], + candidate: CandidateReceipt { + parachain_index: 0.into(), + collator: Default::default(), + signature: Default::default(), + head_data: HeadData(vec![1, 2, 3]), + balance_uploads: vec![], + egress_queue_roots: from_a.clone(), + fees: 0, + block_data_hash: Default::default(), + } + }; + + let from_b = vec![(99.into(), [1; 32].into())]; + let mut candidate_b = AttestedCandidate { + validity_votes: vec![], + candidate: CandidateReceipt { + parachain_index: 1.into(), + collator: Default::default(), + signature: Default::default(), + head_data: HeadData(vec![1, 2, 3]), + balance_uploads: vec![], + egress_queue_roots: from_b.clone(), + fees: 0, + block_data_hash: Default::default(), + } + }; + + make_attestations(&mut candidate_a); + make_attestations(&mut candidate_b); + + assert_eq!(Parachains::ingress(ParaId::from(1)), Some(Vec::new())); + assert_eq!(Parachains::ingress(ParaId::from(99)), Some(Vec::new())); + + assert!(Parachains::dispatch( + Call::set_heads(vec![candidate_a, candidate_b]), + Origin::INHERENT, + ).is_ok()); + + assert_eq!( + Parachains::ingress(ParaId::from(1)), + Some(vec![(0.into(), [1; 32].into())]), + ); + + assert_eq!( + Parachains::ingress(ParaId::from(99)), + Some(vec![(1.into(), [1; 32].into())]), + ); + + assert_ok!(Parachains::deregister_parachain(1u32.into())); + + // after deregistering, there is no ingress to 1 and we stop routing + // from 1. + assert_eq!(Parachains::ingress(ParaId::from(1)), None); + assert_eq!(Parachains::ingress(ParaId::from(99)), Some(Vec::new())); + }); + } } diff --git a/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm b/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm index c32a6f7bffa359e855e2f79e8a727965c88e9ae6..264f40f64498637fba8989f1aa75b71e4b694e1b 100644 GIT binary patch delta 109818 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 s!giGW$ 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 delta 106118 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

    INrlyqSPiNpif0kZ)pzJ9&xIk8JdJO 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

    8u@Kdt6Hy?keA#Nby_uVO^ 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 bOWfREugULkuUF^yd}dA+=s?#i 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≠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 diff --git a/service/src/lib.rs b/service/src/lib.rs index 539e21f3f837d..5e88853891339 100644 --- a/service/src/lib.rs +++ b/service/src/lib.rs @@ -216,6 +216,7 @@ construct_service_factory! { service.network(), service.on_exit(), service.client(), + executor.clone(), ); let proposer_factory = ::consensus::ProposerFactory::new( client.clone(), diff --git a/test-parachains/adder/collator/src/main.rs b/test-parachains/adder/collator/src/main.rs index 2ee3e6a6dc263..364cfa4cbee56 100644 --- a/test-parachains/adder/collator/src/main.rs +++ b/test-parachains/adder/collator/src/main.rs @@ -58,7 +58,7 @@ impl ParachainContext for AdderContext { fn produce_candidate>( &self, last_head: HeadData, - _ingress: I, + ingress: I, ) -> Result<(BlockData, HeadData), InvalidHead> { let adder_head = AdderHead::decode(&mut &last_head.0[..]) @@ -79,7 +79,11 @@ impl ParachainContext for AdderContext { add: adder_head.number % 100, }; - let next_head = ::adder::execute(adder_head.hash(), adder_head, &next_body) + let from_messages = ::adder::process_messages( + ingress.into_iter().map(|(_, msg)| msg.0) + ); + + let next_head = ::adder::execute(adder_head.hash(), adder_head, &next_body, from_messages) .expect("good execution params; qed"); let encoded_head = HeadData(next_head.encode()); diff --git a/test-parachains/adder/src/lib.rs b/test-parachains/adder/src/lib.rs index bc2e2ca02933d..2340f51a94da0 100644 --- a/test-parachains/adder/src/lib.rs +++ b/test-parachains/adder/src/lib.rs @@ -24,7 +24,7 @@ extern crate parity_codec; extern crate polkadot_parachain as parachain; extern crate tiny_keccak; -use parity_codec::Encode; +use parity_codec::{Encode, Decode}; /// Head data for this parachain. #[derive(Default, Clone, Hash, Eq, PartialEq, Encode, Decode)] @@ -56,13 +56,35 @@ pub fn hash_state(state: u64) -> [u8; 32] { ::tiny_keccak::keccak256(state.encode().as_slice()) } +#[derive(Default, Encode, Decode)] +pub struct AddMessage { + /// The amount to add based on this message. + pub amount: u64, +} + /// Start state mismatched with parent header's state hash. #[derive(Debug)] pub struct StateMismatch; +/// Process all incoming messages, yielding the amount of addition from messages. +/// +/// Ignores unknown message kinds. +pub fn process_messages(iterable: I) -> u64 + where I: IntoIterator, T: AsRef<[u8]> +{ + iterable.into_iter() + .filter_map(|data| AddMessage::decode(&mut data.as_ref())) + .fold(0u64, |a, c| a.overflowing_add(c.amount).0) +} + /// Execute a block body on top of given parent head, producing new parent head /// if valid. -pub fn execute(parent_hash: [u8; 32], parent_head: HeadData, block_data: &BlockData) -> Result { +pub fn execute( + parent_hash: [u8; 32], + parent_head: HeadData, + block_data: &BlockData, + from_messages: u64, +) -> Result { debug_assert_eq!(parent_hash, parent_head.hash()); if hash_state(block_data.state) != parent_head.post_state { @@ -70,6 +92,7 @@ pub fn execute(parent_hash: [u8; 32], parent_head: HeadData, block_data: &BlockD } let new_state = block_data.state.overflowing_add(block_data.add).0; + let new_state = new_state.overflowing_add(from_messages).0; Ok(HeadData { number: parent_head.number + 1, diff --git a/test-parachains/adder/wasm/Cargo.toml b/test-parachains/adder/wasm/Cargo.toml index 55e96b6b66565..d450d06302907 100644 --- a/test-parachains/adder/wasm/Cargo.toml +++ b/test-parachains/adder/wasm/Cargo.toml @@ -6,9 +6,8 @@ authors = ["Parity Technologies "] [dependencies] adder = { path = ".." } polkadot-parachain = { path = "../../../parachain", default-features = false, features = ["wasm-api"] } -wee_alloc = { version = "0.4.1" } -pwasm-libc = { version = "0.2" } tiny-keccak = "1.4" +dlmalloc = { version = "0.1.2", features = ["global"] } [lib] crate-type = ["cdylib"] diff --git a/test-parachains/adder/wasm/src/lib.rs b/test-parachains/adder/wasm/src/lib.rs index 3a687a748afe7..87db11c6f0a6c 100644 --- a/test-parachains/adder/wasm/src/lib.rs +++ b/test-parachains/adder/wasm/src/lib.rs @@ -23,13 +23,13 @@ )] extern crate alloc; -extern crate pwasm_libc; extern crate adder; extern crate polkadot_parachain as parachain; extern crate tiny_keccak; +extern crate dlmalloc; #[global_allocator] -static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; +static ALLOC: dlmalloc::GlobalDlmalloc = dlmalloc::GlobalDlmalloc; use core::{intrinsics, panic}; use parachain::ValidationResult; @@ -63,7 +63,13 @@ pub extern fn validate(offset: usize, len: usize) -> usize { let parent_hash = ::tiny_keccak::keccak256(¶ms.parent_head[..]); - match ::adder::execute(parent_hash, parent_head, &block_data) { + // we also add based on incoming data from messages. ignoring unknown message + // kinds. + let from_messages = ::adder::process_messages( + params.ingress.iter().map(|incoming| &incoming.data[..]) + ); + + match ::adder::execute(parent_hash, parent_head, &block_data, from_messages) { Ok(new_head) => parachain::wasm_api::write_result( ValidationResult { head_data: new_head.encode() } ), diff --git a/test-parachains/build.sh b/test-parachains/build.sh index d7dced137993b..06183fa2e5d8d 100755 --- a/test-parachains/build.sh +++ b/test-parachains/build.sh @@ -2,7 +2,7 @@ set -e # Make LLD produce a binary that imports memory from the outside environment. -export RUSTFLAGS="-C link-arg=--import-memory,--export-table -C lto=fat -C panic=abort" +export RUSTFLAGS="-C link-arg=--import-memory -C link-arg=--export-table -C panic=abort" for i in adder do