From 8d0ae856b0a92d7c47b3983ac9341c46937d50fc Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Wed, 6 Jun 2018 17:58:45 +0200 Subject: [PATCH] Make substrate generic (#169) * Some initial work on RPC and client * Rephrase as params * More work on traitifying substrate. * Traitify in_mem.rs * traitify client.rs * Make new primitives (mainly traits) build again. * Many (superficial) build fixes throughout. * Fix remaining build issues up to bft interface. * Make bft primitives be generic. * Switch out MisBehaviorReport for generic version. * Merge Hashing into Header. * Update runtime for new generics (with Hashing). * Update demo runtime. * Make runtime compile. * Build fixes for runtime * Remove old modules. * port substrate-bft to use generic substrate types * port client * port substrate-test-runtime * mostly port test-runtime to get compiling for std * Ensure `AccountId` has a `Default`. * Fix type deps. * finish porting * initialize test_runtime from genesis correctly * remove commented code * maybe unsigned signatures * runtimes compile * port over most of network * serialization for generic types * fix comment * remove some unnecessary trait bounds * network compiles * tests compile for sync * fix deserialization * temporarily remove deserialize derives * workarounds for serde issues for deriving deserialization * get demo-runtime compiling on std * port extrinsic-pool * primitives reshuffling * get network compiling again * remove debugging file * runtime tests now passing * port client-db * start to port over substrate-rpc * mostly port over PolkadotApi * test_runtime follows normal conventions * substrate runtime tests pass * deal with inherent extrinsics correctly in polkadot-api * port transaction-pool * port polkadot-consensus * port substrate-rpc * everything compiles * tests compile * fix grumbles * test-runtime uses its own transfer type * switch to master branch of jsonrpc * fix network tests and some warnings * all tests pass locally * [ci-skip] add another comment about issue * remove some curlies --- polkadot/api/src/full.rs | 243 ++++------ polkadot/api/src/lib.rs | 49 +- polkadot/api/src/light.rs | 50 +- polkadot/cli/Cargo.toml | 8 +- polkadot/cli/src/informant.rs | 11 +- polkadot/cli/src/lib.rs | 14 +- polkadot/collator/Cargo.toml | 3 +- polkadot/collator/src/lib.rs | 5 +- polkadot/consensus/Cargo.toml | 1 + polkadot/consensus/src/error.rs | 4 +- polkadot/consensus/src/evaluation.rs | 16 +- polkadot/consensus/src/lib.rs | 73 +-- polkadot/consensus/src/service.rs | 102 ++-- polkadot/consensus/src/shared_table/mod.rs | 4 +- polkadot/executor/Cargo.toml | 12 - polkadot/executor/src/lib.rs | 7 - polkadot/primitives/src/lib.rs | 72 ++- polkadot/primitives/src/parachain.rs | 89 ++-- polkadot/runtime/Cargo.toml | 4 +- polkadot/runtime/src/lib.rs | 191 +++++++- polkadot/runtime/src/parachains.rs | 19 +- polkadot/runtime/wasm/Cargo.lock | 438 ++++++++++-------- polkadot/runtime/wasm/Cargo.toml | 4 +- .../release/polkadot_runtime.compact.wasm | Bin 428387 -> 419388 bytes .../release/polkadot_runtime.wasm | Bin 464443 -> 460905 bytes polkadot/service/src/lib.rs | 106 +++-- polkadot/statement-table/src/lib.rs | 4 +- polkadot/transaction-pool/src/lib.rs | 145 ++---- 28 files changed, 850 insertions(+), 824 deletions(-) diff --git a/polkadot/api/src/full.rs b/polkadot/api/src/full.rs index 68c79819e5..101f59f5a7 100644 --- a/polkadot/api/src/full.rs +++ b/polkadot/api/src/full.rs @@ -17,20 +17,20 @@ //! Strongly typed API for full Polkadot client. use client::backend::{Backend, LocalBackend}; -use client::{self, Client, LocalCallExecutor}; +use client::block_builder::BlockBuilder as ClientBlockBuilder; +use client::{Client, LocalCallExecutor}; use polkadot_executor::Executor as LocalDispatch; use substrate_executor::{NativeExecutionDispatch, NativeExecutor}; -use state_machine::{self, OverlayedChanges}; +use state_machine; -use primitives::{AccountId, BlockId, Hash, Index, SessionKey, Timestamp}; -use primitives::parachain::{DutyRoster, CandidateReceipt, Id as ParaId}; -use runtime::{self, Block, Header, UncheckedExtrinsic, Extrinsic, Call, TimestampCall, ParachainsCall}; +use primitives::{AccountId, Block, Header, BlockId, Hash, Index, SessionKey, Timestamp, UncheckedExtrinsic}; +use primitives::parachain::{CandidateReceipt, DutyRoster, Id as ParaId}; use {CheckedBlockId, BlockBuilder, PolkadotApi, LocalPolkadotApi, ErrorKind, Error, Result}; /// A checked block ID used for the substrate-client implementation of CheckedBlockId; #[derive(Debug, Clone, Copy)] -pub struct CheckedId(pub BlockId); +pub struct CheckedId(pub(crate) BlockId); impl CheckedBlockId for CheckedId { fn block_id(&self) -> &BlockId { @@ -44,14 +44,16 @@ macro_rules! with_runtime { ($client: ident, $at: expr, $exec: expr) => {{ let parent = $at.block_id(); let header = Header { - parent_hash: $client.block_hash_from_id(parent)?.ok_or(ErrorKind::UnknownBlock(*parent))?, - number: $client.block_number_from_id(parent)?.ok_or(ErrorKind::UnknownBlock(*parent))? + 1, + parent_hash: $client.block_hash_from_id(&parent)? + .ok_or_else(|| ErrorKind::UnknownBlock(format!("{:?}", parent)))?, + number: $client.block_number_from_id(&parent)? + .ok_or_else(|| ErrorKind::UnknownBlock(format!("{:?}", parent)))? + 1, state_root: Default::default(), extrinsics_root: Default::default(), digest: Default::default(), }; - $client.state_at(parent).map_err(Error::from).and_then(|state| { + $client.state_at(&parent).map_err(Error::from).and_then(|state| { let mut changes = Default::default(); let mut ext = state_machine::Ext::new(&mut changes, &state); @@ -63,105 +65,28 @@ macro_rules! with_runtime { }} } -/// A polkadot block builder. -#[derive(Debug, Clone)] -pub struct ClientBlockBuilder { - parent: BlockId, - changes: OverlayedChanges, - state: S, - header: Header, - timestamp: Timestamp, - extrinsics: Vec, -} - -impl ClientBlockBuilder - where S::Error: Into -{ - // 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); - let h = self.header.clone(); - - ::substrate_executor::with_native_environment( - &mut ext, - || runtime::Executive::initialise_block(&h), - ).map_err(Into::into) - }; - - match result { - Ok(_) => { - self.changes.commit_prospective(); - Ok(()) - } - Err(e) => { - self.changes.discard_prospective(); - Err(e) - } - } - } - - // executes a extrinsic, inherent or otherwise, without appending to the list. - fn apply_extrinsic(&mut self, extrinsic: UncheckedExtrinsic) -> Result<()> { - let result = { - let mut ext = state_machine::Ext::new(&mut self.changes, &self.state); - - ::substrate_executor::with_native_environment( - &mut ext, - move || runtime::Executive::apply_extrinsic(extrinsic), - ).map_err(Into::into) - }; - - match result { - Ok(_) => { - self.changes.commit_prospective(); - Ok(()) - } - Err(e) => { - self.changes.discard_prospective(); - Err(e) - } - } - } -} - -impl BlockBuilder for ClientBlockBuilder - where S::Error: Into +impl> BlockBuilder for ClientBlockBuilder>, Block> + where ::client::error::Error: From<<>::State as state_machine::backend::Backend>::Error> { fn push_extrinsic(&mut self, extrinsic: UncheckedExtrinsic) -> Result<()> { - // Check that this is not an "inherent" extrinsic. - if extrinsic.signature == Default::default() { - bail!(ErrorKind::PushedInherentTransaction(extrinsic)); - } else { - self.apply_extrinsic(extrinsic.clone())?; - self.extrinsics.push(extrinsic); - Ok(()) - } + self.push(extrinsic).map_err(Into::into) } - fn bake(mut self) -> Block { - let mut ext = state_machine::Ext::new(&mut self.changes, &self.state); - - let final_header = ::substrate_executor::with_native_environment( - &mut ext, - move || runtime::Executive::finalise_block() - ).expect("all inherent extrinsics pushed; all other extrinsics executed correctly; qed"); - Block { - header: final_header, - extrinsics: self.extrinsics, - } + /// Bake the block with provided extrinsics. + fn bake(self) -> Result { + ClientBlockBuilder::bake(self).map_err(Into::into) } } -impl PolkadotApi for Client>> - where ::client::error::Error: From<<::State as state_machine::backend::Backend>::Error> +impl> PolkadotApi for Client>, Block> + where ::client::error::Error: From<<>::State as state_machine::backend::Backend>::Error> { type CheckedBlockId = CheckedId; - type BlockBuilder = ClientBlockBuilder; + type BlockBuilder = ClientBlockBuilder>, Block>; fn check_id(&self, id: BlockId) -> Result { // bail if the code is not the same as the natively linked. - if self.code_at(&id)? != LocalDispatch::native_equivalent() { + if self.code_at(&id.into())? != LocalDispatch::native_equivalent() { bail!("This node is out of date. Block authoring may not work correctly. Bailing.") } @@ -190,8 +115,16 @@ impl PolkadotApi for Client Result { use substrate_executor::error::ErrorKind as ExecErrorKind; + use codec::Slicable; + use runtime::Block as RuntimeBlock; - let res = with_runtime!(self, at, || ::runtime::Executive::execute_block(block)); + let encoded = block.encode(); + let runtime_block = match RuntimeBlock::decode(&mut &encoded[..]) { + Some(x) => x, + None => return Ok(false), + }; + + let res = with_runtime!(self, at, || ::runtime::Executive::execute_block(runtime_block)); match res { Ok(()) => Ok(true), Err(err) => match err.kind() { @@ -217,85 +150,65 @@ impl PolkadotApi for Client) -> Result { - let parent = parent.block_id(); - let header = Header { - parent_hash: self.block_hash_from_id(parent)?.ok_or(ErrorKind::UnknownBlock(*parent))?, - number: self.block_number_from_id(parent)?.ok_or(ErrorKind::UnknownBlock(*parent))? + 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: Default::default(), - }; - - let extrinsics = vec![ - UncheckedExtrinsic { - extrinsic: Extrinsic { - signed: Default::default(), - index: Default::default(), - 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(), - } - ]; - - let mut builder = ClientBlockBuilder { - parent: *parent, - changes: OverlayedChanges::default(), - state: self.state_at(parent)?, - header, - timestamp, - extrinsics: extrinsics.clone(), - }; - - builder.initialise_block()?; - - for inherent in extrinsics { - builder.apply_extrinsic(inherent)?; + fn build_block(&self, at: &CheckedId, timestamp: Timestamp, new_heads: Vec) -> Result { + let mut block_builder = self.new_block_at(at.block_id())?; + for inherent in self.inherent_extrinsics(at, timestamp, new_heads)? { + block_builder.push(inherent)?; } - Ok(builder) + Ok(block_builder) + } + + fn inherent_extrinsics(&self, at: &Self::CheckedBlockId, timestamp: Timestamp, new_heads: Vec) -> Result> { + use codec::Slicable; + + with_runtime!(self, at, || { + let extrinsics = ::runtime::inherent_extrinsics(timestamp, new_heads); + extrinsics.into_iter() + .map(|x| x.encode()) // get encoded representation + .map(|x| Slicable::decode(&mut &x[..])) // get byte-vec equivalent to extrinsic + .map(|x| x.expect("UncheckedExtrinsic has encoded representation equivalent to Vec; qed")) + .collect() + }) } } -impl LocalPolkadotApi for Client>> - where ::client::error::Error: From<<::State as state_machine::backend::Backend>::Error> +impl> LocalPolkadotApi for Client>, Block> + where ::client::error::Error: From<<>::State as state_machine::backend::Backend>::Error> {} #[cfg(test)] mod tests { use super::*; use keyring::Keyring; - use codec::Slicable; use client::{self, LocalCallExecutor}; use client::in_mem::Backend as InMemory; use substrate_executor::NativeExecutionDispatch; - use substrate_primitives::{self, Header}; use runtime::{GenesisConfig, ConsensusConfig, SessionConfig, BuildExternalities}; fn validators() -> Vec { + vec![ + Keyring::One.to_raw_public().into(), + Keyring::Two.to_raw_public().into(), + ] + } + + fn session_keys() -> Vec { vec![ Keyring::One.to_raw_public(), Keyring::Two.to_raw_public(), ] } - fn client() -> Client>> { + fn client() -> Client, LocalCallExecutor, NativeExecutor>, Block> { struct GenesisBuilder; - impl client::GenesisBuilder for GenesisBuilder { + impl client::GenesisBuilder for GenesisBuilder { fn build(self) -> (Header, Vec<(Vec, Vec)>) { let genesis_config = GenesisConfig { consensus: Some(ConsensusConfig { code: LocalDispatch::native_equivalent().to_vec(), - authorities: validators(), + authorities: session_keys(), }), system: None, session: Some(SessionConfig { @@ -309,8 +222,8 @@ mod tests { }; let storage = genesis_config.build_externalities(); - let block = ::client::genesis::construct_genesis_block(&storage); - (substrate_primitives::block::Header::decode(&mut block.header.encode().as_ref()).expect("to_vec() always gives a valid serialisation; qed"), storage.into_iter().collect()) + let block = ::client::genesis::construct_genesis_block::(&storage); + (block.header, storage.into_iter().collect()) } } @@ -320,18 +233,36 @@ mod tests { #[test] fn gets_session_and_validator_keys() { let client = client(); - let id = client.check_id(BlockId::Number(0)).unwrap(); - assert_eq!(client.session_keys(&id).unwrap(), validators()); + let id = client.check_id(BlockId::number(0)).unwrap(); + assert_eq!(client.session_keys(&id).unwrap(), session_keys()); assert_eq!(client.validators(&id).unwrap(), validators()); } #[test] - fn build_block() { + fn build_block_implicit_succeeds() { let client = client(); - let id = client.check_id(BlockId::Number(0)).unwrap(); + let id = client.check_id(BlockId::number(0)).unwrap(); let block_builder = client.build_block(&id, 1_000_000, Vec::new()).unwrap(); - let block = block_builder.bake(); + let block = block_builder.bake().unwrap(); + + assert_eq!(block.header.number, 1); + assert!(block.header.extrinsics_root != Default::default()); + } + + #[test] + fn build_block_with_inherent_succeeds() { + let client = client(); + + let id = client.check_id(BlockId::number(0)).unwrap(); + let inherent = client.inherent_extrinsics(&id, 1_000_000, Vec::new()).unwrap(); + + let mut block_builder = client.new_block_at(id.block_id()).unwrap(); + for extrinsic in inherent { + block_builder.push(extrinsic).unwrap(); + } + + let block = block_builder.bake().unwrap(); assert_eq!(block.header.number, 1); assert!(block.header.extrinsics_root != Default::default()); @@ -339,14 +270,14 @@ mod tests { #[test] fn fails_to_check_id_for_unknown_block() { - assert!(client().check_id(BlockId::Number(100)).is_err()); + assert!(client().check_id(BlockId::number(100)).is_err()); } #[test] fn gets_random_seed_with_genesis() { let client = client(); - let id = client.check_id(BlockId::Number(0)).unwrap(); + let id = client.check_id(BlockId::number(0)).unwrap(); assert!(client.random_seed(&id).is_ok()); } } diff --git a/polkadot/api/src/lib.rs b/polkadot/api/src/lib.rs index bef92d4d9f..c92f568f7b 100644 --- a/polkadot/api/src/lib.rs +++ b/polkadot/api/src/lib.rs @@ -18,8 +18,8 @@ //! runtime. extern crate polkadot_executor; -extern crate polkadot_runtime as runtime; extern crate polkadot_primitives as primitives; +extern crate polkadot_runtime as runtime; extern crate substrate_codec as codec; extern crate substrate_runtime_io as runtime_io; extern crate substrate_client as client; @@ -37,9 +37,8 @@ extern crate substrate_keyring as keyring; pub mod full; pub mod light; -use primitives::{AccountId, BlockId, Hash, Index, SessionKey, Timestamp}; -use primitives::parachain::{DutyRoster, CandidateReceipt, Id as ParaId}; -use runtime::{Block, UncheckedExtrinsic}; +use primitives::{AccountId, Block, BlockId, Hash, Index, SessionKey, Timestamp, UncheckedExtrinsic}; +use primitives::parachain::{CandidateReceipt, DutyRoster, Id as ParaId}; error_chain! { errors { @@ -49,19 +48,9 @@ error_chain! { display("Unknown runtime code") } /// Unknown block ID. - UnknownBlock(b: BlockId) { + UnknownBlock(b: String) { description("Unknown block") - display("Unknown block") - } - /// Attempted to push an inherent extrinsic manually. - PushedInherentTransaction(xt: UncheckedExtrinsic) { - description("Attempted to push an inherent extrinsic to a block."), - display("Pushed inherent extrinsic to a block: {:?}", xt), - } - /// Badly-formed extrinsic. - BadlyFormedTransaction(xt: UncheckedExtrinsic) { - description("Attempted to push a badly-formed extrinsic to a block."), - display("Pushed badly-formed extrinsic to a block: {:?}", xt), + display("Unknown block {}", b) } /// Some other error. // TODO: allow to be specified as associated type of PolkadotApi @@ -85,28 +74,28 @@ impl From for Error { } } -/// A builder for blocks. -pub trait BlockBuilder: Sized { - /// Push a non-inherent extrinsic. - fn push_extrinsic(&mut self, extrinsic: UncheckedExtrinsic) -> Result<()>; - - /// Finalise the block. - fn bake(self) -> Block; -} - /// A checked block identifier. pub trait CheckedBlockId: Clone + 'static { /// Yield the underlying block ID. fn block_id(&self) -> &BlockId; } +/// Build new blocks. +pub trait BlockBuilder { + /// Push an extrinsic onto the block. Fails if the extrinsic is invalid. + fn push_extrinsic(&mut self, extrinsic: UncheckedExtrinsic) -> Result<()>; + + /// Bake the block with provided extrinsics. + fn bake(self) -> Result; +} + /// Trait encapsulating the Polkadot API. /// /// All calls should fail when the exact runtime is unknown. pub trait PolkadotApi { /// A checked block ID. Used to avoid redundancy of code check. type CheckedBlockId: CheckedBlockId; - /// The type used to build blocks. + /// The block builder for this API type. type BlockBuilder: BlockBuilder; /// Check whether requests at the given block ID can be served. @@ -146,8 +135,12 @@ pub trait PolkadotApi { /// and an error if we can't evaluate for some reason. fn evaluate_block(&self, at: &Self::CheckedBlockId, block: Block) -> Result; - /// Create a block builder on top of the parent block. - fn build_block(&self, parent: &Self::CheckedBlockId, timestamp: Timestamp, parachains: Vec) -> Result; + /// Build a block on top of the given, with inherent extrinsics pre-pushed. + fn build_block(&self, at: &Self::CheckedBlockId, timestamp: Timestamp, new_heads: Vec) -> Result; + + /// Attempt to produce the (encoded) inherent extrinsics for a block being built upon the given. + /// This may vary by runtime and will fail if a runtime doesn't follow the same API. + fn inherent_extrinsics(&self, at: &Self::CheckedBlockId, timestamp: Timestamp, new_heads: Vec) -> Result>; } /// Mark for all Polkadot API implementations, that are making use of state data, stored locally. diff --git a/polkadot/api/src/light.rs b/polkadot/api/src/light.rs index 6038a8ec1f..560c186699 100644 --- a/polkadot/api/src/light.rs +++ b/polkadot/api/src/light.rs @@ -21,20 +21,30 @@ use client::backend::{Backend, RemoteBackend}; use client::{Client, CallExecutor}; use codec::Slicable; use state_machine; -use primitives::{AccountId, BlockId, Hash, Index, SessionKey, Timestamp}; -use primitives::parachain::{DutyRoster, CandidateReceipt, Id as ParaId}; -use runtime::{Block, UncheckedExtrinsic}; +use primitives::{AccountId, Block, BlockId, Hash, Index, SessionKey, Timestamp, UncheckedExtrinsic}; +use primitives::parachain::{CandidateReceipt, DutyRoster, Id as ParaId}; use full::CheckedId; -use {PolkadotApi, RemotePolkadotApi, BlockBuilder, CheckedBlockId, Result, ErrorKind}; +use {PolkadotApi, BlockBuilder, RemotePolkadotApi, CheckedBlockId, Result, ErrorKind}; -/// Remote polkadot API implementation. -pub struct RemotePolkadotApiWrapper(pub Arc>); - -/// Block builder for light client. +/// Light block builder. TODO: make this work (efficiently) +#[derive(Clone, Copy)] pub struct LightBlockBuilder; -impl PolkadotApi for RemotePolkadotApiWrapper - where ::client::error::Error: From<<::State as state_machine::backend::Backend>::Error> +impl BlockBuilder for LightBlockBuilder { + fn push_extrinsic(&mut self, _xt: UncheckedExtrinsic) -> Result<()> { + Err(ErrorKind::UnknownRuntime.into()) + } + + fn bake(self) -> Result { + Err(ErrorKind::UnknownRuntime.into()) + } +} + +/// Remote polkadot API implementation. +pub struct RemotePolkadotApiWrapper, E: CallExecutor>(pub Arc>); + +impl, E: CallExecutor> PolkadotApi for RemotePolkadotApiWrapper + where ::client::error::Error: From<<>::State as state_machine::backend::Backend>::Error> { type CheckedBlockId = CheckedId; type BlockBuilder = LightBlockBuilder; @@ -86,21 +96,15 @@ impl PolkadotApi for RemotePolkadotApiWrapper Err(ErrorKind::UnknownRuntime.into()) } - fn build_block(&self, _parent: &CheckedId, _timestamp: Timestamp, _parachains: Vec) -> Result { + fn build_block(&self, _at: &Self::CheckedBlockId, _timestamp: Timestamp, _new_heads: Vec) -> Result { + Err(ErrorKind::UnknownRuntime.into()) + } + + fn inherent_extrinsics(&self, _at: &Self::CheckedBlockId, _timestamp: Timestamp, _new_heads: Vec) -> Result>> { Err(ErrorKind::UnknownRuntime.into()) } } -impl RemotePolkadotApi for RemotePolkadotApiWrapper - where ::client::error::Error: From<<::State as state_machine::backend::Backend>::Error> +impl, E: CallExecutor> RemotePolkadotApi for RemotePolkadotApiWrapper + where ::client::error::Error: From<<>::State as state_machine::backend::Backend>::Error> {} - -impl BlockBuilder for LightBlockBuilder { - fn push_extrinsic(&mut self, _extrinsic: UncheckedExtrinsic) -> Result<()> { - Err(ErrorKind::UnknownRuntime.into()) - } - - fn bake(self) -> Block { - unimplemented!() - } -} diff --git a/polkadot/cli/Cargo.toml b/polkadot/cli/Cargo.toml index f80b3b1d9f..8cc19b0f66 100644 --- a/polkadot/cli/Cargo.toml +++ b/polkadot/cli/Cargo.toml @@ -24,16 +24,10 @@ ctrlc = { git = "https://github.com/paritytech/rust-ctrlc.git" } fdlimit = "0.1" parking_lot = "0.4" substrate-client = { path = "../../substrate/client" } -substrate-network = { path = "../../substrate/network" } -substrate-codec = { path = "../../substrate/codec" } -substrate-runtime-support = { path = "../../substrate/runtime-support" } substrate-state-machine = { path = "../../substrate/state-machine" } -substrate-executor = { path = "../../substrate/executor" } -substrate-primitives = { path = "../../substrate/primitives" } substrate-rpc = { path = "../../substrate/rpc" } substrate-rpc-servers = { path = "../../substrate/rpc-servers" } +substrate-network = { path = "../../substrate/network" } polkadot-primitives = { path = "../primitives" } -polkadot-executor = { path = "../executor" } -polkadot-runtime = { path = "../runtime" } polkadot-service = { path = "../service" } polkadot-transaction-pool = { path = "../transaction-pool" } diff --git a/polkadot/cli/src/informant.rs b/polkadot/cli/src/informant.rs index 54affa839e..c5bbe0c2a2 100644 --- a/polkadot/cli/src/informant.rs +++ b/polkadot/cli/src/informant.rs @@ -21,8 +21,7 @@ use futures::stream::Stream; use service::Service; use tokio_core::reactor; use network::{SyncState, SyncProvider}; -use runtime_support::Hashable; -use primitives::block::HeaderHash; +use polkadot_primitives::Block; use state_machine; use client::{self, BlockchainEvents}; @@ -31,9 +30,9 @@ const TIMER_INTERVAL_MS: u64 = 5000; /// Spawn informant on the event loop pub fn start(service: &Service, handle: reactor::Handle) where - B: client::backend::Backend + Send + Sync + 'static, - E: client::CallExecutor + Send + Sync + 'static, - client::error::Error: From<<::State as state_machine::backend::Backend>::Error> + B: client::backend::Backend + Send + Sync + 'static, + E: client::CallExecutor + Send + Sync + 'static, + client::error::Error: From<<>::State as state_machine::backend::Backend>::Error> { let interval = reactor::Interval::new_at(Instant::now(), Duration::from_millis(TIMER_INTERVAL_MS), &handle) .expect("Error creating informant timer"); @@ -45,7 +44,7 @@ pub fn start(service: &Service, handle: reactor::Handle) let sync_status = network.status(); if let Ok(best_block) = client.best_block_header() { - let hash: HeaderHash = best_block.blake2_256().into(); + let hash = best_block.hash(); let status = match (sync_status.sync.state, sync_status.sync.best_seen_block) { (SyncState::Idle, _) => "Idle".into(), (SyncState::Downloading, None) => "Syncing".into(), diff --git a/polkadot/cli/src/lib.rs b/polkadot/cli/src/lib.rs index f734b154cd..0d56f0d11e 100644 --- a/polkadot/cli/src/lib.rs +++ b/polkadot/cli/src/lib.rs @@ -32,17 +32,12 @@ extern crate ed25519; extern crate triehash; extern crate parking_lot; -extern crate substrate_codec as codec; extern crate substrate_state_machine as state_machine; extern crate substrate_client as client; -extern crate substrate_primitives as primitives; extern crate substrate_network as network; extern crate substrate_rpc; extern crate substrate_rpc_servers as rpc; -extern crate substrate_runtime_support as runtime_support; extern crate polkadot_primitives; -extern crate polkadot_executor; -extern crate polkadot_runtime; extern crate polkadot_service as service; extern crate polkadot_transaction_pool as txpool; @@ -61,6 +56,7 @@ mod informant; use std::io; use std::net::SocketAddr; use std::path::{Path, PathBuf}; +use polkadot_primitives::Block; use futures::sync::mpsc; use futures::{Sink, Future, Stream}; @@ -188,9 +184,9 @@ pub fn run(args: I) -> error::Result<()> where fn run_until_exit(mut core: reactor::Core, service: service::Service, matches: &clap::ArgMatches, config: service::Configuration) -> error::Result<()> where - B: client::backend::Backend + Send + Sync + 'static, - E: client::CallExecutor + Send + Sync + 'static, - client::error::Error: From<<::State as state_machine::backend::Backend>::Error> + B: client::backend::Backend + Send + Sync + 'static, + E: client::CallExecutor + Send + Sync + 'static, + client::error::Error: From<<>::State as state_machine::backend::Backend>::Error> { let exit = { // can't use signal directly here because CtrlC takes only `Fn`. @@ -210,7 +206,7 @@ fn run_until_exit(mut core: reactor::Core, service: service::Service let handler = || { let chain = rpc::apis::chain::Chain::new(service.client(), core.remote()); - rpc::rpc_handler( + rpc::rpc_handler::( service.client(), chain, service.transaction_pool(), diff --git a/polkadot/collator/Cargo.toml b/polkadot/collator/Cargo.toml index 42fc14c666..161121eefa 100644 --- a/polkadot/collator/Cargo.toml +++ b/polkadot/collator/Cargo.toml @@ -8,5 +8,6 @@ description = "Abstract collation logic" 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-runtime = { path = "../runtime", version = "0.1" } polkadot-parachain = { path = "../parachain", version = "0.1" } +polkadot-primitives = { path = "../primitives", version = "0.1" } diff --git a/polkadot/collator/src/lib.rs b/polkadot/collator/src/lib.rs index 967a8e6de6..55eca734d2 100644 --- a/polkadot/collator/src/lib.rs +++ b/polkadot/collator/src/lib.rs @@ -47,12 +47,13 @@ extern crate futures; extern crate substrate_codec as codec; extern crate substrate_primitives as primitives; +extern crate polkadot_runtime; extern crate polkadot_primitives; use std::collections::{BTreeSet, BTreeMap}; use futures::{stream, Stream, Future, IntoFuture}; -use polkadot_primitives::parachain::{self, ConsolidatedIngress, Message, Id as ParaId}; +use polkadot_primitives::parachain::{self, CandidateSignature, ConsolidatedIngress, Message, Id as ParaId}; /// Parachain context needed for collation. /// @@ -62,7 +63,7 @@ pub trait ParachainContext { fn produce_candidate>( &self, ingress: I, - ) -> (parachain::BlockData, polkadot_primitives::AccountId, polkadot_primitives::Signature); + ) -> (parachain::BlockData, polkadot_primitives::AccountId, CandidateSignature); } /// Relay chain context needed to collate. diff --git a/polkadot/consensus/Cargo.toml b/polkadot/consensus/Cargo.toml index 5be758a91b..9941a21b33 100644 --- a/polkadot/consensus/Cargo.toml +++ b/polkadot/consensus/Cargo.toml @@ -25,3 +25,4 @@ substrate-runtime-support = { path = "../../substrate/runtime-support" } substrate-network = { path = "../../substrate/network" } substrate-keyring = { path = "../../substrate/keyring" } substrate-client = { path = "../../substrate/client" } +substrate-runtime-primitives = { path = "../../substrate/runtime/primitives" } diff --git a/polkadot/consensus/src/error.rs b/polkadot/consensus/src/error.rs index ebc998ab69..acafa88f5e 100644 --- a/polkadot/consensus/src/error.rs +++ b/polkadot/consensus/src/error.rs @@ -16,7 +16,7 @@ //! Errors that can occur during the consensus process. -use polkadot_primitives::AccountId; +use primitives::AuthorityId; error_chain! { links { @@ -29,7 +29,7 @@ error_chain! { description("Duty Roster had invalid length"), display("Invalid duty roster length: expected {}, got {}", expected, got), } - NotValidator(id: AccountId) { + NotValidator(id: AuthorityId) { description("Local account ID not a validator at this block."), display("Local account ID ({:?}) not a validator at this block.", id), } diff --git a/polkadot/consensus/src/evaluation.rs b/polkadot/consensus/src/evaluation.rs index b5ef81d244..c7c4fe2c25 100644 --- a/polkadot/consensus/src/evaluation.rs +++ b/polkadot/consensus/src/evaluation.rs @@ -19,11 +19,9 @@ use super::MAX_TRANSACTIONS_SIZE; use codec::Slicable; -use polkadot_runtime::Block as PolkadotGenericBlock; -use polkadot_primitives::Timestamp; +use polkadot_runtime::{Block as PolkadotGenericBlock, CheckedBlock}; +use polkadot_primitives::{Block, Hash, BlockNumber, 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 { @@ -51,7 +49,7 @@ error_chain! { description("Proposal included unregistered parachain."), display("Proposal included unregistered parachain {:?}", id), } - WrongParentHash(expected: HeaderHash, got: HeaderHash) { + WrongParentHash(expected: Hash, got: Hash) { description("Proposal had wrong parent hash."), display("Proposal had wrong parent hash. Expected {:?}, got {:?}", expected, got), } @@ -72,17 +70,17 @@ error_chain! { /// Attempt to evaluate a substrate block as a polkadot block, returning error /// upon any initial validity checks failing. pub fn evaluate_initial( - proposal: &SubstrateBlock, + proposal: &Block, now: Timestamp, - parent_hash: &HeaderHash, + parent_hash: &Hash, parent_number: BlockNumber, active_parachains: &[ParaId], -) -> Result { +) -> Result { const MAX_TIMESTAMP_DRIFT: Timestamp = 60; let encoded = Slicable::encode(proposal); let proposal = PolkadotGenericBlock::decode(&mut &encoded[..]) - .and_then(|b| PolkadotBlock::from(b).ok()) + .and_then(|b| CheckedBlock::new(b).ok()) .ok_or_else(|| ErrorKind::ProposalNotForPolkadot)?; let transactions_size = proposal.extrinsics.iter().fold(0, |a, tx| { diff --git a/polkadot/consensus/src/lib.rs b/polkadot/consensus/src/lib.rs index def896548e..2e23b256b2 100644 --- a/polkadot/consensus/src/lib.rs +++ b/polkadot/consensus/src/lib.rs @@ -35,14 +35,15 @@ 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 polkadot_primitives; extern crate substrate_bft as bft; extern crate substrate_codec as codec; extern crate substrate_primitives as primitives; extern crate substrate_runtime_support as runtime_support; +extern crate substrate_runtime_primitives as runtime_primitives; extern crate substrate_network; extern crate exit_future; @@ -68,10 +69,9 @@ use std::time::{Duration, Instant}; use codec::Slicable; 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, Chain, DutyRoster, BlockData, Extrinsic, CandidateReceipt}; -use primitives::block::{Block as SubstrateBlock, Header as SubstrateHeader, HeaderHash, Id as BlockId, Number as BlockNumber}; +use polkadot_api::PolkadotApi; +use polkadot_primitives::{Hash, Block, BlockId, BlockNumber, Header, Timestamp}; +use polkadot_primitives::parachain::{Id as ParaId, Chain, DutyRoster, BlockData, Extrinsic as ParachainExtrinsic, CandidateReceipt}; use primitives::AuthorityId; use transaction_pool::{Ready, TransactionPool}; use tokio_core::reactor::{Handle, Timeout, Interval}; @@ -105,10 +105,10 @@ pub trait TableRouter: Clone { /// Future that resolves when candidate data is fetched. type FetchCandidate: IntoFuture; /// Future that resolves when extrinsic candidate data is fetched. - type FetchExtrinsic: IntoFuture; + type FetchExtrinsic: IntoFuture; /// 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); + fn local_candidate_data(&self, hash: Hash, block_data: BlockData, extrinsic: ParachainExtrinsic); /// Fetch block data for a specific candidate. fn fetch_block_data(&self, candidate: &CandidateReceipt) -> Self::FetchCandidate; @@ -236,7 +236,7 @@ pub struct ProposerFactory { pub parachain_empty_duration: Duration, } -impl bft::ProposerFactory for ProposerFactory +impl bft::ProposerFactory for ProposerFactory where C: PolkadotApi, N: Network, @@ -245,14 +245,14 @@ impl bft::ProposerFactory for ProposerFactory type Proposer = Proposer; type Error = Error; - fn init(&self, parent_header: &SubstrateHeader, authorities: &[AuthorityId], sign_with: Arc) -> Result { + fn init(&self, parent_header: &Header, authorities: &[AuthorityId], sign_with: Arc) -> Result { use std::time::Duration; const DELAY_UNTIL: Duration = Duration::from_millis(5000); let parent_hash = parent_header.blake2_256().into(); - let checked_id = self.client.check_id(BlockId::Hash(parent_hash))?; + let checked_id = self.client.check_id(BlockId::hash(parent_hash))?; let duty_roster = self.client.duty_roster(&checked_id)?; let random_seed = self.client.random_seed(&checked_id)?; @@ -312,7 +312,7 @@ pub struct Proposer { handle: Handle, local_duty: LocalDuty, local_key: Arc, - parent_hash: HeaderHash, + parent_hash: Hash, parent_id: C::CheckedBlockId, parent_number: BlockNumber, random_seed: Hash, @@ -321,7 +321,7 @@ pub struct Proposer { transaction_pool: Arc, } -impl bft::Proposer for Proposer +impl bft::Proposer for Proposer where C: PolkadotApi, R: TableRouter, @@ -330,7 +330,7 @@ impl bft::Proposer for Proposer type Error = Error; type Create = future::Either< CreateProposal, - future::FutureResult, + future::FutureResult, >; type Evaluate = Box>; @@ -385,7 +385,7 @@ impl bft::Proposer for Proposer }) } - fn evaluate(&self, proposal: &SubstrateBlock) -> Self::Evaluate { + fn evaluate(&self, unchecked_proposal: &Block) -> Self::Evaluate { debug!(target: "bft", "evaluating block on top of parent ({}, {:?})", self.parent_number, self.parent_hash); let active_parachains = match self.client.active_parachains(&self.parent_id) { @@ -397,7 +397,7 @@ impl bft::Proposer for Proposer // do initial serialization and structural integrity checks. let maybe_proposal = evaluation::evaluate_initial( - proposal, + unchecked_proposal, current_timestamp, &self.parent_hash, self.parent_number, @@ -461,7 +461,10 @@ impl bft::Proposer for Proposer // 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 evaluated = self.client + .evaluate_block(&self.parent_id, unchecked_proposal.clone()) + .map_err(Into::into); + let future = future::result(evaluated).and_then(move |good| { let end_result = future::ok(good); if good { @@ -489,13 +492,13 @@ impl bft::Proposer for Proposer proposer } - fn import_misbehavior(&self, misbehavior: Vec<(AuthorityId, bft::Misbehavior)>) { + fn import_misbehavior(&self, misbehavior: Vec<(AuthorityId, bft::Misbehavior)>) { use bft::generic::Misbehavior as GenericMisbehavior; - use primitives::bft::{MisbehaviorKind, MisbehaviorReport}; + use runtime_primitives::bft::{MisbehaviorKind, MisbehaviorReport}; + use runtime_primitives::MaybeUnsigned; use polkadot_runtime::{Call, Extrinsic, UncheckedExtrinsic, ConsensusCall}; - - let local_id = self.local_key.public().0; + let local_id = self.local_key.public().0.into(); let mut next_index = { let readiness_evaluator = Ready::create(self.parent_id.clone(), &*self.client); let cur_index = self.transaction_pool.cull_and_get_pending(readiness_evaluator, |pending| pending @@ -536,10 +539,11 @@ impl bft::Proposer for Proposer next_index += 1; - let signature = self.local_key.sign(&extrinsic.encode()).into(); + let signature = MaybeUnsigned(self.local_key.sign(&extrinsic.encode()).into()); let uxt = UncheckedExtrinsic { extrinsic, signature }; - self.transaction_pool.import_unchecked_extrinsic(uxt).expect("locally signed extrinsic is valid; qed"); + self.transaction_pool.import_unchecked_extrinsic(uxt) + .expect("locally signed extrinsic is valid; qed"); } } } @@ -603,7 +607,7 @@ impl ProposalTiming { /// Future which resolves upon the creation of a proposal. pub struct CreateProposal { - parent_hash: HeaderHash, + parent_hash: Hash, parent_number: BlockNumber, parent_id: C::CheckedBlockId, client: Arc, @@ -620,14 +624,13 @@ impl CreateProposal R: TableRouter, P: Collators, { - fn propose_with(&self, candidates: Vec) -> Result { + fn propose_with(&self, candidates: Vec) -> Result { + use polkadot_api::BlockBuilder; + use runtime_primitives::traits::{Hashing, BlakeTwo256}; + // 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 mut block_builder = self.client.build_block(&self.parent_id, timestamp, candidates)?; { let readiness_evaluator = Ready::create(self.parent_id.clone(), &*self.client); @@ -643,7 +646,7 @@ impl CreateProposal if pending_size + pending.encoded_size() >= MAX_TRANSACTIONS_SIZE { break } - match block_builder.push_extrinsic(pending.as_transaction().clone()) { + match block_builder.push_extrinsic(pending.primitive_extrinsic()) { Ok(()) => { pending_size += pending.encoded_size(); } @@ -658,14 +661,14 @@ impl CreateProposal self.transaction_pool.remove(&unqueue_invalid, false); } - let polkadot_block = block_builder.bake(); + 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()), + Hash::from(polkadot_block.header.hash()), polkadot_block.header.parent_hash, polkadot_block.extrinsics.iter() - .map(|xt| format!("{}", Hash::from(xt.blake2_256()))) + .map(|xt| format!("{}", BlakeTwo256::hash_of(xt))) .collect::>() .join(", ") ); @@ -693,10 +696,10 @@ impl Future for CreateProposal R: TableRouter, P: Collators, { - type Item = SubstrateBlock; + type Item = Block; type Error = Error; - fn poll(&mut self) -> Poll { + fn poll(&mut self) -> Poll { // 1. poll local collation future. match self.collation.poll() { Ok(Async::Ready((collation, extrinsic))) => { diff --git a/polkadot/consensus/src/service.rs b/polkadot/consensus/src/service.rs index dedab92135..f1ee7f49fe 100644 --- a/polkadot/consensus/src/service.rs +++ b/polkadot/consensus/src/service.rs @@ -29,10 +29,9 @@ use ed25519; use futures::prelude::*; use futures::{future, Canceled}; use polkadot_api::LocalPolkadotApi; -use polkadot_primitives::AccountId; +use polkadot_primitives::{BlockId, Block, Header, Hash, AccountId}; use polkadot_primitives::parachain::{Id as ParaId, BlockData, Extrinsic, CandidateReceipt}; -use primitives::{Hash, AuthorityId}; -use primitives::block::{Id as BlockId, HeaderHash, Header}; +use primitives::AuthorityId; use runtime_support::Hashable; use substrate_network as net; use tokio_core::reactor; @@ -45,19 +44,19 @@ const TIMER_DELAY_MS: u64 = 5000; const TIMER_INTERVAL_MS: u64 = 500; struct BftSink { - network: Arc, - parent_hash: HeaderHash, + network: Arc>, + parent_hash: Hash, _e: ::std::marker::PhantomData, } struct Messages { - network_stream: net::BftMessageStream, + network_stream: net::BftMessageStream, local_id: AuthorityId, authorities: Vec, } impl Stream for Messages { - type Item = bft::Communication; + type Item = bft::Communication; type Error = bft::Error; fn poll(&mut self) -> Poll, Self::Error> { @@ -81,10 +80,10 @@ impl Stream for Messages { } } -fn process_message(msg: net::LocalizedBftMessage, local_id: &AuthorityId, authorities: &[AuthorityId]) -> Result, bft::Error> { +fn process_message(msg: net::LocalizedBftMessage, local_id: &AuthorityId, authorities: &[AuthorityId]) -> Result>, bft::Error> { Ok(Some(match msg.message { - net::BftMessage::Consensus(c) => bft::generic::Communication::Consensus(match c { - net::SignedConsensusMessage::Propose(proposal) => bft::generic::LocalizedMessage::Propose({ + net::generic_message::BftMessage::Consensus(c) => bft::generic::Communication::Consensus(match c { + net::generic_message::SignedConsensusMessage::Propose(proposal) => bft::generic::LocalizedMessage::Propose({ if &proposal.sender == local_id { return Ok(None) } let proposal = bft::generic::LocalizedProposal { round_number: proposal.round_number as usize, @@ -105,7 +104,7 @@ fn process_message(msg: net::LocalizedBftMessage, local_id: &AuthorityId, author trace!(target: "bft", "importing proposal message for round {} from {}", proposal.round_number, Hash::from(proposal.sender)); proposal }), - net::SignedConsensusMessage::Vote(vote) => bft::generic::LocalizedMessage::Vote({ + net::generic_message::SignedConsensusMessage::Vote(vote) => bft::generic::LocalizedMessage::Vote({ if &vote.sender == local_id { return Ok(None) } let vote = bft::generic::LocalizedVote { sender: vote.sender, @@ -114,21 +113,21 @@ fn process_message(msg: net::LocalizedBftMessage, local_id: &AuthorityId, author signer: ed25519::Public(vote.sender), }, vote: match vote.vote { - net::ConsensusVote::Prepare(r, h) => bft::generic::Vote::Prepare(r as usize, h), - net::ConsensusVote::Commit(r, h) => bft::generic::Vote::Commit(r as usize, h), - net::ConsensusVote::AdvanceRound(r) => bft::generic::Vote::AdvanceRound(r as usize), + net::generic_message::ConsensusVote::Prepare(r, h) => bft::generic::Vote::Prepare(r as usize, h), + net::generic_message::ConsensusVote::Commit(r, h) => bft::generic::Vote::Commit(r as usize, h), + net::generic_message::ConsensusVote::AdvanceRound(r) => bft::generic::Vote::AdvanceRound(r as usize), } }; - bft::check_vote(authorities, &msg.parent_hash, &vote)?; + bft::check_vote::(authorities, &msg.parent_hash, &vote)?; trace!(target: "bft", "importing vote {:?} from {}", vote.vote, Hash::from(vote.sender)); vote }), }), - net::BftMessage::Auxiliary(a) => { - let justification = bft::UncheckedJustification::from(a); + net::generic_message::BftMessage::Auxiliary(a) => { + let justification = bft::UncheckedJustification::::from(a); // TODO: get proper error - let justification: Result<_, bft::Error> = bft::check_prepare_justification(authorities, msg.parent_hash, justification) + let justification: Result<_, bft::Error> = bft::check_prepare_justification::(authorities, msg.parent_hash, justification) .map_err(|_| bft::ErrorKind::InvalidJustification.into()); bft::generic::Communication::Auxiliary(justification?) }, @@ -136,15 +135,15 @@ fn process_message(msg: net::LocalizedBftMessage, local_id: &AuthorityId, author } impl Sink for BftSink { - type SinkItem = bft::Communication; + type SinkItem = bft::Communication; // TODO: replace this with the ! type when that's stabilized type SinkError = E; - fn start_send(&mut self, message: bft::Communication) -> ::futures::StartSend { - let network_message = net::LocalizedBftMessage { + fn start_send(&mut self, message: bft::Communication) -> ::futures::StartSend, E> { + let network_message = net::generic_message::LocalizedBftMessage { message: match message { - bft::generic::Communication::Consensus(c) => net::BftMessage::Consensus(match c { - bft::generic::LocalizedMessage::Propose(proposal) => net::SignedConsensusMessage::Propose(net::SignedConsensusProposal { + bft::generic::Communication::Consensus(c) => net::generic_message::BftMessage::Consensus(match c { + bft::generic::LocalizedMessage::Propose(proposal) => net::generic_message::SignedConsensusMessage::Propose(net::generic_message::SignedConsensusProposal { round_number: proposal.round_number as u32, proposal: proposal.proposal, digest: proposal.digest, @@ -152,17 +151,17 @@ impl Sink for BftSink { digest_signature: proposal.digest_signature.signature, full_signature: proposal.full_signature.signature, }), - bft::generic::LocalizedMessage::Vote(vote) => net::SignedConsensusMessage::Vote(net::SignedConsensusVote { + bft::generic::LocalizedMessage::Vote(vote) => net::generic_message::SignedConsensusMessage::Vote(net::generic_message::SignedConsensusVote { sender: vote.sender, signature: vote.signature.signature, vote: match vote.vote { - bft::generic::Vote::Prepare(r, h) => net::ConsensusVote::Prepare(r as u32, h), - bft::generic::Vote::Commit(r, h) => net::ConsensusVote::Commit(r as u32, h), - bft::generic::Vote::AdvanceRound(r) => net::ConsensusVote::AdvanceRound(r as u32), + bft::generic::Vote::Prepare(r, h) => net::generic_message::ConsensusVote::Prepare(r as u32, h), + bft::generic::Vote::Commit(r, h) => net::generic_message::ConsensusVote::Commit(r as u32, h), + bft::generic::Vote::AdvanceRound(r) => net::generic_message::ConsensusVote::AdvanceRound(r as u32), } }), }), - bft::generic::Communication::Auxiliary(justification) => net::BftMessage::Auxiliary(justification.uncheck().into()), + bft::generic::Communication::Auxiliary(justification) => net::generic_message::BftMessage::Auxiliary(justification.uncheck().into()), }, parent_hash: self.parent_hash, }; @@ -175,7 +174,7 @@ impl Sink for BftSink { } } -struct Network(Arc); +struct Network(Arc>); impl super::Network for Network { type TableRouter = Router; @@ -189,20 +188,20 @@ impl super::Network for Network { fn start_bft( header: &Header, handle: reactor::Handle, - client: &bft::Authorities, - network: Arc, - bft_service: &BftService, + client: &bft::Authorities, + network: Arc>, + bft_service: &BftService, ) where - F: bft::ProposerFactory + 'static, - C: bft::BlockImport + bft::Authorities + 'static, - ::Error: ::std::fmt::Debug, - ::Error: ::std::fmt::Display + Into, + F: bft::ProposerFactory + 'static, + C: bft::BlockImport + bft::Authorities + 'static, + >::Error: ::std::fmt::Debug, + >::Error: ::std::fmt::Display + Into, { - let parent_hash = header.blake2_256().into(); + let parent_hash = header.hash(); if bft_service.live_agreement().map_or(false, |h| h == parent_hash) { return; } - let authorities = match client.authorities(&BlockId::Hash(parent_hash)) { + let authorities = match client.authorities(&BlockId::hash(parent_hash)) { Ok(authorities) => authorities, Err(e) => { debug!("Error reading authorities: {:?}", e); @@ -235,14 +234,14 @@ impl Service { pub fn new( client: Arc, api: Arc, - network: Arc, + network: Arc>, transaction_pool: Arc, parachain_empty_duration: Duration, key: ed25519::Pair, ) -> Service where A: LocalPolkadotApi + Send + Sync + 'static, - C: BlockchainEvents + ChainHead + bft::BlockImport + bft::Authorities + Send + Sync + 'static, + C: BlockchainEvents + ChainHead + bft::BlockImport + bft::Authorities + Send + Sync + 'static, { let (signal, exit) = ::exit_future::signal(); let thread = thread::spawn(move || { @@ -346,36 +345,25 @@ impl ::collation::Collators for NoCollators { fn note_bad_collator(&self, _collator: AccountId) { } } -type FetchCandidateAdapter = future::Map) -> BlockData>; - #[derive(Clone)] struct Router { - network: Arc, -} - -impl Router { - fn fetch_candidate_adapter(data: Vec) -> BlockData { - BlockData(data) - } + network: Arc>, } impl TableRouter for Router { type Error = Canceled; - type FetchCandidate = FetchCandidateAdapter; + type FetchCandidate = future::Empty; type FetchExtrinsic = future::FutureResult; - fn local_candidate_data(&self, hash: Hash, block_data: BlockData, _extrinsic: Extrinsic) { - let data = block_data.0; - self.network.set_local_candidate(Some((hash, data))) + fn local_candidate_data(&self, _hash: Hash, _block_data: BlockData, _extrinsic: Extrinsic) { + // TODO } - fn fetch_block_data(&self, candidate: &CandidateReceipt) -> Self::FetchCandidate { - let hash = candidate.hash(); - self.network.fetch_candidate(&hash).map(Self::fetch_candidate_adapter) + fn fetch_block_data(&self, _candidate: &CandidateReceipt) -> Self::FetchCandidate { + future::empty() } fn fetch_extrinsic_data(&self, _candidate: &CandidateReceipt) -> Self::FetchExtrinsic { future::ok(Extrinsic) } } - diff --git a/polkadot/consensus/src/shared_table/mod.rs b/polkadot/consensus/src/shared_table/mod.rs index 23e936eefe..120fbb7fec 100644 --- a/polkadot/consensus/src/shared_table/mod.rs +++ b/polkadot/consensus/src/shared_table/mod.rs @@ -486,7 +486,7 @@ mod tests { let candidate = CandidateReceipt { parachain_index: para_id, - collator: [1; 32], + collator: [1; 32].into(), head_data: ::polkadot_primitives::parachain::HeadData(vec![1, 2, 3, 4]), balance_uploads: Vec::new(), egress_queue_roots: Vec::new(), @@ -536,7 +536,7 @@ mod tests { let candidate = CandidateReceipt { parachain_index: para_id, - collator: [1; 32], + collator: [1; 32].into(), head_data: ::polkadot_primitives::parachain::HeadData(vec![1, 2, 3, 4]), balance_uploads: Vec::new(), egress_queue_roots: Vec::new(), diff --git a/polkadot/executor/Cargo.toml b/polkadot/executor/Cargo.toml index cca94287b0..e7cfc5b772 100644 --- a/polkadot/executor/Cargo.toml +++ b/polkadot/executor/Cargo.toml @@ -5,17 +5,5 @@ authors = ["Parity Technologies "] description = "Polkadot node implementation in Rust." [dependencies] -hex-literal = "0.1" -triehash = { version = "0.1" } -ed25519 = { path = "../../substrate/ed25519" } -substrate-codec = { path = "../../substrate/codec" } -substrate-runtime-io = { path = "../../substrate/runtime-io" } -substrate-runtime-support = { path = "../../substrate/runtime-support" } -substrate-state-machine = { path = "../../substrate/state-machine" } substrate-executor = { path = "../../substrate/executor" } -substrate-primitives = { path = "../../substrate/primitives" } -polkadot-primitives = { path = "../primitives" } polkadot-runtime = { path = "../runtime" } - -[dev-dependencies] -substrate-keyring = { path = "../../substrate/keyring" } diff --git a/polkadot/executor/src/lib.rs b/polkadot/executor/src/lib.rs index e5e096418b..be44d8afba 100644 --- a/polkadot/executor/src/lib.rs +++ b/polkadot/executor/src/lib.rs @@ -19,12 +19,5 @@ extern crate polkadot_runtime; #[macro_use] extern crate substrate_executor; -extern crate substrate_codec as codec; -extern crate substrate_state_machine as state_machine; -extern crate substrate_runtime_io as runtime_io; -extern crate substrate_primitives as primitives; -extern crate polkadot_primitives as polkadot_primitives; -extern crate ed25519; -extern crate triehash; native_executor_instance!(pub Executor, polkadot_runtime::api::dispatch, include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm")); diff --git a/polkadot/primitives/src/lib.rs b/polkadot/primitives/src/lib.rs index a140e6ccee..4deded2969 100644 --- a/polkadot/primitives/src/lib.rs +++ b/polkadot/primitives/src/lib.rs @@ -21,12 +21,6 @@ #![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(not(feature = "std"), feature(alloc))] -#[cfg(feature = "std")] -#[macro_use] -extern crate serde_derive; -#[cfg(feature = "std")] -extern crate serde; - extern crate substrate_runtime_std as rstd; extern crate substrate_primitives as primitives; extern crate substrate_runtime_primitives as runtime_primitives; @@ -35,27 +29,43 @@ extern crate substrate_serializer; extern crate substrate_codec as codec; +#[cfg(feature = "std")] +#[macro_use] +extern crate serde_derive; + +#[cfg(feature = "std")] +extern crate serde; + +#[cfg(feature = "std")] +use primitives::bytes; + +use rstd::prelude::*; +use runtime_primitives::traits::BlakeTwo256; +use runtime_primitives::generic; +use codec::{Input, Slicable}; + pub mod parachain; -/// 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 -/// "correct". -pub const EVERYBODY: AccountId = [255u8; 32]; +/// Block header type as expected by this runtime. +pub type Header = generic::Header; -/// Something that identifies a block. -pub use primitives::block::Id as BlockId; +/// Opaque, encoded, unchecked extrinsic. +pub type UncheckedExtrinsic = Vec; -/// The type of digest item. -pub use primitives::block::Log as Log; +/// A "future-proof" block type for Polkadot. This will be resilient to upgrades in transaction +/// format, because it doesn't attempt to decode extrinsics. +/// +/// Specialized code needs to link to (at least one version of) the runtime directly +/// in order to handle the extrinsics within. +pub type Block = generic::Block; /// An index to a block. /// 32-bits will allow for 136 years of blocks assuming 1 block per second. /// TODO: switch to u32 pub type BlockNumber = u64; -/// Alias to Ed25519 pubkey that identifies an account on the relay chain. This will almost -/// certainly continue to be the same as the substrate's `AuthorityId`. -pub type AccountId = primitives::AuthorityId; +/// Alias to Ed25519 pubkey that identifies an account on the relay chain. +pub type AccountId = primitives::hash::H256; /// The Ed25519 pub key of an session that belongs to an authority of the relay chain. This is /// exactly equivalent to what the substrate calls an "authority". @@ -64,14 +74,15 @@ pub type SessionKey = primitives::AuthorityId; /// Indentifier for a chain. 32-bit should be plenty. pub type ChainId = u32; -/// Index of a transaction in the relay chain. 32-bit should be plenty. -pub type Index = u32; - /// A hash of some data used by the relay chain. pub type Hash = primitives::H256; +/// Index of a transaction in the relay chain. 32-bit should be plenty. +pub type Index = u32; + /// Alias to 512-bit hash when used in the context of a signature on the relay chain. -pub type Signature = runtime_primitives::Ed25519Signature; +/// Equipped with logic for possibly "unsigned" messages. +pub type Signature = runtime_primitives::MaybeUnsigned; /// A timestamp: seconds since the unix epoch. pub type Timestamp = u64; @@ -84,3 +95,22 @@ pub type Timestamp = u64; /// We round denomination to 10^12 (12 sdf), and leave the other redundancy at the upper end so /// that 32 bits may be multiplied with a balance in 128 bits without worrying about overflow. pub type Balance = u128; + +/// "generic" block ID for the future-proof block type. +// TODO: parameterize blockid only as necessary. +pub type BlockId = generic::BlockId; + +/// A log entry in the block. +#[derive(PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +pub struct Log(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec); + +impl Slicable for Log { + fn decode(input: &mut I) -> Option { + Vec::::decode(input).map(Log) + } + + fn using_encoded R>(&self, f: F) -> R { + self.0.using_encoded(f) + } +} diff --git a/polkadot/primitives/src/parachain.rs b/polkadot/primitives/src/parachain.rs index 3a87b1faa2..9f803810e4 100644 --- a/polkadot/primitives/src/parachain.rs +++ b/polkadot/primitives/src/parachain.rs @@ -14,19 +14,22 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -//! Parachain data types. +//! Polkadot parachain types. + +use codec::{Slicable, Input}; +use rstd::prelude::*; +use rstd::cmp::Ordering; +use super::Hash; #[cfg(feature = "std")] use primitives::bytes; -use primitives; -use codec::{Input, Slicable}; -use rstd::cmp::{PartialOrd, Ord, Ordering}; -use rstd::vec::Vec; -use ::Hash; + +/// Signature on candidate's block data by a collator. +pub type CandidateSignature = ::runtime_primitives::Ed25519Signature; /// Unique identifier of a parachain. #[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] pub struct Id(u32); impl From for u32 { @@ -67,7 +70,6 @@ pub enum Chain { impl Slicable for Chain { fn decode(input: &mut I) -> Option { let disc = input.read_byte()?; - match disc { 0 => Some(Chain::Relay), 1 => Some(Chain::Parachain(Slicable::decode(input)?)), @@ -84,7 +86,6 @@ impl Slicable for Chain { id.using_encoded(|s| v.extend(s)); } } - v } @@ -128,7 +129,7 @@ impl Slicable for DutyRoster { /// Extrinsic data for a parachain. #[derive(PartialEq, Eq, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] #[cfg_attr(feature = "std", serde(deny_unknown_fields))] pub struct Extrinsic; @@ -137,14 +138,14 @@ pub struct Extrinsic; /// /// https://github.com/w3f/polkadot-spec/blob/master/spec.md#candidate-para-chain-block #[derive(PartialEq, Eq, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] #[cfg_attr(feature = "std", serde(deny_unknown_fields))] pub struct Candidate { /// The ID of the parachain this is a proposal for. pub parachain_index: Id, /// Collator's signature - pub collator_signature: ::Signature, + pub collator_signature: CandidateSignature, /// Unprocessed ingress queue. /// /// Ordered by parachain ID and block number. @@ -155,20 +156,20 @@ pub struct Candidate { /// Candidate receipt type. #[derive(PartialEq, Eq, Clone)] -#[cfg_attr(feature = "std", derive(Debug, Serialize))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] #[cfg_attr(feature = "std", serde(deny_unknown_fields))] pub struct CandidateReceipt { /// The ID of the parachain this is a candidate for. pub parachain_index: Id, /// The collator's relay-chain account ID - pub collator: ::AccountId, + pub collator: super::AccountId, /// The head-data pub head_data: HeadData, /// Balance uploads to the relay chain. - pub balance_uploads: Vec<(::AccountId, u64)>, + pub balance_uploads: Vec<(super::AccountId, u64)>, /// Egress queue roots. - pub egress_queue_roots: Vec<(Id, primitives::H256)>, + pub egress_queue_roots: Vec<(Id, Hash)>, /// Fees paid from the chain to the relay chain validators pub fees: u64, } @@ -203,8 +204,8 @@ impl CandidateReceipt { /// Get the blake2_256 hash #[cfg(feature = "std")] pub fn hash(&self) -> Hash { - let encoded = self.encode(); - primitives::hashing::blake2_256(&encoded).into() + use runtime_primitives::traits::{BlakeTwo256, Hashing}; + BlakeTwo256::hash_of(self) } } @@ -224,7 +225,7 @@ impl Ord for CandidateReceipt { /// Parachain ingress queue message. #[derive(PartialEq, Eq, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] pub struct Message(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec); /// Consolidated ingress queue data. @@ -232,34 +233,34 @@ pub struct Message(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec /// This is just an ordered vector of other parachains' egress queues, /// obtained according to the routing rules. #[derive(Default, PartialEq, Eq, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] pub struct ConsolidatedIngress(pub Vec<(Id, Vec)>); /// Parachain block data. /// /// contains everything required to validate para-block, may contain block and witness data #[derive(PartialEq, Eq, Clone)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] pub struct BlockData(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec); /// Parachain header raw bytes wrapper type. #[derive(PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] pub struct Header(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec); /// Parachain head data included in the chain. #[derive(PartialEq, Eq, Clone, PartialOrd, Ord)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] pub struct HeadData(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec); /// Parachain validation code. #[derive(PartialEq, Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] pub struct ValidationCode(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec); /// Activitiy bit field #[derive(PartialEq, Eq, Clone, Default)] -#[cfg_attr(feature = "std", derive(Serialize, Debug))] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] pub struct Activity(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec); impl Slicable for Activity { @@ -339,41 +340,3 @@ impl Slicable for Statement { } } } - -#[cfg(test)] -mod tests { - use super::*; - use substrate_serializer as ser; - - #[test] - fn test_candidate() { - assert_eq!(ser::to_string_pretty(&Candidate { - parachain_index: 5.into(), - collator_signature: primitives::hash::H512::from(10).into(), - unprocessed_ingress: ConsolidatedIngress(vec![ - (Id(1), vec![Message(vec![2])]), - (Id(2), vec![Message(vec![2]), Message(vec![3])]), - ]), - block: BlockData(vec![1, 2, 3]), - }), r#"{ - "parachainIndex": 5, - "collatorSignature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a", - "unprocessedIngress": [ - [ - 1, - [ - "0x02" - ] - ], - [ - 2, - [ - "0x02", - "0x03" - ] - ] - ], - "block": "0x010203" -}"#); - } -} diff --git a/polkadot/runtime/Cargo.toml b/polkadot/runtime/Cargo.toml index 95044242fe..9ac1f50175 100644 --- a/polkadot/runtime/Cargo.toml +++ b/polkadot/runtime/Cargo.toml @@ -9,6 +9,7 @@ log = { version = "0.3", optional = true } serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } safe-mix = { path = "../../safe-mix", default_features = false} +polkadot-primitives = { path = "../primitives", default_features = false } substrate-codec = { path = "../../substrate/codec" } substrate-serializer = { path = "../../substrate/serializer" } substrate-runtime-std = { path = "../../substrate/runtime-std" } @@ -25,7 +26,6 @@ substrate-runtime-session = { path = "../../substrate/runtime/session" } substrate-runtime-staking = { path = "../../substrate/runtime/staking" } 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" @@ -33,6 +33,7 @@ hex-literal = "0.1.0" [features] default = ["std"] std = [ + "polkadot-primitives/std", "substrate-codec/std", "substrate-primitives/std", "substrate-runtime-std/std", @@ -47,7 +48,6 @@ std = [ "substrate-runtime-staking/std", "substrate-runtime-system/std", "substrate-runtime-timestamp/std", - "polkadot-primitives/std", "serde_derive", "serde/std", "log", diff --git a/polkadot/runtime/src/lib.rs b/polkadot/runtime/src/lib.rs index 9b86eb91cb..16d080cb9e 100644 --- a/polkadot/runtime/src/lib.rs +++ b/polkadot/runtime/src/lib.rs @@ -18,11 +18,18 @@ #![cfg_attr(not(feature = "std"), no_std)] +#[cfg(feature = "std")] +#[macro_use] +extern crate serde_derive; + +#[cfg(feature = "std")] +extern crate serde; + #[macro_use] extern crate substrate_runtime_io as runtime_io; #[macro_use] -extern crate substrate_runtime_support as runtime_support; +extern crate substrate_runtime_support; #[macro_use] extern crate substrate_runtime_primitives as runtime_primitives; @@ -37,7 +44,10 @@ extern crate substrate_serializer; #[cfg_attr(feature = "std", macro_use)] extern crate substrate_primitives; +#[macro_use] extern crate substrate_runtime_std as rstd; + +extern crate polkadot_primitives as primitives; extern crate substrate_codec as codec; extern crate substrate_runtime_consensus as consensus; extern crate substrate_runtime_council as council; @@ -47,14 +57,13 @@ extern crate substrate_runtime_session as session; extern crate substrate_runtime_staking as staking; extern crate substrate_runtime_system as system; extern crate substrate_runtime_timestamp as timestamp; -extern crate polkadot_primitives; mod parachains; -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}; +use rstd::prelude::*; +use primitives::{AccountId, Balance, BlockNumber, Hash, Index, Log, SessionKey, Signature}; +use primitives::parachain::CandidateReceipt; +use runtime_primitives::{generic, traits::{HasPublicAux, BlakeTwo256, Convert}}; #[cfg(feature = "std")] pub use runtime_primitives::BuildExternalities; @@ -62,13 +71,113 @@ pub use runtime_primitives::BuildExternalities; pub use consensus::Call as ConsensusCall; pub use timestamp::Call as TimestampCall; pub use parachains::Call as ParachainsCall; - +pub use primitives::Header; /// 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; +/// Block Id type for this block. +pub type BlockId = generic::BlockId; +/// Unchecked extrinsic type as expected by this runtime. +pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; +/// Extrinsic type as expected by this runtime. +pub type Extrinsic = generic::Extrinsic; + +/// Block type as expected by this runtime. +pub type Block = generic::Block; + +/// Provides a type-safe wrapper around a structurally valid block. +#[cfg(feature = "std")] +pub struct CheckedBlock { + inner: Block, + file_line: Option<(&'static str, u32)>, +} + +#[cfg(feature = "std")] +impl CheckedBlock { + /// Create a new checked block. Fails if the block is not structurally valid. + pub fn new(block: Block) -> Result { + let has_timestamp = block.extrinsics.get(TIMESTAMP_SET_POSITION as usize).map_or(false, |xt| { + !xt.is_signed() && match xt.extrinsic.function { + Call::Timestamp(TimestampCall::set(_)) => true, + _ => false, + } + }); + + if !has_timestamp { return Err(block) } + + let has_heads = block.extrinsics.get(PARACHAINS_SET_POSITION as usize).map_or(false, |xt| { + !xt.is_signed() && match xt.extrinsic.function { + Call::Parachains(ParachainsCall::set_heads(_)) => true, + _ => false, + } + }); + + if !has_heads { return Err(block) } + Ok(CheckedBlock { + inner: block, + file_line: None, + }) + } + + // Creates a new checked block, asserting that it is valid. + #[doc(hidden)] + pub fn new_unchecked(block: Block, file: &'static str, line: u32) -> Self { + CheckedBlock { + inner: block, + file_line: Some((file, line)), + } + } + + /// Extract the timestamp from the block. + pub fn timestamp(&self) -> ::primitives::Timestamp { + let x = self.inner.extrinsics.get(TIMESTAMP_SET_POSITION as usize).and_then(|xt| match xt.extrinsic.function { + Call::Timestamp(TimestampCall::set(x)) => Some(x), + _ => None + }); + + match x { + Some(x) => x, + None => panic!("Invalid polkadot block asserted at {:?}", self.file_line), + } + } + + /// Extract the parachain heads from the block. + pub fn parachain_heads(&self) -> &[CandidateReceipt] { + let x = self.inner.extrinsics.get(PARACHAINS_SET_POSITION as usize).and_then(|xt| match xt.extrinsic.function { + Call::Parachains(ParachainsCall::set_heads(ref x)) => Some(&x[..]), + _ => None + }); + + match x { + Some(x) => x, + None => panic!("Invalid polkadot block asserted at {:?}", self.file_line), + } + } + + /// Convert into inner block. + pub fn into_inner(self) -> Block { self.inner } +} + +#[cfg(feature = "std")] +impl ::std::ops::Deref for CheckedBlock { + type Target = Block; + + fn deref(&self) -> &Block { &self.inner } +} + +/// Assert that a block is structurally valid. May lead to panic in the future +/// in case it isn't. +#[cfg(feature = "std")] +#[macro_export] +macro_rules! assert_polkadot_block { + ($block: expr) => { + $crate::CheckedBlock::new_unchecked($block, file!(), line!()) + } +} + /// Concrete runtime type used to parameterize the various modules. pub struct Concrete; @@ -83,7 +192,7 @@ impl system::Trait for Concrete { type Hashing = BlakeTwo256; type Digest = generic::Digest; type AccountId = AccountId; - type Header = generic::Header; + type Header = Header; } /// System module for this concrete runtime. pub type System = system::Module; @@ -102,8 +211,16 @@ impl timestamp::Trait for Concrete { /// Timestamp module for this concrete runtime. pub type Timestamp = timestamp::Module; +/// Session key conversion. +pub struct SessionKeyConversion; +impl Convert for SessionKeyConversion { + fn convert(a: AccountId) -> SessionKey { + a.0 + } +} + impl session::Trait for Concrete { - type ConvertAccountIdToSessionKey = Identity; + type ConvertAccountIdToSessionKey = SessionKeyConversion; } /// Session module for this concrete runtime. pub type Session = session::Module; @@ -135,6 +252,9 @@ impl parachains::Trait for Concrete { pub type Parachains = parachains::Module; impl_outer_dispatch! { + /// Call type for polkadot transactions. + #[derive(Clone, PartialEq, Eq)] + #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] pub enum Call where aux: ::PublicAux { Consensus = 0, Session = 1, @@ -146,6 +266,9 @@ impl_outer_dispatch! { Parachains = 8, } + /// Internal calls. + #[derive(Clone, PartialEq, Eq)] + #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] pub enum PrivCall { Consensus = 0, Session = 1, @@ -156,14 +279,6 @@ impl_outer_dispatch! { } } -/// Block header type as expected by this runtime. -pub type Header = generic::Header; -/// Block type as expected by this runtime. -pub type Block = generic::Block; -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; -/// Extrinsic type as expected by this runtime. -pub type Extrinsic = generic::Extrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = executive::Executive; @@ -180,6 +295,35 @@ impl_outer_config! { } } +/// Produces the list of inherent extrinsics. +pub fn inherent_extrinsics(timestamp: ::primitives::Timestamp, parachain_heads: Vec) -> Vec { + vec![ + UncheckedExtrinsic { + extrinsic: Extrinsic { + signed: Default::default(), + function: Call::Timestamp(TimestampCall::set(timestamp)), + index: 0, + }, + signature: Default::default(), + }, + UncheckedExtrinsic { + extrinsic: Extrinsic { + signed: Default::default(), + function: Call::Parachains(ParachainsCall::set_heads(parachain_heads)), + index: 0, + }, + signature: Default::default(), + }, + ] +} + +/// Checks an unchecked extrinsic for validity. +pub fn check_extrinsic(xt: UncheckedExtrinsic) -> bool { + use runtime_primitives::traits::Checkable; + + xt.check().is_ok() +} + pub mod api { impl_stubs!( authorities => |()| super::Consensus::authorities(), @@ -187,6 +331,7 @@ pub mod api { apply_extrinsic => |extrinsic| super::Executive::apply_extrinsic(extrinsic), execute_block => |block| super::Executive::execute_block(block), finalise_block => |()| super::Executive::finalise_block(), + inherent_extrinsics => |(timestamp, heads)| super::inherent_extrinsics(timestamp, heads), validator_count => |()| super::Session::validator_count(), validators => |()| super::Session::validators() ); @@ -290,9 +435,9 @@ mod tests { }); let raw = block.encode(); - let decoded_substrate = primitives::block::Block::decode(&mut &raw[..]).unwrap(); - let encoded_substrate = decoded_substrate.encode(); - let decoded = Block::decode(&mut &encoded_substrate[..]).unwrap(); + let decoded_primitive = ::primitives::Block::decode(&mut &raw[..]).unwrap(); + let encoded_primitive = decoded_primitive.encode(); + let decoded = Block::decode(&mut &encoded_primitive[..]).unwrap(); assert_eq!(block, decoded); } @@ -301,11 +446,11 @@ mod tests { fn serialize_unchecked() { let tx = UncheckedExtrinsic { extrinsic: Extrinsic { - signed: [1; 32], + signed: [1; 32].into(), index: 999, function: Call::Timestamp(TimestampCall::set(135135)), }, - signature: primitives::hash::H512([0; 64]).into(), + signature: runtime_primitives::Ed25519Signature(primitives::hash::H512([0; 64])).into(), }; // 71000000 // 0101010101010101010101010101010101010101010101010101010101010101 @@ -322,7 +467,7 @@ mod tests { #[test] fn serialize_checked() { let xt = Extrinsic { - signed: hex!["0d71d1a9cad6f2ab773435a7dec1bac019994d05d1dd5eb3108211dcf25c9d1e"], + signed: hex!["0d71d1a9cad6f2ab773435a7dec1bac019994d05d1dd5eb3108211dcf25c9d1e"].into(), index: 0, function: Call::CouncilVoting(council::voting::Call::propose(Box::new( PrivCall::Consensus(consensus::PrivCall::set_code( diff --git a/polkadot/runtime/src/parachains.rs b/polkadot/runtime/src/parachains.rs index 50da4306cb..5bd62afcf2 100644 --- a/polkadot/runtime/src/parachains.rs +++ b/polkadot/runtime/src/parachains.rs @@ -16,17 +16,16 @@ //! Main parachains logic. For now this is just the determination of which validators do what. -use polkadot_primitives; +use primitives; use rstd::prelude::*; use codec::{Slicable, Joiner}; -use runtime_support::Hashable; use runtime_primitives::traits::{Executable, RefInto, MaybeEmpty}; -use polkadot_primitives::parachain::{Id, Chain, DutyRoster, CandidateReceipt}; +use primitives::parachain::{Id, Chain, DutyRoster, CandidateReceipt}; use {system, session}; -use runtime_support::{StorageValue, StorageMap}; -use runtime_support::dispatch::Result; +use substrate_runtime_support::{Hashable, StorageValue, StorageMap}; +use substrate_runtime_support::dispatch::Result; #[cfg(any(feature = "std", test))] use rstd::marker::PhantomData; @@ -34,7 +33,7 @@ use rstd::marker::PhantomData; #[cfg(any(feature = "std", test))] use {runtime_io, runtime_primitives}; -pub trait Trait: system::Trait + session::Trait { +pub trait Trait: system::Trait + session::Trait { /// The position of the set_heads call in the block. const SET_POSITION: u32; @@ -42,7 +41,11 @@ pub trait Trait: system::Trait + session::Trai } decl_module! { + /// Parachains module. pub struct Module; + + /// Call type for parachains. + #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub enum Call where aux: ::PublicAux { // provide candidate receipts for parachains, in ascending order by id. fn set_heads(aux, heads: Vec) -> Result = 0; @@ -227,7 +230,7 @@ mod tests { use runtime_io::with_externalities; use substrate_primitives::H256; use runtime_primitives::BuildExternalities; - use runtime_primitives::traits::{HasPublicAux, Identity}; + use runtime_primitives::traits::{HasPublicAux, Identity, BlakeTwo256}; use runtime_primitives::testing::{Digest, Header}; use consensus; @@ -243,7 +246,7 @@ mod tests { type Index = u64; type BlockNumber = u64; type Hash = H256; - type Hashing = runtime_io::BlakeTwo256; + type Hashing = BlakeTwo256; type Digest = Digest; type AccountId = u64; type Header = Header; diff --git a/polkadot/runtime/wasm/Cargo.lock b/polkadot/runtime/wasm/Cargo.lock index 9d8f465e4a..40e3acb37a 100644 --- a/polkadot/runtime/wasm/Cargo.lock +++ b/polkadot/runtime/wasm/Cargo.lock @@ -11,19 +11,9 @@ name = "base58" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "bigint" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "bitflags" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -37,33 +27,55 @@ dependencies = [ [[package]] name = "byteorder" -version = "1.2.1" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cc" -version = "1.0.4" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "cfg-if" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "coco" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "constant_time_eq" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "crossbeam-deque" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "crunchy" version = "0.1.6" @@ -75,20 +87,15 @@ version = "0.1.0" dependencies = [ "base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "either" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "elastic-array" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -99,15 +106,37 @@ name = "environmental" version = "0.1.0" [[package]] -name = "ethcore-bigint" +name = "ethbloom" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ethereum-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "ethbloom 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fixed-hash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ethereum-types-serialize" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bigint 4.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", - "plain_hasher 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -119,12 +148,23 @@ dependencies = [ "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "fixed-hash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "fuchsia-zircon" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -148,16 +188,16 @@ dependencies = [ [[package]] name = "hex-literal" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "hex-literal-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "hex-literal-impl" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -170,12 +210,12 @@ source = "git+https://github.com/paritytech/integer-sqrt-rs.git#886e9cb983c46498 [[package]] name = "keccak-hash" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cc 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-bigint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tiny-keccak 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", + "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -185,12 +225,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "lazy_static" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "libc" -version = "0.2.36" +version = "0.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -206,9 +246,14 @@ name = "log" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "memoffset" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "memory_units" version = "0.3.0" @@ -229,7 +274,7 @@ name = "num_cpus" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -245,9 +290,9 @@ name = "parity-wasm" version = "0.27.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -255,43 +300,35 @@ name = "parity-wasm" version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parking_lot" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "parking_lot_core" -version = "0.2.10" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "smallvec 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "plain_hasher" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "polkadot-primitives" version = "0.1.0" dependencies = [ - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-primitives 0.1.0", @@ -334,12 +371,20 @@ name = "proc-macro-hack-impl" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "proc-macro2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "pwasm-alloc" version = "0.1.0" dependencies = [ "pwasm-libc 0.1.0", - "rustc_version 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -351,15 +396,18 @@ name = "pwasm-utils" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.30.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "quote" -version = "0.3.15" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "rand" @@ -367,7 +415,7 @@ version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -377,7 +425,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -386,19 +434,19 @@ name = "rayon" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "rayon-core 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rayon-core" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -408,20 +456,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "rlp" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "elastic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "ethcore-bigint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -437,17 +484,17 @@ source = "git+https://github.com/rphmeier/rustc-hex.git#ee2ec40b9062ac7769ccb9dc [[package]] name = "rustc_version" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "safe-mix" version = "0.1.0" dependencies = [ - "rustc_version 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -457,7 +504,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "semver" -version = "0.6.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -470,31 +517,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.27" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde_derive" -version = "1.0.27" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive_internals 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "serde_derive_internals" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", - "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "smallvec" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -511,8 +549,8 @@ name = "substrate-keyring" version = "0.1.0" dependencies = [ "ed25519 0.1.0", - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -520,25 +558,26 @@ name = "substrate-primitives" version = "0.1.0" dependencies = [ "blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", "fixed-hash 0.1.3 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)", "rustc-hex 2.0.0 (git+https://github.com/rphmeier/rustc-hex.git)", - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-runtime-std 0.1.0", "twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "uint 0.1.2 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)", - "wasmi 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "substrate-runtime-consensus" version = "0.1.0" dependencies = [ - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -563,10 +602,11 @@ dependencies = [ name = "substrate-runtime-council" version = "0.1.0" dependencies = [ - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", "safe-mix 0.1.0", - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -585,9 +625,10 @@ dependencies = [ name = "substrate-runtime-democracy" version = "0.1.0" dependencies = [ - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 0.1.0", - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-consensus 0.1.0", @@ -604,8 +645,8 @@ dependencies = [ name = "substrate-runtime-executive" version = "0.1.0" dependencies = [ - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-primitives 0.1.0", @@ -620,12 +661,12 @@ version = "0.1.0" dependencies = [ "ed25519 0.1.0", "environmental 0.1.0", - "rustc_version 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-std 0.1.0", "substrate-state-machine 0.1.0", - "triehash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -634,8 +675,8 @@ version = "0.1.0" dependencies = [ "integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)", "num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -647,21 +688,22 @@ dependencies = [ name = "substrate-runtime-sandbox" version = "0.1.0" dependencies = [ - "rustc_version 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-std 0.1.0", - "wasmi 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "wasmi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "substrate-runtime-session" version = "0.1.0" dependencies = [ - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 0.1.0", - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -677,9 +719,10 @@ dependencies = [ name = "substrate-runtime-staking" version = "0.1.0" dependencies = [ - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 0.1.0", - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -700,7 +743,7 @@ version = "0.1.0" dependencies = [ "pwasm-alloc 0.1.0", "pwasm-libc 0.1.0", - "rustc_version 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -708,9 +751,9 @@ name = "substrate-runtime-support" version = "0.1.0" dependencies = [ "ed25519 0.1.0", - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -721,9 +764,9 @@ dependencies = [ name = "substrate-runtime-system" version = "0.1.0" dependencies = [ - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 0.1.0", - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -736,8 +779,9 @@ dependencies = [ name = "substrate-runtime-timestamp" version = "0.1.0" dependencies = [ - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", "substrate-runtime-io 0.1.0", @@ -751,43 +795,39 @@ dependencies = [ name = "substrate-state-machine" version = "0.1.0" dependencies = [ - "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0", - "triehash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "syn" -version = "0.11.11" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", - "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synom" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tiny-keccak" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "triehash" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "ethcore-bigint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "keccak-hash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rlp 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "keccak-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -803,14 +843,25 @@ name = "uint" version = "0.1.2" source = "git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm#8dc457899afdaf968ff7f16140b03d1e37b01d71" dependencies = [ - "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "uint" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "unicode-xid" -version = "0.0.4" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -820,10 +871,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "wasmi" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.27.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -850,32 +901,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" "checksum base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" -"checksum bigint 4.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5442186ef6560f30f1ee4b9c1e4c87a35a6879d3644550cc248ec2b955eb5fcd" -"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf" +"checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789" "checksum blake2-rfc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" -"checksum byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "652805b7e73fada9d85e9a6682a4abd490cb52d96aeecc12e33a0de34dfd0d23" -"checksum cc 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "deaf9ec656256bb25b404c51ef50097207b9cbb29c933d31f92cae5a8a0ffee0" -"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de" -"checksum coco 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c06169f5beb7e31c7c67ebf5540b8b472d23e3eade3b2ec7d1f5b504a85f91bd" +"checksum byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "74c0b906e9446b0a2e4f760cdb3fa4b2c48cdc6db8766a845c54b6ff063fd2e9" +"checksum cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "49ec142f5768efb5b7622aebc3fdbdbb8950a4b9ba996393cb76ef7466e8747d" +"checksum cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "405216fd8fe65f718daa7102ea808a946b6ce40c742998fbfd3463645552de18" "checksum constant_time_eq 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8ff012e225ce166d4422e0e78419d901719760f62ae2b7969ca6b564d1b54a9e" +"checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" +"checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" +"checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" -"checksum either 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "740178ddf48b1a9e878e6d6509a1442a2d42fd2928aae8e7a6f8a36fb01981b3" -"checksum elastic-array 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "258ff6a9a94f648d0379dbd79110e057edbb53eb85cc237e33eadf8e5a30df85" -"checksum ethcore-bigint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcb5af77e74a8f70e9c3337e069c37bc82178ef1b459c02091f73c4ad5281eb5" +"checksum elastic-array 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "88d4851b005ef16de812ea9acdb7bece2f0a40dd86c07b85631d7dafa54537bb" +"checksum ethbloom 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a93a43ce2e9f09071449da36bfa7a1b20b950ee344b6904ff23de493b03b386" +"checksum ethereum-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c48729b8aea8aedb12cf4cb2e5cef439fdfe2dda4a89e47eeebd15778ef53b6" +"checksum ethereum-types-serialize 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ac59a21a9ce98e188f3dace9eb67a6c4a3c67ec7fbc7218cb827852679dc002" "checksum fixed-hash 0.1.3 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)" = "" +"checksum fixed-hash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b18d6fd718fb4396e7a9c93ac59ba7143501467ca7a143c145b5555a571d5576" "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" "checksum heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" -"checksum hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd546ef520ab3745f1aae5f2cdc6de9e6498e94d1ab138b9eb3ddfbf335847fb" -"checksum hex-literal-impl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2ea76da4c7f1a54d01d54985566d3fdd960b2bbd7b970da024821c883c2d9631" +"checksum hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4da5f0e01bd8a71a224a4eedecaacfcabda388dbb7a80faf04d3514287572d95" +"checksum hex-literal-impl 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1d340b6514f232f6db1bd16db65302a5278a04fef9ce867cb932e7e5fa21130a" "checksum integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)" = "" -"checksum keccak-hash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1f300c1f149cd9ca5214eed24f6e713a597517420fb8b15499824aa916259ec1" +"checksum keccak-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b7f51f30d7986536accaec4a6a288008dfb3dbffe8a2863a65292bc395a3ae7" "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" -"checksum lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c8f31047daa365f19be14b47c29df4f7c3b581832407daabe6ae77397619237d" -"checksum libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "1e5d97d6708edaa407429faa671b942dc0f2727222fb6b6539bf1db936e4b121" +"checksum lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e6412c5e2ad9584b0b8e979393122026cdd6d2a80b933f890dcd694ddbe73739" +"checksum libc 0.2.41 (registry+https://github.com/rust-lang/crates.io-index)" = "ac8ebf8343a981e2fa97042b14768f02ed3e1d602eac06cae6166df3c8ced206" "checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" "checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2" +"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" "checksum memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" "checksum num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775393e285254d2f5004596d69bb8bc1149754570dcc08cf30cabeba67955e28" @@ -883,39 +938,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" "checksum parity-wasm 0.27.6 (registry+https://github.com/rust-lang/crates.io-index)" = "bd4dc02a80a0315b109e48992c46942c79bcdb8fac416dd575d330ed9ced6cbd" "checksum parity-wasm 0.30.0 (registry+https://github.com/rust-lang/crates.io-index)" = "41083957b80abb8a01fac4d2773d5f92653aed8f0b740c8d3da1da62c7857abe" -"checksum parking_lot 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9fd9d732f2de194336fb02fe11f9eed13d9e76f13f4315b4d88a14ca411750cd" -"checksum parking_lot_core 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "9f35048d735bb93dd115a0030498785971aab3234d311fbe273d020084d26bd8" -"checksum plain_hasher 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "83ae80873992f511142c07d0ec6c44de5636628fdb7e204abd655932ea79d995" +"checksum parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4d05f1349491390b1730afba60bb20d55761bef489a954546b58b4b34e1e2ac" +"checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" "checksum proc-macro-hack 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ba8d4f9257b85eb6cdf13f055cea3190520aab1409ca2ab43493ea4820c25f0" "checksum proc-macro-hack-impl 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d5cb6f960ad471404618e9817c0e5d10b1ae74cfdf01fab89ea0641fe7fb2892" +"checksum proc-macro2 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1fa93823f53cfd0f5ac117b189aed6cfdfb2cfc0a9d82e956dd7927595ed7d46" "checksum pwasm-utils 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a3a822d2a1624b10c46572c231c149575bcc261c37d84fd3f1a2f5ae1f65515" -"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" +"checksum quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e44651a0dc4cdd99f71c83b561e221f714912d11af1a4dff0631f923d53af035" "checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" "checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5" "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" -"checksum rayon-core 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e64b609139d83da75902f88fd6c01820046840a18471e4dfcd5ac7c0f46bea53" +"checksum rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d24ad214285a7729b174ed6d3bcfcb80177807f959d95fafd5bfc5c4f201ac8" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" -"checksum rlp 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "babe6fce20c0ca9b1582998734c4569082d0ad08e43772a1c6c40aef4f106ef9" +"checksum rlp 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "89db7f8dfdd5eb7ab3ac3ece7a07fd273a680b4b224cb231181280e8996f9f0b" "checksum rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0ceb8ce7a5e520de349e1fa172baeba4a9e8d5ef06c47471863530bc4972ee1e" "checksum rustc-hex 2.0.0 (git+https://github.com/rphmeier/rustc-hex.git)" = "" -"checksum rustc_version 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b9743a7670d88d5d52950408ecdb7c71d8986251ab604d4689dd2ca25c9bca69" +"checksum rustc_version 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a54aa04a10c68c1c4eacb4337fd883b435997ede17a9385784b990777686b09a" "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" -"checksum semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)" = "db99f3919e20faa51bb2996057f5031d8685019b5a06139b1ce761da671b8526" -"checksum serde_derive 1.0.27 (registry+https://github.com/rust-lang/crates.io-index)" = "f4ba7591cfe93755e89eeecdbcc668885624829b020050e6aec99c2a03bd3fd0" -"checksum serde_derive_internals 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6e03f1c9530c3fb0a0a5c9b826bdd9246a5921ae995d75f512ac917fc4dd55b5" -"checksum smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "44db0ecb22921ef790d17ae13a3f6d15784183ff5f2a01aa32098c7498d2b4b9" +"checksum serde 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)" = "fba5be06346c5200249c8c8ca4ccba4a09e8747c71c16e420bd359a0db4d8f91" +"checksum serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)" = "79e4620ba6fbe051fc7506fab6f84205823564d55da18d55b695160fb3479cd8" +"checksum smallvec 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03dab98ab5ded3a8b43b2c80751194608d0b2aa0f1d46cf95d1c35e192844aa7" "checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b" -"checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" -"checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" -"checksum tiny-keccak 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3e9241752647ca572f12c9b520a5d360d9099360c527770647e694001646a1d0" -"checksum triehash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9291c7f0fae44858b5e087dd462afb382354120003778f1695b44aab98c7abd7" +"checksum syn 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6dfd71b2be5a58ee30a6f8ea355ba8290d397131c00dfa55c3d34e6e13db5101" +"checksum tiny-keccak 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e9175261fbdb60781fcd388a4d6cc7e14764a2b629a7ad94abb439aed223a44f" +"checksum triehash 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2033893a813c70e7d8a739ca6c36dc0a7a2c913ec718d7cbf84a3837bbe3c7ce" "checksum twox-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "475352206e7a290c5fccc27624a163e8d0d115f7bb60ca18a64fc9ce056d7435" "checksum uint 0.1.2 (git+https://github.com/rphmeier/primitives.git?branch=compile-for-wasm)" = "" -"checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" +"checksum uint 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38051a96565903d81c9a9210ce11076b2218f3b352926baa1f5f6abbdfce8273" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" -"checksum wasmi 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "26b20dbeb7caee04597a5d2c93e2b3e64872c6ea2af732d7ad49dbec44067c35" +"checksum wasmi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d19da510b59247935ad5f598357b3cc739912666d75d3d28318026478d95bbdb" "checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/polkadot/runtime/wasm/Cargo.toml b/polkadot/runtime/wasm/Cargo.toml index a75bd649ad..f5dc280e6f 100644 --- a/polkadot/runtime/wasm/Cargo.toml +++ b/polkadot/runtime/wasm/Cargo.toml @@ -8,6 +8,7 @@ crate-type = ["cdylib"] [dependencies] integer-sqrt = { git = "https://github.com/paritytech/integer-sqrt-rs.git", branch = "master" } +polkadot-primitives = { path = "../../primitives", default-features = false } safe-mix = { path = "../../../safe-mix", default-features = false } substrate-codec = { path = "../../../substrate/codec", default-features = false } substrate-primitives = { path = "../../../substrate/primitives", default-features = false } @@ -23,11 +24,11 @@ substrate-runtime-session = { path = "../../../substrate/runtime/session", defau substrate-runtime-staking = { path = "../../../substrate/runtime/staking", default-features = false } substrate-runtime-system = { path = "../../../substrate/runtime/system", default-features = false } substrate-runtime-timestamp = { path = "../../../substrate/runtime/timestamp", default-features = false } -polkadot-primitives = { path = "../../primitives", default-features = false } [features] default = [] std = [ + "polkadot-primitives/std", "safe-mix/std", "substrate-codec/std", "substrate-primitives/std", @@ -43,7 +44,6 @@ std = [ "substrate-runtime-staking/std", "substrate-runtime-system/std", "substrate-runtime-timestamp/std", - "polkadot-primitives/std", ] [profile.release] 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 7ca1577099c7265311bdec5c3735eace6b012de3..9ea43b2f9a1d5c885b5fddb6f6a313aac6f36f0e 100644 GIT binary patch delta 143770 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؛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 OU?2?d)}Z(N{Qm&{BxS+? 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 1a254a365da3d72993bcd940549a0640ce99efe9..dc22849a14312914d92ad3f37d955b99f97bdcd2 100755 GIT binary patch delta 140865 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 PI6HzS>BzM~J3Rg$Y$@w< delta 145275 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 L(rtc^`1yYT8qibp diff --git a/polkadot/service/src/lib.rs b/polkadot/service/src/lib.rs index 13dae55c4e..1e86d52112 100644 --- a/polkadot/service/src/lib.rs +++ b/polkadot/service/src/lib.rs @@ -19,6 +19,7 @@ extern crate futures; extern crate ed25519; +extern crate exit_future; extern crate parking_lot; extern crate tokio_timer; extern crate polkadot_primitives; @@ -28,17 +29,16 @@ extern crate polkadot_api; extern crate polkadot_consensus as consensus; extern crate polkadot_transaction_pool as transaction_pool; extern crate polkadot_keystore as keystore; -extern crate substrate_client as client; extern crate substrate_runtime_io as runtime_io; extern crate substrate_primitives as primitives; extern crate substrate_network as network; extern crate substrate_codec as codec; -extern crate substrate_client_db as client_db; extern crate substrate_executor; extern crate substrate_state_machine as state_machine; -extern crate exit_future; extern crate tokio_core; +extern crate substrate_client as client; +extern crate substrate_client_db as client_db; #[macro_use] extern crate error_chain; @@ -56,13 +56,13 @@ use std::thread; use futures::prelude::*; use tokio_core::reactor::Core; use codec::Slicable; -use primitives::block::{Id as BlockId, ExtrinsicHash, HeaderHash, Header}; -use primitives::{AuthorityId}; +use primitives::AuthorityId; use transaction_pool::TransactionPool; use substrate_executor::NativeExecutor; use polkadot_executor::Executor as LocalDispatch; use keystore::Store as Keystore; use polkadot_api::PolkadotApi; +use polkadot_primitives::{Block, BlockId, Hash, Header}; use polkadot_runtime::{GenesisConfig, ConsensusConfig, CouncilConfig, DemocracyConfig, SessionConfig, StakingConfig, BuildExternalities}; use client::backend::Backend; @@ -78,8 +78,8 @@ type CodeExecutor = NativeExecutor; /// Polkadot service. pub struct Service { thread: Option>, - client: Arc>, - network: Arc, + client: Arc>, + network: Arc>, transaction_pool: Arc, signal: Option, _consensus: Option, @@ -87,18 +87,18 @@ pub struct Service { struct TransactionPoolAdapter where A: Send + Sync, E: Send + Sync { pool: Arc, - client: Arc>, + client: Arc>, api: Arc, } -impl network::TransactionPool for TransactionPoolAdapter +impl network::TransactionPool for TransactionPoolAdapter where - B: Backend + Send + Sync, - E: client::CallExecutor + Send + Sync, - client::error::Error: From<<::State as state_machine::backend::Backend>::Error>, + B: Backend + Send + Sync, + E: client::CallExecutor + Send + Sync, + client::error::Error: From<<>::State as state_machine::backend::Backend>::Error>, A: PolkadotApi + Send + Sync, { - fn transactions(&self) -> Vec<(ExtrinsicHash, Vec)> { + fn transactions(&self) -> Vec<(Hash, Vec)> { let best_block = match self.client.info() { Ok(info) => info.chain.best_hash, Err(e) => { @@ -107,21 +107,25 @@ impl network::TransactionPool for TransactionPoolAdapter } }; - let id = self.api.check_id(BlockId::Hash(best_block)).expect("Best block is always valid; qed."); + let id = match self.api.check_id(BlockId::hash(best_block)) { + Ok(id) => id, + Err(_) => return Vec::new(), + }; + let ready = transaction_pool::Ready::create(id, &*self.api); self.pool.cull_and_get_pending(ready, |pending| pending .map(|t| { - let hash = ::primitives::Hash::from(&t.hash()[..]); - let tx = codec::Slicable::encode(t.as_transaction()); - (hash, tx) + let hash = t.hash().clone(); + (hash, t.primitive_extrinsic()) }) .collect() ) } - fn import(&self, transaction: &[u8]) -> Option { - if let Some(uxt) = codec::Slicable::decode(&mut &transaction[..]) { + fn import(&self, transaction: &Vec) -> Option { + let encoded = transaction.encode(); + if let Some(uxt) = codec::Slicable::decode(&mut &encoded[..]) { match self.pool.import_unchecked_extrinsic(uxt) { Ok(xt) => Some(*xt.hash()), Err(e) => match *e.kind() { @@ -138,7 +142,7 @@ impl network::TransactionPool for TransactionPoolAdapter } } - fn on_broadcasted(&self, propagations: HashMap>) { + fn on_broadcasted(&self, propagations: HashMap>) { self.pool.on_broadcasted(propagations) } } @@ -165,12 +169,12 @@ fn poc_2_testnet_config() -> ChainConfig { }), system: None, session: Some(SessionConfig { - validators: initial_authorities.clone(), + validators: initial_authorities.iter().cloned().map(Into::into).collect(), session_length: 720, // that's 1 hour per session. }), staking: Some(StakingConfig { current_era: 0, - intentions: initial_authorities.clone(), + intentions: initial_authorities.iter().cloned().map(Into::into).collect(), transaction_base_fee: 100, transaction_byte_fee: 1, balances: endowed_accounts.iter().map(|&k|(k, 1u128 << 60)).collect(), @@ -210,12 +214,12 @@ fn poc_2_testnet_config() -> ChainConfig { fn testnet_config(initial_authorities: Vec) -> ChainConfig { let endowed_accounts = vec![ - ed25519::Pair::from_seed(b"Alice ").public().into(), - ed25519::Pair::from_seed(b"Bob ").public().into(), - ed25519::Pair::from_seed(b"Charlie ").public().into(), - ed25519::Pair::from_seed(b"Dave ").public().into(), - ed25519::Pair::from_seed(b"Eve ").public().into(), - ed25519::Pair::from_seed(b"Ferdie ").public().into(), + ed25519::Pair::from_seed(b"Alice ").public().0.into(), + ed25519::Pair::from_seed(b"Bob ").public().0.into(), + ed25519::Pair::from_seed(b"Charlie ").public().0.into(), + ed25519::Pair::from_seed(b"Dave ").public().0.into(), + ed25519::Pair::from_seed(b"Eve ").public().0.into(), + ed25519::Pair::from_seed(b"Ferdie ").public().0.into(), ]; let genesis_config = GenesisConfig { consensus: Some(ConsensusConfig { @@ -224,12 +228,12 @@ fn testnet_config(initial_authorities: Vec) -> ChainConfig { }), system: None, session: Some(SessionConfig { - validators: initial_authorities.clone(), + validators: initial_authorities.iter().cloned().map(Into::into).collect(), session_length: 10, }), staking: Some(StakingConfig { current_era: 0, - intentions: initial_authorities.clone(), + intentions: initial_authorities.iter().cloned().map(Into::into).collect(), transaction_base_fee: 1, transaction_byte_fee: 0, balances: endowed_accounts.iter().map(|&k|(k, (1u128 << 60))).collect(), @@ -243,7 +247,7 @@ fn testnet_config(initial_authorities: Vec) -> ChainConfig { minimum_deposit: 10, }), council: Some(CouncilConfig { - active_council: endowed_accounts.iter().filter(|a| initial_authorities.iter().find(|b| a == b).is_none()).map(|a| (a.clone(), 1000000)).collect(), + active_council: endowed_accounts.iter().filter(|a| initial_authorities.iter().find(|&b| &a.0 == b).is_none()).map(|a| (a.clone(), 1000000)).collect(), candidacy_bond: 10, voter_bond: 2, present_slash_per_voter: 1, @@ -280,16 +284,23 @@ struct GenesisBuilder { config: GenesisConfig, } -impl client::GenesisBuilder for GenesisBuilder { +impl client::GenesisBuilder for GenesisBuilder { fn build(self) -> (Header, Vec<(Vec, Vec)>) { let storage = self.config.build_externalities(); - let block = genesis::construct_genesis_block(&storage); - (primitives::block::Header::decode(&mut block.header.encode().as_ref()).expect("to_vec() always gives a valid serialisation; qed"), storage.into_iter().collect()) + let block = genesis::construct_genesis_block::(&storage); + (block.header, storage.into_iter().collect()) } } /// Creates light client and register protocol with the network service -pub fn new_light(config: Configuration) -> Result>>, error::Error> { +pub fn new_light(config: Configuration) + -> Result< + Service< + client::light::Backend, + client::RemoteCallExecutor, network::OnDemand>> + >, + error::Error, + > { Service::new(move |_, executor, genesis_builder: GenesisBuilder| { let client_backend = client::light::new_light_backend(); let fetch_checker = Arc::new(client::light::new_fetch_checker(client_backend.clone(), executor)); @@ -303,7 +314,7 @@ pub fn new_light(config: Configuration) -> Result Result>, error::Error> { +pub fn new_full(config: Configuration) -> Result, client::LocalCallExecutor, CodeExecutor>>, error::Error> { let is_validator = (config.roles & Role::VALIDATOR) == Role::VALIDATOR; Service::new(|db_settings, executor, genesis_builder: GenesisBuilder| Ok((Arc::new(client_db::new_client(db_settings, executor, genesis_builder)?), None)), @@ -330,9 +341,9 @@ pub fn new_full(config: Configuration) -> Result Service where - B: Backend + Send + Sync + 'static, - E: CallExecutor + Send + Sync + 'static, - client::error::Error: From<<::State as state_machine::backend::Backend>::Error> + B: Backend + Send + Sync + 'static, + E: CallExecutor + Send + Sync + 'static, + client::error::Error: From<<>::State as state_machine::backend::Backend>::Error> { /// Creates and register protocol with the network service fn new(client_creator: F, api_creator: G, consensus_creator: C, mut config: Configuration) -> Result @@ -341,13 +352,13 @@ impl Service client_db::DatabaseSettings, CodeExecutor, GenesisBuilder, - ) -> Result<(Arc>, Option>>), error::Error>, + ) -> Result<(Arc>, Option>>>), error::Error>, G: Fn( - Arc>, + Arc>, ) -> Arc, C: Fn( - Arc>, - Arc, + Arc>, + Arc>, Arc, &Keystore ) -> Result, error::Error>, @@ -405,7 +416,6 @@ impl Service on_demand: on_demand.clone().map(|d| d as Arc), transaction_pool: transaction_pool_adapter, }; - let network = network::Service::new(network_params)?; let barrier = ::std::sync::Arc::new(Barrier::new(2)); on_demand.map(|on_demand| on_demand.set_service_link(Arc::downgrade(&network))); @@ -468,12 +478,12 @@ impl Service } /// Get shared client instance. - pub fn client(&self) -> Arc> { + pub fn client(&self) -> Arc> { self.client.clone() } /// Get shared network instance. - pub fn network(&self) -> Arc { + pub fn network(&self) -> Arc> { self.network.clone() } @@ -484,11 +494,11 @@ impl Service } /// Produce a task which prunes any finalized transactions from the pool. -pub fn prune_imported(api: &A, pool: &TransactionPool, hash: HeaderHash) +pub fn prune_imported(api: &A, pool: &TransactionPool, hash: Hash) where A: PolkadotApi, { - match api.check_id(BlockId::Hash(hash)) { + match api.check_id(BlockId::hash(hash)) { Ok(id) => { let ready = transaction_pool::Ready::create(id, api); pool.cull(None, ready); diff --git a/polkadot/statement-table/src/lib.rs b/polkadot/statement-table/src/lib.rs index e3abf95686..86b95b0d90 100644 --- a/polkadot/statement-table/src/lib.rs +++ b/polkadot/statement-table/src/lib.rs @@ -21,8 +21,8 @@ pub mod generic; pub use generic::Table; -use primitives::parachain::{Id, CandidateReceipt}; -use primitives::{SessionKey, Hash, Signature}; +use primitives::parachain::{Id, CandidateReceipt, CandidateSignature as Signature}; +use primitives::{SessionKey, Hash}; /// Statements about candidates on the network. pub type Statement = generic::Statement; diff --git a/polkadot/transaction-pool/src/lib.rs b/polkadot/transaction-pool/src/lib.rs index 015777a863..2c2224b5d3 100644 --- a/polkadot/transaction-pool/src/lib.rs +++ b/polkadot/transaction-pool/src/lib.rs @@ -40,106 +40,23 @@ use std::{ use codec::Slicable; use extrinsic_pool::{Pool, txpool::{self, Readiness, scoring::{Change, Choice}}}; +use extrinsic_pool::api::ExtrinsicPool; use polkadot_api::PolkadotApi; -use primitives::parachain::CandidateReceipt; -use primitives::{AccountId, Timestamp, Hash}; -use runtime::{Block, UncheckedExtrinsic, TimestampCall, ParachainsCall, Call}; -use substrate_primitives::block::{Extrinsic, ExtrinsicHash}; -use substrate_primitives::hexdisplay::HexDisplay; -use substrate_runtime_primitives::traits::{Bounded, Checkable}; +use primitives::{AccountId, Hash, UncheckedExtrinsic as FutureProofUncheckedExtrinsic}; +use runtime::UncheckedExtrinsic; +use substrate_runtime_primitives::traits::{Bounded, Checkable, BlakeTwo256, Hashing}; pub use extrinsic_pool::txpool::{Options, Status, LightStatus, VerifiedTransaction as VerifiedTransactionOps}; pub use error::{Error, ErrorKind, Result}; -/// Useful functions for working with Polkadot blocks. -pub struct PolkadotBlock { - block: Block, - location: Option<(&'static str, usize)>, -} - -impl PolkadotBlock { - /// Create a new block, checking high-level well-formedness. - pub fn from(unchecked: Block) -> ::std::result::Result { - 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 }) - } - - /// Create a new block, skipping any high-level well-formedness checks. WARNING: This could - /// result in internal functions panicking if the block is, in fact, not well-formed. - pub fn force_from(known_good: Block, file: &'static str, line: usize) -> Self { - PolkadotBlock { block: known_good, location: Some((file, line)) } - } - - /// Retrieve the timestamp of a Polkadot block. - pub fn timestamp(&self) -> Timestamp { - if let Call::Timestamp(TimestampCall::set(t)) = self.block.extrinsics[0].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!?"); - } - } - } - - /// 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] -macro_rules! assert_polkadot_block { - ($known_good:expr) => ( PolkadotBlock::force_from(known_good, file!(), line!()) ) -} - -impl ::std::ops::Deref for PolkadotBlock { - type Target = Block; - fn deref(&self) -> &Block { - &self.block - } -} - -impl From for Block { - fn from(pd: PolkadotBlock) -> Self { - pd.block - } -} +/// Type alias for convenience. +pub type CheckedExtrinsic = ::Checked; /// A verified transaction which should be includable and non-inherent. #[derive(Debug, Clone)] pub struct VerifiedTransaction { - inner: ::Checked, - hash: ExtrinsicHash, + inner: CheckedExtrinsic, + hash: Hash, encoded_size: usize, } @@ -150,10 +67,10 @@ impl VerifiedTransaction { bail!(ErrorKind::IsInherent(xt)) } - let message = codec::Slicable::encode(&xt); + let message = Slicable::encode(&xt); match xt.check() { Ok(xt) => { - let hash = substrate_primitives::hashing::blake2_256(&message); + let hash = BlakeTwo256::hash(&message); Ok(VerifiedTransaction { inner: xt, hash: hash.into(), @@ -169,8 +86,14 @@ impl VerifiedTransaction { self.as_ref().as_unchecked() } + /// Convert to primitive unchecked extrinsic. + pub fn primitive_extrinsic(&self) -> ::primitives::UncheckedExtrinsic { + Slicable::decode(&mut self.as_transaction().encode().as_slice()) + .expect("UncheckedExtrinsic shares repr with Vec; qed") + } + /// Consume the verified transaciton, yielding the unchecked counterpart. - pub fn into_inner(self) -> ::Checked { + pub fn into_inner(self) -> CheckedExtrinsic { self.inner } @@ -190,8 +113,8 @@ impl VerifiedTransaction { } } -impl AsRef< ::Checked > for VerifiedTransaction { - fn as_ref(&self) -> &::Checked { +impl AsRef for VerifiedTransaction { + fn as_ref(&self) -> &CheckedExtrinsic { &self.inner } } @@ -303,15 +226,12 @@ impl<'a, T: 'a + PolkadotApi> txpool::Ready for Ready<'a, T pub struct Verifier; -impl txpool::Verifier for Verifier { +impl txpool::Verifier for Verifier { type VerifiedTransaction = VerifiedTransaction; type Error = Error; - fn verify_transaction(&self, xt: Extrinsic) -> Result { - info!("Extrinsic submitted: {}", HexDisplay::from(&xt.0)); - let uxt = xt.using_encoded(|ref mut s| UncheckedExtrinsic::decode(s)) - .ok_or_else(|| ErrorKind::InvalidExtrinsicFormat)?; - info!("Correctly formatted: {:?}", uxt); + fn verify_transaction(&self, uxt: UncheckedExtrinsic) -> Result { + info!("Extrinsic Submitted: {:?}", uxt); VerifiedTransaction::create(uxt) } } @@ -320,7 +240,7 @@ impl txpool::Verifier for Verifier { /// /// Wraps a `extrinsic_pool::Pool`. pub struct TransactionPool { - inner: Pool, + inner: Pool, } impl TransactionPool { @@ -337,14 +257,25 @@ impl TransactionPool { } impl Deref for TransactionPool { - type Target = Pool; + type Target = Pool; fn deref(&self) -> &Self::Target { &self.inner } } -#[cfg(test)] -mod tests { -} +impl ExtrinsicPool for TransactionPool { + type Error = Error; + fn submit(&self, xts: Vec) -> Result> { + // TODO: more general transaction pool, which can handle more kinds of vec-encoded transactions, + // even when runtime is out of date. + xts.into_iter() + .map(|xt| xt.encode()) + .map(|encoded| UncheckedExtrinsic::decode(&mut &encoded[..])) + .map(|maybe_decoded| maybe_decoded.ok_or_else(|| ErrorKind::InvalidExtrinsicFormat.into())) + .map(|x| x.and_then(|x| self.import_unchecked_extrinsic(x))) + .map(|x| x.map(|x| x.hash().clone())) + .collect() + } +}