From 30ccc2387e419609020e23aed9c22dd8842a40c4 Mon Sep 17 00:00:00 2001 From: Gav Date: Thu, 5 Apr 2018 20:01:46 +0200 Subject: [PATCH 1/4] Implement transaction queue RPC. --- Cargo.lock | 4 ++ demo/cli/Cargo.toml | 1 + demo/cli/src/lib.rs | 10 +++- polkadot/cli/src/lib.rs | 3 +- polkadot/transaction-pool/Cargo.toml | 2 + polkadot/transaction-pool/src/lib.rs | 13 +++++ substrate/client/src/client.rs | 7 +++ substrate/client/src/lib.rs | 6 +++ substrate/environmental/Cargo.toml | 4 -- substrate/environmental/src/lib.rs | 27 ++++------ substrate/environmental/with_std.rs | 31 ------------ substrate/environmental/without_std.rs | 69 -------------------------- substrate/primitives/src/block.rs | 15 ++++++ substrate/rpc-servers/src/lib.rs | 4 +- substrate/rpc/Cargo.toml | 1 + substrate/rpc/src/author/error.rs | 54 ++++++++++++++++++++ substrate/rpc/src/author/mod.rs | 49 ++++++++++++++++++ substrate/rpc/src/author/tests.rs | 50 +++++++++++++++++++ substrate/rpc/src/lib.rs | 2 + 19 files changed, 228 insertions(+), 124 deletions(-) delete mode 100644 substrate/environmental/with_std.rs delete mode 100644 substrate/environmental/without_std.rs create mode 100644 substrate/rpc/src/author/error.rs create mode 100644 substrate/rpc/src/author/mod.rs create mode 100644 substrate/rpc/src/author/tests.rs diff --git a/Cargo.lock b/Cargo.lock index 40ed4b6f19cb6..10ea31c8d7f0c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -209,6 +209,7 @@ dependencies = [ "substrate-codec 0.1.0", "substrate-executor 0.1.0", "substrate-primitives 0.1.0", + "substrate-rpc 0.1.0", "substrate-rpc-servers 0.1.0", "substrate-runtime-io 0.1.0", "substrate-state-machine 0.1.0", @@ -1316,8 +1317,10 @@ dependencies = [ "polkadot-api 0.1.0", "polkadot-primitives 0.1.0", "polkadot-runtime 0.1.0", + "substrate-client 0.1.0", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", + "substrate-rpc 0.1.0", "substrate-runtime-primitives 0.1.0", "transaction-pool 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1816,6 +1819,7 @@ dependencies = [ "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 8.0.1 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-macros 8.0.0 (git+https://github.com/paritytech/jsonrpc.git)", + "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-client 0.1.0", "substrate-executor 0.1.0", "substrate-primitives 0.1.0", diff --git a/demo/cli/Cargo.toml b/demo/cli/Cargo.toml index f2910d99af194..7e024afb19c49 100644 --- a/demo/cli/Cargo.toml +++ b/demo/cli/Cargo.toml @@ -19,6 +19,7 @@ substrate-state-machine = { path = "../../substrate/state-machine" } substrate-executor = { path = "../../substrate/executor" } substrate-primitives = { path = "../../substrate/primitives" } substrate-rpc-servers = { path = "../../substrate/rpc-servers" } +substrate-rpc = { path = "../../substrate/rpc" } demo-primitives = { path = "../primitives" } demo-executor = { path = "../executor" } demo-runtime = { path = "../runtime" } diff --git a/demo/cli/src/lib.rs b/demo/cli/src/lib.rs index 7aa948f1a0485..298f7228f3d59 100644 --- a/demo/cli/src/lib.rs +++ b/demo/cli/src/lib.rs @@ -26,6 +26,7 @@ extern crate substrate_runtime_io as runtime_io; extern crate substrate_state_machine as state_machine; extern crate substrate_client as client; extern crate substrate_primitives as primitives; +extern crate substrate_rpc; extern crate substrate_rpc_servers as rpc; extern crate demo_primitives; extern crate demo_executor; @@ -49,6 +50,13 @@ use demo_runtime::{GenesisConfig, ConsensusConfig, CouncilConfig, DemocracyConfi SessionConfig, StakingConfig, BuildExternalities}; use client::genesis; +struct DummyPool; +impl substrate_rpc::author::AuthorApi for DummyPool { + fn submit_extrinsic(&self, _: primitives::block::Extrinsic) -> substrate_rpc::author::error::Result<()> { + Err(substrate_rpc::author::error::ErrorKind::Unimplemented.into()) + } +} + /// Parse command line arguments and start the node. /// /// IANA unassigned port ranges that we could use: @@ -126,7 +134,7 @@ pub fn run(args: I) -> error::Result<()> where let client = Arc::new(client::new_in_mem(executor, prepare_genesis)?); let address = "127.0.0.1:9933".parse().unwrap(); - let handler = rpc::rpc_handler(client); + let handler = rpc::rpc_handler(client, DummyPool); let server = rpc::start_http(&address, handler)?; if let Some(_) = matches.subcommand_matches("validator") { diff --git a/polkadot/cli/src/lib.rs b/polkadot/cli/src/lib.rs index 72a66b8ef558a..580d2fcf3a380 100644 --- a/polkadot/cli/src/lib.rs +++ b/polkadot/cli/src/lib.rs @@ -115,7 +115,7 @@ pub fn run(args: I) -> error::Result<()> where let rpc_port: u16 = port.parse().expect("Invalid RPC port value specified."); address.set_port(rpc_port); } - let handler = rpc::rpc_handler(service.client()); + let handler = rpc::rpc_handler(service.client(), service.transaction_pool()); let server = rpc::start_http(&address, handler)?; server.wait(); @@ -147,6 +147,7 @@ fn default_base_path() -> PathBuf { &app_info, ).expect("app directories exist on all supported platforms; qed") } + fn init_logger(pattern: &str) { let mut builder = env_logger::LogBuilder::new(); // Disable info logging by default for some modules: diff --git a/polkadot/transaction-pool/Cargo.toml b/polkadot/transaction-pool/Cargo.toml index 6efc3cc3fe659..d80384c23c9c3 100644 --- a/polkadot/transaction-pool/Cargo.toml +++ b/polkadot/transaction-pool/Cargo.toml @@ -9,6 +9,8 @@ error-chain = "0.11" polkadot-api = { path = "../api" } polkadot-primitives = { path = "../primitives" } polkadot-runtime = { path = "../runtime" } +substrate-client = { path = "../../substrate/client" } +substrate-rpc = { path = "../../substrate/rpc" } substrate-primitives = { path = "../../substrate/primitives" } substrate-runtime-primitives = { path = "../../substrate/runtime/primitives" } substrate-codec = { path = "../../substrate/codec" } diff --git a/polkadot/transaction-pool/src/lib.rs b/polkadot/transaction-pool/src/lib.rs index 40b793ceb7925..2b0d94e5176e7 100644 --- a/polkadot/transaction-pool/src/lib.rs +++ b/polkadot/transaction-pool/src/lib.rs @@ -17,6 +17,7 @@ extern crate ed25519; extern crate ethereum_types; extern crate substrate_codec as codec; +extern crate substrate_rpc; extern crate substrate_primitives as substrate_primitives; extern crate substrate_runtime_primitives as substrate_runtime_primitives; extern crate polkadot_runtime as runtime; @@ -31,8 +32,10 @@ use std::collections::HashMap; use std::cmp::Ordering; use std::sync::Arc; +use codec::Slicable; use polkadot_api::PolkadotApi; use primitives::{AccountId, Timestamp}; +use substrate_primitives::block::Extrinsic; use runtime::{Block, UncheckedExtrinsic, TimestampCall, Call}; use substrate_runtime_primitives::traits::Checkable; use transaction_pool::{Pool, Readiness}; @@ -371,6 +374,16 @@ impl TransactionPool { } } +impl substrate_rpc::author::AsyncAuthorApi for TransactionPool { + fn submit_extrinsic(&mut self, xt: Extrinsic) -> substrate_rpc::author::error::Result<()> { + self.import(xt + .using_encoded(|ref mut s| UncheckedExtrinsic::decode(s)) + .ok_or(substrate_rpc::author::error::ErrorKind::InvalidFormat)? + ).map(|_| ()) + .map_err(|_| substrate_rpc::author::error::ErrorKind::PoolError.into()) + } +} + #[cfg(test)] mod tests { } diff --git a/substrate/client/src/client.rs b/substrate/client/src/client.rs index a0c54097fa8a2..f2b4cbc5fa465 100644 --- a/substrate/client/src/client.rs +++ b/substrate/client/src/client.rs @@ -176,6 +176,13 @@ impl Client where }) } + /// Submit a transaction to this for potential inclusion in a block. + pub fn submit_transaction(&self, _tx: block::Transaction) -> error::Result<()> { + // TODO: introduce a tx queue and place the transaction in there. tx queue or some of its + // logic will need to be generic. + unimplemented!(); + } + /// Get a reference to the state at a given block. pub fn state_at(&self, block: &BlockId) -> error::Result { self.backend.state_at(*block) diff --git a/substrate/client/src/lib.rs b/substrate/client/src/lib.rs index 7feede0491b0e..a93b748f8cceb 100644 --- a/substrate/client/src/lib.rs +++ b/substrate/client/src/lib.rs @@ -44,6 +44,12 @@ pub mod genesis; pub mod block_builder; mod client; +/// Something to which extrinsics may be submitted. +pub trait TransactionPool { + /// Submit an extrinsic into the pool. + fn submit(&self, e: primitives::block::Extrinsic); +} + pub use client::{Client, ClientInfo, CallResult, ImportResult, BlockStatus, BlockOrigin, new_in_mem, BlockchainEventStream, BlockchainEvents}; pub use blockchain::Info as ChainInfo; diff --git a/substrate/environmental/Cargo.toml b/substrate/environmental/Cargo.toml index 971dd38b676b5..52c3337f8a130 100644 --- a/substrate/environmental/Cargo.toml +++ b/substrate/environmental/Cargo.toml @@ -2,7 +2,3 @@ name = "environmental" version = "0.1.0" authors = ["Parity Technologies "] - -[features] -default = ["std"] -std = [] diff --git a/substrate/environmental/src/lib.rs b/substrate/environmental/src/lib.rs index 8c415fe63af65..1b9587a5a5390 100644 --- a/substrate/environmental/src/lib.rs +++ b/substrate/environmental/src/lib.rs @@ -40,18 +40,12 @@ //! } //! ``` -#![cfg_attr(not(feature = "std"), no_std)] -#![cfg_attr(not(feature = "std"), feature(const_fn))] - -#[cfg(feature = "std")] -include!("../with_std.rs"); - -#[cfg(not(feature = "std"))] -include!("../without_std.rs"); +use std::cell::RefCell; +use std::thread::LocalKey; #[doc(hidden)] pub fn using R>( - global: &'static imp::LocalKey>>, + global: &'static LocalKey>>, protected: &mut T, f: F ) -> R { @@ -65,13 +59,13 @@ pub fn using R>( global.with(|r| { let original = { let mut global = r.borrow_mut(); - imp::replace(&mut *global, Some(protected as _)) + ::std::mem::replace(&mut *global, Some(protected as _)) }; // even if `f` panics the original will be replaced. struct ReplaceOriginal<'a, T: 'a + ?Sized> { original: Option<*mut T>, - global: &'a imp::RefCell>, + global: &'a RefCell>, } impl<'a, T: 'a + ?Sized> Drop for ReplaceOriginal<'a, T> { @@ -91,7 +85,7 @@ pub fn using R>( #[doc(hidden)] pub fn with R>( - global: &'static imp::LocalKey>>, + global: &'static LocalKey>>, mutator: F, ) -> Option { global.with(|r| unsafe { @@ -110,7 +104,6 @@ pub fn with R>( /// Declare a new global reference module whose underlying value does not contain references. /// /// Will create a module of a given name that contains two functions: -/// /// * `pub fn using R>(protected: &mut $t, f: F) -> R` /// This executes `f`, returning its value. During the call, the module's reference is set to /// be equal to `protected`. @@ -170,7 +163,7 @@ macro_rules! environmental { #[allow(non_camel_case_types)] struct $name { __private_field: () } - thread_local_impl!(static GLOBAL: ::std::cell::RefCell> + thread_local!(static GLOBAL: ::std::cell::RefCell> = ::std::cell::RefCell::new(None)); impl $name { @@ -194,8 +187,8 @@ macro_rules! environmental { #[allow(non_camel_case_types)] struct $name { __private_field: () } - thread_local_impl!(static GLOBAL: $crate::imp::RefCell> - = $crate::imp::RefCell::new(None)); + thread_local!(static GLOBAL: ::std::cell::RefCell> + = ::std::cell::RefCell::new(None)); impl $name { #[allow(unused_imports)] @@ -205,7 +198,7 @@ macro_rules! environmental { f: F ) -> R { let lifetime_extended = unsafe { - $crate::imp::transmute::<&mut $t, &mut ($t + 'static)>(protected) + ::std::mem::transmute::<&mut $t, &mut ($t + 'static)>(protected) }; $crate::using(&GLOBAL, lifetime_extended, f) } diff --git a/substrate/environmental/with_std.rs b/substrate/environmental/with_std.rs deleted file mode 100644 index df940cd6d6bb8..0000000000000 --- a/substrate/environmental/with_std.rs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2018 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Polkadot. If not, see . - -#[doc(hidden)] -pub mod imp { - pub use std::cell::RefCell; - pub use std::thread::LocalKey; - pub use std::mem::transmute; - pub use std::mem::replace; -} - -#[doc(hidden)] -#[macro_export] -macro_rules! thread_local_impl { - ($(#[$attr:meta])* static $name:ident: $t:ty = $init:expr) => ( - thread_local!($(#[$attr])* static $name: $t = $init); - ); -} diff --git a/substrate/environmental/without_std.rs b/substrate/environmental/without_std.rs deleted file mode 100644 index 6178dc7d1d883..0000000000000 --- a/substrate/environmental/without_std.rs +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2018 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Polkadot. If not, see . - -#[doc(hidden)] -pub mod imp { - pub use core::cell::RefCell; - pub use core::mem::transmute; - pub use core::mem::replace; - - // This code is a simplified version of [`LocalKey`] and it's wasm32 specialization: [`statik::Key`]. - // [`LocalKey`]: https://github.com/alexcrichton/rust/blob/98931165a23a1c2860d99759385f45d6807c8982/src/libstd/thread/local.rs#L89 - // [`statik::Key`]: https://github.com/alexcrichton/rust/blob/98931165a23a1c2860d99759385f45d6807c8982/src/libstd/thread/local.rs#L310-L312 - - pub struct LocalKey { - pub init: fn() -> T, - pub inner: RefCell>, - } - - // This is safe as long there is no threads in wasm32. - unsafe impl ::core::marker::Sync for LocalKey { } - - impl LocalKey { - pub const fn new(init: fn() -> T) -> LocalKey { - LocalKey { - init, - inner: RefCell::new(None), - } - } - - pub fn with(&'static self, f: F) -> R - where F: FnOnce(&T) -> R - { - if self.inner.borrow().is_none() { - let v = (self.init)(); - *self.inner.borrow_mut() = Some(v); - } - // This code can't panic because: - // 1. `inner` can be borrowed mutably only once at the initialization time. - // 2. After the initialization `inner` is always `Some`. - f(&*self.inner.borrow().as_ref().unwrap()) - } - } -} - -#[doc(hidden)] -#[macro_export] -macro_rules! thread_local_impl { - ($(#[$attr:meta])* static $name:ident: $t:ty = $init:expr) => ( - $(#[$attr])* - static $name: $crate::imp::LocalKey<$t> = { - fn __init() -> $t { $init } - - $crate::imp::LocalKey::new(__init) - }; - ); -} diff --git a/substrate/primitives/src/block.rs b/substrate/primitives/src/block.rs index eb909c93fa069..29ea4afac1fa2 100644 --- a/substrate/primitives/src/block.rs +++ b/substrate/primitives/src/block.rs @@ -47,6 +47,21 @@ impl Slicable for Transaction { } } +/// Simple generic extrinsic type. +#[derive(PartialEq, Eq, Clone)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +pub struct Extrinsic(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec); + +impl Slicable for Extrinsic { + fn decode(input: &mut I) -> Option { + Vec::::decode(input).map(Extrinsic) + } + + fn using_encoded R>(&self, f: F) -> R { + self.0.using_encoded(f) + } +} + /// Execution log (event) #[derive(PartialEq, Eq, Clone, Default)] #[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] diff --git a/substrate/rpc-servers/src/lib.rs b/substrate/rpc-servers/src/lib.rs index cf2f6f2dc1677..08a8c6e1eb247 100644 --- a/substrate/rpc-servers/src/lib.rs +++ b/substrate/rpc-servers/src/lib.rs @@ -26,11 +26,13 @@ extern crate jsonrpc_http_server as http; use std::io; /// Construct rpc `IoHandler` -pub fn rpc_handler(state: S) -> rpc::IoHandler where +pub fn rpc_handler(state: S, transaction_pool: T) -> rpc::IoHandler where S: apis::state::StateApi, + T: apis::author::AuthorApi, { let mut io = rpc::IoHandler::new(); io.extend_with(state.to_delegate()); + io.extend_with(transaction_pool.to_delegate()); io } diff --git a/substrate/rpc/Cargo.toml b/substrate/rpc/Cargo.toml index 485e08708c79d..56e0e4117c51a 100644 --- a/substrate/rpc/Cargo.toml +++ b/substrate/rpc/Cargo.toml @@ -4,6 +4,7 @@ version = "0.1.0" authors = ["Parity Technologies "] [dependencies] +parking_lot = "0.4" error-chain = "0.11" jsonrpc-core = { git="https://github.com/paritytech/jsonrpc.git" } jsonrpc-macros = { git="https://github.com/paritytech/jsonrpc.git" } diff --git a/substrate/rpc/src/author/error.rs b/substrate/rpc/src/author/error.rs new file mode 100644 index 0000000000000..05c2da37ac5d8 --- /dev/null +++ b/substrate/rpc/src/author/error.rs @@ -0,0 +1,54 @@ +// Copyright 2017 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +use client; +use rpc; + +error_chain! { + links { + Client(client::error::Error, client::error::ErrorKind) #[doc = "Client error"]; + } + errors { + /// Not implemented yet + Unimplemented { + description("not yet implemented"), + display("Method Not Implemented"), + } + /// Invalid format + InvalidFormat { + description("invalid format"), + display("Invalid format for the extrinsic data"), + } + /// Some error with the pool since the import failed. + PoolError { + description("pool import failed"), + display("Pool import failed"), + } + } +} + +impl From for rpc::Error { + fn from(e: Error) -> Self { + match e { + Error(ErrorKind::Unimplemented, _) => rpc::Error { + code: rpc::ErrorCode::ServerError(-1), + message: "Not implemented yet".into(), + data: None, + }, + _ => rpc::Error::internal_error(), + } + } +} diff --git a/substrate/rpc/src/author/mod.rs b/substrate/rpc/src/author/mod.rs new file mode 100644 index 0000000000000..61683e77b18b3 --- /dev/null +++ b/substrate/rpc/src/author/mod.rs @@ -0,0 +1,49 @@ +// Copyright 2017 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Substrate block-author/full-node API. + +use std::sync::Arc; +use parking_lot::Mutex; +use primitives::block::Extrinsic; + +pub mod error; + +#[cfg(test)] +mod tests; + +use self::error::Result; + +build_rpc_trait! { + /// Substrate authoring RPC API + pub trait AuthorApi { + /// Submit extrinsic for inclusion in block. + #[rpc(name = "author_submitExtrinsic")] + fn submit_extrinsic(&self, Extrinsic) -> Result<()>; + } +} + +/// Variant of the AuthorApi that doesn't need to be Sync + Send + 'static. +pub trait AsyncAuthorApi: Send + 'static { + /// Submit extrinsic for inclusion in block. + fn submit_extrinsic(&mut self, Extrinsic) -> Result<()>; +} + +impl AuthorApi for Arc> { + fn submit_extrinsic(&self, xt: Extrinsic) -> Result<()> { + self.as_ref().lock().submit_extrinsic(xt) + } +} diff --git a/substrate/rpc/src/author/tests.rs b/substrate/rpc/src/author/tests.rs new file mode 100644 index 0000000000000..fd9b9062e6464 --- /dev/null +++ b/substrate/rpc/src/author/tests.rs @@ -0,0 +1,50 @@ +// Copyright 2017 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +use primitives::block; +use substrate_executor as executor; +use super::*; +use super::error::*; + +#[derive(Default)] +struct DummyTxPool { + submitted: Vec, +} + +impl AsyncAuthorApi for DummyTxPool { + /// Submit extrinsic for inclusion in block. + fn submit_extrinsic(&mut self, xt: Extrinsic) -> Result<()> { + if self.submitted.len() < 1 { + self.submitted.push(xt); + Ok(()) + } else { + Err(ErrorKind::PoolError.into()) + } + } +} + +#[test] +fn submit_transaction_should_not_cause_error() { + let mut p = Arc::new(Mutex::new(DummyTxPool::default())); + + assert_matches!( + AuthorApi::submit_extrinsic(&p, block::Extrinsic(vec![])), + Ok(()) + ); + assert!( + AuthorApi::submit_extrinsic(&p, block::Extrinsic(vec![])).is_err() + ); +} diff --git a/substrate/rpc/src/lib.rs b/substrate/rpc/src/lib.rs index 513bc42d873f8..3c9a46e4d4a3c 100644 --- a/substrate/rpc/src/lib.rs +++ b/substrate/rpc/src/lib.rs @@ -18,6 +18,7 @@ #![warn(missing_docs)] +extern crate parking_lot; extern crate jsonrpc_core as rpc; extern crate substrate_client as client; extern crate substrate_primitives as primitives; @@ -38,3 +39,4 @@ extern crate substrate_runtime_support as runtime_support; pub mod chain; pub mod state; +pub mod author; From d82e591ab6d2d5341a9e3d1d1b66f4c9b69ae83f Mon Sep 17 00:00:00 2001 From: Gav Date: Thu, 5 Apr 2018 20:04:03 +0200 Subject: [PATCH 2/4] whitespace --- polkadot/transaction-pool/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/polkadot/transaction-pool/src/lib.rs b/polkadot/transaction-pool/src/lib.rs index 2b0d94e5176e7..427fd540aa19e 100644 --- a/polkadot/transaction-pool/src/lib.rs +++ b/polkadot/transaction-pool/src/lib.rs @@ -69,7 +69,7 @@ impl PolkadotBlock { Call::Timestamp(TimestampCall::set(_)) => return Err(unchecked), _ => {} } - + // any further checks... Ok(PolkadotBlock { block: unchecked, location: None }) } @@ -378,8 +378,8 @@ impl substrate_rpc::author::AsyncAuthorApi for TransactionPool { fn submit_extrinsic(&mut self, xt: Extrinsic) -> substrate_rpc::author::error::Result<()> { self.import(xt .using_encoded(|ref mut s| UncheckedExtrinsic::decode(s)) - .ok_or(substrate_rpc::author::error::ErrorKind::InvalidFormat)? - ).map(|_| ()) + .ok_or(substrate_rpc::author::error::ErrorKind::InvalidFormat)?) + .map(|_| ()) .map_err(|_| substrate_rpc::author::error::ErrorKind::PoolError.into()) } } From 1514dbe01a86fbdf95bd38f3913d945bceea5177 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Thu, 5 Apr 2018 18:23:43 +0300 Subject: [PATCH 3/4] Support without_std env in environmental! (#110) * Make environmental crate support without_std env. * Small doc fixes. --- substrate/environmental/Cargo.toml | 4 ++ substrate/environmental/src/lib.rs | 27 ++++++---- substrate/environmental/with_std.rs | 31 ++++++++++++ substrate/environmental/without_std.rs | 69 ++++++++++++++++++++++++++ 4 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 substrate/environmental/with_std.rs create mode 100644 substrate/environmental/without_std.rs diff --git a/substrate/environmental/Cargo.toml b/substrate/environmental/Cargo.toml index 52c3337f8a130..971dd38b676b5 100644 --- a/substrate/environmental/Cargo.toml +++ b/substrate/environmental/Cargo.toml @@ -2,3 +2,7 @@ name = "environmental" version = "0.1.0" authors = ["Parity Technologies "] + +[features] +default = ["std"] +std = [] diff --git a/substrate/environmental/src/lib.rs b/substrate/environmental/src/lib.rs index 1b9587a5a5390..8c415fe63af65 100644 --- a/substrate/environmental/src/lib.rs +++ b/substrate/environmental/src/lib.rs @@ -40,12 +40,18 @@ //! } //! ``` -use std::cell::RefCell; -use std::thread::LocalKey; +#![cfg_attr(not(feature = "std"), no_std)] +#![cfg_attr(not(feature = "std"), feature(const_fn))] + +#[cfg(feature = "std")] +include!("../with_std.rs"); + +#[cfg(not(feature = "std"))] +include!("../without_std.rs"); #[doc(hidden)] pub fn using R>( - global: &'static LocalKey>>, + global: &'static imp::LocalKey>>, protected: &mut T, f: F ) -> R { @@ -59,13 +65,13 @@ pub fn using R>( global.with(|r| { let original = { let mut global = r.borrow_mut(); - ::std::mem::replace(&mut *global, Some(protected as _)) + imp::replace(&mut *global, Some(protected as _)) }; // even if `f` panics the original will be replaced. struct ReplaceOriginal<'a, T: 'a + ?Sized> { original: Option<*mut T>, - global: &'a RefCell>, + global: &'a imp::RefCell>, } impl<'a, T: 'a + ?Sized> Drop for ReplaceOriginal<'a, T> { @@ -85,7 +91,7 @@ pub fn using R>( #[doc(hidden)] pub fn with R>( - global: &'static LocalKey>>, + global: &'static imp::LocalKey>>, mutator: F, ) -> Option { global.with(|r| unsafe { @@ -104,6 +110,7 @@ pub fn with R>( /// Declare a new global reference module whose underlying value does not contain references. /// /// Will create a module of a given name that contains two functions: +/// /// * `pub fn using R>(protected: &mut $t, f: F) -> R` /// This executes `f`, returning its value. During the call, the module's reference is set to /// be equal to `protected`. @@ -163,7 +170,7 @@ macro_rules! environmental { #[allow(non_camel_case_types)] struct $name { __private_field: () } - thread_local!(static GLOBAL: ::std::cell::RefCell> + thread_local_impl!(static GLOBAL: ::std::cell::RefCell> = ::std::cell::RefCell::new(None)); impl $name { @@ -187,8 +194,8 @@ macro_rules! environmental { #[allow(non_camel_case_types)] struct $name { __private_field: () } - thread_local!(static GLOBAL: ::std::cell::RefCell> - = ::std::cell::RefCell::new(None)); + thread_local_impl!(static GLOBAL: $crate::imp::RefCell> + = $crate::imp::RefCell::new(None)); impl $name { #[allow(unused_imports)] @@ -198,7 +205,7 @@ macro_rules! environmental { f: F ) -> R { let lifetime_extended = unsafe { - ::std::mem::transmute::<&mut $t, &mut ($t + 'static)>(protected) + $crate::imp::transmute::<&mut $t, &mut ($t + 'static)>(protected) }; $crate::using(&GLOBAL, lifetime_extended, f) } diff --git a/substrate/environmental/with_std.rs b/substrate/environmental/with_std.rs new file mode 100644 index 0000000000000..df940cd6d6bb8 --- /dev/null +++ b/substrate/environmental/with_std.rs @@ -0,0 +1,31 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +#[doc(hidden)] +pub mod imp { + pub use std::cell::RefCell; + pub use std::thread::LocalKey; + pub use std::mem::transmute; + pub use std::mem::replace; +} + +#[doc(hidden)] +#[macro_export] +macro_rules! thread_local_impl { + ($(#[$attr:meta])* static $name:ident: $t:ty = $init:expr) => ( + thread_local!($(#[$attr])* static $name: $t = $init); + ); +} diff --git a/substrate/environmental/without_std.rs b/substrate/environmental/without_std.rs new file mode 100644 index 0000000000000..6178dc7d1d883 --- /dev/null +++ b/substrate/environmental/without_std.rs @@ -0,0 +1,69 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +#[doc(hidden)] +pub mod imp { + pub use core::cell::RefCell; + pub use core::mem::transmute; + pub use core::mem::replace; + + // This code is a simplified version of [`LocalKey`] and it's wasm32 specialization: [`statik::Key`]. + // [`LocalKey`]: https://github.com/alexcrichton/rust/blob/98931165a23a1c2860d99759385f45d6807c8982/src/libstd/thread/local.rs#L89 + // [`statik::Key`]: https://github.com/alexcrichton/rust/blob/98931165a23a1c2860d99759385f45d6807c8982/src/libstd/thread/local.rs#L310-L312 + + pub struct LocalKey { + pub init: fn() -> T, + pub inner: RefCell>, + } + + // This is safe as long there is no threads in wasm32. + unsafe impl ::core::marker::Sync for LocalKey { } + + impl LocalKey { + pub const fn new(init: fn() -> T) -> LocalKey { + LocalKey { + init, + inner: RefCell::new(None), + } + } + + pub fn with(&'static self, f: F) -> R + where F: FnOnce(&T) -> R + { + if self.inner.borrow().is_none() { + let v = (self.init)(); + *self.inner.borrow_mut() = Some(v); + } + // This code can't panic because: + // 1. `inner` can be borrowed mutably only once at the initialization time. + // 2. After the initialization `inner` is always `Some`. + f(&*self.inner.borrow().as_ref().unwrap()) + } + } +} + +#[doc(hidden)] +#[macro_export] +macro_rules! thread_local_impl { + ($(#[$attr:meta])* static $name:ident: $t:ty = $init:expr) => ( + $(#[$attr])* + static $name: $crate::imp::LocalKey<$t> = { + fn __init() -> $t { $init } + + $crate::imp::LocalKey::new(__init) + }; + ); +} From e243e8bfe77d1b81dc3a04b573cd6884c7d3fdd3 Mon Sep 17 00:00:00 2001 From: Gav Date: Sat, 7 Apr 2018 18:05:56 +0200 Subject: [PATCH 4/4] Remove dead code. --- .../release/demo_runtime.compact.wasm | Bin 195836 -> 196176 bytes .../release/demo_runtime.wasm | Bin 211583 -> 211880 bytes polkadot/consensus/src/lib.rs | 4 ++++ polkadot/runtime/wasm/genesis.wasm | Bin 190794 -> 190996 bytes .../release/polkadot_runtime.compact.wasm | Bin 190794 -> 190996 bytes .../release/polkadot_runtime.wasm | Bin 206425 -> 206646 bytes substrate/client/src/client.rs | 7 ------- 7 files changed, 4 insertions(+), 7 deletions(-) diff --git a/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.compact.wasm b/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.compact.wasm index 84040bcf067929583ebd3d19e3ee19c54e64dd88..f650ddc85fdf2189758363aea9ea27aa5036c17d 100644 GIT binary patch delta 19621 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

2zh;(SYAXEezJ@RDal;d(xaPDIzOhY5oK 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 XsqF`QaXW!Wh;#ph95 diff --git a/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.wasm b/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.wasm index 031e96bdb0ee6e1b1aa8c20b4b11af8adc2e0850..8f03da6b6570ec0ca879f8082487b83209f40dc5 100755 GIT binary patch delta 20857 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 bft::Proposer for Proposer { } let polkadot_block = block_builder.bake(); + info!("Proposing block [number: {}; extrinsics: [{}], parent_hash: {}]", polkadot_block.header.number, polkadot_block.extrinsics.len(), polkadot_block.header.parent_hash); + let substrate_block = Slicable::decode(&mut polkadot_block.encode().as_slice()) .expect("polkadot blocks defined to serialize to substrate blocks correctly; qed"); + assert!(evaluate_proposal(&substrate_block, &*self.client, current_timestamp(), &self.parent_hash, &self.parent_id).is_ok()); + Ok(substrate_block) } diff --git a/polkadot/runtime/wasm/genesis.wasm b/polkadot/runtime/wasm/genesis.wasm index e5393d0d09674d645dc5fd8e89f0752444fc9788..b7adff2d53861c2623460a07124cb71dcb968588 100644 GIT binary patch delta 8253 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

  • Ix4(eTp1}b6h`R-^*y1j#blcAqQ`tcp~ z+YS8)(({f59$ZhDKRA~3Jc7EOo-e&>R0KRNpbm8OG%!S=`hCQsFMv`V{m5DAeJb+@ zdZ@QtA1FUSWeS2G?<6j)lGMv6`?w;O6m*R&1v-#K12c@u3H0Nk4s;+?-;?I#7^)BG zd31QBzN7X$f&o2`4%Z(bJ)d6z{cJw|yy9u9kULbA66Sh|CO7w}h}=sid4wL=lVo5q z9HZXRw2-!up4UH4yhM_Lc7Zt%sNX?Vl%llrU!mvgV-fItG(C{7qPywGJwHfgJ}>yv z;~fc1vO8#X^2i1FM+ox{_alAp4*CxW^D+OC+H=nXtNIQyPE@JUXDq*fp}>RdNS{iC zfWD0y@CQsH{pb$*D~7%=>9afNe>L=r=qb4!^n)lu+|H|{=aGcb?D}E48$6$*^*n-u zJ7G?)Ht7TWBql6(K+fVNgIVEOx;H9s#fi9NBm1g_u7<{(#VGd1H#irUZtI{aK11iv zGS>J$j*4-6rp?O9bFn_o&d8mapFKU>?VdTqom(yRY|ppoU_;K~$NvMLvtQf* 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 e5393d0d09674d645dc5fd8e89f0752444fc9788..b7adff2d53861c2623460a07124cb71dcb968588 100644 GIT binary patch delta 8253 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
  • Ix4(eTp1}b6h`R-^*y1j#blcAqQ`tcp~ z+YS8)(({f59$ZhDKRA~3Jc7EOo-e&>R0KRNpbm8OG%!S=`hCQsFMv`V{m5DAeJb+@ zdZ@QtA1FUSWeS2G?<6j)lGMv6`?w;O6m*R&1v-#K12c@u3H0Nk4s;+?-;?I#7^)BG zd31QBzN7X$f&o2`4%Z(bJ)d6z{cJw|yy9u9kULbA66Sh|CO7w}h}=sid4wL=lVo5q z9HZXRw2-!up4UH4yhM_Lc7Zt%sNX?Vl%llrU!mvgV-fItG(C{7qPywGJwHfgJ}>yv z;~fc1vO8#X^2i1FM+ox{_alAp4*CxW^D+OC+H=nXtNIQyPE@JUXDq*fp}>RdNS{iC zfWD0y@CQsH{pb$*D~7%=>9afNe>L=r=qb4!^n)lu+|H|{=aGcb?D}E48$6$*^*n-u zJ7G?)Ht7TWBql6(K+fVNgIVEOx;H9s#fi9NBm1g_u7<{(#VGd1H#irUZtI{aK11iv zGS>J$j*4-6rp?O9bFn_o&d8mapFKU>?VdTqom(yRY|ppoU_;K~$NvMLvtQf* 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 08b69ae04f0a291b0451ab5aafe160d67fa5b9b4..d4e3dd6dd34f3ad9e8727982a3e7c7743d4652e2 100755 GIT binary patch delta 9039 zcmbVS33wF6w(dGTlWh_**~#9SBw*MRFziC3g17)Gpdwrd5HVv2NP-eTCV_w~fs1ye z2m}z}T~LRxbfAI26@(`W0aU_O6ah6TAVPp>1XF(*7LErbj2Vdv>b?UEE)u*dY zpQ@fyb-_E11#fv2I);GR%yA};Gn)efIF1Wc{{?ZJ)nq1<2_a^laNrj}97Jram5LzO z@g}k6733A=<>coT=8hhlKWW@6+!iF4Y3FXAw^43%u zh_&+L?FGVQeg{7$rN`TklD_D8fWc**ej^v?)>$N4dN0!f`zqzstT%vMkk@uuNwB7L zB*eH)^>@MKIpm=wZu-Mq{Vkar8m2MkS14RkJ%h25HY}R1A!O)>^43dIKd>E z>>}5ZQ!1rl-3KQgS%Ji!NaT2^@Kt_A+=n83n_g6r!lsfbfK&h06^tfngw+C;A zvu;rDNUT>pOLaA#rQ6lg@mX;+<_Quam-iPU;nR1e>JbCrbfwfhq758prIu397aze2 zx%9=&CYZZXIy*KCZ!~wzQUX;qQghBvhBAEIQ-oZX#*BXuZmz<%vC@|D$(jqsY&T06 z$3Ll6$U}0Ic&(<)o-S{E`H>@B*5e+{xOEcg2bR)_v^e z#M$r5jgu#YK>2Rz+OY(hFdeL}Kf~+2JW#X4^PU^LO1HgA>$iI{>vwyW>UPk+g%Af- zJ6LDoC9By8(yS{rH(%b))Kc@Tgrv(}?aFFBtyI-YiyS+=Z%dHhDd`i0&N#WS(e12s z>E5EzSQ=ga9(o%VXQ6xK2bX+f@?Z>8(0CRuK^v5hJ6po{|*A_bEbR|H!O;z3y&?|dM# z-c=DU@J5AGde=E3bkA1LTe~a;Zc2=;-{z^S*@7hz|685X_nTs*;hU_mXB+d>^Hr?M zJxj~HN+Z{4+7n4BTerZrOBC&fY4{j-uR#sc2JIB=7Y0Oh8 zezO%SHp}fd_cB?_yc}1xO)i$d)Sjt4X8Q^4xyz63jweu8i+33>m(=$3Q^QKEd~*L4 zWV=F)eCj}xj-^uvM##NCX$Gj-DQAC%ZI7&zo;{ojC)P>R4xh&PG3>~2>pm8X+{;Q{ zC)Xay0#YVjIhu^IO$t5srS-B`7%AJy+zeGa<*VZj?*N%Abvctq=1Hs1WU^WJ#hHj!s`Jc(zuS50{EHC$JTy|!*}s{8{m+hwRBiZq z*g)eoXP+naQpmZ~@YBX{f?UHnBlkO3Mo5`_==<(OsN3l|shqCYfEF}ys+X2Z!jCh; zygZWHbGrA4H`mrz}^+~;~~Trv0r}=>a**>3Z;1n zd4<5S50&xHkO;u{7A+o1(wJN`lssl_@anRrmNpM1W0}Dg6G@U`5VYxfUG`&yn0f*t?Ei=|W=ZopEHavM7hdYp*k zJJfqZ5~*}S7PZYHORytMN6PRC)27+7pKGw-% zl{@~r0=2*kp=zL}WphawCOQh8OG3?RyWX^6A$cG1l0^jHQ_NH{U0qIAG5ft2lg~mu z><254timVKQ;morg4MmK)kPa3I_w@wb?rxat$q6T8lo@$NUxWVa%>GbkG&~1o5_bJ zjA%5ch9qN1qqA$sSEwJco!lbi5*?-xfm~N!Q!qRA_MCW2G3_EBL)(KaNU$`_Dzs#& zRg9K=xfg4UJC-TeYDs^b?Mk=3rS6da2r`r0yf1^D$b8 zVt0$K)m|zMvJ!NVv;vr4MOPmpanx~`gwua~LZZ|eqRjtj#$YsKUFf2E+d8DaNIY$6 zW*n?TFFQmO{?f*=zqN6n3D8YIU;Q@J)UY4-bO`6AYRRRTMJ~n9H8jjf&IMc7vKxq_ zAq!xk!*x^rIKkY{F;g%PiMN@p&6+E$cA=Gx6Zy%axd^=?wzO+5Xlc&?t}9L*6Z%!t zSq&W~>zb?FI=p{q3}#I@%n?#r;ebqd5peY7`wC3U7uZ02Bi}BJ+>+PCR4Kl6+_nX*7SNeP_@TT{MSbuD8YuK;CJC zm*8WrmqrUj+P4NR-iOvxqXi-D8-o_-Lv!@dcoyWHGI+5*yzUw;7-?S{w3a@!ZW=8F zXUqUbGJ{TjPbIxswJh%7^x#MzbQV-k?SL(7I@}Fr=N(Xb!{? zKD^EvFC6Q>G|Ywj(6TgI1k%1RXkk9IOpO+aw9gHiRi!!Hv#FEDi$dOUgBR*!uA@ea zM%poh*20I@L8HYW?WjQu@u9VMXuOult221PKD>4sEf#4<44TD<)>fm%A?>h13-Y10 z(P;4k=MXwI zgy|~$0b!~Ne?(|gVFSVx6`n^ZsPHF*$twIAVUh|R7Z4|^_#(mt6<$IZufkst#;Nc! z!dMmlim;^$uON(3;Z=muDr`g;rNV0nBUN}EVT1~s5Qg<|xNhkN;&4^{8$zoJe@7Uq z!e)dmRQLzN5Eb4;7_7ou2rVl76Jd}FZzBv;;T?nlD!hx(UxoJ^i2WEgp|9;JCIM2| z!4$FEh!{37gtJ(LRv29dAi}peK7nhPO)&Sftb+OeI+N)58%(0to0vqG|HdTx`*$YM z+09I%qyJzMy?m3&c)b5x44{MmWD>o5n@M!-9VXGQcbP<|-eVFyS`va1-C4>c`f@gt zVLiAqCeev=m_!fGWfI*tk4g01n@pnP<}-<2Tfn5n(Suva06J_DljyB-Cec-knM6M= zVG@1xPn3U|N1ePsZ}~suQECoUz;Z4w8 z#2U|Izoh|6&fAa=EQLH?0X8FrWKoFi+cAYSy#uQP{IcOO=qs4%+T$dee)JCb(Tq_f zBu)Uq52uG<*YZWeRyRAH?u(g1h zIy3kO8!=5<29LnWN;-ZSJi&HzTbDsUwzc_f8Q|fg>y(4`rqG}1=2GaB;7UBLKf6*k z(0XK|uXu0;Jx3v1Z`E!&B#=Mpz~#^$uxi?Jcma-8Dkql1dqf%gCAk4~?9*_K+);); z1L;I*-5)Y|a$9+NAXNG*!%mX(t+B4>9pW^hyg;DoVJIo3XC4Is<+A?JTKZzxGfef+ z(-32Ey0*Elb0+%wv(UzS7m~vEZ*d?lR_dOGcx|5*OUVmxC3z*DEOKI&drQ&a`3S|8 zw8aQ$8+n^4g#aPMy|>u2TX|{(JV3}T`r3=If*hq`BcTJ7R#9;zuq{6xO^;$54=l#h zKSx5Es_UnW9R&+`*t47dItCtKd%u_*u(3U3=}L&8Pvyc7FyE^vY!1uMEzI0I05{FXY4H{%2h+EbbQVea=`~ z;MVMJKD^6Qna~o?o9V2X&`WI`tJKeg z|1ke5&RKBI^@#C%1^w3?n2ZdZAhAlPG8jhSL$fsCHye%F0liW#vFFCNF2EK#F9y25 zRs^_W#&xA=2V`o8O$r`9^~B>V`uk3>{l!6?(qH|W$AY>cii zCU_7+kF0?0xZTG2HyzJI=qu9n!Ecg7t zAp|fbhe|qs8?=d=&1M;n9a9ABEj1##@XZpXZX2}b6>$%oZV}nU&Oh<6+c>^1+ofb4 zfdbH~qCKjrb}8~vIA@MkTbYe2flo16MCUHWc>;Qv9l(8Wqg)(M^LsRn z!D-s5bov^$nL0RKRY69FqB?{CLu0w#891>d!17_5V*L(c1L(!?Adxozf|EM*5{pR34Tys{26{FG~+ycMem&lhce<43@5=xTaHt<`~vNH zle3*=C;k2kWZH_OI4+FixC$P>sG{r>!Euo&W87uh9EoK- z4de6yOhR5CEO*CC9RSCrBKFn)h&*P8gm7Fh%;)hx$6;S?LxZrw)6h~J1vC0NN;Xg{ zaF}>-+!(Fg9m}kvP%IBXskc9c*o0SG^dzg-_4)v#tsIxddeX{*3-%ryIM|}qm{ll7Gz=;!!xGzdJu)S!Ud2B3}*__&nM%kQVkIum+k8W5Wi2h6q zk=+;TSXWnB2e+czi9(v|IrjI~9>kIh~R|hX^6*sU$L9KA< z^E7=EHei!;Jzjv<7#z6`We+T*qD;kd0!n?Ae1@aNX@otg^=~0B5sP{|ea>(Z=znHl z175hRaW|+&$Xu>_;sZ3qme+8+m?s2Wi)wlX+?Ums=8?AHDD z=jhXsd^bAB#wWuxt?(Ty6#ql5>6*&7g6Tt9p(~}Sd}82?x5?-cgEBKa)5a)1hK@<* zqiEYCehisOuL}GE@&*kP_(C#^mM8Hw#6iVm{y3Bnx<8T6GI#2lSxRWFz;}k(gchgp z#rzyHlwLFOiPRdz$J2H;J|UotjKnS;?5_4OI-U=tgVXq~WbU$begeIc#)px42&dtX zQ7k!Ai(Z~I1%Hr|TR8vzpQbFh@0TeHeSVm-$oF?C<@fz81%HQP{3>M$>4;p2gQ;ehtE_ws^~A)x6y z=B`u}9u6gr2RKeW$EROOnx(Ia5*0O-K#N2T^IQ9#bI0oU`+lGPuIsc@dEirBVAO$pu}rdJ&cDXGlM6D(V)p&$eX3-TIuXCm{b zT6ILK1YFMO;lrgeBK1Y(bk8FkuIlwO6tbNQAyO$%v*D65H8K4)ghI8f&uV}|rL0e+ z`fR_UIt*7n=)arjkPQ*a(tE+mn*%;bYFkeo_7emNWWQ`HN}}wOZ58{WAem%Swk-4% z^2(G^8BfRUEhFL}A__#5Oq_u-5+haEU#1+&cnRCqD?J8Em{+D|4!jy@sk1w@Nq0zY ztYIg8Av#`OvyJ=dP&e#$FEv)H`NO-1*Nasad@&jD|1BzLtaBIk|kZ zdSlkKAY8dexp^{{Wfo&FoAnlkW_SdkVVAq7D^>SWrAMi*iXHTYj=pVr3uS~YQMq^0 z5_)4T?=8u)+6ZYyHScd=OO?B+l4|!-%O3Yq$zJzT#a^Y@R^#cKq`sXuIDi6jw&;d4 zV9Cn;;&D_OS5i(9$EE2MBDL?buT5@@CzL-^srH>{^?;%{rrY@HWToWoTqxYNDwONO z*lcXrrY>f~xP{tx)^Rc8y?+K_ZH*GLISlJ+)Xtl`nZhe;XrNNKWU^2Q`FfBmYm~{A zUBma=D?%mFS<$dXSzkFOxNe8LYbA>R*0|`Fo$k6b+o>eeUrVKOeruHS+*S+L?c@=Z z_wy>}l&tV5oqdZpd%zj=5|7#zeKIRIw_269lOdK$k72CbL1XKtbUYla)DE!NyFAT|FinEZy?tGg^pGQ6VsIy1JB!M#`wYo-zY&T`Y_B`dslQH(m zx#}Q<*n!e*LeG*T5ni72SGfRO+6z4NqqwxoaRhk-n>P8^mC|BScYgkJ; zarhR+H!;33-6~i6eRB_?MCtQg7A#dtzf0p&?euqHo%OhxC0}RU^hp;c`M7D6fOCH^ z>4u*h6Rz9vakD|jtImyvJSC_;F|_cX&fx^uhf|~utuFv5R*#?00I9*lquMQQ{?Yty z%TuI_e+%)5OhSNMtW;jifmKROLn4%_gB#*}sIwQZ{a$Cv;D$(b^R;^5;VEkT-S8+w z8X}1EJgD89LhR4x;pTY$Y=$(1tGUgi;Sa5=aC4+%dSw6jFQ6Eww3NY8^+d~MhyK{D z5;}|M5DHhO-Fb?iPStl7iLgW&aBr|39Y1{KIOkYnwf4x9@NW|~Ze;~JPn!*)1MLdP`QRi?FO z!b^ZnA83=GfiR?#i!B%lNnEZQ36EO}+}F0ee=lnt2@|=&_Af&xmq9e&d=%_vzn%8z zT6z+L^xZH>vN%_@zG{PHTeh20U;Ggsi=X{t9XM8hxW|#Bom>Z(s5h-@J8Uu0mc}Mj z0be(4Q5Aea`Z3jT7hn||rGW&c+AA8RrNJI+S#H)$d*Cp3zri;xo`6}T4m_!fGSV*R zW)|h#%(R>PU^vZqZNP`{KKfp%pq6rma;P#T^ruxE$2yOe{X4b9gYc;sW$aPhTMDgl zpw!lA0Y{-T;=R?Z^f+{6wvQo{{pA=$=+jFpJO<%FwHno46Y*%3R&)Zs^wG2{@DpkU zt#GLe+|{z2`DhXR2!C&%N&~%iz>`4(<%xALAf=+oV_`JFuhID3W)zHP;~-*vaYGmCr1iab01NmXL)p#-xa5 z&*flK{BlZ)1UcR5{~C{^XgQlS6T633ai!!Z1vvw8bdOd(lT1Q0J24C2gTrjFE@mgGny^1DZAmmr#`Uu%WNeIBC|-cm=I|w!if% z{*0TqXp8@bQxT7MU7akQTd(54L_B4B*U4-iawi*VCFjC7Xz%79H^VsD#Fcr%;^RW)o#w^AR-nDXl zVaM(*9x18knOf%&vMP3fa!}S%NDlCD6yc++XOTTN8Woa7{x}vdMcQxq5QgeYFOoGc z!z9*Y83w{~HgFlH``@=eWpaScTZWU|Xp`}1B|pXOsfZ}I?PjmPMFhsKyoD(wLYCvR z6rhDGFqsuCN1B>^#YeK5<(N*!uP(<_62uy261e&CD=>}*L;PobH`o(&KQ?|9Mz9}N zpjB@it)=_}{{y&nlLjlXUe9SF+3k0bl2m?K(iXjoqk&EQ3|_!RW$eZIv^y{M-tG&_ zSkq^~FJ29wLml1?XNS*#wR?R#$~))|B@7k%i*I9^qK#-T~>5#LHNfJ^--KZqmk)s`(eHNm}3NrgYx1gR-mMlelFpk0L z_m~8;EF}2QI0U)AorMhM2?@yVo`oVCk|ukoAeo2S{w|p_W2|ONUOx8*rOsAS7H7%k zx#YOqA)Aa7l|Tv#{b^GZWQ#**ap~v+sq_4tItf#-z8!BOQs$b_nZ`o7dII1Oafpr1 z1?nZoYLZ`@kuBq6K|nnVbWfGf3E8QFU`?j_csuGcTS}I?%%SpNUY7upwqV+InQAGR1MGNwxrRp?W zLI>j2x_Irpcn=unqKS6GMGN$zbvI}oiT1IJ7T`teX3%1Y_7SJq^abYc#Y-`GvBdiy zmpMN#T33S>N3`QEny(kFi$Uu|v|}!s52>kt*W>SO@ZyR0Zx_$(WiHvENklv9qM5vC zNd_%}Xh&Q$(Sv3a>xCIFW%E7oypSy=4Yco^^#qf3c!6M|4lfe4>ac-ef(|bc zlyrERV7v~m5bUJG?+M0nNd8|X9ILCZ5scB{b%Gsr*hny1hd&VPpu;ADQ95iU7^%Y> z1S52KlVG?GeD!xn-eI{b;CEmX%p6SnB^7QtX0wi0Zw!`lRdba;ngJ00F77^uTv z2nOh|jiA2{?-BIV;jaXJb$Fkk4~G+GU*M7gf00XydIOgf@=IJ&yf1S}!M?&JMf!U#Dau#5q!3@@lHzN- z&H+WYkxL5g4_s1Qo4BN)Hgic4y}>1g^Cp)R%OAO5)*+eM*h21dZGW zdG2FRk&HBkClKgJX!Kg1p70F9NKvRH^czc=fss!+OmFZqO=*LXBK@I7lb-aD#pOZS zNtE8uUF4*%HsKu1K%VTKI!||dXR;?4w=PQdOc!9SpU@8<$03rLm7Ss-^uPu1>0;Is zJ>WtjPxw1@DckTB_`>FI%FV3t0`y@MFTzkPEn^!m!jt^9z)!qPS!@3Wp!eAJ_h!u2 z0K>U%?DT;XFiJeTa<4UttN0Mrj_y9gcFBbWH?O*fQt31Xp@6<>l> zRPFX&Kvt$jT!wOBUCZ!6{hG&LhO>obSWQ>TKIQl--Sye_3XF%_>{JClh57j`ZUZjF zH8pJQ1{|Q*(p6{!`okS|YXgqvRhb)c2vx1vh_P^6+r~?9M{C}M;TV^%XNf7|EUQmu zkcncy!-rNCrID0CGU)@{$1QyO0WN?N_WTx1=a;AAEf_0u@cuS@)CYgfW6f0<%N+@- z#$o!<*|chupj9iZ#wP$@&(}V$!KHwU^4Y}QxT4d3x=Xs=eiHtxr|_Tg>(wIIFzb-mCn z*{!WQfjMYYMY>g0?AAJ*#CmhI-pcH%lEeg4pj@?E3ps-WO(V|m|7VfhUlThtX4hrd z&T%(?)X=y%ZJPG>m$=K+qsm?t;ObD;hv4VZ1l~U9fi1g) zuQSVe4AA1Q;|S2^HDao0s_h=Qo^5Q#G;4H(AcP2luu>ERGs$zIf)GwJ%2{T2n(^U| z)-XZnN_r&HLnM3C59oIyoc;F=+~};&@zv|6IP0~Ln{)xTogk};q#V^w5C)U%ZV--A zS#s0MgsE>~CFy&)>4zHnE~M|_rhmlH-ynT7VM`Dt1SCJC(NS(7q*Iw3v_`JdMf}1be*Wx$qN&PDa_r72%|ymv(|< z0P*x-hEO?%emvBU0eI_UX;MB(^$tCc4v*9|YR@C+(DUeU{Q=VR`Q^}0=g*&4tfLCa zts;vs*9$bexkm%Zy+o2nsKZ#2j@9rHjgF>;u%7h1eg*O3NIKd%=76Jq6ID?X=*K-jNM$}R_}b$GaZIwOX?gO6w;@;>2DkQdDKg9H~k=r z5Vy0P^gNO3?MpO5#eG&rT(X zRsIV;fpKI0l-56;r3H#ntSLc^V7sm2YIv26O%QY8Z>+SFm}X8J(7VsyS=n8*vTccC z2)xElOX3n($POin3(z)_eHtJRVDpm1Sj+>K8ZQoH?c>Exm~StP78k)^SdR#z9EcY? zi?72-Uh2>2LKR2fLIh5jH+TBXIrKfml-xId`(?!9-+UPHrq_27h2Eb5%d{^ z>!XNb_%nIkH)CAVQzKd5KrxK%ND_z8Ie#-roDWO6m=@AIed?5nlc)AdOP`e1DaF@DqemR diff --git a/substrate/client/src/client.rs b/substrate/client/src/client.rs index e697d92b9354a..2ec71480f69d3 100644 --- a/substrate/client/src/client.rs +++ b/substrate/client/src/client.rs @@ -182,13 +182,6 @@ impl Client where }) } - /// Submit a transaction to this for potential inclusion in a block. - pub fn submit_transaction(&self, _tx: block::Transaction) -> error::Result<()> { - // TODO: introduce a tx queue and place the transaction in there. tx queue or some of its - // logic will need to be generic. - unimplemented!(); - } - /// Get a reference to the state at a given block. pub fn state_at(&self, block: &BlockId) -> error::Result { self.backend.state_at(*block)