From c473c0c73472963b91cfd0b510f8003be8e3c9b7 Mon Sep 17 00:00:00 2001 From: Robert Habermeier <rphmeier@gmail.com> Date: Fri, 25 May 2018 16:16:01 +0200 Subject: [PATCH] Minimal parachain framework part 1 (#113) * dynamic inclusion threshold calculator * collators interface * collation helpers * initial proposal-creation future * create proposer when asked to propose * remove local_availability duty * statement table tracks includable parachain count * beginnings of timing future * finish proposal logic * remove stray println * extract shared table to separate module * change ordering * includability tracking * fix doc * initial changes to parachains module * initialise dummy block before API calls * give polkadot control over round proposer based on random seed * propose only after enough candidates * flesh out parachains module a bit more * set_heads * actually introduce set_heads to runtime * update block_builder to accept parachains * split block validity errors from real errors in evaluation * update WASM runtimes * polkadot-api methods for parachains additions * delay evaluation until candidates are ready * comments * fix dynamic inclusion with zero initial * test for includability tracker * wasm validation of parachain candidates * move primitives to primitives crate * remove runtime-std dependency from codec * adjust doc * polkadot-parachain-primitives * kill legacy polkadot-validator crate * basic-add test chain * test for basic_add parachain * move to test-chains dir * use wasm-build * new wasm directory layout * reorganize a bit more * Fix for rh-minimal-parachain (#141) * Remove extern "C" We already encountered such behavior (bug?) in pwasm-std, I believe. * Fix `panic_fmt` signature by adding `_col` Wrong `panic_fmt` signature can inhibit some optimizations in LTO mode. * Add linker flags and use wasm-gc in build script Pass --import-memory to LLD to emit wasm binary with imported memory. Also use wasm-gc instead of wasm-build. * Fix effective_max. I'm not sure why it was the way it was actually. * Recompile wasm. * Fix indent * more basic_add tests * validate parachain WASM * produce statements on receiving statements * tests for reactive statement production * fix build * add OOM lang item to runtime-io * use dynamic_inclusion when evaluating as well * fix update_includable_count * remove dead code * grumbles * actually defer round_proposer logic * update wasm * address a few more grumbles * grumbles * update WASM checkins * remove dependency on tokio-timer --- polkadot/api/Cargo.toml | 1 - polkadot/api/src/lib.rs | 58 +- polkadot/collator/Cargo.toml | 4 +- polkadot/collator/src/lib.rs | 8 +- polkadot/consensus/Cargo.toml | 1 + polkadot/consensus/src/collation.rs | 176 ++++ polkadot/consensus/src/dynamic_inclusion.rs | 130 +++ polkadot/consensus/src/error.rs | 37 +- polkadot/consensus/src/evaluation.rs | 135 +++ polkadot/consensus/src/lib.rs | 816 +++++++++--------- polkadot/consensus/src/service.rs | 55 +- .../consensus/src/shared_table/includable.rs | 137 +++ polkadot/consensus/src/shared_table/mod.rs | 566 ++++++++++++ polkadot/parachain/Cargo.toml | 17 + polkadot/parachain/src/lib.rs | 146 ++++ polkadot/parachain/src/wasm.rs | 166 ++++ polkadot/parachain/test-chains/.gitignore | 2 + .../test-chains/basic_add/Cargo.toml | 25 + .../test-chains/basic_add/src/lib.rs | 143 +++ .../parachain/test-chains/basic_add/src/src | 1 + .../test-chains/basic_add/src/wasm.rs | 58 ++ .../test-chains/build_test_chains.sh | 14 + polkadot/parachain/tests/basic_add.rs | 170 ++++ polkadot/parachain/tests/res/basic_add.wasm | Bin 0 -> 44941 bytes polkadot/primitives/src/lib.rs | 1 - polkadot/primitives/src/parachain.rs | 9 +- polkadot/primitives/src/validator.rs | 76 -- polkadot/runtime/Cargo.toml | 4 +- polkadot/runtime/src/lib.rs | 28 +- polkadot/runtime/src/parachains.rs | 209 ++++- polkadot/runtime/wasm/Cargo.lock | 3 - .../release/polkadot_runtime.compact.wasm | Bin 417199 -> 429539 bytes .../release/polkadot_runtime.wasm | Bin 461195 -> 475147 bytes polkadot/service/src/lib.rs | 8 +- polkadot/statement-table/src/generic.rs | 121 ++- polkadot/transaction-pool/src/lib.rs | 27 +- polkadot/validator/Cargo.toml | 11 - polkadot/validator/src/error.rs | 33 - polkadot/validator/src/lib.rs | 34 - polkadot/validator/src/parachains.rs | 68 -- polkadot/validator/src/validator.rs | 101 --- 41 files changed, 2748 insertions(+), 851 deletions(-) create mode 100644 polkadot/consensus/src/collation.rs create mode 100644 polkadot/consensus/src/dynamic_inclusion.rs create mode 100644 polkadot/consensus/src/evaluation.rs create mode 100644 polkadot/consensus/src/shared_table/includable.rs create mode 100644 polkadot/consensus/src/shared_table/mod.rs create mode 100644 polkadot/parachain/Cargo.toml create mode 100644 polkadot/parachain/src/lib.rs create mode 100644 polkadot/parachain/src/wasm.rs create mode 100644 polkadot/parachain/test-chains/.gitignore create mode 100644 polkadot/parachain/test-chains/basic_add/Cargo.toml create mode 100644 polkadot/parachain/test-chains/basic_add/src/lib.rs create mode 120000 polkadot/parachain/test-chains/basic_add/src/src create mode 100644 polkadot/parachain/test-chains/basic_add/src/wasm.rs create mode 100755 polkadot/parachain/test-chains/build_test_chains.sh create mode 100644 polkadot/parachain/tests/basic_add.rs create mode 100755 polkadot/parachain/tests/res/basic_add.wasm delete mode 100644 polkadot/primitives/src/validator.rs delete mode 100644 polkadot/validator/Cargo.toml delete mode 100644 polkadot/validator/src/error.rs delete mode 100644 polkadot/validator/src/lib.rs delete mode 100644 polkadot/validator/src/parachains.rs delete mode 100644 polkadot/validator/src/validator.rs diff --git a/polkadot/api/Cargo.toml b/polkadot/api/Cargo.toml index cb2204d69e9..860536ac959 100644 --- a/polkadot/api/Cargo.toml +++ b/polkadot/api/Cargo.toml @@ -5,7 +5,6 @@ authors = ["Parity Technologies <admin@parity.io>"] [dependencies] error-chain = "0.11" -log = "0.3" polkadot-executor = { path = "../executor" } polkadot-runtime = { path = "../runtime" } polkadot-primitives = { path = "../primitives" } diff --git a/polkadot/api/src/lib.rs b/polkadot/api/src/lib.rs index a0527854239..fd24f52766e 100644 --- a/polkadot/api/src/lib.rs +++ b/polkadot/api/src/lib.rs @@ -40,8 +40,8 @@ use polkadot_executor::Executor as LocalDispatch; use substrate_executor::{NativeExecutionDispatch, NativeExecutor}; use state_machine::OverlayedChanges; use primitives::{AccountId, BlockId, Hash, Index, SessionKey, Timestamp}; -use primitives::parachain::DutyRoster; -use runtime::{Block, Header, UncheckedExtrinsic, Extrinsic, Call, TimestampCall}; +use primitives::parachain::{DutyRoster, CandidateReceipt, Id as ParaId}; +use runtime::{Block, Header, UncheckedExtrinsic, Extrinsic, Call, TimestampCall, ParachainsCall}; error_chain! { errors { @@ -135,12 +135,21 @@ pub trait PolkadotApi { /// Get the index of an account at a block. fn index(&self, at: &Self::CheckedBlockId, account: AccountId) -> Result<Index>; + /// Get the active parachains at a block. + fn active_parachains(&self, at: &Self::CheckedBlockId) -> Result<Vec<ParaId>>; - /// Evaluate a block and see if it gives an error. - fn evaluate_block(&self, at: &Self::CheckedBlockId, block: Block) -> Result<()>; + /// Get the validation code of a parachain at a block. If the parachain is active, this will always return `Some`. + fn parachain_code(&self, at: &Self::CheckedBlockId, parachain: ParaId) -> Result<Option<Vec<u8>>>; + + /// Get the chain head of a parachain. If the parachain is active, this will always return `Some`. + fn parachain_head(&self, at: &Self::CheckedBlockId, parachain: ParaId) -> Result<Option<Vec<u8>>>; + + /// Evaluate a block. Returns true if the block is good, false if it is known to be bad, + /// and an error if we can't evaluate for some reason. + fn evaluate_block(&self, at: &Self::CheckedBlockId, block: Block) -> Result<bool>; /// Create a block builder on top of the parent block. - fn build_block(&self, parent: &Self::CheckedBlockId, timestamp: Timestamp) -> Result<Self::BlockBuilder>; + fn build_block(&self, parent: &Self::CheckedBlockId, timestamp: Timestamp, parachains: Vec<CandidateReceipt>) -> Result<Self::BlockBuilder>; } /// A checked block ID used for the substrate-client implementation of CheckedBlockId; @@ -213,15 +222,36 @@ impl<B: Backend> PolkadotApi for Client<B, NativeExecutor<LocalDispatch>> with_runtime!(self, at, ::runtime::Timestamp::now) } - fn evaluate_block(&self, at: &CheckedId, block: Block) -> Result<()> { - with_runtime!(self, at, || ::runtime::Executive::execute_block(block)) + fn evaluate_block(&self, at: &CheckedId, block: Block) -> Result<bool> { + use substrate_executor::error::ErrorKind as ExecErrorKind; + + let res = with_runtime!(self, at, || ::runtime::Executive::execute_block(block)); + match res { + Ok(()) => Ok(true), + Err(err) => match err.kind() { + &ErrorKind::Executor(ExecErrorKind::Runtime) => Ok(false), + _ => Err(err) + } + } } fn index(&self, at: &CheckedId, account: AccountId) -> Result<Index> { with_runtime!(self, at, || ::runtime::System::account_index(account)) } - fn build_block(&self, parent: &CheckedId, timestamp: Timestamp) -> Result<Self::BlockBuilder> { + fn active_parachains(&self, at: &CheckedId) -> Result<Vec<ParaId>> { + with_runtime!(self, at, ::runtime::Parachains::active_parachains) + } + + fn parachain_code(&self, at: &CheckedId, parachain: ParaId) -> Result<Option<Vec<u8>>> { + with_runtime!(self, at, || ::runtime::Parachains::parachain_code(parachain)) + } + + fn parachain_head(&self, at: &CheckedId, parachain: ParaId) -> Result<Option<Vec<u8>>> { + with_runtime!(self, at, || ::runtime::Parachains::parachain_head(parachain)) + } + + fn build_block(&self, parent: &CheckedId, timestamp: Timestamp, parachains: Vec<CandidateReceipt>) -> Result<Self::BlockBuilder> { let parent = parent.block_id(); let header = Header { parent_hash: self.block_hash_from_id(parent)?.ok_or(ErrorKind::UnknownBlock(*parent))?, @@ -239,6 +269,14 @@ impl<B: Backend> PolkadotApi for Client<B, NativeExecutor<LocalDispatch>> function: Call::Timestamp(TimestampCall::set(timestamp)), }, signature: Default::default(), + }, + UncheckedExtrinsic { + extrinsic: Extrinsic { + signed: Default::default(), + index: Default::default(), + function: Call::Parachains(ParachainsCall::set_heads(parachains)), + }, + signature: Default::default(), } ]; @@ -275,7 +313,7 @@ pub struct ClientBlockBuilder<S> { impl<S: state_machine::Backend> ClientBlockBuilder<S> where S::Error: Into<client::error::Error> { - // initialises a block ready to allow extrinsics to be applied. + // initialises a block, ready to allow extrinsics to be applied. fn initialise_block(&mut self) -> Result<()> { let result = { let mut ext = state_machine::Ext::new(&mut self.changes, &self.state); @@ -406,7 +444,7 @@ mod tests { let client = client(); let id = client.check_id(BlockId::Number(0)).unwrap(); - let block_builder = client.build_block(&id, 1_000_000).unwrap(); + let block_builder = client.build_block(&id, 1_000_000, Vec::new()).unwrap(); let block = block_builder.bake(); assert_eq!(block.header.number, 1); diff --git a/polkadot/collator/Cargo.toml b/polkadot/collator/Cargo.toml index 6f1fa163022..42fc14c666c 100644 --- a/polkadot/collator/Cargo.toml +++ b/polkadot/collator/Cargo.toml @@ -1,10 +1,12 @@ [package] name = "polkadot-collator" version = "0.1.0" -authors = ["Parity Technologies <rphmeier@gmail.com>"] +authors = ["Parity Technologies <admin@parity.io>"] description = "Abstract collation logic" [dependencies] futures = "0.1.17" +substrate-codec = { path = "../../substrate/codec", version = "0.1" } substrate-primitives = { path = "../../substrate/primitives", version = "0.1" } polkadot-primitives = { path = "../primitives", version = "0.1" } +polkadot-parachain = { path = "../parachain", version = "0.1" } diff --git a/polkadot/collator/src/lib.rs b/polkadot/collator/src/lib.rs index 14b430ebbad..967a8e6de6f 100644 --- a/polkadot/collator/src/lib.rs +++ b/polkadot/collator/src/lib.rs @@ -45,6 +45,7 @@ //! to be performed, as the collation logic itself. extern crate futures; +extern crate substrate_codec as codec; extern crate substrate_primitives as primitives; extern crate polkadot_primitives; @@ -82,7 +83,6 @@ pub trait RelayChainContext { } /// Collate the necessary ingress queue using the given context. -// TODO: impl trait pub fn collate_ingress<'a, R>(relay_context: R) -> Box<Future<Item=ConsolidatedIngress, Error=R::Error> + 'a> where @@ -105,7 +105,7 @@ pub fn collate_ingress<'a, R>(relay_context: R) // and then by the parachain ID. // // then transform that into the consolidated egress queue. - let future = stream::futures_unordered(egress_fetch) + Box::new(stream::futures_unordered(egress_fetch) .fold(BTreeMap::new(), |mut map, (routing_id, egresses)| { for (depth, egress) in egresses.into_iter().rev().enumerate() { let depth = -(depth as i64); @@ -116,9 +116,7 @@ pub fn collate_ingress<'a, R>(relay_context: R) }) .map(|ordered| ordered.into_iter().map(|((_, id), egress)| (id, egress))) .map(|i| i.collect::<Vec<_>>()) - .map(ConsolidatedIngress); - - Box::new(future) + .map(ConsolidatedIngress)) } /// Produce a candidate for the parachain. diff --git a/polkadot/consensus/Cargo.toml b/polkadot/consensus/Cargo.toml index 29d55888651..5be758a91bd 100644 --- a/polkadot/consensus/Cargo.toml +++ b/polkadot/consensus/Cargo.toml @@ -13,6 +13,7 @@ log = "0.3" exit-future = "0.1" polkadot-api = { path = "../api" } polkadot-collator = { path = "../collator" } +polkadot-parachain = { path = "../parachain" } polkadot-primitives = { path = "../primitives" } polkadot-runtime = { path = "../runtime" } polkadot-statement-table = { path = "../statement-table" } diff --git a/polkadot/consensus/src/collation.rs b/polkadot/consensus/src/collation.rs new file mode 100644 index 00000000000..3738ae90041 --- /dev/null +++ b/polkadot/consensus/src/collation.rs @@ -0,0 +1,176 @@ +// Copyright 2017 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 <http://www.gnu.org/licenses/>. + +//! Validator-side view of collation. +//! +//! This module contains type definitions, a trait for a batch of collators, and a trait for +//! attempting to fetch a collation repeatedly until a valid one is obtained. + +use std::sync::Arc; + +use polkadot_api::PolkadotApi; +use polkadot_primitives::{Hash, AccountId}; +use polkadot_primitives::parachain::{Id as ParaId, Chain, BlockData, Extrinsic, CandidateReceipt}; + +use futures::prelude::*; + +/// A full collation. +pub struct Collation { + /// Block data. + pub block_data: BlockData, + /// The candidate receipt itself. + pub receipt: CandidateReceipt, +} + +/// Encapsulates connections to collators and allows collation on any parachain. +/// +/// This is expected to be a lightweight, shared type like an `Arc`. +pub trait Collators: Clone { + /// Errors when producing collations. + type Error; + /// A full collation. + type Collation: IntoFuture<Item=Collation,Error=Self::Error>; + + /// Collate on a specific parachain, building on a given relay chain parent hash. + fn collate(&self, parachain: ParaId, relay_parent: Hash) -> Self::Collation; + + /// Note a bad collator. TODO: take proof + fn note_bad_collator(&self, collator: AccountId); +} + +/// A future which resolves when a collation is available. +/// +/// This future is fused. +pub struct CollationFetch<C: Collators, P: PolkadotApi> { + parachain: Option<ParaId>, + relay_parent_hash: Hash, + relay_parent: P::CheckedBlockId, + collators: C, + live_fetch: Option<<C::Collation as IntoFuture>::Future>, + client: Arc<P>, +} + +impl<C: Collators, P: PolkadotApi> CollationFetch<C, P> { + /// Create a new collation fetcher for the given chain. + pub fn new(parachain: Chain, relay_parent: P::CheckedBlockId, relay_parent_hash: Hash, collators: C, client: Arc<P>) -> Self { + CollationFetch { + relay_parent_hash, + relay_parent, + collators, + client, + parachain: match parachain { + Chain::Parachain(id) => Some(id), + Chain::Relay => None, + }, + live_fetch: None, + } + } +} + +impl<C: Collators, P: PolkadotApi> Future for CollationFetch<C, P> { + type Item = (Collation, Extrinsic); + type Error = C::Error; + + fn poll(&mut self) -> Poll<(Collation, Extrinsic), C::Error> { + let parachain = match self.parachain.as_ref() { + Some(p) => p.clone(), + None => return Ok(Async::NotReady), + }; + + loop { + let x = { + let (r, c) = (self.relay_parent_hash, &self.collators); + let poll = self.live_fetch + .get_or_insert_with(move || c.collate(parachain, r).into_future()) + .poll(); + + if let Err(_) = poll { self.parachain = None } + try_ready!(poll) + }; + + match validate_collation(&*self.client, &self.relay_parent, &x) { + Ok(()) => { + self.parachain = None; + + // TODO: generate extrinsic while verifying. + return Ok(Async::Ready((x, Extrinsic))); + } + Err(e) => { + debug!("Failed to validate parachain due to API error: {}", e); + + // just continue if we got a bad collation or failed to validate + self.live_fetch = None; + self.collators.note_bad_collator(x.receipt.collator) + } + } + } + } +} + +// Errors that can occur when validating a parachain. +error_chain! { + types { Error, ErrorKind, ResultExt; } + + errors { + InactiveParachain(id: ParaId) { + description("Collated for inactive parachain"), + display("Collated for inactive parachain: {:?}", id), + } + ValidationFailure { + description("Parachain candidate failed validation."), + display("Parachain candidate failed validation."), + } + WrongHeadData(expected: Vec<u8>, got: Vec<u8>) { + description("Parachain validation produced wrong head data."), + display("Parachain validation produced wrong head data (expected: {:?}, got {:?}", expected, got), + } + } + + links { + PolkadotApi(::polkadot_api::Error, ::polkadot_api::ErrorKind); + } +} + +/// Check whether a given collation is valid. Returns `Ok` on success, error otherwise. +pub fn validate_collation<P: PolkadotApi>(client: &P, relay_parent: &P::CheckedBlockId, collation: &Collation) -> Result<(), Error> { + use parachain::{self, ValidationParams}; + + let para_id = collation.receipt.parachain_index; + let validation_code = client.parachain_code(relay_parent, para_id)? + .ok_or_else(|| ErrorKind::InactiveParachain(para_id))?; + + let chain_head = client.parachain_head(relay_parent, para_id)? + .ok_or_else(|| ErrorKind::InactiveParachain(para_id))?; + + let params = ValidationParams { + parent_head: chain_head, + block_data: collation.block_data.0.clone(), + }; + + match parachain::wasm::validate_candidate(&validation_code, params) { + Ok(result) => { + if result.head_data == collation.receipt.head_data.0 { + Ok(()) + } else { + Err(ErrorKind::WrongHeadData( + collation.receipt.head_data.0.clone(), + result.head_data + ).into()) + } + } + Err(_) => Err(ErrorKind::ValidationFailure.into()) + } +} diff --git a/polkadot/consensus/src/dynamic_inclusion.rs b/polkadot/consensus/src/dynamic_inclusion.rs new file mode 100644 index 00000000000..d48e4862745 --- /dev/null +++ b/polkadot/consensus/src/dynamic_inclusion.rs @@ -0,0 +1,130 @@ +// Copyright 2017 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 <http://www.gnu.org/licenses/>. + +//! Dynamic inclusion threshold over time. + +use std::time::{Duration, Instant}; + +fn duration_to_micros(duration: &Duration) -> u64 { + duration.as_secs() * 1_000_000 + (duration.subsec_nanos() / 1000) as u64 +} + +/// Dynamic inclusion threshold over time. +/// +/// The acceptable proportion of parachains which must have parachain candidates +/// reduces over time (eventually going to zero). +#[derive(Debug, Clone)] +pub struct DynamicInclusion { + start: Instant, + y: u64, + m: u64, +} + +impl DynamicInclusion { + /// Constructs a new dynamic inclusion threshold calculator based on the time now, + /// how many parachain candidates are required at the beginning, and when an empty + /// block will be allowed. + pub fn new(initial: usize, start: Instant, allow_empty: Duration) -> Self { + // linear function f(n_candidates) -> valid after microseconds + // f(0) = allow_empty + // f(initial) = 0 + // m is actually the negative slope to avoid using signed arithmetic. + let (y, m) = if initial != 0 { + let y = duration_to_micros(&allow_empty); + + (y, y / initial as u64) + } else { + (0, 0) + }; + + DynamicInclusion { + start, + y, + m, + } + } + + /// Returns the duration from `now` after which the amount of included parachain candidates + /// would be enough, or `None` if it is sufficient now. + /// + /// Panics if `now` is earlier than the `start`. + pub fn acceptable_in(&self, now: Instant, included: usize) -> Option<Duration> { + let elapsed = now.duration_since(self.start); + let elapsed = duration_to_micros(&elapsed); + + let valid_after = self.y.saturating_sub(self.m * included as u64); + + if elapsed >= valid_after { + None + } else { + Some(Duration::from_millis((valid_after - elapsed) as u64 / 1000)) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn full_immediately_allowed() { + let now = Instant::now(); + + let dynamic = DynamicInclusion::new( + 10, + now, + Duration::from_millis(4000), + ); + + assert!(dynamic.acceptable_in(now, 10).is_none()); + assert!(dynamic.acceptable_in(now, 11).is_none()); + assert!(dynamic.acceptable_in(now + Duration::from_millis(2000), 10).is_none()); + } + + #[test] + fn half_allowed_halfway() { + let now = Instant::now(); + + let dynamic = DynamicInclusion::new( + 10, + now, + Duration::from_millis(4000), + ); + + assert_eq!(dynamic.acceptable_in(now, 5), Some(Duration::from_millis(2000))); + assert!(dynamic.acceptable_in(now + Duration::from_millis(2000), 5).is_none()); + assert!(dynamic.acceptable_in(now + Duration::from_millis(3000), 5).is_none()); + assert!(dynamic.acceptable_in(now + Duration::from_millis(4000), 5).is_none()); + } + + #[test] + fn zero_initial_is_flat() { + let now = Instant::now(); + + let dynamic = DynamicInclusion::new( + 0, + now, + Duration::from_secs(10_000), + ); + + for i in 0..10_001 { + let now = now + Duration::from_secs(i); + assert!(dynamic.acceptable_in(now, 0).is_none()); + assert!(dynamic.acceptable_in(now, 1).is_none()); + assert!(dynamic.acceptable_in(now, 10).is_none()); + } + } +} diff --git a/polkadot/consensus/src/error.rs b/polkadot/consensus/src/error.rs index e2a4b3a4831..ebc998ab69e 100644 --- a/polkadot/consensus/src/error.rs +++ b/polkadot/consensus/src/error.rs @@ -16,45 +16,30 @@ //! Errors that can occur during the consensus process. -use primitives::block::{HeaderHash, Number}; +use polkadot_primitives::AccountId; + error_chain! { links { PolkadotApi(::polkadot_api::Error, ::polkadot_api::ErrorKind); Bft(::bft::Error, ::bft::ErrorKind); } - foreign_links { - Io(::std::io::Error); - SharedIo(::futures::future::SharedError<::std::io::Error>); - } - errors { InvalidDutyRosterLength(expected: usize, got: usize) { description("Duty Roster had invalid length"), display("Invalid duty roster length: expected {}, got {}", expected, got), } - ProposalNotForPolkadot { - description("Proposal provided not a Polkadot block."), - display("Proposal provided not a Polkadot block."), - } - TimestampInFuture { - description("Proposal had timestamp too far in the future."), - display("Proposal had timestamp too far in the future."), - } - WrongParentHash(expected: HeaderHash, got: HeaderHash) { - description("Proposal had wrong parent hash."), - display("Proposal had wrong parent hash. Expected {:?}, got {:?}", expected, got), + NotValidator(id: AccountId) { + description("Local account ID not a validator at this block."), + display("Local account ID ({:?}) not a validator at this block.", id), } - WrongNumber(expected: Number, got: Number) { - description("Proposal had wrong number."), - display("Proposal had wrong number. Expected {:?}, got {:?}", expected, got), + PrematureDestruction { + description("Proposer destroyed before finishing proposing or evaluating"), + display("Proposer destroyed before finishing proposing or evaluating"), } - ProposalTooLarge(size: usize) { - description("Proposal exceeded the maximum size."), - display( - "Proposal exceeded the maximum size of {} by {} bytes.", - ::MAX_TRANSACTIONS_SIZE, ::MAX_TRANSACTIONS_SIZE.saturating_sub(*size) - ), + Timer(e: String) { + description("Failed to register or resolve async timer."), + display("Timer failed: {}", e), } Executor(e: ::futures::future::ExecuteErrorKind) { description("Unable to dispatch agreement future"), diff --git a/polkadot/consensus/src/evaluation.rs b/polkadot/consensus/src/evaluation.rs new file mode 100644 index 00000000000..b5ef81d2446 --- /dev/null +++ b/polkadot/consensus/src/evaluation.rs @@ -0,0 +1,135 @@ +// Copyright 2017 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 <http://www.gnu.org/licenses/>. + +//! Polkadot block evaluation and evaluation errors. + +use super::MAX_TRANSACTIONS_SIZE; + +use codec::Slicable; +use polkadot_runtime::Block as PolkadotGenericBlock; +use polkadot_primitives::Timestamp; +use polkadot_primitives::parachain::Id as ParaId; +use primitives::block::{Block as SubstrateBlock, HeaderHash, Number as BlockNumber}; +use transaction_pool::PolkadotBlock; + +error_chain! { + links { + PolkadotApi(::polkadot_api::Error, ::polkadot_api::ErrorKind); + } + + errors { + ProposalNotForPolkadot { + description("Proposal provided not a Polkadot block."), + display("Proposal provided not a Polkadot block."), + } + TimestampInFuture { + description("Proposal had timestamp too far in the future."), + display("Proposal had timestamp too far in the future."), + } + TooManyCandidates(expected: usize, got: usize) { + description("Proposal included more candidates than is possible."), + display("Proposal included {} candidates for {} parachains", got, expected), + } + ParachainOutOfOrder { + description("Proposal included parachains out of order."), + display("Proposal included parachains out of order."), + } + UnknownParachain(id: ParaId) { + description("Proposal included unregistered parachain."), + display("Proposal included unregistered parachain {:?}", id), + } + WrongParentHash(expected: HeaderHash, got: HeaderHash) { + description("Proposal had wrong parent hash."), + display("Proposal had wrong parent hash. Expected {:?}, got {:?}", expected, got), + } + WrongNumber(expected: BlockNumber, got: BlockNumber) { + description("Proposal had wrong number."), + display("Proposal had wrong number. Expected {:?}, got {:?}", expected, got), + } + ProposalTooLarge(size: usize) { + description("Proposal exceeded the maximum size."), + display( + "Proposal exceeded the maximum size of {} by {} bytes.", + MAX_TRANSACTIONS_SIZE, MAX_TRANSACTIONS_SIZE.saturating_sub(*size) + ), + } + } +} + +/// Attempt to evaluate a substrate block as a polkadot block, returning error +/// upon any initial validity checks failing. +pub fn evaluate_initial( + proposal: &SubstrateBlock, + now: Timestamp, + parent_hash: &HeaderHash, + parent_number: BlockNumber, + active_parachains: &[ParaId], +) -> Result<PolkadotBlock> { + const MAX_TIMESTAMP_DRIFT: Timestamp = 60; + + let encoded = Slicable::encode(proposal); + let proposal = PolkadotGenericBlock::decode(&mut &encoded[..]) + .and_then(|b| PolkadotBlock::from(b).ok()) + .ok_or_else(|| ErrorKind::ProposalNotForPolkadot)?; + + let transactions_size = proposal.extrinsics.iter().fold(0, |a, tx| { + a + Slicable::encode(tx).len() + }); + + if transactions_size > MAX_TRANSACTIONS_SIZE { + bail!(ErrorKind::ProposalTooLarge(transactions_size)) + } + + if proposal.header.parent_hash != *parent_hash { + bail!(ErrorKind::WrongParentHash(*parent_hash, proposal.header.parent_hash)); + } + + if proposal.header.number != parent_number + 1 { + bail!(ErrorKind::WrongNumber(parent_number + 1, proposal.header.number)); + } + + let block_timestamp = proposal.timestamp(); + + // lenient maximum -- small drifts will just be delayed using a timer. + if block_timestamp > now + MAX_TIMESTAMP_DRIFT { + bail!(ErrorKind::TimestampInFuture) + } + + { + let n_parachains = active_parachains.len(); + if proposal.parachain_heads().len() > n_parachains { + bail!(ErrorKind::TooManyCandidates(n_parachains, proposal.parachain_heads().len())); + } + + let mut last_id = None; + let mut iter = active_parachains.iter(); + for head in proposal.parachain_heads() { + // proposed heads must be ascending order by parachain ID without duplicate. + if last_id.as_ref().map_or(false, |x| x >= &head.parachain_index) { + bail!(ErrorKind::ParachainOutOfOrder); + } + + if !iter.any(|x| x == &head.parachain_index) { + // must be unknown since active parachains are always sorted. + bail!(ErrorKind::UnknownParachain(head.parachain_index)) + } + + last_id = Some(head.parachain_index); + } + } + + Ok(proposal) +} diff --git a/polkadot/consensus/src/lib.rs b/polkadot/consensus/src/lib.rs index e004a44df58..f9e3b35a260 100644 --- a/polkadot/consensus/src/lib.rs +++ b/polkadot/consensus/src/lib.rs @@ -29,15 +29,16 @@ //! //! Groups themselves may be compromised by malicious authorities. -extern crate futures; extern crate ed25519; extern crate parking_lot; extern crate polkadot_api; extern crate polkadot_collator as collator; extern crate polkadot_statement_table as table; +extern crate polkadot_parachain as parachain; extern crate polkadot_primitives; extern crate polkadot_transaction_pool as transaction_pool; extern crate polkadot_runtime; + extern crate substrate_bft as bft; extern crate substrate_codec as codec; extern crate substrate_primitives as primitives; @@ -46,46 +47,60 @@ extern crate substrate_network; extern crate exit_future; extern crate tokio_core; -extern crate substrate_keyring; extern crate substrate_client as client; #[macro_use] extern crate error_chain; + +#[macro_use] +extern crate futures; + #[macro_use] extern crate log; +#[cfg(test)] +extern crate substrate_keyring; + use std::collections::{HashMap, HashSet}; use std::sync::Arc; +use std::time::{Duration, Instant}; use codec::Slicable; -use table::{Table, Context as TableContextTrait}; use table::generic::Statement as GenericStatement; use runtime_support::Hashable; use polkadot_api::{PolkadotApi, BlockBuilder}; use polkadot_primitives::{Hash, Timestamp}; -use polkadot_primitives::parachain::{Id as ParaId, DutyRoster, BlockData, Extrinsic, CandidateReceipt}; -use polkadot_runtime::Block as PolkadotGenericBlock; +use polkadot_primitives::parachain::{Id as ParaId, Chain, DutyRoster, BlockData, Extrinsic, CandidateReceipt}; use primitives::block::{Block as SubstrateBlock, Header as SubstrateHeader, HeaderHash, Id as BlockId, Number as BlockNumber}; use primitives::AuthorityId; -use transaction_pool::{Ready, TransactionPool, PolkadotBlock}; +use transaction_pool::{Ready, TransactionPool}; +use tokio_core::reactor::{Handle, Timeout, Interval}; use futures::prelude::*; -use futures::future; -use future::Shared; +use futures::future::{self, Shared}; use parking_lot::Mutex; -use tokio_core::reactor::{Handle, Timeout}; +use collation::CollationFetch; +use dynamic_inclusion::DynamicInclusion; +pub use self::collation::{Collators, Collation}; pub use self::error::{ErrorKind, Error}; +pub use self::shared_table::{SharedTable, StatementSource, StatementProducer, ProducedStatements}; pub use service::Service; +mod collation; +mod dynamic_inclusion; +mod evaluation; mod error; mod service; +mod shared_table; // block size limit. const MAX_TRANSACTIONS_SIZE: usize = 4 * 1024 * 1024; /// A handle to a statement table router. -pub trait TableRouter { +/// +/// 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; /// Future that resolves when candidate data is fetched. @@ -93,7 +108,7 @@ pub trait TableRouter { /// Future that resolves when extrinsic candidate data is fetched. type FetchExtrinsic: IntoFuture<Item=Extrinsic,Error=Self::Error>; - /// Note local candidate data. + /// Note local candidate data, making it available on the network to other validators. fn local_candidate_data(&self, hash: Hash, block_data: BlockData, extrinsic: Extrinsic); /// Fetch block data for a specific candidate. @@ -126,46 +141,6 @@ pub struct GroupInfo { pub needed_availability: usize, } -struct TableContext { - parent_hash: Hash, - key: Arc<ed25519::Pair>, - groups: HashMap<ParaId, GroupInfo>, -} - -impl table::Context for TableContext { - fn is_member_of(&self, authority: &AuthorityId, group: &ParaId) -> bool { - self.groups.get(group).map_or(false, |g| g.validity_guarantors.contains(authority)) - } - - fn is_availability_guarantor_of(&self, authority: &AuthorityId, group: &ParaId) -> bool { - self.groups.get(group).map_or(false, |g| g.availability_guarantors.contains(authority)) - } - - fn requisite_votes(&self, group: &ParaId) -> (usize, usize) { - self.groups.get(group).map_or( - (usize::max_value(), usize::max_value()), - |g| (g.needed_validity, g.needed_availability), - ) - } -} - -impl TableContext { - fn local_id(&self) -> AuthorityId { - self.key.public().0 - } - - fn sign_statement(&self, statement: table::Statement) -> table::SignedStatement { - let signature = sign_table_statement(&statement, &self.key, &self.parent_hash).into(); - let local_id = self.key.public().0; - - table::SignedStatement { - statement, - signature, - sender: local_id, - } - } -} - /// Sign a table statement against a parent hash. /// The actual message signed is the encoded statement concatenated with the /// parent hash. @@ -185,247 +160,7 @@ pub fn sign_table_statement(statement: &table::Statement, key: &ed25519::Pair, p key.sign(&encoded) } -// A shared table object. -struct SharedTableInner { - table: Table<TableContext>, - proposed_digest: Option<Hash>, - checked_validity: HashSet<Hash>, - checked_availability: HashSet<Hash>, -} - -impl SharedTableInner { - // Import a single statement. Provide a handle to a table router. - fn import_statement<R: TableRouter>( - &mut self, - context: &TableContext, - router: &R, - statement: table::SignedStatement, - received_from: Option<AuthorityId>, - ) -> StatementProducer<<R::FetchCandidate as IntoFuture>::Future, <R::FetchExtrinsic as IntoFuture>::Future> { - let mut producer = StatementProducer { - fetch_block_data: None, - fetch_extrinsic: None, - produced_statements: Default::default(), - _key: context.key.clone(), - }; - - let summary = match self.table.import_statement(context, statement, received_from) { - Some(summary) => summary, - None => return producer, - }; - - let local_id = context.local_id(); - let is_validity_member = context.is_member_of(&local_id, &summary.group_id); - let is_availability_member = - context.is_availability_guarantor_of(&local_id, &summary.group_id); - - 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 checking_validity = is_validity_member - && self.proposed_digest.as_ref().map_or(true, |d| d != digest) - && self.checked_validity.insert(digest.clone()); - - let checking_availability = is_availability_member && self.checked_availability.insert(digest.clone()); - - if checking_validity || checking_availability { - match self.table.get_candidate(&digest) { - None => {} // TODO: handle table inconsistency somehow? - Some(candidate) => { - if checking_validity { - producer.fetch_block_data = Some(router.fetch_block_data(candidate).into_future().fuse()); - } - - if checking_availability { - producer.fetch_extrinsic = Some(router.fetch_extrinsic_data(candidate).into_future().fuse()); - } - } - } - } - - producer - } -} - -/// Produced statements about a specific candidate. -/// Both may be `None`. -#[derive(Default)] -pub struct ProducedStatements { - /// A statement about the validity of the candidate. - pub validity: Option<table::Statement>, - /// A statement about the availability of the candidate. - pub availability: Option<table::Statement>, -} - -/// Future that produces statements about a specific candidate. -pub struct StatementProducer<D: Future, E: Future> { - fetch_block_data: Option<future::Fuse<D>>, - fetch_extrinsic: Option<future::Fuse<E>>, - produced_statements: ProducedStatements, - _key: Arc<ed25519::Pair>, -} - -impl<D, E, Err> Future for StatementProducer<D, E> - where - D: Future<Item=BlockData,Error=Err>, - E: Future<Item=Extrinsic,Error=Err>, -{ - type Item = ProducedStatements; - type Error = Err; - - fn poll(&mut self) -> Poll<ProducedStatements, Err> { - let mut done = true; - if let Some(ref mut fetch_block_data) = self.fetch_block_data { - match fetch_block_data.poll()? { - Async::Ready(_block_data) => { - // TODO [PoC-2] : validate block data here and make statement. - }, - Async::NotReady => { - done = false; - } - } - } - - if let Some(ref mut fetch_extrinsic) = self.fetch_extrinsic { - match fetch_extrinsic.poll()? { - Async::Ready(_extrinsic) => { - // TODO [PoC-2]: guarantee availability of data and make statment. - } - Async::NotReady => { - done = false; - } - } - } - - if done { - Ok(Async::Ready(::std::mem::replace(&mut self.produced_statements, Default::default()))) - } else { - Ok(Async::NotReady) - } - } -} - -/// A shared table object. -pub struct SharedTable { - context: Arc<TableContext>, - inner: Arc<Mutex<SharedTableInner>>, -} - -impl Clone for SharedTable { - fn clone(&self) -> Self { - SharedTable { - context: self.context.clone(), - inner: self.inner.clone(), - } - } -} - -impl SharedTable { - /// Create a new shared table. - /// - /// Provide the key to sign with, and the parent hash of the relay chain - /// block being built. - pub fn new(groups: HashMap<ParaId, GroupInfo>, key: Arc<ed25519::Pair>, parent_hash: Hash) -> Self { - 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(), - checked_availability: HashSet::new(), - })) - } - } - - /// Get group info. - pub fn group_info(&self) -> &HashMap<ParaId, GroupInfo> { - &self.context.groups - } - - /// Import a single statement. Provide a handle to a table router - /// for dispatching any other requests which come up. - pub fn import_statement<R: TableRouter>( - &self, - router: &R, - statement: table::SignedStatement, - received_from: Option<AuthorityId>, - ) -> StatementProducer<<R::FetchCandidate as IntoFuture>::Future, <R::FetchExtrinsic as IntoFuture>::Future> { - self.inner.lock().import_statement(&*self.context, router, statement, received_from) - } - - /// Sign and import a local statement. - pub fn sign_and_import<R: TableRouter>( - &self, - router: &R, - statement: table::Statement, - ) -> StatementProducer<<R::FetchCandidate as IntoFuture>::Future, <R::FetchExtrinsic as IntoFuture>::Future> { - let proposed_digest = match statement { - GenericStatement::Candidate(ref c) => Some(c.hash()), - _ => None, - }; - - let signed_statement = self.context.sign_statement(statement); - - let mut inner = self.inner.lock(); - if proposed_digest.is_some() { - inner.proposed_digest = proposed_digest; - } - - inner.import_statement(&*self.context, router, signed_statement, None) - } - - /// Import many statements at once. - /// - /// Provide an iterator yielding pairs of (statement, received_from). - pub fn import_statements<R, I, U>(&self, router: &R, iterable: I) -> U - where - R: TableRouter, - I: IntoIterator<Item=(table::SignedStatement, Option<AuthorityId>)>, - U: ::std::iter::FromIterator<StatementProducer< - <R::FetchCandidate as IntoFuture>::Future, - <R::FetchExtrinsic as IntoFuture>::Future> - >, - { - let mut inner = self.inner.lock(); - - iterable.into_iter().map(move |(statement, received_from)| { - inner.import_statement(&*self.context, router, statement, received_from) - }).collect() - } - - /// Check if a proposal is valid. - pub fn proposal_valid(&self, _proposal: &SubstrateBlock) -> bool { - false // TODO - } - - /// Execute a closure using a specific candidate. - /// - /// Deadlocks if called recursively. - pub fn with_candidate<F, U>(&self, digest: &Hash, f: F) -> U - where F: FnOnce(Option<&CandidateReceipt>) -> U - { - let inner = self.inner.lock(); - f(inner.table.get_candidate(digest)) - } - - /// Get all witnessed misbehavior. - pub fn get_misbehavior(&self) -> HashMap<AuthorityId, table::Misbehavior> { - self.inner.lock().table.get_misbehavior().clone() - } - - /// Fill a statement batch. - pub fn fill_batch<B: table::StatementBatch>(&self, batch: &mut B) { - self.inner.lock().table.fill_batch(batch); - } - - /// Get the local proposed block's hash. - pub fn proposed_hash(&self) -> Option<Hash> { - self.inner.lock().proposed_digest.clone() - } -} - -fn make_group_info(roster: DutyRoster, authorities: &[AuthorityId]) -> Result<HashMap<ParaId, GroupInfo>, Error> { +fn make_group_info(roster: DutyRoster, authorities: &[AuthorityId], local_id: AuthorityId) -> Result<(HashMap<ParaId, GroupInfo>, LocalDuty), Error> { if roster.validator_duty.len() != authorities.len() { bail!(ErrorKind::InvalidDutyRosterLength(authorities.len(), roster.validator_duty.len())) } @@ -434,11 +169,14 @@ fn make_group_info(roster: DutyRoster, authorities: &[AuthorityId]) -> Result<Ha bail!(ErrorKind::InvalidDutyRosterLength(authorities.len(), roster.guarantor_duty.len())) } + let mut local_validation = None; let mut map = HashMap::new(); let duty_iter = authorities.iter().zip(&roster.validator_duty).zip(&roster.guarantor_duty); for ((authority, v_duty), a_duty) in duty_iter { - use polkadot_primitives::parachain::Chain; + if authority == &local_id { + local_validation = Some(v_duty.clone()); + } match *v_duty { Chain::Relay => {}, // does nothing for now. @@ -467,23 +205,45 @@ fn make_group_info(roster: DutyRoster, authorities: &[AuthorityId]) -> Result<Ha live_group.needed_availability = availability_len / 2 + availability_len % 2; } - Ok(map) + match local_validation { + Some(local_validation) => { + let local_duty = LocalDuty { + validation: local_validation, + }; + + Ok((map, local_duty)) + } + None => bail!(ErrorKind::NotValidator(local_id)), + } +} + +fn timer_error(e: &::std::io::Error) -> Error { + ErrorKind::Timer(format!("{}", e)).into() } /// Polkadot proposer factory. -pub struct ProposerFactory<C, N> { +pub struct ProposerFactory<C, N, P> { /// The client instance. pub client: Arc<C>, /// The transaction pool. pub transaction_pool: Arc<Mutex<TransactionPool>>, /// The backing network handle. pub network: N, - /// Handle to the underlying tokio-core. + /// Parachain collators. + pub collators: P, + /// The timer used to schedule proposal intervals. pub handle: Handle, + /// The duration after which parachain-empty blocks will be allowed. + pub parachain_empty_duration: Duration, } -impl<C: PolkadotApi, N: Network> bft::ProposerFactory for ProposerFactory<C, N> { - type Proposer = Proposer<C, N::TableRouter>; +impl<C, N, P> bft::ProposerFactory for ProposerFactory<C, N, P> + where + C: PolkadotApi, + N: Network, + P: Collators, +{ + type Proposer = Proposer<C, N::TableRouter, P>; type Error = Error; fn init(&self, parent_header: &SubstrateHeader, authorities: &[AuthorityId], sign_with: Arc<ed25519::Pair>) -> Result<Self::Proposer, Error> { @@ -497,135 +257,224 @@ impl<C: PolkadotApi, N: Network> bft::ProposerFactory for ProposerFactory<C, N> let duty_roster = self.client.duty_roster(&checked_id)?; let random_seed = self.client.random_seed(&checked_id)?; - let group_info = make_group_info(duty_roster, authorities)?; + let (group_info, local_duty) = make_group_info( + duty_roster, + authorities, + sign_with.public().0, + )?; + + let active_parachains = self.client.active_parachains(&checked_id)?; + + let n_parachains = active_parachains.len(); let table = Arc::new(SharedTable::new(group_info, sign_with.clone(), parent_hash)); let router = self.network.table_router(table.clone()); + let dynamic_inclusion = DynamicInclusion::new( + n_parachains, + Instant::now(), + self.parachain_empty_duration.clone(), + ); - let timeout = Timeout::new(DELAY_UNTIL, &self.handle)?; + let timeout = Timeout::new(DELAY_UNTIL, &self.handle) + .map_err(|e| timer_error(&e))?; debug!(target: "bft", "Initialising consensus proposer. Refusing to evaluate for {:?} from now.", DELAY_UNTIL); // TODO [PoC-2]: kick off collation process. Ok(Proposer { + client: self.client.clone(), + collators: self.collators.clone(), + delay: timeout.shared(), + handle: self.handle.clone(), + dynamic_inclusion, + local_duty, + local_key: sign_with, parent_hash, - parent_number: parent_header.number, parent_id: checked_id, + parent_number: parent_header.number, random_seed, - local_key: sign_with, - client: self.client.clone(), + router, + table, transaction_pool: self.transaction_pool.clone(), - delay: timeout.shared(), - _table: table, - _router: router, }) } } -fn current_timestamp() -> Timestamp { - use std::time; - - time::SystemTime::now().duration_since(time::UNIX_EPOCH) - .expect("now always later than unix epoch; qed") - .as_secs() +struct LocalDuty { + validation: Chain, } /// The Polkadot proposer logic. -pub struct Proposer<C: PolkadotApi, R> { +pub struct Proposer<C: PolkadotApi, R, P> { + client: Arc<C>, + collators: P, + delay: Shared<Timeout>, + dynamic_inclusion: DynamicInclusion, + handle: Handle, + local_duty: LocalDuty, + local_key: Arc<ed25519::Pair>, parent_hash: HeaderHash, - parent_number: BlockNumber, parent_id: C::CheckedBlockId, + parent_number: BlockNumber, random_seed: Hash, - client: Arc<C>, - local_key: Arc<ed25519::Pair>, + router: R, + table: Arc<SharedTable>, transaction_pool: Arc<Mutex<TransactionPool>>, - delay: Shared<Timeout>, - _table: Arc<SharedTable>, - _router: R, } -impl<C: PolkadotApi, R: TableRouter> bft::Proposer for Proposer<C, R> { +impl<C, R, P> bft::Proposer for Proposer<C, R, P> + where + C: PolkadotApi, + R: TableRouter, + P: Collators, +{ type Error = Error; - type Create = Result<SubstrateBlock, Error>; + type Create = future::Either< + CreateProposal<C, R, P>, + future::FutureResult<SubstrateBlock, Error>, + >; type Evaluate = Box<Future<Item=bool, Error=Error>>; fn propose(&self) -> Self::Create { - debug!(target: "bft", "proposing block on top of parent ({}, {:?})", self.parent_number, self.parent_hash); + const ATTEMPT_PROPOSE_EVERY: Duration = Duration::from_millis(100); + + let initial_included = self.table.includable_count(); + let enough_candidates = self.dynamic_inclusion.acceptable_in( + Instant::now(), + initial_included, + ).unwrap_or_default(); + + let timing = { + let delay = self.delay.clone(); + let dynamic_inclusion = self.dynamic_inclusion.clone(); + let make_timing = move |handle| -> Result<ProposalTiming, ::std::io::Error> { + let attempt_propose = Interval::new(ATTEMPT_PROPOSE_EVERY, handle)?; + let enough_candidates = Timeout::new(enough_candidates, handle)?; + Ok(ProposalTiming { + attempt_propose, + enough_candidates, + dynamic_inclusion, + minimum_delay: Some(delay), + last_included: initial_included, + }) + }; - // TODO: handle case when current timestamp behind that in state. - let mut block_builder = self.client.build_block( - &self.parent_id, - current_timestamp() - )?; + match make_timing(&self.handle) { + Ok(timing) => timing, + Err(e) => { + return future::Either::B(future::err(timer_error(&e))); + } + } + }; - let readiness_evaluator = Ready::create(self.parent_id.clone(), &*self.client); + future::Either::A(CreateProposal { + parent_hash: self.parent_hash.clone(), + parent_number: self.parent_number.clone(), + parent_id: self.parent_id.clone(), + client: self.client.clone(), + transaction_pool: self.transaction_pool.clone(), + collation: CollationFetch::new( + self.local_duty.validation, + self.parent_id.clone(), + self.parent_hash.clone(), + self.collators.clone(), + self.client.clone() + ), + table: self.table.clone(), + router: self.router.clone(), + timing, + }) + } - { - let mut pool = self.transaction_pool.lock(); - let mut unqueue_invalid = Vec::new(); - let mut pending_size = 0; - pool.cull(None, readiness_evaluator.clone()); - for pending in pool.pending(readiness_evaluator.clone()) { - // skip and cull transactions which are too large. - if pending.encoded_size() > MAX_TRANSACTIONS_SIZE { - unqueue_invalid.push(pending.hash().clone()); - continue - } + fn evaluate(&self, proposal: &SubstrateBlock) -> Self::Evaluate { + debug!(target: "bft", "evaluating block on top of parent ({}, {:?})", self.parent_number, self.parent_hash); - if pending_size + pending.encoded_size() >= MAX_TRANSACTIONS_SIZE { break } + let active_parachains = match self.client.active_parachains(&self.parent_id) { + Ok(x) => x, + Err(e) => return Box::new(future::err(e.into())) as Box<_>, + }; - match block_builder.push_extrinsic(pending.as_transaction().clone()) { - Ok(()) => { - pending_size += pending.encoded_size(); - } - Err(_) => { - unqueue_invalid.push(pending.hash().clone()); - } - } - } + let current_timestamp = current_timestamp(); - for tx_hash in unqueue_invalid { - pool.remove(&tx_hash, false); + // do initial serialization and structural integrity checks. + let maybe_proposal = evaluation::evaluate_initial( + proposal, + current_timestamp, + &self.parent_hash, + self.parent_number, + &active_parachains, + ); + + let proposal = match maybe_proposal { + Ok(p) => p, + Err(e) => { + // TODO: these errors are easily re-checked in runtime. + debug!(target: "bft", "Invalid proposal: {:?}", e); + return Box::new(future::ok(false)); } - } + }; - let polkadot_block = block_builder.bake(); - info!("Proposing block [number: {}; hash: {}; parent_hash: {}; extrinsics: [{}]]", - polkadot_block.header.number, - Hash::from(polkadot_block.header.blake2_256()), - polkadot_block.header.parent_hash, - polkadot_block.extrinsics.iter() - .map(|xt| format!("{}", Hash::from(xt.blake2_256()))) - .collect::<Vec<_>>() - .join(", ") - ); + let vote_delays = { + // delay casting vote until able (according to minimum block time) + let minimum_delay = self.delay.clone() + .map_err(|e| timer_error(&*e)); + + let included_candidate_hashes = proposal + .parachain_heads() + .iter() + .map(|candidate| candidate.hash()); + + // delay casting vote until we have proof that all candidates are + // includable. + let includability_tracker = self.table.track_includability(included_candidate_hashes) + .map_err(|_| ErrorKind::PrematureDestruction.into()); + + // the duration at which the given number of parachains is acceptable. + let count_delay = self.dynamic_inclusion.acceptable_in( + Instant::now(), + proposal.parachain_heads().len(), + ); + + // the duration until the given timestamp is current + let proposed_timestamp = proposal.timestamp(); + let timestamp_delay = if proposed_timestamp > current_timestamp { + Some(Duration::from_secs(proposed_timestamp - current_timestamp)) + } else { + None + }; - let substrate_block = Slicable::decode(&mut polkadot_block.encode().as_slice()) - .expect("polkadot blocks defined to serialize to substrate blocks correctly; qed"); + // construct a future from the maximum of the two durations. + let temporary_delay = match ::std::cmp::max(timestamp_delay, count_delay) { + Some(duration) => { + let maybe_timeout = Timeout::new(duration, &self.handle); - assert!(evaluate_proposal(&substrate_block, &*self.client, current_timestamp(), &self.parent_hash, self.parent_number, &self.parent_id).is_ok()); + let f = future::result(maybe_timeout) + .and_then(|timeout| timeout) + .map_err(|e| timer_error(&e)); - Ok(substrate_block) - } + future::Either::A(f) + } + None => future::Either::B(future::ok(())), + }; - // TODO: certain kinds of errors here should lead to a misbehavior report. - fn evaluate(&self, proposal: &SubstrateBlock) -> Self::Evaluate { - debug!(target: "bft", "evaluating block on top of parent ({}, {:?})", self.parent_number, self.parent_hash); + minimum_delay.join3(includability_tracker, temporary_delay) + }; - let evaluated = match evaluate_proposal(proposal, &*self.client, current_timestamp(), &self.parent_hash, self.parent_number, &self.parent_id) { - Ok(x) => Ok(x), - Err(e) => match *e.kind() { - ErrorKind::PolkadotApi(polkadot_api::ErrorKind::Executor(_)) => Ok(false), - ErrorKind::ProposalNotForPolkadot => Ok(false), - ErrorKind::TimestampInFuture => Ok(false), - ErrorKind::WrongParentHash(_, _) => Ok(false), - ErrorKind::ProposalTooLarge(_) => Ok(false), - _ => Err(e), + // evaluate whether the block is actually valid. + // TODO: is it better to delay this until the delays are finished? + let evaluated = self.client.evaluate_block(&self.parent_id, proposal.into()).map_err(Into::into); + let future = future::result(evaluated).and_then(move |good| { + let end_result = future::ok(good); + if good { + // delay a "good" vote. + future::Either::A(vote_delays.and_then(|_| end_result)) + } else { + // don't delay a "bad" evaluation. + future::Either::B(end_result) } - }; + }); - // delay casting vote until able. - Box::new(self.delay.clone().map_err(Error::from).and_then(move |_| evaluated)) + Box::new(future) as Box<_> } fn round_proposer(&self, round_number: usize, authorities: &[AuthorityId]) -> AuthorityId { @@ -697,45 +546,186 @@ impl<C: PolkadotApi, R: TableRouter> bft::Proposer for Proposer<C, R> { } } -fn evaluate_proposal<C: PolkadotApi>( - proposal: &SubstrateBlock, - client: &C, - now: Timestamp, - parent_hash: &HeaderHash, - parent_number: BlockNumber, - parent_id: &C::CheckedBlockId, -) -> Result<bool, Error> { - const MAX_TIMESTAMP_DRIFT: Timestamp = 4; +fn current_timestamp() -> Timestamp { + use std::time; - let encoded = Slicable::encode(proposal); - let proposal = PolkadotGenericBlock::decode(&mut &encoded[..]) - .and_then(|b| PolkadotBlock::from(b).ok()) - .ok_or_else(|| ErrorKind::ProposalNotForPolkadot)?; + time::SystemTime::now().duration_since(time::UNIX_EPOCH) + .expect("now always later than unix epoch; qed") + .as_secs() +} - let transactions_size = proposal.extrinsics.iter().fold(0, |a, tx| { - a + Slicable::encode(tx).len() - }); +struct ProposalTiming { + attempt_propose: Interval, + dynamic_inclusion: DynamicInclusion, + enough_candidates: Timeout, + minimum_delay: Option<Shared<Timeout>>, + last_included: usize, +} - if transactions_size > MAX_TRANSACTIONS_SIZE { - bail!(ErrorKind::ProposalTooLarge(transactions_size)) - } +impl ProposalTiming { + // whether it's time to attempt a proposal. + // shouldn't be called outside of the context of a task. + fn poll(&mut self, included: usize) -> Poll<(), Error> { + // first drain from the interval so when the minimum delay is up + // we don't have any notifications built up. + // + // this interval is just meant to produce periodic task wakeups + // that lead to the `dynamic_inclusion` getting updated as necessary. + if let Async::Ready(x) = self.attempt_propose.poll() + .map_err(|e| timer_error(&e))? + { + x.expect("timer still alive; intervals never end; qed"); + } - if proposal.header.parent_hash != *parent_hash { - bail!(ErrorKind::WrongParentHash(*parent_hash, proposal.header.parent_hash)); - } + if let Some(ref mut min) = self.minimum_delay { + try_ready!(min.poll().map_err(|e| timer_error(&*e))); + } + + self.minimum_delay = None; // after this point, the future must have completed. - if proposal.header.number != parent_number + 1 { - bail!(ErrorKind::WrongNumber(parent_number + 1, proposal.header.number)) + if included == self.last_included { + return self.enough_candidates.poll().map_err(|e| timer_error(&e)); + } + + // the amount of includable candidates has changed. schedule a wakeup + // if it's not sufficient anymore. + let now = Instant::now(); + match self.dynamic_inclusion.acceptable_in(now, included) { + Some(duration) => { + self.last_included = included; + self.enough_candidates.reset(now + duration); + self.enough_candidates.poll().map_err(|e| timer_error(&e)) + } + None => { + Ok(Async::Ready(())) + } + } } +} - let block_timestamp = proposal.timestamp(); +/// Future which resolves upon the creation of a proposal. +pub struct CreateProposal<C: PolkadotApi, R, P: Collators> { + parent_hash: HeaderHash, + parent_number: BlockNumber, + parent_id: C::CheckedBlockId, + client: Arc<C>, + transaction_pool: Arc<Mutex<TransactionPool>>, + collation: CollationFetch<P, C>, + router: R, + table: Arc<SharedTable>, + timing: ProposalTiming, +} + +impl<C, R, P> CreateProposal<C, R, P> + where + C: PolkadotApi, + R: TableRouter, + P: Collators, +{ + fn propose_with(&self, candidates: Vec<CandidateReceipt>) -> Result<SubstrateBlock, Error> { + // TODO: handle case when current timestamp behind that in state. + let timestamp = current_timestamp(); + let mut block_builder = self.client.build_block( + &self.parent_id, + timestamp, + candidates, + )?; + + let readiness_evaluator = Ready::create(self.parent_id.clone(), &*self.client); + + { + let mut pool = self.transaction_pool.lock(); + let mut unqueue_invalid = Vec::new(); + let mut pending_size = 0; + + pool.cull(None, readiness_evaluator.clone()); + for pending in pool.pending(readiness_evaluator.clone()) { + // skip and cull transactions which are too large. + if pending.encoded_size() > MAX_TRANSACTIONS_SIZE { + unqueue_invalid.push(pending.hash().clone()); + continue + } + + if pending_size + pending.encoded_size() >= MAX_TRANSACTIONS_SIZE { break } + + match block_builder.push_extrinsic(pending.as_transaction().clone()) { + Ok(()) => { + pending_size += pending.encoded_size(); + } + Err(e) => { + trace!(target: "transaction-pool", "Invalid transaction: {}", e); + unqueue_invalid.push(pending.hash().clone()); + } + } + } + + for tx_hash in unqueue_invalid { + pool.remove(&tx_hash, false); + } + } + + let polkadot_block = block_builder.bake(); + + info!("Proposing block [number: {}; hash: {}; parent_hash: {}; extrinsics: [{}]]", + polkadot_block.header.number, + Hash::from(polkadot_block.header.blake2_256()), + polkadot_block.header.parent_hash, + polkadot_block.extrinsics.iter() + .map(|xt| format!("{}", Hash::from(xt.blake2_256()))) + .collect::<Vec<_>>() + .join(", ") + ); + + let substrate_block = Slicable::decode(&mut polkadot_block.encode().as_slice()) + .expect("polkadot blocks defined to serialize to substrate blocks correctly; qed"); + + // TODO: full re-evaluation + let active_parachains = self.client.active_parachains(&self.parent_id)?; + assert!(evaluation::evaluate_initial( + &substrate_block, + timestamp, + &self.parent_hash, + self.parent_number, + &active_parachains, + ).is_ok()); - // TODO: just defer using `tokio_timer` to delay prepare vote. - if block_timestamp > now + MAX_TIMESTAMP_DRIFT { - bail!(ErrorKind::TimestampInFuture) + Ok(substrate_block) } +} + +impl<C, R, P> Future for CreateProposal<C, R, P> + where + C: PolkadotApi, + R: TableRouter, + P: Collators, +{ + type Item = SubstrateBlock; + type Error = Error; + + fn poll(&mut self) -> Poll<SubstrateBlock, Error> { + // 1. poll local collation future. + match self.collation.poll() { + Ok(Async::Ready((collation, extrinsic))) => { + let hash = collation.receipt.hash(); + self.router.local_candidate_data(hash, collation.block_data, extrinsic); - // execute the block. - client.evaluate_block(parent_id, proposal.into())?; - Ok(true) + // TODO: if we are an availability guarantor also, we should produce an availability statement. + self.table.sign_and_import(&self.router, GenericStatement::Candidate(collation.receipt)); + } + Ok(Async::NotReady) => {}, + Err(_) => {}, // TODO: handle this failure to collate. + } + + // 2. try to propose if we have enough includable candidates and other + // delays have concluded. + let included = self.table.includable_count(); + try_ready!(self.timing.poll(included)); + + // 3. propose + let proposed_candidates = self.table.with_proposal(|proposed_set| { + proposed_set.into_iter().cloned().collect() + }); + + self.propose_with(proposed_candidates).map(Async::Ready) + } } diff --git a/polkadot/consensus/src/service.rs b/polkadot/consensus/src/service.rs index 97384040e9c..cae27b16fd9 100644 --- a/polkadot/consensus/src/service.rs +++ b/polkadot/consensus/src/service.rs @@ -22,19 +22,23 @@ use std::thread; use std::time::{Duration, Instant}; use std::sync::Arc; -use futures::{future, Future, Stream, Sink, Async, Canceled, Poll}; -use parking_lot::Mutex; -use substrate_network as net; -use tokio_core::reactor; + +use bft::{self, BftService}; use client::{BlockchainEvents, ChainHead}; -use runtime_support::Hashable; +use ed25519; +use futures::prelude::*; +use futures::{future, Canceled}; +use parking_lot::Mutex; +use polkadot_api::PolkadotApi; +use polkadot_primitives::AccountId; +use polkadot_primitives::parachain::{Id as ParaId, BlockData, Extrinsic, CandidateReceipt}; use primitives::{Hash, AuthorityId}; use primitives::block::{Id as BlockId, HeaderHash, Header}; -use polkadot_primitives::parachain::{BlockData, Extrinsic, CandidateReceipt}; -use polkadot_api::PolkadotApi; -use bft::{self, BftService}; +use runtime_support::Hashable; +use substrate_network as net; +use tokio_core::reactor; use transaction_pool::TransactionPool; -use ed25519; + use super::{TableRouter, SharedTable, ProposerFactory}; use error; @@ -174,6 +178,15 @@ impl<E> Sink for BftSink<E> { struct Network(Arc<net::ConsensusService>); +impl super::Network for Network { + type TableRouter = Router; + fn table_router(&self, _table: Arc<SharedTable>) -> Self::TableRouter { + Router { + network: self.0.clone() + } + } +} + fn start_bft<F, C>( header: &Header, handle: reactor::Handle, @@ -224,6 +237,7 @@ impl Service { client: Arc<C>, network: Arc<net::ConsensusService>, transaction_pool: Arc<Mutex<TransactionPool>>, + parachain_empty_duration: Duration, key: ed25519::Pair, ) -> Service where @@ -233,10 +247,13 @@ impl Service { let thread = thread::spawn(move || { let mut core = reactor::Core::new().expect("tokio::Core could not be created"); let key = Arc::new(key); + let factory = ProposerFactory { client: client.clone(), transaction_pool: transaction_pool.clone(), network: Network(network.clone()), + collators: NoCollators, + parachain_empty_duration, handle: core.handle(), }; let bft_service = Arc::new(BftService::new(client.clone(), key, factory)); @@ -312,17 +329,25 @@ impl Drop for Service { } } -impl super::Network for Network { - type TableRouter = Router; - fn table_router(&self, _table: Arc<SharedTable>) -> Self::TableRouter { - Router { - network: self.0.clone() - } +// Collators implementation which never collates anything. +// TODO: do a real implementation. +#[derive(Clone, Copy)] +struct NoCollators; + +impl ::collation::Collators for NoCollators { + type Error = (); + type Collation = future::Empty<::collation::Collation, ()>; + + fn collate(&self, _parachain: ParaId, _relay_parent: Hash) -> Self::Collation { + future::empty() } + + fn note_bad_collator(&self, _collator: AccountId) { } } type FetchCandidateAdapter = future::Map<net::FetchFuture, fn(Vec<u8>) -> BlockData>; +#[derive(Clone)] struct Router { network: Arc<net::ConsensusService>, } diff --git a/polkadot/consensus/src/shared_table/includable.rs b/polkadot/consensus/src/shared_table/includable.rs new file mode 100644 index 00000000000..873c3af94c4 --- /dev/null +++ b/polkadot/consensus/src/shared_table/includable.rs @@ -0,0 +1,137 @@ +// Copyright 2017 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 <http://www.gnu.org/licenses/>. + +//! Implements a future which resolves when all of the candidates referenced are includable. + +use std::collections::HashMap; + +use futures::prelude::*; +use futures::sync::oneshot; + +use polkadot_primitives::Hash; + +/// Track includability of a set of candidates, +pub(super) fn track<I: IntoIterator<Item=(Hash, bool)>>(candidates: I) -> (IncludabilitySender, Includable) { + let (tx, rx) = oneshot::channel(); + let tracking: HashMap<_, _> = candidates.into_iter().collect(); + let includable_count = tracking.values().filter(|x| **x).count(); + + let mut sender = IncludabilitySender { + tracking, + includable_count, + sender: Some(tx), + }; + + sender.try_complete(); + + ( + sender, + Includable(rx), + ) +} + +/// The sending end of the includability sender. +pub(super) struct IncludabilitySender { + tracking: HashMap<Hash, bool>, + includable_count: usize, + sender: Option<oneshot::Sender<()>>, +} + +impl IncludabilitySender { + /// update the inner candidate. wakes up the task as necessary. + /// returns `Err(Canceled)` if the other end has hung up. + /// + /// returns `true` when this is completed and should be destroyed. + pub fn update_candidate(&mut self, candidate: Hash, includable: bool) -> bool { + use std::collections::hash_map::Entry; + + match self.tracking.entry(candidate) { + Entry::Vacant(_) => {} + Entry::Occupied(mut entry) => { + let old = entry.insert(includable); + if !old && includable { + self.includable_count += 1; + } else if old && !includable { + self.includable_count -= 1; + } + } + } + + self.try_complete() + } + + /// whether the sender is completed. + pub fn is_complete(&self) -> bool { + self.sender.is_none() + } + + fn try_complete(&mut self) -> bool { + if self.includable_count == self.tracking.len() { + if let Some(sender) = self.sender.take() { + let _ = sender.send(()); + } + + true + } else { + false + } + } +} + +/// Future that resolves when all the candidates within are includable. +pub struct Includable(oneshot::Receiver<()>); + +impl Future for Includable { + type Item = (); + type Error = oneshot::Canceled; + + fn poll(&mut self) -> Poll<(), oneshot::Canceled> { + self.0.poll() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let hash1 = [1; 32].into(); + let hash2 = [2; 32].into(); + let hash3 = [3; 32].into(); + + let (mut sender, recv) = track([ + (hash1, true), + (hash2, true), + (hash2, false), // overwrite should favor latter. + (hash3, true), + ].iter().cloned()); + + assert!(!sender.is_complete()); + + // true -> false transition is possible and should be handled. + sender.update_candidate(hash1, false); + assert!(!sender.is_complete()); + + sender.update_candidate(hash2, true); + assert!(!sender.is_complete()); + + sender.update_candidate(hash1, true); + assert!(sender.is_complete()); + + recv.wait().unwrap(); + } +} diff --git a/polkadot/consensus/src/shared_table/mod.rs b/polkadot/consensus/src/shared_table/mod.rs new file mode 100644 index 00000000000..23e936eefea --- /dev/null +++ b/polkadot/consensus/src/shared_table/mod.rs @@ -0,0 +1,566 @@ +// Copyright 2017 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 <http://www.gnu.org/licenses/>. + +//! Parachain statement table meant to to shared with a message router +//! and a consensus proposer. + +use std::collections::{HashMap, HashSet}; +use std::sync::Arc; + +use table::{self, Table, Context as TableContextTrait}; +use table::generic::Statement as GenericStatement; +use collation::Collation; +use polkadot_primitives::Hash; +use polkadot_primitives::parachain::{Id as ParaId, BlockData, Extrinsic, CandidateReceipt}; +use primitives::AuthorityId; + +use parking_lot::Mutex; +use futures::{future, prelude::*}; + +use super::{GroupInfo, TableRouter}; +use self::includable::IncludabilitySender; + +mod includable; + +pub use self::includable::Includable; + +struct TableContext { + parent_hash: Hash, + key: Arc<::ed25519::Pair>, + groups: HashMap<ParaId, GroupInfo>, +} + +impl table::Context for TableContext { + fn is_member_of(&self, authority: &AuthorityId, group: &ParaId) -> bool { + self.groups.get(group).map_or(false, |g| g.validity_guarantors.contains(authority)) + } + + fn is_availability_guarantor_of(&self, authority: &AuthorityId, group: &ParaId) -> bool { + self.groups.get(group).map_or(false, |g| g.availability_guarantors.contains(authority)) + } + + fn requisite_votes(&self, group: &ParaId) -> (usize, usize) { + self.groups.get(group).map_or( + (usize::max_value(), usize::max_value()), + |g| (g.needed_validity, g.needed_availability), + ) + } +} + +impl TableContext { + fn local_id(&self) -> AuthorityId { + self.key.public().0 + } + + fn sign_statement(&self, statement: table::Statement) -> table::SignedStatement { + let signature = ::sign_table_statement(&statement, &self.key, &self.parent_hash).into(); + let local_id = self.key.public().0; + + table::SignedStatement { + statement, + signature, + sender: local_id, + } + } +} + +/// Source of statements +pub enum StatementSource { + /// Locally produced statement. + Local, + /// Received statement from remote source, with optional sender. + Remote(Option<AuthorityId>), +} + +// A shared table object. +struct SharedTableInner { + table: Table<TableContext>, + proposed_digest: Option<Hash>, + checked_validity: HashSet<Hash>, + checked_availability: HashSet<Hash>, + trackers: Vec<IncludabilitySender>, +} + +impl SharedTableInner { + // Import a single statement. Provide a handle to a table router and a function + // used to determine if a referenced candidate is valid. + fn import_statement<R: TableRouter, C: FnMut(Collation) -> bool>( + &mut self, + context: &TableContext, + router: &R, + statement: table::SignedStatement, + statement_source: StatementSource, + check_candidate: C, + ) -> StatementProducer< + <R::FetchCandidate as IntoFuture>::Future, + <R::FetchExtrinsic as IntoFuture>::Future, + C, + > { + // this blank producer does nothing until we attach some futures + // and set a candidate digest. + let received_from = match statement_source { + StatementSource::Local => return Default::default(), + StatementSource::Remote(from) => from, + }; + + let summary = match self.table.import_statement(context, statement, received_from) { + Some(summary) => summary, + None => return Default::default(), + }; + + self.update_trackers(&summary.candidate, context); + + let local_id = context.local_id(); + + let is_validity_member = context.is_member_of(&local_id, &summary.group_id); + let is_availability_member = + context.is_availability_guarantor_of(&local_id, &summary.group_id); + + 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 checking_validity = is_validity_member + && self.proposed_digest.as_ref().map_or(true, |d| d != digest) + && self.checked_validity.insert(digest.clone()); + + let checking_availability = is_availability_member + && self.checked_availability.insert(digest.clone()); + + let work = if checking_validity || checking_availability { + match self.table.get_candidate(&digest) { + None => None, // TODO: handle table inconsistency somehow? + Some(candidate) => { + let fetch_block_data = + router.fetch_block_data(candidate).into_future().fuse(); + + let fetch_extrinsic = if checking_availability { + Some( + router.fetch_extrinsic_data(candidate).into_future().fuse() + ) + } else { + None + }; + + Some(Work { + candidate_receipt: candidate.clone(), + fetch_block_data, + fetch_extrinsic, + evaluate: checking_validity, + check_candidate, + }) + } + } + } else { + None + }; + + StatementProducer { + produced_statements: Default::default(), + work, + } + } + + fn update_trackers(&mut self, candidate: &Hash, context: &TableContext) { + let includable = self.table.candidate_includable(candidate, context); + for i in (0..self.trackers.len()).rev() { + if self.trackers[i].update_candidate(candidate.clone(), includable) { + self.trackers.swap_remove(i); + } + } + } +} + +/// Produced statements about a specific candidate. +/// Both may be `None`. +#[derive(Default)] +pub struct ProducedStatements { + /// A statement about the validity of the candidate. + pub validity: Option<table::Statement>, + /// A statement about availability of data. If this is `Some`, + /// then `block_data` and `extrinsic` should be `Some` as well. + pub availability: Option<table::Statement>, + /// Block data to ensure availability of. + pub block_data: Option<BlockData>, + /// Extrinsic data to ensure availability of. + pub extrinsic: Option<Extrinsic>, +} + +/// Future that produces statements about a specific candidate. +pub struct StatementProducer<D: Future, E: Future, C> { + produced_statements: ProducedStatements, + work: Option<Work<D, E, C>>, +} + +struct Work<D: Future, E: Future, C> { + candidate_receipt: CandidateReceipt, + fetch_block_data: future::Fuse<D>, + fetch_extrinsic: Option<future::Fuse<E>>, + evaluate: bool, + check_candidate: C +} + +impl<D: Future, E: Future, C> Default for StatementProducer<D, E, C> { + fn default() -> Self { + StatementProducer { + produced_statements: Default::default(), + work: None, + } + } +} + +impl<D, E, C, Err> Future for StatementProducer<D, E, C> + where + D: Future<Item=BlockData,Error=Err>, + E: Future<Item=Extrinsic,Error=Err>, + C: FnMut(Collation) -> bool, +{ + type Item = ProducedStatements; + type Error = Err; + + fn poll(&mut self) -> Poll<ProducedStatements, Err> { + let work = match self.work { + Some(ref mut work) => work, + None => return Ok(Async::Ready(::std::mem::replace(&mut self.produced_statements, Default::default()))), + }; + + if let Async::Ready(block_data) = work.fetch_block_data.poll()? { + self.produced_statements.block_data = Some(block_data.clone()); + if work.evaluate { + let is_good = (work.check_candidate)(Collation { + block_data, + receipt: work.candidate_receipt.clone(), + }); + + let hash = work.candidate_receipt.hash(); + self.produced_statements.validity = Some(if is_good { + GenericStatement::Valid(hash) + } else { + GenericStatement::Invalid(hash) + }); + } + } + + if let Some(ref mut fetch_extrinsic) = work.fetch_extrinsic { + if let Async::Ready(extrinsic) = fetch_extrinsic.poll()? { + self.produced_statements.extrinsic = Some(extrinsic); + } + } + + let done = self.produced_statements.block_data.is_some() && { + if work.evaluate { + true + } else if self.produced_statements.extrinsic.is_some() { + self.produced_statements.availability = + Some(GenericStatement::Available(work.candidate_receipt.hash())); + + true + } else { + false + } + }; + + if done { + Ok(Async::Ready(::std::mem::replace(&mut self.produced_statements, Default::default()))) + } else { + Ok(Async::NotReady) + } + } +} + +/// A shared table object. +pub struct SharedTable { + context: Arc<TableContext>, + inner: Arc<Mutex<SharedTableInner>>, +} + +impl Clone for SharedTable { + fn clone(&self) -> Self { + SharedTable { + context: self.context.clone(), + inner: self.inner.clone(), + } + } +} + +impl SharedTable { + /// Create a new shared table. + /// + /// Provide the key to sign with, and the parent hash of the relay chain + /// block being built. + pub fn new(groups: HashMap<ParaId, GroupInfo>, key: Arc<::ed25519::Pair>, parent_hash: Hash) -> Self { + 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(), + checked_availability: HashSet::new(), + trackers: Vec::new(), + })) + } + } + + /// Get group info. + pub fn group_info(&self) -> &HashMap<ParaId, GroupInfo> { + &self.context.groups + } + + /// Import a single statement. Provide a handle to a table router + /// for dispatching any other requests which come up. + pub fn import_statement<R: TableRouter, C: FnMut(Collation) -> bool>( + &self, + router: &R, + statement: table::SignedStatement, + received_from: StatementSource, + check_candidate: C, + ) -> StatementProducer<<R::FetchCandidate as IntoFuture>::Future, <R::FetchExtrinsic as IntoFuture>::Future, C> { + self.inner.lock().import_statement(&*self.context, router, statement, received_from, check_candidate) + } + + /// Sign and import a local statement. + pub fn sign_and_import<R: TableRouter>( + &self, + router: &R, + statement: table::Statement, + ) { + let proposed_digest = match statement { + GenericStatement::Candidate(ref c) => Some(c.hash()), + _ => None, + }; + + let signed_statement = self.context.sign_statement(statement); + + let mut inner = self.inner.lock(); + if proposed_digest.is_some() { + inner.proposed_digest = proposed_digest; + } + + let producer = inner.import_statement( + &*self.context, + router, + signed_statement, + StatementSource::Local, + |_| true, + ); + + assert!(producer.work.is_none(), "local statement import never leads to additional work; qed"); + } + + /// Import many statements at once. + /// + /// Provide an iterator yielding pairs of (statement, statement_source). + pub fn import_statements<R, I, C, U>(&self, router: &R, iterable: I) -> U + where + R: TableRouter, + I: IntoIterator<Item=(table::SignedStatement, StatementSource, C)>, + C: FnMut(Collation) -> bool, + U: ::std::iter::FromIterator<StatementProducer< + <R::FetchCandidate as IntoFuture>::Future, + <R::FetchExtrinsic as IntoFuture>::Future, + C, + >>, + { + let mut inner = self.inner.lock(); + + iterable.into_iter().map(move |(statement, statement_source, check_candidate)| { + inner.import_statement(&*self.context, router, statement, statement_source, check_candidate) + }).collect() + } + + /// Execute a closure using a specific candidate. + /// + /// Deadlocks if called recursively. + pub fn with_candidate<F, U>(&self, digest: &Hash, f: F) -> U + where F: FnOnce(Option<&CandidateReceipt>) -> U + { + let inner = self.inner.lock(); + f(inner.table.get_candidate(digest)) + } + + /// Execute a closure using the current proposed set. + /// + /// Deadlocks if called recursively. + pub fn with_proposal<F, U>(&self, f: F) -> U + where F: FnOnce(Vec<&CandidateReceipt>) -> U + { + let inner = self.inner.lock(); + f(inner.table.proposed_candidates(&*self.context)) + } + + /// Get the number of parachains which have available candidates. + pub fn includable_count(&self) -> usize { + self.inner.lock().table.includable_count() + } + + /// Get all witnessed misbehavior. + pub fn get_misbehavior(&self) -> HashMap<AuthorityId, table::Misbehavior> { + self.inner.lock().table.get_misbehavior().clone() + } + + /// Fill a statement batch. + pub fn fill_batch<B: table::StatementBatch>(&self, batch: &mut B) { + self.inner.lock().table.fill_batch(batch); + } + + /// Track includability of a given set of candidate hashes. + pub fn track_includability<I>(&self, iterable: I) -> Includable + where I: IntoIterator<Item=Hash> + { + let mut inner = self.inner.lock(); + + let (tx, rx) = includable::track(iterable.into_iter().map(|x| { + let includable = inner.table.candidate_includable(&x, &*self.context); + (x, includable) + })); + + if !tx.is_complete() { + inner.trackers.push(tx); + } + + rx + } +} + +#[cfg(test)] +mod tests { + use super::*; + use substrate_keyring::Keyring; + + #[derive(Clone)] + struct DummyRouter; + impl TableRouter for DummyRouter { + type Error = (); + type FetchCandidate = ::futures::future::Empty<BlockData,()>; + type FetchExtrinsic = ::futures::future::Empty<Extrinsic,()>; + + /// Note local candidate data, making it available on the network to other validators. + fn local_candidate_data(&self, _hash: Hash, _block_data: BlockData, _extrinsic: Extrinsic) { + + } + + /// Fetch block data for a specific candidate. + fn fetch_block_data(&self, _candidate: &CandidateReceipt) -> Self::FetchCandidate { + ::futures::future::empty() + } + + /// Fetch extrinsic data for a specific candidate. + fn fetch_extrinsic_data(&self, _candidate: &CandidateReceipt) -> Self::FetchExtrinsic { + ::futures::future::empty() + } + } + + #[test] + fn statement_triggers_fetch_and_evaluate() { + let mut groups = HashMap::new(); + + let para_id = ParaId::from(1); + let local_id = Keyring::Alice.to_raw_public(); + let local_key = Arc::new(Keyring::Alice.pair()); + + let validity_other = Keyring::Bob.to_raw_public(); + 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(), + availability_guarantors: Default::default(), + needed_validity: 2, + needed_availability: 0, + }); + + let shared_table = SharedTable::new(groups, local_key.clone(), parent_hash); + + let candidate = CandidateReceipt { + parachain_index: para_id, + collator: [1; 32], + head_data: ::polkadot_primitives::parachain::HeadData(vec![1, 2, 3, 4]), + balance_uploads: Vec::new(), + egress_queue_roots: Vec::new(), + fees: 1_000_000, + }; + + 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 producer = shared_table.import_statement( + &DummyRouter, + signed_statement, + StatementSource::Remote(None), + |_| true, + ); + + assert!(producer.work.is_some(), "candidate and local validity group are same"); + assert!(producer.work.as_ref().unwrap().evaluate, "should evaluate validity"); + } + + #[test] + fn statement_triggers_fetch_and_availability() { + let mut groups = HashMap::new(); + + let para_id = ParaId::from(1); + let local_id = Keyring::Alice.to_raw_public(); + let local_key = Arc::new(Keyring::Alice.pair()); + + let validity_other = Keyring::Bob.to_raw_public(); + let validity_other_key = Keyring::Bob.pair(); + let parent_hash = Default::default(); + + groups.insert(para_id, GroupInfo { + validity_guarantors: [validity_other].iter().cloned().collect(), + availability_guarantors: [local_id].iter().cloned().collect(), + needed_validity: 1, + needed_availability: 1, + }); + + let shared_table = SharedTable::new(groups, local_key.clone(), parent_hash); + + let candidate = CandidateReceipt { + parachain_index: para_id, + collator: [1; 32], + head_data: ::polkadot_primitives::parachain::HeadData(vec![1, 2, 3, 4]), + balance_uploads: Vec::new(), + egress_queue_roots: Vec::new(), + fees: 1_000_000, + }; + + 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 producer = shared_table.import_statement( + &DummyRouter, + signed_statement, + StatementSource::Remote(None), + |_| true, + ); + + assert!(producer.work.is_some(), "candidate and local availability group are same"); + assert!(producer.work.as_ref().unwrap().fetch_extrinsic.is_some(), "should fetch extrinsic when guaranteeing availability"); + assert!(!producer.work.as_ref().unwrap().evaluate, "should not evaluate validity"); + } +} diff --git a/polkadot/parachain/Cargo.toml b/polkadot/parachain/Cargo.toml new file mode 100644 index 00000000000..47cde571e15 --- /dev/null +++ b/polkadot/parachain/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "polkadot-parachain" +version = "0.1.0" +authors = ["Parity Technologies <admin@parity.io>"] +description = "Types and utilities for creating and working with parachains" + +[dependencies] +substrate-codec = { path = "../../substrate/codec", default-features = false } +wasmi = { version = "0.1", optional = true } +error-chain = { version = "0.11", optional = true } + +[dev-dependencies] +tiny-keccak = "1.4" + +[features] +default = ["std"] +std = ["substrate-codec/std", "wasmi", "error-chain"] diff --git a/polkadot/parachain/src/lib.rs b/polkadot/parachain/src/lib.rs new file mode 100644 index 00000000000..2f3c064f33f --- /dev/null +++ b/polkadot/parachain/src/lib.rs @@ -0,0 +1,146 @@ +// Copyright 2017 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 <http://www.gnu.org/licenses/>. + +//! Defines primitive types for creating or validating a parachain. +//! +//! When compiled with standard library support, this crate exports a `wasm` +//! module that can be used to validate parachain WASM. +//! +//! ## Parachain WASM +//! +//! Polkadot parachain WASM is in the form of a module which imports a memory +//! instance and exports a function `validate`. +//! +//! `validate` accepts as input two `i32` values, representing a pointer/length pair +//! respectively, that encodes `ValidationParams`. +//! +//! `validate` returns an `i32` which is a pointer to a little-endian 32-bit integer denoting a length. +//! Subtracting the length from the initial pointer will give a new pointer to the actual return data, +//! +//! ASCII-diagram demonstrating the return data format: +//! +//! ```ignore +//! [return data][len (LE-u32)] +//! ^~~returned pointer +//! ``` +//! +//! The `load_params` and `write_result` functions provide utilities for setting up +//! a parachain WASM module in Rust. + +#![cfg_attr(not(feature = "std"), no_std)] +#![cfg_attr(not(feature = "std"), feature(alloc))] + +/// Re-export of substrate-codec. +pub extern crate substrate_codec as codec; + +#[cfg(not(feature = "std"))] +extern crate alloc; + +#[cfg(feature = "std")] +extern crate core; + +#[cfg(feature = "std")] +extern crate wasmi; + +#[cfg(feature = "std")] +#[macro_use] +extern crate error_chain; + +#[cfg(not(feature = "std"))] +use alloc::vec::Vec; +use codec::Slicable; + +#[cfg(feature = "std")] +pub mod wasm; + +/// Validation parameters for evaluating the parachain validity function. +// TODO: consolidated ingress and balance downloads +#[derive(PartialEq, Eq)] +#[cfg_attr(feature = "std", derive(Debug))] +pub struct ValidationParams { + /// The collation body. + pub block_data: Vec<u8>, + /// Previous head-data. + pub parent_head: Vec<u8>, +} + +impl Slicable for ValidationParams { + fn encode(&self) -> Vec<u8> { + let mut v = Vec::new(); + + self.block_data.using_encoded(|s| v.extend(s)); + self.parent_head.using_encoded(|s| v.extend(s)); + + v + } + + fn decode<I: codec::Input>(input: &mut I) -> Option<Self> { + Some(ValidationParams { + block_data: Slicable::decode(input)?, + parent_head: Slicable::decode(input)?, + }) + } +} + +/// The result of parachain validation. +// TODO: egress and balance uploads +#[derive(PartialEq, Eq)] +#[cfg_attr(feature = "std", derive(Debug))] +pub struct ValidationResult { + /// New head data that should be included in the relay chain state. + pub head_data: Vec<u8> +} + +impl Slicable for ValidationResult { + fn encode(&self) -> Vec<u8> { + self.head_data.encode() + } + + fn decode<I: codec::Input>(input: &mut I) -> Option<Self> { + Some(ValidationResult { + head_data: Slicable::decode(input)?, + }) + } +} + +/// Load the validation params from memory when implementing a Rust parachain. +/// +/// Offset and length must have been provided by the validation +/// function's entry point. +pub unsafe fn load_params(offset: usize, len: usize) -> ValidationParams { + let mut slice = ::core::slice::from_raw_parts(offset as *const u8, len); + + ValidationParams::decode(&mut slice).expect("Invalid input data") +} + +/// Allocate the validation result in memory, getting the return-pointer back. +/// +/// As described in the crate docs, this is a pointer to the appended length +/// of the vector. +pub fn write_result(result: ValidationResult) -> usize { + let mut encoded = result.encode(); + let len = encoded.len(); + + assert!(len <= u32::max_value() as usize, "Len too large for parachain-WASM abi"); + (len as u32).using_encoded(|s| encoded.extend(s)); + + // do not alter `encoded` beyond this point. may reallocate. + let end_ptr = &encoded[len] as *const u8 as usize; + + // leak so it doesn't get zeroed. + ::core::mem::forget(encoded); + end_ptr +} diff --git a/polkadot/parachain/src/wasm.rs b/polkadot/parachain/src/wasm.rs new file mode 100644 index 00000000000..a16383acb90 --- /dev/null +++ b/polkadot/parachain/src/wasm.rs @@ -0,0 +1,166 @@ +// Copyright 2017 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 <http://www.gnu.org/licenses/>. + +//! WASM re-execution of a parachain candidate. +//! In the context of relay-chain candidate evaluation, there are some additional +//! steps to ensure that the provided input parameters are correct. +//! Assuming the parameters are correct, this module provides a wrapper around +//! a WASM VM for re-execution of a parachain candidate. + +use codec::Slicable; + +use wasmi::{self, Module, ModuleInstance, MemoryInstance, MemoryDescriptor, MemoryRef, ModuleImportResolver}; +use wasmi::{memory_units, RuntimeValue}; +use wasmi::Error as WasmError; + +use super::{ValidationParams, ValidationResult}; + +use std::cell::RefCell; + +error_chain! { + types { Error, ErrorKind, ResultExt; } + foreign_links { + Wasm(WasmError); + } + errors { + /// Call data too big. WASM32 only has a 32-bit address space. + ParamsTooLarge(len: usize) { + description("Validation parameters took up too much space to execute in WASM"), + display("Validation parameters took up {} bytes, max allowed by WASM is {}", len, i32::max_value()), + } + /// Bad return data or type. + BadReturn { + description("Validation function returned invalid data."), + display("Validation function returned invalid data."), + } + } +} + +struct Resolver { + max_memory: u32, // in pages. + memory: RefCell<Option<MemoryRef>>, +} + +impl ModuleImportResolver for Resolver { + fn resolve_memory( + &self, + field_name: &str, + descriptor: &MemoryDescriptor, + ) -> Result<MemoryRef, WasmError> { + if field_name == "memory" { + let effective_max = descriptor.maximum().unwrap_or(self.max_memory); + if descriptor.initial() > self.max_memory || effective_max > self.max_memory { + Err(WasmError::Instantiation("Module requested too much memory".to_owned())) + } else { + let mem = MemoryInstance::alloc( + memory_units::Pages(descriptor.initial() as usize), + descriptor.maximum().map(|x| memory_units::Pages(x as usize)), + )?; + *self.memory.borrow_mut() = Some(mem.clone()); + Ok(mem) + } + } else { + Err(WasmError::Instantiation("Memory imported under unknown name".to_owned())) + } + } +} + +/// Validate a candidate under the given validation code. +/// +/// This will fail if the validation code is not a proper parachain validation module. +pub fn validate_candidate(validation_code: &[u8], params: ValidationParams) -> Result<ValidationResult, Error> { + use wasmi::LINEAR_MEMORY_PAGE_SIZE; + + // maximum memory in bytes + const MAX_MEM: u32 = 1024 * 1024 * 1024; // 1 GiB + + // instantiate the module. + let (module, memory) = { + let module = Module::from_buffer(validation_code)?; + + let module_resolver = Resolver { + max_memory: MAX_MEM / LINEAR_MEMORY_PAGE_SIZE.0 as u32, + memory: RefCell::new(None), + }; + + let module = ModuleInstance::new( + &module, + &wasmi::ImportsBuilder::new().with_resolver("env", &module_resolver), + )?.run_start(&mut wasmi::NopExternals).map_err(WasmError::Trap)?; + + let memory = module_resolver.memory.borrow_mut() + .as_ref() + .ok_or_else(|| WasmError::Instantiation("No imported memory instance".to_owned()))? + .clone(); + + (module, memory) + }; + + // allocate call data in memory. + let (offset, len) = { + let encoded_call_data = params.encode(); + + // hard limit from WASM. + if encoded_call_data.len() > i32::max_value() as usize { + bail!(ErrorKind::ParamsTooLarge(encoded_call_data.len())); + } + + let call_data_pages = (encoded_call_data.len() / LINEAR_MEMORY_PAGE_SIZE.0) + + (encoded_call_data.len() % LINEAR_MEMORY_PAGE_SIZE.0); + + let call_data_pages = wasmi::memory_units::Pages(call_data_pages); + + if memory.current_size() < call_data_pages { + memory.grow(call_data_pages - memory.current_size())?; + } + + memory.set(0, &encoded_call_data).expect("enough memory allocated just before this; \ + copying never fails if memory is large enough; qed"); + + (0, encoded_call_data.len() as i32) + }; + + let output = module.invoke_export( + "validate", + &[RuntimeValue::I32(offset), RuntimeValue::I32(len)], + &mut wasmi::NopExternals, + )?; + + match output { + Some(RuntimeValue::I32(len_offset)) => { + let len_offset = len_offset as u32; + + let mut len_bytes = [0u8; 4]; + memory.get_into(len_offset, &mut len_bytes)?; + + let len = u32::decode(&mut &len_bytes[..]) + .ok_or_else(|| ErrorKind::BadReturn)?; + + let return_offset = if len > len_offset { + bail!(ErrorKind::BadReturn); + } else { + len_offset - len + }; + + // TODO: optimize when `wasmi` lets you inspect memory with a closure. + let raw_return = memory.get(return_offset, len as usize)?; + ValidationResult::decode(&mut &raw_return[..]) + .ok_or_else(|| ErrorKind::BadReturn) + .map_err(Into::into) + } + _ => bail!(ErrorKind::BadReturn), + } +} diff --git a/polkadot/parachain/test-chains/.gitignore b/polkadot/parachain/test-chains/.gitignore new file mode 100644 index 00000000000..2c96eb1b651 --- /dev/null +++ b/polkadot/parachain/test-chains/.gitignore @@ -0,0 +1,2 @@ +target/ +Cargo.lock diff --git a/polkadot/parachain/test-chains/basic_add/Cargo.toml b/polkadot/parachain/test-chains/basic_add/Cargo.toml new file mode 100644 index 00000000000..afc9e9f1310 --- /dev/null +++ b/polkadot/parachain/test-chains/basic_add/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "basic_add" +version = "0.1.0" +authors = ["Parity Technologies <admin@parity.io>"] +description = "Test parachain which adds to a number as its state transition" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +polkadot-parachain = { path = "../../", default-features = false } +wee_alloc = "0.2.0" +tiny-keccak = "1.4" +pwasm-libc = "0.2" + +[features] +default = ["std"] +std = ["polkadot-parachain/std"] + +[profile.release] +panic = "abort" +lto = true + +[workspace] +members = [] diff --git a/polkadot/parachain/test-chains/basic_add/src/lib.rs b/polkadot/parachain/test-chains/basic_add/src/lib.rs new file mode 100644 index 00000000000..3f877b16d1b --- /dev/null +++ b/polkadot/parachain/test-chains/basic_add/src/lib.rs @@ -0,0 +1,143 @@ +// Copyright 2017 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 <http://www.gnu.org/licenses/>. + +//! Basic parachain that adds a number as part of its state. + +#![cfg_attr(not(feature = "std"), no_std)] +#![cfg_attr(not(feature = "std"), feature(alloc, core_intrinsics, global_allocator, lang_items))] + +#[cfg(not(feature = "std"))] +extern crate alloc; + +extern crate polkadot_parachain as parachain; +extern crate wee_alloc; +extern crate tiny_keccak; +extern crate pwasm_libc; + +use parachain::codec::{Slicable, Input}; + +#[cfg(not(feature = "std"))] +mod wasm; + +#[cfg(not(feature = "std"))] +pub use wasm::*; + +#[cfg(not(feature = "std"))] +use alloc::vec::Vec; + +// Define global allocator. +#[cfg(not(feature = "std"))] +#[global_allocator] +static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; + +// Head data for this parachain. +#[derive(Default, Clone)] +struct HeadData { + // Block number + number: u64, + // parent block keccak256 + parent_hash: [u8; 32], + // hash of post-execution state. + post_state: [u8; 32], +} + +impl Slicable for HeadData { + fn encode(&self) -> Vec<u8> { + let mut v = Vec::new(); + + self.number.using_encoded(|s| v.extend(s)); + self.parent_hash.using_encoded(|s| v.extend(s)); + self.post_state.using_encoded(|s| v.extend(s)); + + v + } + + fn decode<I: Input>(input: &mut I) -> Option<Self> { + Some(HeadData { + number: Slicable::decode(input)?, + parent_hash: Slicable::decode(input)?, + post_state: Slicable::decode(input)?, + }) + } +} + +// Block data for this parachain. +#[derive(Default, Clone)] +struct BlockData { + // State to begin from. + state: u64, + // Amount to add (overflowing) + add: u64, +} + +impl Slicable for BlockData { + fn encode(&self) -> Vec<u8> { + let mut v = Vec::new(); + + self.state.using_encoded(|s| v.extend(s)); + self.add.using_encoded(|s| v.extend(s)); + + v + } + + fn decode<I: Input>(input: &mut I) -> Option<Self> { + Some(BlockData { + state: Slicable::decode(input)?, + add: Slicable::decode(input)?, + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use parachain::ValidationParams; + + const TEST_CODE: &[u8] = include_bytes!("../wasm/test.wasm"); + + fn hash_state(state: u64) -> [u8; 32] { + ::tiny_keccak::keccak256(state.encode().as_slice()) + } + + fn hash_head(head: &HeadData) -> [u8; 32] { + ::tiny_keccak::keccak256(head.encode().as_slice()) + } + + #[test] + fn execute_good_on_parent() { + let parent_head = HeadData { + number: 0, + parent_hash: [0; 32], + post_state: hash_state(0), + }; + + let block_data = BlockData { + state: 0, + add: 512, + }; + + let ret = parachain::wasm::validate_candidate(TEST_CODE, ValidationParams { + parent_head: parent_head.encode(), + block_data: block_data.encode(), + }).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(512)); + } +} diff --git a/polkadot/parachain/test-chains/basic_add/src/src b/polkadot/parachain/test-chains/basic_add/src/src new file mode 120000 index 00000000000..e8310385c56 --- /dev/null +++ b/polkadot/parachain/test-chains/basic_add/src/src @@ -0,0 +1 @@ +src \ No newline at end of file diff --git a/polkadot/parachain/test-chains/basic_add/src/wasm.rs b/polkadot/parachain/test-chains/basic_add/src/wasm.rs new file mode 100644 index 00000000000..fa1bf64f43c --- /dev/null +++ b/polkadot/parachain/test-chains/basic_add/src/wasm.rs @@ -0,0 +1,58 @@ +// Copyright 2017 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 <http://www.gnu.org/licenses/>. + +//! Defines WASM module logic. + +use parachain::{self, ValidationResult}; +use parachain::codec::Slicable; +use super::{HeadData, BlockData}; + +#[lang = "panic_fmt"] +#[no_mangle] +pub extern fn panic_fmt( + _args: ::core::fmt::Arguments, + _file: &'static str, + _line: u32, + _col: u32, +) -> ! { + use core::intrinsics; + unsafe { + intrinsics::abort(); + } +} + +#[no_mangle] +pub extern fn validate(offset: usize, len: usize) -> usize { + let hash_state = |state: u64| ::tiny_keccak::keccak256(state.encode().as_slice()); + + let params = unsafe { ::parachain::load_params(offset, len) }; + let parent_head = HeadData::decode(&mut ¶ms.parent_head[..]) + .expect("invalid parent head format."); + + let block_data = BlockData::decode(&mut ¶ms.block_data[..]) + .expect("invalid block data format."); + + assert_eq!(hash_state(block_data.state), parent_head.post_state, "wrong post-state proof"); + let new_state = block_data.state.saturating_add(block_data.add); + + let new_head = HeadData { + number: parent_head.number + 1, + parent_hash: ::tiny_keccak::keccak256(¶ms.parent_head[..]), + post_state: hash_state(new_state), + }; + + parachain::write_result(ValidationResult { head_data: new_head.encode() }) +} diff --git a/polkadot/parachain/test-chains/build_test_chains.sh b/polkadot/parachain/test-chains/build_test_chains.sh new file mode 100755 index 00000000000..6523e46f14e --- /dev/null +++ b/polkadot/parachain/test-chains/build_test_chains.sh @@ -0,0 +1,14 @@ +#!/bin/sh +set -e + +rm -rf ./target +for i in */ +do + i=${i%/} + cd $i + + # TODO: stop using exact nightly when wee-alloc works on normal nightly. + RUSTFLAGS="-C link-arg=--import-memory" cargo +nightly-2018-03-07 build --target=wasm32-unknown-unknown --release --no-default-features + wasm-gc target/wasm32-unknown-unknown/release/$i.wasm ../../tests/res/$i.wasm + cd .. +done diff --git a/polkadot/parachain/tests/basic_add.rs b/polkadot/parachain/tests/basic_add.rs new file mode 100644 index 00000000000..c5fbe467a43 --- /dev/null +++ b/polkadot/parachain/tests/basic_add.rs @@ -0,0 +1,170 @@ +// Copyright 2017 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 <http://www.gnu.org/licenses/>. + +//! Basic parachain that adds a number as part of its state. + +extern crate polkadot_parachain as parachain; +extern crate tiny_keccak; + +use parachain::ValidationParams; +use parachain::codec::{Slicable, Input}; + +// Head data for this parachain. +#[derive(Default, Clone)] +struct HeadData { + // Block number + number: u64, + // parent block keccak256 + parent_hash: [u8; 32], + // hash of post-execution state. + post_state: [u8; 32], +} + +impl Slicable for HeadData { + fn encode(&self) -> Vec<u8> { + let mut v = Vec::new(); + + self.number.using_encoded(|s| v.extend(s)); + self.parent_hash.using_encoded(|s| v.extend(s)); + self.post_state.using_encoded(|s| v.extend(s)); + + v + } + + fn decode<I: Input>(input: &mut I) -> Option<Self> { + Some(HeadData { + number: Slicable::decode(input)?, + parent_hash: Slicable::decode(input)?, + post_state: Slicable::decode(input)?, + }) + } +} + +// Block data for this parachain. +#[derive(Default, Clone)] +struct BlockData { + // State to begin from. + state: u64, + // Amount to add (overflowing) + add: u64, +} + +impl Slicable for BlockData { + fn encode(&self) -> Vec<u8> { + let mut v = Vec::new(); + + self.state.using_encoded(|s| v.extend(s)); + self.add.using_encoded(|s| v.extend(s)); + + v + } + + fn decode<I: Input>(input: &mut I) -> Option<Self> { + Some(BlockData { + state: Slicable::decode(input)?, + add: Slicable::decode(input)?, + }) + } +} + +const TEST_CODE: &[u8] = include_bytes!("res/basic_add.wasm"); + +fn hash_state(state: u64) -> [u8; 32] { + ::tiny_keccak::keccak256(state.encode().as_slice()) +} + +fn hash_head(head: &HeadData) -> [u8; 32] { + ::tiny_keccak::keccak256(head.encode().as_slice()) +} + +#[test] +fn execute_good_on_parent() { + let parent_head = HeadData { + number: 0, + parent_hash: [0; 32], + post_state: hash_state(0), + }; + + let block_data = BlockData { + state: 0, + add: 512, + }; + + let ret = parachain::wasm::validate_candidate(TEST_CODE, ValidationParams { + parent_head: parent_head.encode(), + block_data: block_data.encode(), + }).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(512)); +} + +#[test] +fn execute_good_chain_on_parent() { + let mut number = 0; + let mut parent_hash = [0; 32]; + let mut last_state = 0; + + for add in 0..10 { + let parent_head = HeadData { + number, + parent_hash, + post_state: hash_state(last_state), + }; + + let block_data = BlockData { + state: last_state, + add, + }; + + let ret = parachain::wasm::validate_candidate(TEST_CODE, ValidationParams { + parent_head: parent_head.encode(), + block_data: block_data.encode(), + }).unwrap(); + + let new_head = HeadData::decode(&mut &ret.head_data[..]).unwrap(); + + assert_eq!(new_head.number, number + 1); + assert_eq!(new_head.parent_hash, hash_head(&parent_head)); + assert_eq!(new_head.post_state, hash_state(last_state + add)); + + number += 1; + parent_hash = hash_head(&new_head); + last_state += add; + } +} + +#[test] +fn execute_bad_on_parent() { + let parent_head = HeadData { + number: 0, + parent_hash: [0; 32], + post_state: hash_state(0), + }; + + let block_data = BlockData { + state: 256, // start state is wrong. + add: 256, + }; + + let _ret = parachain::wasm::validate_candidate(TEST_CODE, ValidationParams { + parent_head: parent_head.encode(), + block_data: block_data.encode(), + }).unwrap_err(); +} diff --git a/polkadot/parachain/tests/res/basic_add.wasm b/polkadot/parachain/tests/res/basic_add.wasm new file mode 100755 index 0000000000000000000000000000000000000000..83f52db817f81cf088221070e7db06d3a9ea8765 GIT binary patch literal 44941 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 X{Ls~5O8(frTX~$XF7(Rv(PRG)^`N<2 literal 0 HcmV?d00001 diff --git a/polkadot/primitives/src/lib.rs b/polkadot/primitives/src/lib.rs index 1db009c7354..b9a636162c9 100644 --- a/polkadot/primitives/src/lib.rs +++ b/polkadot/primitives/src/lib.rs @@ -36,7 +36,6 @@ extern crate substrate_serializer; extern crate substrate_codec as codec; pub mod parachain; -pub mod validator; /// Virtual account ID that represents the idea of a dispatch/statement being signed by everybody /// (who matters). Essentially this means that a majority of validators have decided it is diff --git a/polkadot/primitives/src/parachain.rs b/polkadot/primitives/src/parachain.rs index 1dde3b508d1..3a87b1faa2d 100644 --- a/polkadot/primitives/src/parachain.rs +++ b/polkadot/primitives/src/parachain.rs @@ -37,6 +37,13 @@ impl From<u32> for Id { fn from(x: u32) -> Self { Id(x) } } +impl Id { + /// Convert this Id into its inner representation. + pub fn into_inner(self) -> u32 { + self.0 + } +} + impl Slicable for Id { fn decode<I: Input>(input: &mut I) -> Option<Self> { u32::decode(input).map(Id) @@ -86,8 +93,6 @@ impl Slicable for Chain { } } - - /// The duty roster specifying what jobs each validator must do. #[derive(Clone, PartialEq)] #[cfg_attr(feature = "std", derive(Default, Debug))] diff --git a/polkadot/primitives/src/validator.rs b/polkadot/primitives/src/validator.rs deleted file mode 100644 index 0bac607594c..00000000000 --- a/polkadot/primitives/src/validator.rs +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2017 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 <http://www.gnu.org/licenses/>. - -//! Validator primitives. - -#[cfg(feature = "std")] -use primitives::bytes; -use rstd::vec::Vec; -use parachain; - -/// Parachain outgoing message. -#[derive(PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] -pub struct EgressPost(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec<u8>); - -/// Balance upload. -#[derive(PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] -pub struct BalanceUpload(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec<u8>); - -/// Balance download. -#[derive(PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] -pub struct BalanceDownload(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec<u8>); - -/// The result of parachain validation. -#[derive(PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] -#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] -#[cfg_attr(feature = "std", serde(deny_unknown_fields))] -pub struct ValidationResult { - /// New head data that should be included in the relay chain state. - pub head_data: parachain::HeadData, - /// Outgoing messages (a vec for each parachain). - pub egress_queues: Vec<Vec<EgressPost>>, - /// Balance uploads - pub balance_uploads: Vec<BalanceUpload>, -} - -#[cfg(test)] -mod tests { - use super::*; - use substrate_serializer as ser; - - #[test] - fn test_validation_result() { - assert_eq!(ser::to_string_pretty(&ValidationResult { - head_data: parachain::HeadData(vec![1]), - egress_queues: vec![vec![EgressPost(vec![1])]], - balance_uploads: vec![BalanceUpload(vec![2])], - }), r#"{ - "headData": "0x01", - "egressQueues": [ - [ - "0x01" - ] - ], - "balanceUploads": [ - "0x02" - ] -}"#); - } -} diff --git a/polkadot/runtime/Cargo.toml b/polkadot/runtime/Cargo.toml index cb6c99de354..95044242fef 100644 --- a/polkadot/runtime/Cargo.toml +++ b/polkadot/runtime/Cargo.toml @@ -5,7 +5,6 @@ authors = ["Parity Technologies <admin@parity.io>"] [dependencies] rustc-hex = "1.0" -hex-literal = "0.1.0" log = { version = "0.3", optional = true } serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } @@ -28,6 +27,9 @@ substrate-runtime-system = { path = "../../substrate/runtime/system" } substrate-runtime-timestamp = { path = "../../substrate/runtime/timestamp" } polkadot-primitives = { path = "../primitives" } +[dev-dependencies] +hex-literal = "0.1.0" + [features] default = ["std"] std = [ diff --git a/polkadot/runtime/src/lib.rs b/polkadot/runtime/src/lib.rs index 1cfcd31497c..9b86eb91cb3 100644 --- a/polkadot/runtime/src/lib.rs +++ b/polkadot/runtime/src/lib.rs @@ -27,7 +27,7 @@ extern crate substrate_runtime_support as runtime_support; #[macro_use] extern crate substrate_runtime_primitives as runtime_primitives; -#[cfg(feature = "std")] +#[cfg(test)] #[macro_use] extern crate hex_literal; @@ -55,7 +55,19 @@ use runtime_io::BlakeTwo256; use polkadot_primitives::{AccountId, Balance, BlockNumber, Hash, Index, Log, SessionKey, Signature}; use runtime_primitives::generic; use runtime_primitives::traits::{Identity, HasPublicAux}; -#[cfg(feature = "std")] pub use runtime_primitives::BuildExternalities; + +#[cfg(feature = "std")] +pub use runtime_primitives::BuildExternalities; + +pub use consensus::Call as ConsensusCall; +pub use timestamp::Call as TimestampCall; +pub use parachains::Call as ParachainsCall; + + +/// The position of the timestamp set extrinsic. +pub const TIMESTAMP_SET_POSITION: u32 = 0; +/// The position of the parachains set extrinsic. +pub const PARACHAINS_SET_POSITION: u32 = 1; /// Concrete runtime type used to parameterize the various modules. pub struct Concrete; @@ -77,19 +89,18 @@ impl system::Trait for Concrete { pub type System = system::Module<Concrete>; impl consensus::Trait for Concrete { - type PublicAux = <Self as HasPublicAux>::PublicAux; + type PublicAux = <Concrete as HasPublicAux>::PublicAux; type SessionKey = SessionKey; } /// Consensus module for this concrete runtime. pub type Consensus = consensus::Module<Concrete>; -pub use consensus::Call as ConsensusCall; impl timestamp::Trait for Concrete { + const SET_POSITION: u32 = TIMESTAMP_SET_POSITION; type Value = u64; } /// Timestamp module for this concrete runtime. pub type Timestamp = timestamp::Module<Concrete>; -pub use timestamp::Call as TimestampCall; impl session::Trait for Concrete { type ConvertAccountIdToSessionKey = Identity; @@ -116,7 +127,11 @@ pub type Council = council::Module<Concrete>; /// Council voting module for this concrete runtime. pub type CouncilVoting = council::voting::Module<Concrete>; -impl parachains::Trait for Concrete {} +impl parachains::Trait for Concrete { + const SET_POSITION: u32 = PARACHAINS_SET_POSITION; + + type PublicAux = <Concrete as HasPublicAux>::PublicAux; +} pub type Parachains = parachains::Module<Concrete>; impl_outer_dispatch! { @@ -128,6 +143,7 @@ impl_outer_dispatch! { Democracy = 5, Council = 6, CouncilVoting = 7, + Parachains = 8, } pub enum PrivCall { diff --git a/polkadot/runtime/src/parachains.rs b/polkadot/runtime/src/parachains.rs index ef46a25146e..1a6a77d7feb 100644 --- a/polkadot/runtime/src/parachains.rs +++ b/polkadot/runtime/src/parachains.rs @@ -17,44 +17,70 @@ //! Main parachains logic. For now this is just the determination of which validators do what. use polkadot_primitives; -#[cfg(any(feature = "std", test))] use {runtime_io, runtime_primitives}; use rstd::prelude::*; -#[cfg(any(feature = "std", test))] use rstd::marker::PhantomData; use codec::{Slicable, Joiner}; use runtime_support::Hashable; -#[cfg(any(feature = "std", test))] use runtime_support::StorageValue; -use runtime_primitives::traits::Executable; -use polkadot_primitives::parachain::{Id, Chain, DutyRoster}; + +use runtime_primitives::traits::{Executable, RefInto, MaybeEmpty}; +use polkadot_primitives::parachain::{Id, Chain, DutyRoster, CandidateReceipt}; use {system, session}; -pub trait Trait: system::Trait<Hash = polkadot_primitives::Hash> + session::Trait {} +use runtime_support::{StorageValue, StorageMap}; + +#[cfg(any(feature = "std", test))] +use rstd::marker::PhantomData; + +#[cfg(any(feature = "std", test))] +use {runtime_io, runtime_primitives}; + +pub trait Trait: system::Trait<Hash = polkadot_primitives::Hash> + session::Trait { + /// The position of the set_heads call in the block. + const SET_POSITION: u32; + + type PublicAux: RefInto<Self::AccountId> + MaybeEmpty; +} decl_module! { pub struct Module<T: Trait>; + pub enum Call where aux: <T as Trait>::PublicAux { + // provide candidate receipts for parachains, in ascending order by id. + fn set_heads(aux, heads: Vec<CandidateReceipt>) = 0; + } } decl_storage! { - pub trait Store for Module<T: Trait>; - // The number of parachains registered at present. - pub Count get(count): b"para:count" => default u32; + trait Store for Module<T: Trait>; + // Vector of all parachain IDs. + pub Parachains get(active_parachains): b"para:chains" => default Vec<Id>; + // The parachains registered at present. + pub Code get(parachain_code): b"para:code" => map [ Id => Vec<u8> ]; + // The heads of the parachains registered at present. these are kept sorted. + pub Heads get(parachain_head): b"para:head" => map [ Id => Vec<u8> ]; + + // Did the parachain heads get updated in this block? + DidUpdate: b"para:did" => default bool; } impl<T: Trait> Module<T> { - /// Calculate the current block's duty roster. + /// Calculate the current block's duty roster using system's random seed. pub fn calculate_duty_roster() -> DutyRoster { - let parachain_count = Self::count(); - let validator_count = <session::Module<T>>::validator_count(); + let parachains = Self::active_parachains(); + let parachain_count = parachains.len(); + let validator_count = <session::Module<T>>::validator_count() as usize; let validators_per_parachain = if parachain_count != 0 { (validator_count - 1) / parachain_count } else { 0 }; let mut roles_val = (0..validator_count).map(|i| match i { - i if i < parachain_count * validators_per_parachain => - Chain::Parachain(Id::from(i / validators_per_parachain as u32)), + i if i < parachain_count * validators_per_parachain => { + let idx = i / validators_per_parachain; + Chain::Parachain(parachains[idx].clone()) + } _ => Chain::Relay, }).collect::<Vec<_>>(); + let mut roles_gua = roles_val.clone(); - let h = <system::Module<T>>::random_seed(); - let mut seed = h.to_vec().and(b"validator_role_pairs").blake2_256(); + let random_seed = system::Module::<T>::random_seed(); + let mut seed = random_seed.to_vec().and(b"validator_role_pairs").blake2_256(); // shuffle for i in 0..(validator_count - 1) { @@ -83,16 +109,76 @@ impl<T: Trait> Module<T> { guarantor_duty: roles_gua, } } + + /// Register a parachain with given code. + /// Fails if given ID is already used. + pub fn register_parachain(id: Id, code: Vec<u8>, initial_head_data: Vec<u8>) { + let mut parachains = Self::active_parachains(); + match parachains.binary_search(&id) { + Ok(_) => panic!("Parachain with id {} already exists", id.into_inner()), + Err(idx) => parachains.insert(idx, id), + } + + <Code<T>>::insert(id, code); + <Parachains<T>>::put(parachains); + <Heads<T>>::insert(id, initial_head_data); + } + + /// Deregister a parachain with given id + pub fn deregister_parachain(id: Id) { + let mut parachains = Self::active_parachains(); + match parachains.binary_search(&id) { + Ok(idx) => { parachains.remove(idx); } + Err(_) => {} + } + + <Code<T>>::remove(id); + <Heads<T>>::remove(id); + <Parachains<T>>::put(parachains); + } + + fn set_heads(aux: &<T as Trait>::PublicAux, heads: Vec<CandidateReceipt>) { + assert!(aux.is_empty()); + assert!(!<DidUpdate<T>>::exists(), "Parachain heads must be updated only once in the block"); + assert!( + <system::Module<T>>::extrinsic_index() == T::SET_POSITION, + "Parachain heads update extrinsic must be at position {} in the block", + T::SET_POSITION + ); + + let active_parachains = Self::active_parachains(); + let mut iter = active_parachains.iter(); + + // perform this check before writing to storage. + for head in &heads { + assert!( + iter.find(|&p| p == &head.parachain_index).is_some(), + "Submitted candidate for unregistered or out-of-order parachain {}", + head.parachain_index.into_inner() + ); + } + + for head in heads { + let id = head.parachain_index.clone(); + <Heads<T>>::insert(id, head.head_data.0); + } + + <DidUpdate<T>>::put(true); + } } impl<T: Trait> Executable for Module<T> { fn execute() { + assert!(<Self as Store>::DidUpdate::take(), "Parachain heads must be updated once in the block"); } } +/// Parachains module genesis configuration. #[cfg(any(feature = "std", test))] pub struct GenesisConfig<T: Trait> { - pub count: u32, + /// The initial parachains, mapped to code. + pub parachains: Vec<(Id, Vec<u8>)>, + /// Phantom data. pub phantom: PhantomData<T>, } @@ -100,7 +186,7 @@ pub struct GenesisConfig<T: Trait> { impl<T: Trait> Default for GenesisConfig<T> { fn default() -> Self { GenesisConfig { - count: 0, + parachains: Vec::new(), phantom: PhantomData, } } @@ -109,12 +195,26 @@ impl<T: Trait> Default for GenesisConfig<T> { #[cfg(any(feature = "std", test))] impl<T: Trait> runtime_primitives::BuildExternalities for GenesisConfig<T> { - fn build_externalities(self) -> runtime_io::TestExternalities { + fn build_externalities(mut self) -> runtime_io::TestExternalities { + use std::collections::HashMap; use runtime_io::twox_128; use codec::Slicable; - map![ - twox_128(<Count<T>>::key()).to_vec() => self.count.encode() - ] + + self.parachains.sort_unstable_by_key(|&(ref id, _)| id.clone()); + self.parachains.dedup_by_key(|&mut (ref id, _)| id.clone()); + + let only_ids: Vec<_> = self.parachains.iter().map(|&(ref id, _)| id).cloned().collect(); + + let mut map: HashMap<_, _> = map![ + twox_128(<Parachains<T>>::key()).to_vec() => only_ids.encode() + ]; + + for (id, code) in self.parachains { + let key = twox_128(&<Code<T>>::key_for(&id)).to_vec(); + map.insert(key, code.encode()); + } + + map.into() } } @@ -148,12 +248,15 @@ mod tests { impl session::Trait for Test { type ConvertAccountIdToSessionKey = Identity; } - impl Trait for Test {} + impl Trait for Test { + const SET_POSITION: u32 = 0; + + type PublicAux = <Self as HasPublicAux>::PublicAux; + } - type System = system::Module<Test>; type Parachains = Module<Test>; - fn new_test_ext() -> runtime_io::TestExternalities { + fn new_test_ext(parachains: Vec<(Id, Vec<u8>)>) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::<Test>::default().build_externalities(); t.extend(consensus::GenesisConfig::<Test>{ code: vec![], @@ -164,22 +267,59 @@ mod tests { validators: vec![1, 2, 3, 4, 5, 6, 7, 8], }.build_externalities()); t.extend(GenesisConfig::<Test>{ - count: 2, + parachains: parachains, phantom: PhantomData, }.build_externalities()); t } #[test] - fn simple_setup_should_work() { - with_externalities(&mut new_test_ext(), || { - assert_eq!(Parachains::count(), 2); + fn active_parachains_should_work() { + let parachains = vec![ + (5u32.into(), vec![1,2,3]), + (100u32.into(), vec![4,5,6]), + ]; + + with_externalities(&mut new_test_ext(parachains), || { + assert_eq!(Parachains::active_parachains(), vec![5u32.into(), 100u32.into()]); + assert_eq!(Parachains::parachain_code(&5u32.into()), Some(vec![1,2,3])); + assert_eq!(Parachains::parachain_code(&100u32.into()), Some(vec![4,5,6])); }); } #[test] - fn should_work() { - with_externalities(&mut new_test_ext(), || { + fn register_deregister() { + let parachains = vec![ + (5u32.into(), vec![1,2,3]), + (100u32.into(), vec![4,5,6]), + ]; + + with_externalities(&mut new_test_ext(parachains), || { + assert_eq!(Parachains::active_parachains(), vec![5u32.into(), 100u32.into()]); + + assert_eq!(Parachains::parachain_code(&5u32.into()), Some(vec![1,2,3])); + assert_eq!(Parachains::parachain_code(&100u32.into()), Some(vec![4,5,6])); + + Parachains::register_parachain(99u32.into(), vec![7,8,9], vec![1, 1, 1]); + + assert_eq!(Parachains::active_parachains(), vec![5u32.into(), 99u32.into(), 100u32.into()]); + assert_eq!(Parachains::parachain_code(&99u32.into()), Some(vec![7,8,9])); + + Parachains::deregister_parachain(5u32.into()); + + assert_eq!(Parachains::active_parachains(), vec![99u32.into(), 100u32.into()]); + assert_eq!(Parachains::parachain_code(&5u32.into()), None); + }); + } + + #[test] + fn duty_roster_works() { + let parachains = vec![ + (0u32.into(), vec![]), + (1u32.into(), vec![]), + ]; + + with_externalities(&mut new_test_ext(parachains), || { let check_roster = |duty_roster: &DutyRoster| { assert_eq!(duty_roster.validator_duty.len(), 8); assert_eq!(duty_roster.guarantor_duty.len(), 8); @@ -191,16 +331,17 @@ mod tests { assert_eq!(duty_roster.guarantor_duty.iter().filter(|&&j| j == Chain::Relay).count(), 2); }; - System::set_random_seed([0u8; 32].into()); + system::Module::<Test>::set_random_seed([0u8; 32].into()); let duty_roster_0 = Parachains::calculate_duty_roster(); check_roster(&duty_roster_0); - System::set_random_seed([1u8; 32].into()); + system::Module::<Test>::set_random_seed([1u8; 32].into()); let duty_roster_1 = Parachains::calculate_duty_roster(); check_roster(&duty_roster_1); assert!(duty_roster_0 != duty_roster_1); - System::set_random_seed([2u8; 32].into()); + + system::Module::<Test>::set_random_seed([2u8; 32].into()); let duty_roster_2 = Parachains::calculate_duty_roster(); check_roster(&duty_roster_2); assert!(duty_roster_0 != duty_roster_2); diff --git a/polkadot/runtime/wasm/Cargo.lock b/polkadot/runtime/wasm/Cargo.lock index 77658199f1d..bc00ce5ccd8 100644 --- a/polkadot/runtime/wasm/Cargo.lock +++ b/polkadot/runtime/wasm/Cargo.lock @@ -498,9 +498,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "substrate-codec" version = "0.1.0" -dependencies = [ - "substrate-runtime-std 0.1.0", -] [[package]] name = "substrate-keyring" diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm index 134df026b54534d6ec84e85bf60c1a8a2ee8651a..35f1cfd18b2c55732ede75049b876d94ba9d76e1 100644 GIT binary patch delta 139463 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%0Dc>LbnxP{k%_;b9$Q>`y=SdNL8Un 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 Luzej1PyGK4^yeMh delta 127771 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 diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm index 6c962c62d8156b4026a958286fb6d7bbd6cbc0f0..7bc43f97d55204d60854c78bd42f5c0f5adb81c8 100755 GIT binary patch delta 145198 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
-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�Q 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 H7SH`(8D*y_ delta 134078 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	RB@5hSUAYup()WjB`FnG@|( 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 a+?U}fxwGe`NQmvy67{H#@tL3w2mc3&m6|F5 diff --git a/polkadot/service/src/lib.rs b/polkadot/service/src/lib.rs index ee24cd0eb59..7ed649b672d 100644 --- a/polkadot/service/src/lib.rs +++ b/polkadot/service/src/lib.rs @@ -351,7 +351,13 @@ impl Service { // Load the first available key. Code above makes sure it exisis. let key = keystore.load(&keystore.contents()?[0], "")?; info!("Using authority key {:?}", key.public()); - Some(consensus::Service::new(client.clone(), network.clone(), transaction_pool.clone(), key)) + Some(consensus::Service::new( + client.clone(), + network.clone(), + transaction_pool.clone(), + ::std::time::Duration::from_millis(4000), // TODO: dynamic + key, + )) } else { None }; diff --git a/polkadot/statement-table/src/generic.rs b/polkadot/statement-table/src/generic.rs index 11665fe1146..4436730b3ef 100644 --- a/polkadot/statement-table/src/generic.rs +++ b/polkadot/statement-table/src/generic.rs @@ -268,6 +268,7 @@ pub struct Table<C: Context> { authority_data: HashMap<C::AuthorityId, AuthorityData<C>>, detected_misbehavior: HashMap<C::AuthorityId, <C as ResolveMisbehavior>::Misbehavior>, candidate_votes: HashMap<C::Digest, CandidateData<C>>, + includable_count: HashMap<C::GroupId, usize>, } impl<C: Context> Default for Table<C> { @@ -276,6 +277,7 @@ impl<C: Context> Default for Table<C> { authority_data: HashMap::new(), detected_misbehavior: HashMap::new(), candidate_votes: HashMap::new(), + includable_count: HashMap::new(), } } } @@ -294,6 +296,11 @@ impl<C: Context> Table<C> { let mut best_candidates = BTreeMap::new(); for candidate_data in self.candidate_votes.values() { let group_id = &candidate_data.group_id; + + if !self.includable_count.contains_key(group_id) { + continue + } + let (validity_t, availability_t) = context.requisite_votes(group_id); if !candidate_data.can_be_included(validity_t, availability_t) { continue } @@ -394,6 +401,11 @@ impl<C: Context> Table<C> { &self.detected_misbehavior } + /// Get the current number of parachains with includable candidates. + pub fn includable_count(&self) -> usize { + self.includable_count.len() + } + /// Fill a statement batch and note messages as seen by the targets. pub fn fill_batch<B>(&mut self, batch: &mut B) where B: StatementBatch< @@ -622,6 +634,9 @@ impl<C: Context> Table<C> { Some(votes) => votes, }; + let (v_threshold, a_threshold) = context.requisite_votes(&votes.group_id); + let was_includable = votes.can_be_included(v_threshold, a_threshold); + // check that this authority actually can vote in this group. if !context.is_member_of(&from, &votes.group_id) { let (sig, valid) = match vote { @@ -686,6 +701,9 @@ impl<C: Context> Table<C> { } } + let is_includable = votes.can_be_included(v_threshold, a_threshold); + update_includable_count(&mut self.includable_count, &votes.group_id, was_includable, is_includable); + (None, Some(votes.summary(digest))) } @@ -701,6 +719,9 @@ impl<C: Context> Table<C> { Some(votes) => votes, }; + let (v_threshold, a_threshold) = context.requisite_votes(&votes.group_id); + let was_includable = votes.can_be_included(v_threshold, a_threshold); + // check that this authority actually can vote in this group. if !context.is_availability_guarantor_of(&from, &votes.group_id) { return ( @@ -716,10 +737,29 @@ impl<C: Context> Table<C> { } votes.availability_votes.insert(from, signature); + + let is_includable = votes.can_be_included(v_threshold, a_threshold); + update_includable_count(&mut self.includable_count, &votes.group_id, was_includable, is_includable); + (None, Some(votes.summary(digest))) } } +fn update_includable_count<G: Hash + Eq + Clone>(map: &mut HashMap<G, usize>, group_id: &G, was_includable: bool, is_includable: bool) { + if was_includable && !is_includable { + if let Entry::Occupied(mut entry) = map.entry(group_id.clone()) { + *entry.get_mut() -= 1; + if *entry.get() == 0 { + entry.remove(); + } + } + } + + if !was_includable && is_includable { + *map.entry(group_id.clone()).or_insert(0) += 1; + } +} + #[cfg(test)] mod tests { use super::*; @@ -746,11 +786,7 @@ mod tests { } fn create<C: Context>() -> Table<C> { - Table { - authority_data: HashMap::default(), - detected_misbehavior: HashMap::default(), - candidate_votes: HashMap::default(), - } + Table::default() } #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] @@ -806,8 +842,16 @@ mod tests { self.authorities.get(authority).map(|v| &v.1 == group).unwrap_or(false) } - fn requisite_votes(&self, _id: &GroupId) -> (usize, usize) { - (6, 34) + fn requisite_votes(&self, id: &GroupId) -> (usize, usize) { + let mut total_validity = 0; + let mut total_availability = 0; + + for &(ref validity, ref availability) in self.authorities.values() { + if validity == id { total_validity += 1 } + if availability == id { total_availability += 1 } + } + + (total_validity / 2 + 1, total_availability / 2 + 1) } } @@ -1067,6 +1111,69 @@ mod tests { assert!(!candidate.can_be_included(validity_threshold, availability_threshold)); } + #[test] + fn includability_counter() { + let context = TestContext { + authorities: { + let mut map = HashMap::new(); + map.insert(AuthorityId(1), (GroupId(2), GroupId(455))); + map.insert(AuthorityId(2), (GroupId(2), GroupId(455))); + map.insert(AuthorityId(3), (GroupId(2), GroupId(455))); + map.insert(AuthorityId(4), (GroupId(455), GroupId(2))); + map + } + }; + + // have 2/3 validity guarantors note validity. + let mut table = create(); + let statement = SignedStatement { + statement: Statement::Candidate(Candidate(2, 100)), + signature: Signature(1), + sender: AuthorityId(1), + }; + let candidate_digest = Digest(100); + + table.import_statement(&context, statement, None); + assert!(!table.detected_misbehavior.contains_key(&AuthorityId(1))); + assert!(!table.candidate_includable(&candidate_digest, &context)); + assert!(table.includable_count.is_empty()); + + let vote = SignedStatement { + statement: Statement::Valid(candidate_digest.clone()), + signature: Signature(2), + sender: AuthorityId(2), + }; + + table.import_statement(&context, vote, None); + assert!(!table.detected_misbehavior.contains_key(&AuthorityId(2))); + assert!(!table.candidate_includable(&candidate_digest, &context)); + assert!(table.includable_count.is_empty()); + + // have the availability guarantor note validity. + let vote = SignedStatement { + statement: Statement::Available(candidate_digest.clone()), + signature: Signature(4), + sender: AuthorityId(4), + }; + + table.import_statement(&context, vote, None); + assert!(!table.detected_misbehavior.contains_key(&AuthorityId(4))); + assert!(table.candidate_includable(&candidate_digest, &context)); + assert!(table.includable_count.get(&GroupId(2)).is_some()); + + // have the last validity guarantor note invalidity. now it is unincludable. + let vote = SignedStatement { + statement: Statement::Invalid(candidate_digest.clone()), + signature: Signature(3), + sender: AuthorityId(3), + }; + + table.import_statement(&context, vote, None); + assert!(!table.detected_misbehavior.contains_key(&AuthorityId(2))); + assert!(!table.candidate_includable(&candidate_digest, &context)); + assert!(table.includable_count.is_empty()); + } + #[test] fn candidate_import_gives_summary() { let context = TestContext { diff --git a/polkadot/transaction-pool/src/lib.rs b/polkadot/transaction-pool/src/lib.rs index 68166288b08..d375c7c3718 100644 --- a/polkadot/transaction-pool/src/lib.rs +++ b/polkadot/transaction-pool/src/lib.rs @@ -36,7 +36,8 @@ use std::sync::Arc; use polkadot_api::PolkadotApi; use primitives::{AccountId, Timestamp}; -use runtime::{Block, UncheckedExtrinsic, TimestampCall, Call}; +use primitives::parachain::CandidateReceipt; +use runtime::{Block, UncheckedExtrinsic, TimestampCall, ParachainsCall, Call}; use substrate_runtime_primitives::traits::{Bounded, Checkable}; use transaction_pool::{Pool, Readiness}; use transaction_pool::scoring::{Change, Choice}; @@ -59,17 +60,26 @@ pub struct PolkadotBlock { impl PolkadotBlock { /// Create a new block, checking high-level well-formedness. pub fn from(unchecked: Block) -> ::std::result::Result<Self, Block> { - if unchecked.extrinsics.len() < 1 { + if unchecked.extrinsics.len() < 2 { return Err(unchecked); } if unchecked.extrinsics[0].is_signed() { return Err(unchecked); } + if unchecked.extrinsics[1].is_signed() { + return Err(unchecked); + } + match unchecked.extrinsics[0].extrinsic.function { Call::Timestamp(TimestampCall::set(_)) => {}, _ => return Err(unchecked), } + match unchecked.extrinsics[1].extrinsic.function { + Call::Parachains(ParachainsCall::set_heads(_)) => {}, + _ => return Err(unchecked), + } + // any further checks... Ok(PolkadotBlock { block: unchecked, location: None }) } @@ -92,6 +102,19 @@ impl PolkadotBlock { } } } + + /// Retrieve the parachain candidates proposed for this block. + pub fn parachain_heads(&self) -> &[CandidateReceipt] { + if let Call::Parachains(ParachainsCall::set_heads(ref t)) = self.block.extrinsics[1].extrinsic.function { + &t[..] + } else { + if let Some((file, line)) = self.location { + panic!("Invalid block used in `PolkadotBlock::force_from` at {}:{}", file, line); + } else { + panic!("Invalid block made it through the PolkadotBlock verification!?"); + } + } + } } #[macro_export] diff --git a/polkadot/validator/Cargo.toml b/polkadot/validator/Cargo.toml deleted file mode 100644 index 204c356a990..00000000000 --- a/polkadot/validator/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "polkadot-validator" -version = "0.1.0" -authors = ["Parity Technologies <admin@parity.io>"] - -[dependencies] -error-chain = "0.11" -serde = "1.0" -substrate-primitives = { path = "../../substrate/primitives" } -substrate-serializer = { path = "../../substrate/serializer" } -polkadot-primitives = { path = "../primitives" } diff --git a/polkadot/validator/src/error.rs b/polkadot/validator/src/error.rs deleted file mode 100644 index 1c8caf739f6..00000000000 --- a/polkadot/validator/src/error.rs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2017 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 <http://www.gnu.org/licenses/>. - -use serializer; - -error_chain! { - foreign_links { - Serialization(serializer::Error); - } - errors { - Timeout { - description("Validation task has timed-out."), - display("Validation timeout."), - } - InvalidCode(details: String) { - description("The code is invalid."), - display("invalid code: '{}'", details), - } - } -} diff --git a/polkadot/validator/src/lib.rs b/polkadot/validator/src/lib.rs deleted file mode 100644 index dc139e77d5b..00000000000 --- a/polkadot/validator/src/lib.rs +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2017 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 <http://www.gnu.org/licenses/>. - -//! Validator implementation. - -#[warn(missing_docs)] - -extern crate substrate_primitives as primitives; -extern crate substrate_serializer as serializer; -extern crate polkadot_primitives; -extern crate serde; - -#[macro_use] -extern crate error_chain; - -mod error; -mod parachains; -mod validator; - -pub use error::{Error, ErrorKind, Result}; -pub use validator::Validator; diff --git a/polkadot/validator/src/parachains.rs b/polkadot/validator/src/parachains.rs deleted file mode 100644 index 67ba56ed1f8..00000000000 --- a/polkadot/validator/src/parachains.rs +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2017 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 <http://www.gnu.org/licenses/>. - -use std::fmt; - -use polkadot_primitives::validator; -use serde::de::DeserializeOwned; - -use error::Result; - -/// Parachain code implementation. -pub trait ParachainCode: fmt::Debug { - /// Deserialized message type. - type Message: DeserializeOwned; - /// Balance download. - type Download: DeserializeOwned; - /// Deserialized block data type. - type BlockData: DeserializeOwned; - /// Parachain head data. - type HeadData: DeserializeOwned; - /// Result - type Result: Into<validator::ValidationResult>; - - /// Given decoded messages and proof validate it and return egress posts. - fn check( - &self, - messages: Vec<(u64, Vec<Self::Message>)>, - downloads: Vec<Self::Download>, - block_data: Self::BlockData, - head_data: Self::HeadData, - ) -> Result<Self::Result>; -} - -/// Dummy implementation of the first parachain validation. -#[derive(Debug)] -pub struct ParaChain1; - -impl ParachainCode for ParaChain1 { - type Message = (); - type Download = (); - type BlockData = (); - type HeadData = (); - type Result = validator::ValidationResult; - - fn check( - &self, - _messages: Vec<(u64, Vec<Self::Message>)>, - _downloads: Vec<Self::Download>, - _block_data: Self::BlockData, - _head_data: Self::HeadData, - ) -> Result<Self::Result> - { - unimplemented!() - } -} diff --git a/polkadot/validator/src/validator.rs b/polkadot/validator/src/validator.rs deleted file mode 100644 index 354bbf73dce..00000000000 --- a/polkadot/validator/src/validator.rs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2017 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 <http://www.gnu.org/licenses/>. - -use std::fmt; - -use polkadot_primitives::{validator, parachain}; -use serde::de::DeserializeOwned; -use serializer; - -use error::{ErrorKind, Result}; -use parachains::{ParachainCode, ParaChain1}; - -/// A dummy validator implementation. -#[derive(Debug)] -pub struct Validator { - codes: Vec<Box<Code>>, -} - -impl Validator { - /// Create a new validator. - pub fn new() -> Self { - Validator { - codes: vec![ - Box::new(ParaChain1) as Box<Code> - ], - } - } -} - -impl Validator { - pub fn validate( - &self, - code: &[u8], - consolidated_ingress: &[(u64, Vec<parachain::Message>)], - balance_downloads: &[validator::BalanceDownload], - block_data: ¶chain::BlockData, - previous_head_data: ¶chain::HeadData, - ) -> Result<validator::ValidationResult> { - ensure!(code.len() == 1, ErrorKind::InvalidCode(format!("The code should be a single byte."))); - - match self.codes.get(code[0] as usize) { - Some(code) => code.check(consolidated_ingress, balance_downloads, block_data, previous_head_data), - None => bail!(ErrorKind::InvalidCode(format!("Unknown parachain code."))), - } - } -} - -/// Simplified parachain code verification -trait Code: fmt::Debug { - /// Given parachain candidate block data returns it's validity - /// and possible generated egress posts. - fn check( - &self, - consolidated_ingress: &[(u64, Vec<parachain::Message>)], - balance_downloads: &[validator::BalanceDownload], - block_data: ¶chain::BlockData, - previous_head_data: ¶chain::HeadData, - ) -> Result<validator::ValidationResult>; -} - -impl<M, B, T, R> Code for T where - M: DeserializeOwned, - B: DeserializeOwned, - R: Into<validator::ValidationResult>, - T: ParachainCode<Message=M, BlockData=B, Result=R>, -{ - fn check( - &self, - consolidated_ingress: &[(u64, Vec<parachain::Message>)], - balance_downloads: &[validator::BalanceDownload], - block_data: ¶chain::BlockData, - previous_head_data: ¶chain::HeadData, - ) -> Result<validator::ValidationResult> { - let messages = consolidated_ingress.iter() - .map(|&(ref block, ref vec)| Ok((*block, vec.iter() - .map(|msg| serializer::from_slice(&msg.0).map_err(Into::into)) - .collect::<Result<Vec<_>>>()? - ))) - .collect::<Result<Vec<_>>>()?; - let downloads = balance_downloads.iter() - .map(|download| serializer::from_slice(&download.0).map_err(Into::into)) - .collect::<Result<Vec<_>>>()?; - let block_data = serializer::from_slice(&block_data.0)?; - let head_data = serializer::from_slice(&previous_head_data.0)?; - - Ok(self.check(messages, downloads, block_data, head_data)?.into()) - } -} -- GitLab