From 4fbd3e2be87a2659f4e5ec76250b3b5670fc9224 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Sun, 25 Feb 2018 10:58:17 +0100 Subject: [PATCH] Proposal creation and evaluation to plug into BFT (#77) * reshuffle consensus libraries * polkadot-useful type definitions for statement table * begin BftService * primary selection logic * bft service implementation without I/O * extract out `BlockImport` trait * allow bft primitives to compile on wasm * Block builder (substrate) * take polkadot-consensus down to the core. * test for preemption * fix test build * Fix wasm build * Bulid on any block * Test for block builder. * Block import tests for client. * Tidy ups * clean up block builder instantiation * justification verification logic * JustifiedHeader and import * Propert block generation for tests * network and tablerouter trait * use statement import to drive creation of further statements * Fixed rpc tests * custom error type for consensus * create proposer * asynchronous proposal evaluation * inherent transactions in polkadot runtime * fix tests to match real polkadot block constraints * implicitly generate inherent functions * add inherent transaction functionality to block body * block builder logic for polkadot * some tests for the polkadot API --- Cargo.lock | 4 + polkadot/api/Cargo.toml | 3 + polkadot/api/src/lib.rs | 242 +++++++++++- polkadot/collator/src/lib.rs | 4 +- polkadot/consensus/Cargo.toml | 3 + polkadot/consensus/src/error.rs | 51 +++ polkadot/consensus/src/lib.rs | 373 ++++++++++++++++-- polkadot/executor/src/lib.rs | 204 +++++----- polkadot/primitives/src/block.rs | 202 +++++++++- polkadot/primitives/src/lib.rs | 9 +- polkadot/primitives/src/parachain.rs | 7 + polkadot/primitives/src/transaction.rs | 84 +++- polkadot/runtime/src/api.rs | 5 +- polkadot/runtime/src/environment.rs | 7 +- polkadot/runtime/src/lib.rs | 20 +- polkadot/runtime/src/runtime/system.rs | 153 ++++--- polkadot/runtime/src/runtime/timestamp.rs | 7 +- .../release/polkadot_runtime.compact.wasm | Bin 76656 -> 104417 bytes .../release/polkadot_runtime.wasm | Bin 76705 -> 104496 bytes substrate/bft/src/error.rs | 6 + substrate/bft/src/generic/mod.rs | 76 ++-- substrate/bft/src/generic/tests.rs | 6 +- substrate/bft/src/lib.rs | 118 ++++-- .../release/runtime_test.compact.wasm | Bin 14298 -> 13600 bytes .../release/runtime_test.wasm | Bin 14394 -> 13725 bytes substrate/primitives/src/block.rs | 2 +- substrate/runtime-support/src/storage.rs | 14 +- substrate/state-machine/src/lib.rs | 2 +- .../substrate_test_runtime.compact.wasm | Bin 32296 -> 33085 bytes .../release/substrate_test_runtime.wasm | Bin 32376 -> 33165 bytes 30 files changed, 1301 insertions(+), 301 deletions(-) create mode 100644 polkadot/consensus/src/error.rs diff --git a/Cargo.lock b/Cargo.lock index 62e3721f8c60a..84dc99510197f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -967,6 +967,7 @@ dependencies = [ "polkadot-runtime 0.1.0", "substrate-client 0.1.0", "substrate-executor 0.1.0", + "substrate-keyring 0.1.0", "substrate-state-machine 0.1.0", ] @@ -1007,8 +1008,11 @@ name = "polkadot-consensus" version = "0.1.0" dependencies = [ "ed25519 0.1.0", + "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "polkadot-api 0.1.0", + "polkadot-collator 0.1.0", "polkadot-primitives 0.1.0", "polkadot-statement-table 0.1.0", "substrate-bft 0.1.0", diff --git a/polkadot/api/Cargo.toml b/polkadot/api/Cargo.toml index de3e082548a75..5e78af8c12068 100644 --- a/polkadot/api/Cargo.toml +++ b/polkadot/api/Cargo.toml @@ -11,3 +11,6 @@ polkadot-primitives = { path = "../primitives" } substrate-client = { path = "../../substrate/client" } substrate-executor = { path = "../../substrate/executor" } substrate-state-machine = { path = "../../substrate/state-machine" } + +[dev-dependencies] +substrate-keyring = { path = "../../substrate/keyring" } diff --git a/polkadot/api/src/lib.rs b/polkadot/api/src/lib.rs index efe0f45220099..0ffb55233acfe 100644 --- a/polkadot/api/src/lib.rs +++ b/polkadot/api/src/lib.rs @@ -18,7 +18,7 @@ //! runtime. extern crate polkadot_executor as polkadot_executor; -extern crate polkadot_runtime ; +extern crate polkadot_runtime; extern crate polkadot_primitives as primitives; extern crate substrate_client as client; extern crate substrate_executor as substrate_executor; @@ -27,13 +27,18 @@ extern crate substrate_state_machine as state_machine; #[macro_use] extern crate error_chain; +#[cfg(test)] +extern crate substrate_keyring as keyring; + use client::backend::Backend; use client::Client; use polkadot_runtime::runtime; use polkadot_executor::Executor as LocalDispatch; use substrate_executor::{NativeExecutionDispatch, NativeExecutor}; -use primitives::{AccountId, SessionKey}; -use primitives::block::Id as BlockId; +use state_machine::OverlayedChanges; +use primitives::{AccountId, SessionKey, Timestamp}; +use primitives::block::{Id as BlockId, Block, Header, Body}; +use primitives::transaction::UncheckedTransaction; use primitives::parachain::DutyRoster; error_chain! { @@ -43,10 +48,21 @@ error_chain! { description("Unknown runtime code") display("Unknown runtime code") } + /// Unknown block ID. UnknownBlock(b: BlockId) { description("Unknown block") display("Unknown block") } + /// Attempted to push an inherent transaction manually. + PushedInherentTransaction(tx: UncheckedTransaction) { + description("Attempted to push an inherent transaction to a block."), + display("Pushed inherent transaction to a block: {:?}", tx), + } + /// Badly-formed transaction. + BadlyFormedTransaction(tx: UncheckedTransaction) { + description("Attempted to push a badly-formed transaction to a block."), + display("Pushed badly-formed transaction to a block: {:?}", tx), + } /// Some other error. // TODO: allow to be specified as associated type of PolkadotApi Other(e: Box<::std::error::Error + Send>) { @@ -60,10 +76,29 @@ error_chain! { } } +impl From for Error { + fn from(e: client::error::Error) -> Error { + match e { + client::error::Error(client::error::ErrorKind::UnknownBlock(b), _) => Error::from_kind(ErrorKind::UnknownBlock(b)), + other => Error::from_kind(ErrorKind::Other(Box::new(other) as Box<_>)), + } + } +} + +pub trait BlockBuilder: Sized { + /// Push a non-inherent transaction. + fn push_transaction(&mut self, transaction: UncheckedTransaction) -> Result<()>; + + /// Finalise the block. + fn bake(self) -> Block; +} + /// Trait encapsulating the Polkadot API. /// /// All calls should fail when the exact runtime is unknown. pub trait PolkadotApi { + type BlockBuilder: BlockBuilder; + /// Get session keys at a given block. fn session_keys(&self, at: &BlockId) -> Result>; @@ -72,24 +107,26 @@ pub trait PolkadotApi { /// Get the authority duty roster at a block. fn duty_roster(&self, at: &BlockId) -> Result; -} -fn convert_client_error(e: client::error::Error) -> Error { - match e { - client::error::Error(client::error::ErrorKind::UnknownBlock(b), _) => Error::from_kind(ErrorKind::UnknownBlock(b)), - other => Error::from_kind(ErrorKind::Other(Box::new(other) as Box<_>)), - } + /// Get the timestamp registered at a block. + fn timestamp(&self, at: &BlockId) -> Result; + + /// Evaluate a block and see if it gives an error. + fn evaluate_block(&self, at: &BlockId, block: Block) -> Result<()>; + + /// Create a block builder on top of the parent block. + fn build_block(&self, parent: &BlockId, timestamp: u64) -> Result; } // set up the necessary scaffolding to execute the runtime. macro_rules! with_runtime { ($client: ident, $at: expr, $exec: expr) => {{ // bail if the code is not the same as the natively linked. - if $client.code_at($at).map_err(convert_client_error)? != LocalDispatch::native_equivalent() { + if $client.code_at($at)? != LocalDispatch::native_equivalent() { bail!(ErrorKind::UnknownRuntime); } - $client.state_at($at).map_err(convert_client_error).and_then(|state| { + $client.state_at($at).map_err(Error::from).and_then(|state| { let mut changes = Default::default(); let mut ext = state_machine::Ext { overlay: &mut changes, @@ -104,6 +141,8 @@ macro_rules! with_runtime { impl PolkadotApi for Client> where ::client::error::Error: From<<::State as state_machine::backend::Backend>::Error> { + type BlockBuilder = ClientBlockBuilder; + fn session_keys(&self, at: &BlockId) -> Result> { with_runtime!(self, at, ::runtime::consensus::authorities) } @@ -115,4 +154,185 @@ impl PolkadotApi for Client> fn duty_roster(&self, at: &BlockId) -> Result { with_runtime!(self, at, ::runtime::parachains::calculate_duty_roster) } + + fn timestamp(&self, at: &BlockId) -> Result { + with_runtime!(self, at, ::runtime::timestamp::get) + } + + fn evaluate_block(&self, at: &BlockId, block: Block) -> Result<()> { + with_runtime!(self, at, || ::runtime::system::internal::execute_block(block)) + } + + fn build_block(&self, parent: &BlockId, timestamp: Timestamp) -> Result { + if self.code_at(parent)? != LocalDispatch::native_equivalent() { + bail!(ErrorKind::UnknownRuntime); + } + + 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(), + transaction_root: Default::default(), + digest: Default::default(), + }; + + let body = Body { + timestamp: timestamp, + transactions: Vec::new(), + }; + + let mut builder = ClientBlockBuilder { + parent: *parent, + changes: OverlayedChanges::default(), + state: self.state_at(parent)?, + header, + timestamp, + transactions: Vec::new(), + }; + + for inherent in body.inherent_transactions() { + builder.execute_transaction(inherent)?; + } + + Ok(builder) + } +} + +/// A polkadot block builder. +#[derive(Debug, Clone)] +pub struct ClientBlockBuilder { + parent: BlockId, + changes: OverlayedChanges, + state: S, + header: Header, + timestamp: Timestamp, + transactions: Vec, +} + +impl ClientBlockBuilder + where S::Error: Into +{ + // executes a transaction, inherent or otherwise, without appending to the list + fn execute_transaction(&mut self, transaction: UncheckedTransaction) -> Result<()> { + if !transaction.is_well_formed() { + bail!(ErrorKind::BadlyFormedTransaction(transaction)); + } + + let mut ext = state_machine::Ext { + overlay: &mut self.changes, + backend: &self.state, + }; + + // TODO: avoid clone + let header = self.header.clone(); + let result = ::substrate_executor::with_native_environment( + &mut ext, + move || runtime::system::internal::execute_transaction(transaction, header), + ).map_err(Into::into); + + match result { + Ok(header) => { + ext.overlay.commit_prospective(); + self.header = header; + Ok(()) + } + Err(e) => { + ext.overlay.discard_prospective(); + Err(e) + } + } + } +} + +impl BlockBuilder for ClientBlockBuilder + where S::Error: Into +{ + fn push_transaction(&mut self, transaction: UncheckedTransaction) -> Result<()> { + if transaction.transaction.function.is_inherent() { + bail!(ErrorKind::PushedInherentTransaction(transaction)); + } else { + self.execute_transaction(transaction.clone())?; + self.transactions.push(transaction); + Ok(()) + } + } + + fn bake(mut self) -> Block { + let mut ext = state_machine::Ext { + overlay: &mut self.changes, + backend: &self.state, + }; + + let old_header = self.header; + let final_header = ::substrate_executor::with_native_environment( + &mut ext, + move || runtime::system::internal::finalise_block(old_header) + ).expect("all inherent transactions pushed; all other transactions executed correctly; qed"); + + Block { + header: final_header, + body: Body { + timestamp: self.timestamp, + transactions: self.transactions, + } + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use client::in_mem::Backend as InMemory; + use polkadot_runtime::genesismap::{additional_storage_with_genesis, GenesisConfig}; + use substrate_executor::NativeExecutionDispatch; + use keyring::Keyring; + + fn validators() -> Vec { + vec![ + Keyring::One.to_raw_public(), + Keyring::Two.to_raw_public(), + ] + } + + fn client() -> Client> { + ::client::new_in_mem( + LocalDispatch::new(), + || { + let config = GenesisConfig::new_simple(validators(), 100); + + // override code entry. + let mut storage = config.genesis_map(); + storage.insert(b":code".to_vec(), LocalDispatch::native_equivalent().to_vec()); + + let block = ::client::genesis::construct_genesis_block( + &config.genesis_map() + ); + storage.extend(additional_storage_with_genesis(&block)); + (block.header, storage.into_iter().collect()) + } + ).unwrap() + } + + #[test] + fn gets_session_and_validator_keys() { + let client = client(); + assert_eq!(client.session_keys(&BlockId::Number(0)).unwrap(), validators()); + assert_eq!(client.validators(&BlockId::Number(0)).unwrap(), validators()); + } + + #[test] + fn build_block() { + let client = client(); + + let block_builder = client.build_block(&BlockId::Number(0), 1_000_000).unwrap(); + let block = block_builder.bake(); + + assert_eq!(block.header.number, 1); + } + + #[test] + fn cannot_build_block_on_unknown_parent() { + let client = client(); + assert!(client.build_block(&BlockId::Number(100), 1_000_000).is_err()); + } } diff --git a/polkadot/collator/src/lib.rs b/polkadot/collator/src/lib.rs index b520b269fc0e1..14b430ebbad17 100644 --- a/polkadot/collator/src/lib.rs +++ b/polkadot/collator/src/lib.rs @@ -61,7 +61,7 @@ pub trait ParachainContext { fn produce_candidate>( &self, ingress: I, - ) -> (parachain::BlockData, polkadot_primitives::Signature); + ) -> (parachain::BlockData, polkadot_primitives::AccountId, polkadot_primitives::Signature); } /// Relay chain context needed to collate. @@ -131,7 +131,7 @@ pub fn collate<'a, R, P>(local_id: ParaId, relay_context: R, para_context: P) P: ParachainContext + 'a, { Box::new(collate_ingress(relay_context).map(move |ingress| { - let (block_data, signature) = para_context.produce_candidate( + let (block_data, _, signature) = para_context.produce_candidate( ingress.0.iter().flat_map(|&(id, ref msgs)| msgs.iter().cloned().map(move |msg| (id, msg))) ); diff --git a/polkadot/consensus/Cargo.toml b/polkadot/consensus/Cargo.toml index aeda287f80cac..298d6478700ee 100644 --- a/polkadot/consensus/Cargo.toml +++ b/polkadot/consensus/Cargo.toml @@ -8,6 +8,9 @@ futures = "0.1.17" parking_lot = "0.4" tokio-timer = "0.1.2" ed25519 = { path = "../../substrate/ed25519" } +error-chain = "0.11" +polkadot-api = { path = "../api" } +polkadot-collator = { path = "../collator" } polkadot-primitives = { path = "../primitives" } polkadot-statement-table = { path = "../statement-table" } substrate-bft = { path = "../../substrate/bft" } diff --git a/polkadot/consensus/src/error.rs b/polkadot/consensus/src/error.rs new file mode 100644 index 0000000000000..648072ef0b7b3 --- /dev/null +++ b/polkadot/consensus/src/error.rs @@ -0,0 +1,51 @@ +// Copyright 2017 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +//! Errors that can occur during the consensus process. + +use primitives::block::HeaderHash; + +error_chain! { + links { + PolkadotApi(::polkadot_api::Error, ::polkadot_api::ErrorKind); + Bft(::bft::Error, ::bft::ErrorKind); + } + + errors { + InvalidDutyRosterLength(expected: usize, got: usize) { + description("Duty Roster had invalid length"), + display("Invalid duty roster length: expected {}, got {}", expected, got), + } + ProposalNotForPolkadot { + description("Proposal provided not a Polkadot block."), + display("Proposal provided not a Polkadot block."), + } + TimestampInFuture { + description("Proposal had timestamp too far in the future."), + display("Proposal had timestamp too far in the future."), + } + WrongParentHash(expected: HeaderHash, got: HeaderHash) { + description("Proposal had wrong parent hash."), + display("Proposal had wrong parent hash. Expected {:?}, got {:?}", expected, got), + } + } +} + +impl From<::bft::InputStreamConcluded> for Error { + fn from(err: ::bft::InputStreamConcluded) -> Self { + ::bft::Error::from(err).into() + } +} diff --git a/polkadot/consensus/src/lib.rs b/polkadot/consensus/src/lib.rs index f3e62ba1d56d2..ef00318209757 100644 --- a/polkadot/consensus/src/lib.rs +++ b/polkadot/consensus/src/lib.rs @@ -29,31 +29,73 @@ //! //! Groups themselves may be compromised by malicious authorities. -use std::collections::{HashMap, HashSet}; -use std::sync::Arc; - -use codec::Slicable; -use table::Table; -use table::generic::Statement as GenericStatement; -use polkadot_primitives::Hash; -use polkadot_primitives::parachain::{Id as ParaId, CandidateReceipt}; -use primitives::block::Block as SubstrateBlock; -use primitives::AuthorityId; - -use parking_lot::Mutex; - extern crate futures; extern crate ed25519; extern crate parking_lot; extern crate tokio_timer; +extern crate polkadot_api; +extern crate polkadot_collator as collator; extern crate polkadot_statement_table as table; extern crate polkadot_primitives; extern crate substrate_bft as bft; extern crate substrate_codec as codec; extern crate substrate_primitives as primitives; +#[macro_use] +extern crate error_chain; + +use std::collections::{HashMap, HashSet}; +use std::sync::Arc; + +use codec::Slicable; +use table::{Table, Context as TableContextTrait}; +use table::generic::Statement as GenericStatement; +use polkadot_api::{PolkadotApi, BlockBuilder}; +use polkadot_primitives::{Hash, Timestamp}; +use polkadot_primitives::block::Block as PolkadotBlock; +use polkadot_primitives::parachain::{Id as ParaId, DutyRoster, BlockData, Extrinsic, CandidateReceipt}; +use primitives::block::{Block as SubstrateBlock, Header as SubstrateHeader, HeaderHash, Id as BlockId}; +use primitives::AuthorityId; + +use futures::prelude::*; +use futures::future; +use parking_lot::Mutex; + +pub use self::error::{ErrorKind, Error}; + +mod error; + +/// A handle to a statement table router. +pub trait TableRouter { + /// Errors when fetching data from the network. + type Error; + /// Future that resolves when candidate data is fetched. + type FetchCandidate: IntoFuture; + /// Future that resolves when extrinsic candidate data is fetched. + type FetchExtrinsic: IntoFuture; + + /// Note local candidate data. + fn local_candidate_data(&self, block_data: BlockData, extrinsic: Extrinsic); + + /// Fetch block data for a specific candidate. + fn fetch_block_data(&self, candidate: &CandidateReceipt) -> Self::FetchCandidate; + + /// Fetch extrinsic data for a specific candidate. + fn fetch_extrinsic_data(&self, candidate: &CandidateReceipt) -> Self::FetchExtrinsic; +} + +/// A long-lived network which can create statement table routing instances. +pub trait Network { + /// The table router type. This should handle importing of any statements, + /// routing statements to peers, and driving completion of any `StatementProducers`. + type TableRouter: TableRouter; + + /// Instantiate a table router using the given shared table. + fn table_router(&self, table: Arc) -> Self::TableRouter; +} + /// Information about a specific group. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Default)] pub struct GroupInfo { /// Authorities meant to check validity of candidates. pub validity_guarantors: HashSet, @@ -89,6 +131,10 @@ impl table::Context for TableContext { } impl TableContext { + fn local_id(&self) -> AuthorityId { + self.key.public().0 + } + fn sign_statement(&self, statement: table::Statement) -> table::SignedStatement { let signature = sign_table_statement(&statement, &self.key, &self.parent_hash); let local_id = self.key.public().0; @@ -124,16 +170,120 @@ pub fn sign_table_statement(statement: &table::Statement, key: &ed25519::Pair, p struct SharedTableInner { table: Table, proposed_digest: Option, + checked_validity: HashSet, + checked_availability: HashSet, } impl SharedTableInner { - fn import_statement( + // Import a single statement. Provide a handle to a table router. + fn import_statement( &mut self, context: &TableContext, - statement: ::table::SignedStatement, + router: &R, + statement: table::SignedStatement, received_from: Option, - ) -> Option { - self.table.import_statement(context, statement, received_from) + ) -> StatementProducer<::Future, ::Future> { + let mut producer = StatementProducer { + fetch_block_data: None, + fetch_extrinsic: None, + produced_statements: Default::default(), + _key: context.key.clone(), + }; + + let summary = match self.table.import_statement(context, statement, received_from) { + Some(summary) => summary, + None => return producer, + }; + + let local_id = context.local_id(); + let is_validity_member = context.is_member_of(&local_id, &summary.group_id); + let is_availability_member = + context.is_availability_guarantor_of(&local_id, &summary.group_id); + + let digest = &summary.candidate; + + // TODO: consider a strategy based on the number of candidate votes as well. + // only check validity if this wasn't locally proposed. + let checking_validity = is_validity_member + && self.proposed_digest.as_ref().map_or(true, |d| d != digest) + && self.checked_validity.insert(digest.clone()); + + let checking_availability = is_availability_member && self.checked_availability.insert(digest.clone()); + + if checking_validity || checking_availability { + match self.table.get_candidate(&digest) { + None => {} // TODO: handle table inconsistency somehow? + Some(candidate) => { + if checking_validity { + producer.fetch_block_data = Some(router.fetch_block_data(candidate).into_future().fuse()); + } + + if checking_availability { + producer.fetch_extrinsic = Some(router.fetch_extrinsic_data(candidate).into_future().fuse()); + } + } + } + } + + producer + } +} + +/// Produced statements about a specific candidate. +/// Both may be `None`. +#[derive(Default)] +pub struct ProducedStatements { + /// A statement about the validity of the candidate. + pub validity: Option, + /// A statement about the availability of the candidate. + pub availability: Option, +} + +/// Future that produces statements about a specific candidate. +pub struct StatementProducer { + fetch_block_data: Option>, + fetch_extrinsic: Option>, + produced_statements: ProducedStatements, + _key: Arc, +} + +impl Future for StatementProducer + where + D: Future, + E: Future, +{ + type Item = ProducedStatements; + type Error = Err; + + fn poll(&mut self) -> Poll { + let mut done = true; + if let Some(ref mut fetch_block_data) = self.fetch_block_data { + match fetch_block_data.poll()? { + Async::Ready(_block_data) => { + // TODO [PoC-2] : validate block data here and make statement. + }, + Async::NotReady => { + done = false; + } + } + } + + if let Some(ref mut fetch_extrinsic) = self.fetch_extrinsic { + match fetch_extrinsic.poll()? { + Async::Ready(_extrinsic) => { + // TODO [PoC-2]: guarantee availability of data and make statment. + } + Async::NotReady => { + done = false; + } + } + } + + if done { + Ok(Async::Ready(::std::mem::replace(&mut self.produced_statements, Default::default()))) + } else { + Ok(Async::NotReady) + } } } @@ -147,7 +297,7 @@ impl Clone for SharedTable { fn clone(&self) -> Self { SharedTable { context: self.context.clone(), - inner: self.inner.clone() + inner: self.inner.clone(), } } } @@ -163,24 +313,34 @@ impl SharedTable { inner: Arc::new(Mutex::new(SharedTableInner { table: Table::default(), proposed_digest: None, + checked_validity: HashSet::new(), + checked_availability: HashSet::new(), })) } } - /// Import a single statement. - pub fn import_statement( + /// Get group info. + pub fn group_info(&self) -> &HashMap { + &self.context.groups + } + + /// Import a single statement. Provide a handle to a table router + /// for dispatching any other requests which come up. + pub fn import_statement( &self, + router: &R, statement: table::SignedStatement, received_from: Option, - ) -> Option { - self.inner.lock().import_statement(&*self.context, statement, received_from) + ) -> StatementProducer<::Future, ::Future> { + self.inner.lock().import_statement(&*self.context, router, statement, received_from) } /// Sign and import a local statement. - pub fn sign_and_import( + pub fn sign_and_import( &self, + router: &R, statement: table::Statement, - ) -> Option { + ) -> StatementProducer<::Future, ::Future> { let proposed_digest = match statement { GenericStatement::Candidate(ref c) => Some(c.hash()), _ => None, @@ -193,21 +353,25 @@ impl SharedTable { inner.proposed_digest = proposed_digest; } - inner.import_statement(&*self.context, signed_statement, None) + inner.import_statement(&*self.context, router, signed_statement, None) } /// Import many statements at once. /// /// Provide an iterator yielding pairs of (statement, received_from). - pub fn import_statements(&self, iterable: I) -> U + pub fn import_statements(&self, router: &R, iterable: I) -> U where + R: TableRouter, I: IntoIterator)>, - U: ::std::iter::FromIterator, + U: ::std::iter::FromIterator::Future, + ::Future> + >, { let mut inner = self.inner.lock(); - iterable.into_iter().filter_map(move |(statement, received_from)| { - inner.import_statement(&*self.context, statement, received_from) + iterable.into_iter().map(move |(statement, received_from)| { + inner.import_statement(&*self.context, router, statement, received_from) }).collect() } @@ -241,3 +405,152 @@ impl SharedTable { self.inner.lock().proposed_digest.clone() } } + +fn make_group_info(roster: DutyRoster, authorities: &[AuthorityId]) -> Result, Error> { + if roster.validator_duty.len() != authorities.len() { + bail!(ErrorKind::InvalidDutyRosterLength(authorities.len(), roster.validator_duty.len())) + } + + if roster.guarantor_duty.len() != authorities.len() { + bail!(ErrorKind::InvalidDutyRosterLength(authorities.len(), roster.guarantor_duty.len())) + } + + let mut map = HashMap::new(); + + let duty_iter = authorities.iter().zip(&roster.validator_duty).zip(&roster.guarantor_duty); + for ((authority, v_duty), a_duty) in duty_iter { + use polkadot_primitives::parachain::Chain; + + match *v_duty { + Chain::Relay => {}, // does nothing for now. + Chain::Parachain(ref id) => { + map.entry(id.clone()).or_insert_with(GroupInfo::default) + .validity_guarantors + .insert(authority.clone()); + } + } + + match *a_duty { + Chain::Relay => {}, // does nothing for now. + Chain::Parachain(ref id) => { + map.entry(id.clone()).or_insert_with(GroupInfo::default) + .availability_guarantors + .insert(authority.clone()); + } + } + } + + for live_group in map.values_mut() { + let validity_len = live_group.validity_guarantors.len(); + let availability_len = live_group.availability_guarantors.len(); + + live_group.needed_validity = validity_len / 2 + validity_len % 2; + live_group.needed_availability = availability_len / 2 + availability_len % 2; + } + + Ok(map) +} + +/// Polkadot proposer factory. +pub struct ProposerFactory { + /// The client instance. + pub client: Arc, + /// The backing network handle. + pub network: N, +} + +impl bft::ProposerFactory for ProposerFactory { + type Proposer = Proposer; + type Error = Error; + + fn init(&self, parent_header: &SubstrateHeader, authorities: &[AuthorityId], sign_with: Arc) -> Result { + let parent_hash = parent_header.hash(); + let duty_roster = self.client.duty_roster(&BlockId::Hash(parent_hash))?; + + let group_info = make_group_info(duty_roster, authorities)?; + let table = Arc::new(SharedTable::new(group_info, sign_with, parent_hash)); + let router = self.network.table_router(table.clone()); + + // TODO [PoC-2]: kick off collation process. + Ok(Proposer { + parent_hash, + _table: table, + _router: router, + client: self.client.clone(), + }) + } +} + +fn current_timestamp() -> Timestamp { + use std::time; + + time::SystemTime::now().duration_since(time::UNIX_EPOCH) + .expect("now always later than unix epoch; qed") + .as_secs() +} + +/// The Polkadot proposer logic. +pub struct Proposer { + parent_hash: HeaderHash, + client: Arc, + _table: Arc, + _router: R, +} + +impl bft::Proposer for Proposer { + type Error = Error; + type Create = Result; + type Evaluate = Result; + + fn propose(&self) -> Result { + // TODO: handle case when current timestamp behind that in state. + let polkadot_block = self.client.build_block( + &BlockId::Hash(self.parent_hash), + current_timestamp() + )?.bake(); + + // TODO: integrate transaction queue and `push_transaction`s. + + let substrate_block = Slicable::decode(&mut polkadot_block.encode().as_slice()) + .expect("polkadot blocks defined to serialize to substrate blocks correctly; qed"); + + Ok(substrate_block) + } + + // TODO: certain kinds of errors here should lead to a misbehavior report. + fn evaluate(&self, proposal: &SubstrateBlock) -> Result { + evaluate_proposal(proposal, &*self.client, current_timestamp(), &self.parent_hash) + } +} + +fn evaluate_proposal( + proposal: &SubstrateBlock, + client: &C, + now: Timestamp, + parent_hash: &HeaderHash, +) -> Result { + const MAX_TIMESTAMP_DRIFT: Timestamp = 4; + + let encoded = Slicable::encode(proposal); + let proposal = PolkadotBlock::decode(&mut &encoded[..]) + .ok_or_else(|| ErrorKind::ProposalNotForPolkadot)?; + + if proposal.header.parent_hash != *parent_hash { + bail!(ErrorKind::WrongParentHash(*parent_hash, proposal.header.parent_hash)); + } + + // no need to check number because + // a) we assume the parent is valid. + // b) the runtime checks that `proposal.parent_hash` == `block_hash(proposal.number - 1)` + + let block_timestamp = proposal.body.timestamp; + + // TODO: just defer using `tokio_timer` to delay prepare vote. + if block_timestamp > now + MAX_TIMESTAMP_DRIFT { + bail!(ErrorKind::TimestampInFuture) + } + + // execute the block. + client.evaluate_block(&BlockId::Hash(*parent_hash), proposal)?; + Ok(true) +} diff --git a/polkadot/executor/src/lib.rs b/polkadot/executor/src/lib.rs index f7ded050250b9..a1f472a859ec5 100644 --- a/polkadot/executor/src/lib.rs +++ b/polkadot/executor/src/lib.rs @@ -44,8 +44,10 @@ mod tests { use polkadot_runtime::runtime::staking::balance; use state_machine::{CodeExecutor, TestExternalities}; use primitives::twox_128; - use polkadot_primitives::{Hash, Header, BlockNumber, Block, Digest, Transaction, - UncheckedTransaction, Function}; + use polkadot_primitives::{ + Hash, Header, Body, BlockNumber, Block, Digest, Transaction, + UncheckedTransaction, Function, InherentFunction, + }; use ed25519::{Public, Pair}; const BLOATY_CODE: &[u8] = include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm"); @@ -58,76 +60,6 @@ mod tests { ) } - fn tx() -> UncheckedTransaction { - let transaction = Transaction { - signed: Keyring::One.to_raw_public(), - nonce: 0, - function: Function::StakingTransfer(Keyring::Two.to_raw_public(), 69), - }; - let signature = Keyring::from_raw_public(transaction.signed).unwrap() - .sign(&transaction.encode()); - - UncheckedTransaction { transaction, signature } - } - - #[test] - fn panic_execution_with_foreign_code_gives_error() { - let one = Keyring::One.to_raw_public(); - let mut t: TestExternalities = map![ - twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] - ]; - - let r = Executor::new().call(&mut t, BLOATY_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); - assert!(r.is_err()); - } - - #[test] - fn panic_execution_with_native_equivalent_code_gives_error() { - let one = Keyring::One.to_raw_public(); - let mut t: TestExternalities = map![ - twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] - ]; - - let r = Executor::new().call(&mut t, COMPACT_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); - assert!(r.is_err()); - } - - #[test] - fn successful_execution_with_native_equivalent_code_gives_ok() { - let one = Keyring::One.to_raw_public(); - let two = Keyring::Two.to_raw_public(); - - let mut t: TestExternalities = map![ - twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] - ]; - - let r = Executor::new().call(&mut t, COMPACT_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); - assert!(r.is_ok()); - - runtime_io::with_externalities(&mut t, || { - assert_eq!(balance(&one), 42); - assert_eq!(balance(&two), 69); - }); - } - - #[test] - fn successful_execution_with_foreign_code_gives_ok() { - let one = Keyring::One.to_raw_public(); - let two = Keyring::Two.to_raw_public(); - - let mut t: TestExternalities = map![ - twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] - ]; - - let r = Executor::new().call(&mut t, BLOATY_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); - assert!(r.is_ok()); - - runtime_io::with_externalities(&mut t, || { - assert_eq!(balance(&one), 42); - assert_eq!(balance(&two), 69); - }); - } - fn new_test_ext() -> TestExternalities { let one = Keyring::One.to_raw_public(); let two = Keyring::Two.to_raw_public(); @@ -152,40 +84,77 @@ mod tests { ] } - fn construct_block(number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { + fn set_timestamp(timestamp: u64) -> UncheckedTransaction { + UncheckedTransaction::inherent(InherentFunction::TimestampSet(timestamp)) + } + + fn tx() -> UncheckedTransaction { + let transaction = Transaction { + signed: Keyring::One.to_raw_public(), + nonce: 0, + function: Function::StakingTransfer(Keyring::Two.to_raw_public(), 69), + }; + let signature = Keyring::from_raw_public(transaction.signed).unwrap() + .sign(&transaction.encode()); + + UncheckedTransaction { transaction, signature } + } + + fn execute_tx_on(executor: C, ext: &mut TestExternalities, code: &[u8], tx: UncheckedTransaction, header: Header) + -> Result, C::Error> + where C: CodeExecutor + { + let next_header = executor.call(ext, code, "execute_transaction", &vec![].and(&header).and(&set_timestamp(100_000))).unwrap(); + let next_input = next_header.and(&tx); + + executor.call(ext, code, "execute_transaction", &next_input[..]) + } + + fn construct_block(number: BlockNumber, parent_hash: Hash, state_root: Hash, timestamp: u64, txs: Vec) -> (Vec, Hash) { use triehash::ordered_trie_root; + let transactions = txs.into_iter().map(|transaction| { let signature = Pair::from(Keyring::from_public(Public::from_raw(transaction.signed)).unwrap()) .sign(&transaction.encode()); UncheckedTransaction { transaction, signature } - }).collect::>(); - - let transaction_root = ordered_trie_root(transactions.iter().map(Slicable::encode)).0.into(); + }).collect(); let header = Header { parent_hash, number, state_root, - transaction_root, + transaction_root: Default::default(), digest: Digest { logs: vec![], }, }; - let hash = header.blake2_256(); - (Block { header, transactions }.encode(), hash.into()) + let mut block = Block { + header, + body: Body { timestamp, transactions }, + }; + + let transaction_root = ordered_trie_root(block.all_transactions().map(|tx| Slicable::encode(&tx))).0.into(); + block.header.transaction_root = transaction_root; + + let hash = block.header.blake2_256(); + + (block.encode(), hash.into()) } fn block1() -> (Vec, Hash) { construct_block( 1, [69u8; 32].into(), - hex!("2481853da20b9f4322f34650fea5f240dcbfb266d02db94bfa0153c31f4a29db").into(), - vec![Transaction { - signed: Keyring::One.to_raw_public(), - nonce: 0, - function: Function::StakingTransfer(Keyring::Two.to_raw_public(), 69), - }] + hex!("3df569d47a0d7f4a448486f04fba4eea3e9dfca001319c609f88b3a67b0dd1ea").into(), + 100_000, + vec![ + Transaction { + signed: Keyring::One.to_raw_public(), + nonce: 0, + function: Function::StakingTransfer(Keyring::Two.to_raw_public(), 69), + } + ] ) } @@ -193,7 +162,8 @@ mod tests { construct_block( 2, block1().1, - hex!("1feb4d3a2e587079e6ce1685fa79994efd995e33cb289d39cded67aac1bb46a9").into(), + hex!("c8776c92e8012bf6b3f206448eda3f00bca26d77f220f4714c81cbc92a30e1e2").into(), + 200_000, vec![ Transaction { signed: Keyring::Two.to_raw_public(), @@ -209,6 +179,64 @@ mod tests { ) } + #[test] + fn panic_execution_with_foreign_code_gives_error() { + let one = Keyring::One.to_raw_public(); + let mut t: TestExternalities = map![ + twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] + ]; + + let r = execute_tx_on(Executor::new(), &mut t, BLOATY_CODE, tx(), Header::from_block_number(1)); + assert!(r.is_err()); + } + + #[test] + fn panic_execution_with_native_equivalent_code_gives_error() { + let one = Keyring::One.to_raw_public(); + let mut t: TestExternalities = map![ + twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] + ]; + + let r = execute_tx_on(Executor::new(), &mut t, COMPACT_CODE, tx(), Header::from_block_number(1)); + assert!(r.is_err()); + } + + #[test] + fn successful_execution_with_native_equivalent_code_gives_ok() { + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); + + let mut t: TestExternalities = map![ + twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] + ]; + + let r = execute_tx_on(Executor::new(), &mut t, COMPACT_CODE, tx(), Header::from_block_number(1)); + assert!(r.is_ok()); + + runtime_io::with_externalities(&mut t, || { + assert_eq!(balance(&one), 42); + assert_eq!(balance(&two), 69); + }); + } + + #[test] + fn successful_execution_with_foreign_code_gives_ok() { + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); + + let mut t: TestExternalities = map![ + twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] + ]; + + let r = execute_tx_on(Executor::new(), &mut t, BLOATY_CODE, tx(), Header::from_block_number(1)); + assert!(r.is_ok()); + + runtime_io::with_externalities(&mut t, || { + assert_eq!(balance(&one), 42); + assert_eq!(balance(&two), 69); + }); + } + #[test] fn full_native_block_import_works() { let mut t = new_test_ext(); @@ -255,7 +283,7 @@ mod tests { ]; let foreign_code = include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm"); - let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); + let r = execute_tx_on(WasmExecutor, &mut t, &foreign_code[..], tx(), Header::from_block_number(1)); assert!(r.is_err()); } @@ -269,7 +297,7 @@ mod tests { ]; let foreign_code = include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm"); - let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); + let r = execute_tx_on(WasmExecutor, &mut t, &foreign_code[..], tx(), Header::from_block_number(1)); assert!(r.is_ok()); runtime_io::with_externalities(&mut t, || { diff --git a/polkadot/primitives/src/block.rs b/polkadot/primitives/src/block.rs index 987744baa61bc..b2d90a19c09d2 100644 --- a/polkadot/primitives/src/block.rs +++ b/polkadot/primitives/src/block.rs @@ -21,7 +21,7 @@ use primitives::bytes; use primitives::H256; use rstd::vec::Vec; use codec::{Input, Slicable}; -use transaction::UncheckedTransaction; +use transaction::{UncheckedTransaction, Function, InherentFunction}; pub use primitives::block::Id; @@ -69,8 +69,65 @@ impl Slicable for Digest { } } -/// The block "body": A bunch of transactions. -pub type Body = Vec; +/// Iterator over all inherent transactions. +pub struct InherentTransactions<'a> { + number: u64, + body: &'a Body, +} + +impl<'a> Iterator for InherentTransactions<'a> { + type Item = UncheckedTransaction; + + fn next(&mut self) -> Option { + if self.number == InherentFunction::count() { + return None + } + + self.number += 1; + + let function = match self.number { + 1 => Some(InherentFunction::TimestampSet(self.body.timestamp)), + _ => None, + }; + + function.map(UncheckedTransaction::inherent) + } +} + +/// Type alias for an iterator over all transactions in a block. +pub type AllTransactions<'a> = ::rstd::iter::Chain< + InherentTransactions<'a>, + ::rstd::iter::Cloned<::rstd::slice::Iter<'a, UncheckedTransaction>>, +>; + +/// The block body. Contains timestamp and transactions. +// TODO: add candidates update as well. +#[derive(PartialEq, Eq, Clone)] +#[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 Body { + /// The timestamp of the block. + pub timestamp: u64, + /// The transactions in the block. + pub transactions: Vec, +} + +impl Body { + /// Get an iterator over all inherent transactions of the body. + pub fn inherent_transactions(&self) -> InherentTransactions { + InherentTransactions { + number: 0, + body: self, + } + } + + /// Get an iterator over all transactions in a block. + pub fn all_transactions(&self) -> AllTransactions { + self.inherent_transactions().chain(self.transactions.iter().cloned()) + } +} + /// A Polkadot relay chain block. #[derive(PartialEq, Eq, Clone)] @@ -78,21 +135,65 @@ pub type Body = Vec; pub struct Block { /// The block header. pub header: Header, - /// All relay-chain transactions. - pub transactions: Body, + /// The block body. + pub body: Body, +} + +impl Block { + /// Get an iterator over all inherent transactions of the body. + pub fn inherent_transactions(&self) -> InherentTransactions { + self.body.inherent_transactions() + } + + /// Get an iterator over all transactions in a block. + pub fn all_transactions(&self) -> AllTransactions { + self.body.all_transactions() + } } impl Slicable for Block { fn decode(input: &mut I) -> Option { - let (header, transactions) = try_opt!(Slicable::decode(input)); - Some(Block { header, transactions }) + let header = try_opt!(Slicable::decode(input)); + + let transactions_len: u32 = try_opt!(Slicable::decode(input)); + let regular_transactions_len = try_opt!(transactions_len.checked_sub(InherentFunction::count() as u32)); + + let timestamp_tx = try_opt!(UncheckedTransaction::decode(input)); + let timestamp = match timestamp_tx.transaction.function { + Function::Inherent(InherentFunction::TimestampSet(ref t)) if timestamp_tx.is_well_formed() => { t.clone() } + _ => return None, + }; + + let transactions: Option> = (0..regular_transactions_len) + .map(|_| UncheckedTransaction::decode(input)) + .filter(|tx| tx.as_ref().map_or(true, |tx| tx.is_well_formed())) + .collect(); + + let body = Body { + timestamp, + transactions: try_opt!(transactions), + }; + + Some(Block { header, body }) } fn encode(&self) -> Vec { let mut v = Vec::new(); v.extend(self.header.encode()); - v.extend(self.transactions.encode()); + + // encode inherent transactions before non-inherent. + let transactions_len = self.body.transactions.len() as u64 + InherentFunction::count(); + (transactions_len as u32).using_encoded(|s| v.extend(s)); + + let timestamp_set_tx = UncheckedTransaction::inherent( + InherentFunction::TimestampSet(self.body.timestamp) + ); + + v.extend(timestamp_set_tx.encode()); + for non_inherent_transaction in &self.body.transactions { + v.extend(non_inherent_transaction.encode()); + } v } @@ -186,4 +287,89 @@ mod tests { let v = header.encode(); assert_eq!(Header::decode(&mut &v[..]).unwrap(), header); } + + #[test] + fn block_encoding_round_trip() { + let mut block = Block { + header: Header::from_block_number(1), + body: Body { + timestamp: 100_000_000, + transactions: Vec::new(), + } + }; + + let raw = block.encode(); + let decoded = Block::decode(&mut &raw[..]).unwrap(); + + assert_eq!(block, decoded); + + block.body.transactions.push(UncheckedTransaction { + transaction: ::transaction::Transaction { + function: Function::StakingStake, + signed: Default::default(), + nonce: 10101, + }, + signature: Default::default(), + }); + + let raw = block.encode(); + let decoded = Block::decode(&mut &raw[..]).unwrap(); + + assert_eq!(block, decoded); + } + + #[test] + fn block_encoding_substrate_round_trip() { + let mut block = Block { + header: Header::from_block_number(1), + body: Body { + timestamp: 100_000_000, + transactions: Vec::new(), + } + }; + + block.body.transactions.push(UncheckedTransaction { + transaction: ::transaction::Transaction { + function: Function::StakingStake, + signed: Default::default(), + nonce: 10101, + }, + signature: Default::default(), + }); + + 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(); + + assert_eq!(block, decoded); + } + + #[test] + fn decode_body_without_inherents_fails() { + let substrate_blank = ::primitives::block::Block { + header: ::primitives::block::Header::from_block_number(1), + transactions: Vec::new(), + }; + + let encoded_substrate = substrate_blank.encode(); + assert!(Block::decode(&mut &encoded_substrate[..]).is_none()); + } + + #[test] + fn inherent_transactions_iter_contains_all_inherent() { + let block = Block { + header: Header::from_block_number(1), + body: Body { + timestamp: 10101, + transactions: Vec::new(), + } + }; + + let mut iter = block.inherent_transactions(); + + assert_eq!(InherentFunction::count(), 1); // following depends on this assertion. + assert_eq!(iter.next().unwrap(), UncheckedTransaction::inherent(InherentFunction::TimestampSet(10101))); + assert!(iter.next().is_none()); + } } diff --git a/polkadot/primitives/src/lib.rs b/polkadot/primitives/src/lib.rs index 14b8e78d30f40..d65291476ab71 100644 --- a/polkadot/primitives/src/lib.rs +++ b/polkadot/primitives/src/lib.rs @@ -49,9 +49,9 @@ pub mod validator; pub mod block; pub mod transaction; -pub use self::block::{Header, Block, Log, Digest}; +pub use self::block::{Header, Body, Block, Log, Digest}; pub use self::block::Number as BlockNumber; -pub use self::transaction::{Transaction, UncheckedTransaction, Function, Proposal}; +pub use self::transaction::{Transaction, UncheckedTransaction, Function, InherentFunction, Proposal}; /// 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 @@ -75,5 +75,8 @@ pub type TxOrder = u64; /// A hash of some data used by the relay chain. pub type Hash = primitives::H256; -/// Alias to 520-bit hash when used in the context of a signature on the relay chain. +/// Alias to 512-bit hash when used in the context of a signature on the relay chain. pub type Signature = primitives::hash::H512; + +/// A timestamp: seconds since the unix epoch. +pub type Timestamp = u64; diff --git a/polkadot/primitives/src/parachain.rs b/polkadot/primitives/src/parachain.rs index a39904f44ec53..34a8b34733251 100644 --- a/polkadot/primitives/src/parachain.rs +++ b/polkadot/primitives/src/parachain.rs @@ -121,6 +121,13 @@ impl Slicable for DutyRoster { } } +/// Extrinsic data for a parachain. +#[derive(PartialEq, Eq, Clone)] +#[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; + /// Candidate parachain block. /// /// https://github.com/w3f/polkadot-spec/blob/master/spec.md#candidate-para-chain-block diff --git a/polkadot/primitives/src/transaction.rs b/polkadot/primitives/src/transaction.rs index 6279a2d0aa078..d0b5ab9557f4f 100644 --- a/polkadot/primitives/src/transaction.rs +++ b/polkadot/primitives/src/transaction.rs @@ -18,6 +18,7 @@ use rstd::vec::Vec; use codec::{Input, Slicable}; +use ::Signature; #[cfg(feature = "std")] use std::fmt; @@ -184,12 +185,35 @@ impl FunctionId { } } -/// Functions on the runtime. +/// Inherent functions on the runtime. +/// These must be called each block by the `EVERYBODY` account. #[derive(Clone, PartialEq, Eq)] #[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] -pub enum Function { +pub enum InherentFunction { /// Set the timestamp. TimestampSet(u64), +} + +impl InherentFunction { + /// Get the number of inherent functions. + pub fn count() -> u64 { + 1 + } + + /// Get the index. + pub fn index(&self) -> u64 { + match *self { + InherentFunction::TimestampSet(_) => 0, + } + } +} + +/// Functions on the runtime. +#[derive(Clone, PartialEq, Eq)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +pub enum Function { + /// An inherent function. + Inherent(InherentFunction), /// Set temporary session key as a validator. SessionSetKey(::SessionKey), /// Staking subsystem: begin staking. @@ -204,12 +228,34 @@ pub enum Function { GovernanceApprove(BlockNumber), } +impl Function { + /// The number of inherent functions. + pub fn inherent_functions() -> u64 { InherentFunction::count() } + + /// Whether this function is "inherent": that it must be part of every + /// block at the given index and no other. + /// + /// Transactions containing inherent functions should not be signed. + pub fn is_inherent(&self) -> bool { + self.inherent_index().is_some() + } + + /// If this function is inherent, returns the index it should occupy + /// in the block. Otherwise returns `None`. + pub fn inherent_index(&self) -> Option { + match *self { + Function::Inherent(ref inner) => Some(inner.index()), + _ => None, + } + } +} + impl Slicable for Function { fn decode(input: &mut I) -> Option { let id = try_opt!(u8::decode(input).and_then(FunctionId::from_u8)); Some(match id { FunctionId::TimestampSet => - Function::TimestampSet(try_opt!(Slicable::decode(input))), + Function::Inherent(InherentFunction::TimestampSet(try_opt!(Slicable::decode(input)))), FunctionId::SessionSetKey => Function::SessionSetKey(try_opt!(Slicable::decode(input))), FunctionId::StakingStake => Function::StakingStake, @@ -230,7 +276,7 @@ impl Slicable for Function { fn encode(&self) -> Vec { let mut v = Vec::new(); match *self { - Function::TimestampSet(ref data) => { + Function::Inherent(InherentFunction::TimestampSet(ref data)) => { (FunctionId::TimestampSet as u8).using_encoded(|s| v.extend(s)); data.using_encoded(|s| v.extend(s)); } @@ -308,7 +354,33 @@ pub struct UncheckedTransaction { /// The actual transaction information. pub transaction: Transaction, /// The signature; should be an Ed25519 signature applied to the serialised `transaction` field. - pub signature: super::Signature, + pub signature: Signature, +} + +impl UncheckedTransaction { + /// Whether the transaction is well-formed. In particular checks that + /// inherent transactions have the correct signed and signature fields. + /// + /// Does not check signatures on other transactions. + pub fn is_well_formed(&self) -> bool { + if self.transaction.function.is_inherent() { + self.transaction.signed == ::EVERYBODY && self.signature == Signature::zero() + } else { + true + } + } + + /// Create a new inherent-style transaction from the given function. + pub fn inherent(function: InherentFunction) -> Self { + UncheckedTransaction { + transaction: Transaction { + function: Function::Inherent(function), + nonce: 0, + signed: ::EVERYBODY + }, + signature: Signature::zero(), + } + } } impl Slicable for UncheckedTransaction { @@ -372,7 +444,7 @@ mod tests { transaction: Transaction { signed: [1; 32], nonce: 999u64, - function: Function::TimestampSet(135135), + function: Function::Inherent(InherentFunction::TimestampSet(135135)), }, signature: primitives::hash::H512([0; 64]), }; diff --git a/polkadot/runtime/src/api.rs b/polkadot/runtime/src/api.rs index 3f9ff71473dac..b8371a5da8531 100644 --- a/polkadot/runtime/src/api.rs +++ b/polkadot/runtime/src/api.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use runtime::{system, parachains, consensus, session}; +use runtime::{system, parachains, consensus, session, timestamp}; impl_stubs!( execute_block => |block| system::internal::execute_block(block), @@ -23,5 +23,6 @@ impl_stubs!( validator_count => |()| session::validator_count(), validators => |()| session::validators(), authorities => |()| consensus::authorities(), - duty_roster => |()| parachains::calculate_duty_roster() + duty_roster => |()| parachains::calculate_duty_roster(), + get_timestamp => |()| timestamp::get() ); diff --git a/polkadot/runtime/src/environment.rs b/polkadot/runtime/src/environment.rs index d7651c575aa36..5b311ce1f98b9 100644 --- a/polkadot/runtime/src/environment.rs +++ b/polkadot/runtime/src/environment.rs @@ -17,7 +17,6 @@ //! Environment API: Allows certain information to be accessed throughout the runtime. use rstd::boxed::Box; -use rstd::mem; use rstd::cell::RefCell; use rstd::rc::Rc; @@ -32,6 +31,8 @@ pub struct Environment { pub parent_hash: Hash, /// The current block digest. pub digest: Digest, + /// The current transaction index + pub transaction_index: u64, } /// Do something with the environment and return its value. Keep the function short. @@ -52,7 +53,7 @@ fn env() -> Rc> { let singleton: Rc> = Rc::new(RefCell::new(Default::default())); // Put it in the heap so it can outlive this call - SINGLETON = mem::transmute(Box::new(singleton)); + SINGLETON = Box::into_raw(Box::new(singleton)) as *const _; } // Now we give out a copy of the data that is safe to use concurrently. @@ -73,7 +74,7 @@ fn env() -> Rc> { let singleton: Rc> = Rc::new(RefCell::new(Default::default())); // Put it in the heap so it can outlive this call - *s.borrow_mut() = mem::transmute(Box::new(singleton)); + *s.borrow_mut() = Box::into_raw(Box::new(singleton)) as *const _; } // Now we give out a copy of the data that is safe to use concurrently. diff --git a/polkadot/runtime/src/lib.rs b/polkadot/runtime/src/lib.rs index 99aebd5990267..4059a16551632 100644 --- a/polkadot/runtime/src/lib.rs +++ b/polkadot/runtime/src/lib.rs @@ -41,7 +41,7 @@ pub mod api; pub mod transaction { use rstd::ops; use polkadot_primitives::Signature; - pub use polkadot_primitives::{Transaction, UncheckedTransaction}; + pub use polkadot_primitives::{Transaction, Function, UncheckedTransaction}; /// A type-safe indicator that a transaction has been checked. #[derive(PartialEq, Eq, Clone)] @@ -63,10 +63,20 @@ pub mod transaction { } } - /// Check the signature on a transaction. - /// - /// On failure, return the transaction back. - pub fn check(tx: UncheckedTransaction) -> Result { + /// Check the validity of a transaction: whether it can appear at the given index + /// and whether it is correctly authenticated. + pub fn check(tx: UncheckedTransaction, index: u64) -> Result { + match tx.transaction.function.inherent_index() { + Some(correct_index) => { + if index != correct_index || !tx.is_well_formed() { return Err(tx) } + return Ok(CheckedTransaction(tx)); + } + None => { + // non-inherent functions must appear after inherent. + if index < Function::inherent_functions() { return Err(tx) } + } + } + let msg = ::codec::Slicable::encode(&tx.transaction); if ::runtime_io::ed25519_verify(&tx.signature.0, &msg, &tx.transaction.signed) { Ok(CheckedTransaction(tx)) diff --git a/polkadot/runtime/src/runtime/system.rs b/polkadot/runtime/src/runtime/system.rs index 7d5e8835ed05c..b9d28cf18e5ff 100644 --- a/polkadot/runtime/src/runtime/system.rs +++ b/polkadot/runtime/src/runtime/system.rs @@ -24,12 +24,12 @@ use codec::{KeyedVec, Slicable}; use runtime_support::{Hashable, storage}; use environment::with_env; use polkadot_primitives::{AccountId, Hash, TxOrder, BlockNumber, Block, Header, - UncheckedTransaction, Function, Log}; + UncheckedTransaction, Function, InherentFunction, Log}; use runtime::{staking, session}; const NONCE_OF: &[u8] = b"sys:non:"; const BLOCK_HASH_AT: &[u8] = b"sys:old:"; -const CODE: &[u8] = b"sys:cod"; +const TEMP_TRANSACTION_NUMBER: &[u8] = b"temp:txcount:"; /// The current block number being processed. Set by `execute_block`. pub fn block_number() -> BlockNumber { @@ -71,8 +71,10 @@ pub mod internal { // any initial checks initial_checks(&block); - // execute transactions - block.transactions.iter().cloned().for_each(super::execute_transaction); + // execute all transactions, inherent or otherwise. + for (tx_num, tx) in block.all_transactions().enumerate() { + super::execute_transaction(tx, tx_num as u64); + } // post-transactional book-keeping. staking::internal::check_new_era(); @@ -87,6 +89,8 @@ pub mod internal { /// Execute a transaction outside of the block execution function. /// This doesn't attempt to validate anything regarding the block. + /// Note that when building a block transaction by transaction, the + /// inherent methods must be called manually. pub fn execute_transaction(utx: UncheckedTransaction, mut header: Header) -> Header { // populate environment from header. with_env(|e| { @@ -95,11 +99,16 @@ pub mod internal { mem::swap(&mut header.digest, &mut e.digest); }); - super::execute_transaction(utx); + let tx_num: u64 = storage::get_or_default(TEMP_TRANSACTION_NUMBER); + + super::execute_transaction(utx, tx_num); with_env(|e| { mem::swap(&mut header.digest, &mut e.digest); }); + + storage::put(TEMP_TRANSACTION_NUMBER, &(tx_num + 1)); + header } @@ -113,6 +122,11 @@ pub mod internal { mem::swap(&mut header.digest, &mut e.digest); }); + let tx_count: u64 = storage::take_or_default(TEMP_TRANSACTION_NUMBER); + if tx_count < Function::inherent_functions() { + panic!("Not enough transactions provided to fulfill all inherent functions."); + } + staking::internal::check_new_era(); session::internal::check_rotate_session(); @@ -125,54 +139,61 @@ pub mod internal { header } +} - /// Dispatch a function. - pub fn dispatch_function(function: &Function, transactor: &AccountId) { - match *function { - Function::StakingStake => { - ::runtime::staking::public::stake(transactor); - } - Function::StakingUnstake => { - ::runtime::staking::public::unstake(transactor); - } - Function::StakingTransfer(dest, value) => { - ::runtime::staking::public::transfer(transactor, &dest, value); - } - Function::SessionSetKey(session) => { - ::runtime::session::public::set_key(transactor, &session); - } - Function::TimestampSet(t) => { - ::runtime::timestamp::public::set(t); - } - Function::GovernancePropose(ref proposal) => { - ::runtime::governance::public::propose(transactor, proposal); - } - Function::GovernanceApprove(era_index) => { - ::runtime::governance::public::approve(transactor, era_index); - } +/// Dispatch a function. +fn dispatch_function(function: &Function, transactor: &AccountId) { + match *function { + Function::Inherent(InherentFunction::TimestampSet(t)) => { + ::runtime::timestamp::public::set(t); + } + Function::StakingStake => { + ::runtime::staking::public::stake(transactor); + } + Function::StakingUnstake => { + ::runtime::staking::public::unstake(transactor); + } + Function::StakingTransfer(dest, value) => { + ::runtime::staking::public::transfer(transactor, &dest, value); + } + Function::SessionSetKey(session) => { + ::runtime::session::public::set_key(transactor, &session); + } + Function::GovernancePropose(ref proposal) => { + ::runtime::governance::public::propose(transactor, proposal); + } + Function::GovernanceApprove(era_index) => { + ::runtime::governance::public::approve(transactor, era_index); } } } -fn execute_transaction(utx: UncheckedTransaction) { +fn execute_transaction(utx: UncheckedTransaction, tx_num: u64) { use ::transaction; - // Verify the signature is good. - let tx = match transaction::check(utx) { + // Verify the transaction is authenticated at its position. + let tx = match transaction::check(utx, tx_num) { Ok(tx) => tx, - Err(_) => panic!("All transactions should be properly signed"), + Err(_) => panic!("Transaction at index {} not properly authenticated", tx_num), }; // check nonce let nonce_key = tx.signed.to_keyed_vec(NONCE_OF); - let expected_nonce: TxOrder = storage::get_or(&nonce_key, 0); + let (expected_nonce, increment_nonce) = if !tx.function.is_inherent() { + (storage::get_or(&nonce_key, 0), true) + } else { + (0, false) + }; + assert!(tx.nonce == expected_nonce, "All transactions should have the correct nonce"); - // increment nonce in storage - storage::put(&nonce_key, &(expected_nonce + 1)); + // increment nonce in storage, unless it's the EVERYBODY account. + if increment_nonce { + storage::put(&nonce_key, &(expected_nonce + 1)); + } // decode parameters and dispatch - internal::dispatch_function(&tx.function, &tx.signed); + dispatch_function(&tx.function, &tx.signed); } fn initial_checks(block: &Block) { @@ -185,7 +206,7 @@ fn initial_checks(block: &Block) { ); // check transaction trie root represents the transactions. - let txs = block.transactions.iter().map(Slicable::encode).collect::>(); + let txs = block.all_transactions().map(|tx| Slicable::encode(&tx)).collect::>(); let txs = txs.iter().map(Vec::as_slice).collect::>(); let txs_root = enumerated_trie_root(&txs).into(); info_expect_equal_hash(&header.transaction_root, &txs_root); @@ -239,11 +260,16 @@ mod tests { use keyring::Keyring; use environment::with_env; use primitives::hexdisplay::HexDisplay; - use polkadot_primitives::{Header, Digest, UncheckedTransaction, Transaction, Function}; + use polkadot_primitives::{Header, Body, Digest, UncheckedTransaction, Transaction, Function, InherentFunction}; use runtime::staking; + fn set_timestamp() -> UncheckedTransaction { + UncheckedTransaction::inherent(InherentFunction::TimestampSet(100_000)) + } + #[test] - fn staking_balance_transfer_dispatch_works() { + #[should_panic] + fn fails_if_first_not_timestamp_set() { let one = Keyring::One.to_raw_public(); let two = Keyring::Two.to_raw_public(); @@ -262,6 +288,31 @@ mod tests { with_externalities(&mut t, || { internal::execute_transaction(tx, Header::from_block_number(1)); + }); + } + + #[test] + fn staking_balance_transfer_dispatch_works() { + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); + + let mut t: TestExternalities = map![ + twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] + ]; + + let tx = UncheckedTransaction { + transaction: Transaction { + signed: one.clone(), + nonce: 0, + function: Function::StakingTransfer(two, 69), + }, + signature: hex!("5f9832c5a4a39e2dd4a3a0c5b400e9836beb362cb8f7d845a8291a2ae6fe366612e080e4acd0b5a75c3d0b6ee69614a68fb63698c1e76bf1f2dcd8fa617ddf05").into(), + }; + + with_externalities(&mut t, || { + let header = Header::from_block_number(1); + let header = internal::execute_transaction(set_timestamp(), header); + internal::execute_transaction(tx, header); assert_eq!(staking::balance(&one), 42); assert_eq!(staking::balance(&two), 69); }); @@ -293,22 +344,22 @@ mod tests { #[test] fn block_import_works() { - let one = Keyring::One.to_raw_public(); - let two = Keyring::Two.to_raw_public(); - let mut t = new_test_ext(); let h = Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("1ab2dbb7d4868a670b181327b0b6a58dc64b10cfb9876f737a5aa014b8da31e0").into(), - transaction_root: hex!("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").into(), + state_root: hex!("aa4fbcdc09b21e4366aebccd9b9ec0831a8a2765c712d3397f121ff8e60e21e2").into(), + transaction_root: hex!("328ae80be3adf358d2a2e188cbe1bfd3f8cd5b15a2e7666e2b4eccf7450efc32").into(), digest: Digest { logs: vec![], }, }; let b = Block { header: h, - transactions: vec![], + body: Body { + timestamp: 100_000, + transactions: vec![] + } }; with_externalities(&mut t, || { @@ -334,7 +385,10 @@ mod tests { let b = Block { header: h, - transactions: vec![], + body: Body { + timestamp: 100_000, + transactions: vec![], + } }; with_externalities(&mut t, || { @@ -360,7 +414,10 @@ mod tests { let b = Block { header: h, - transactions: vec![], + body: Body { + timestamp: 100_000, + transactions: vec![], + } }; with_externalities(&mut t, || { diff --git a/polkadot/runtime/src/runtime/timestamp.rs b/polkadot/runtime/src/runtime/timestamp.rs index 0b96f39bd4a8c..8252f372254a8 100644 --- a/polkadot/runtime/src/runtime/timestamp.rs +++ b/polkadot/runtime/src/runtime/timestamp.rs @@ -17,8 +17,7 @@ //! Timestamp manager: just handles the current timestamp. use runtime_support::storage; - -pub type Timestamp = u64; +use polkadot_primitives::Timestamp; const CURRENT_TIMESTAMP: &[u8] = b"tim:val"; @@ -32,6 +31,10 @@ pub mod public { /// Set the current time. pub fn set(now: Timestamp) { + if super::get() > now { + panic!("last timestamp less than now"); + } + storage::put(CURRENT_TIMESTAMP, &now); } } 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 a1f28badf2e10cf131d7a34138f17d95b2ba1abf..2960433376153fae66e4e6110e4cc63b1ad55108 100644 GIT binary patch literal 104417 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 literal 76656 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 diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm index 160550b5c786ffa6addf6c2a3ec6210a8605e9dd..e7a92e3450d71860e7fe808ac128935f91f46ba3 100644 GIT binary patch literal 104496 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�uUqWTh?#V?*tdy^ z=T(BuX^k(Oy{@Jmia92%{`Q9W9PGt(!~VLkZb)NMr{K;H$?WGf;N0#|#KpR=t@&WF z(q$S15SHuEv=-7*5FVWqYAb9KM~KMnK@w*?mrn#Am#EO0c^h0NI+?j-O|#}94!(CI*D06cnRvc_owA!tBX%QZ$R?PuDXH#R5o+2E{!C1y z@}rWI-@Hk4(ce}aeJ^*!>F*qStUu1O3mKYs2T`CFJ9$3~>Y^}F?m5iOMh#BbB+7jb zGysCk#GQPP2Ri52)9d$mOoG;#dWd1TW%uQrHa0k@?WM#OUT^xPoE`R$=x0?zQ+F$i zoe=E8u`kSZ1La)iAUa-QQr~6Ox+d2dsjuePtwZ?DTtzPNU!y#7)+{08z5F;Jl@Lc~ z;~b-!YqDzAk^oi)&$glE%IgAo38||1^T-fYIhu8!2_vPXHUiGW2sW6cC@f5(i+b$^U_(!kq;T4S zPJ+7r)p;9;WKg6#tA3^M7;})J!Owflog)+p1J5xD=EvNVZ;U+QfkZjhZO3o~#|9Gq zXduy?Cc#$JtQ8ee6SB-iseSWvgKUmEjaZaU5h8}PTjFKWPH6frsKr4AcXcyT6F>I{ zkDN{qDMPyBQfg=FB|Whh>1BmqC3Q1nI_#w*$?#1v8sOGahHV{lMlRzQrKkhWa%V!I z3ntJ4{Dn0N(sqvC*39R!`rpT{h5_z?*_&!xuyAvGdCS(Z-CXh#aVyKV-ksNR>&xiK zj-lb|_JP5^e(r_g(iV3$OjqZ!8=AK4QW}v#gt^4e#zud|cqYpGD{8-w&(a61w zCEOdy|BO7z6j_>V$nm4;NNxfijT7!M9|9jI+KeeC%H7(^)g-ebF}aM%>QegKqTg2> zcQMf)=s|vB;wmd=PnaJ`I}Zc$6+`3Y1JZne$WKgGiX>802fE*hmj@VfU|;K)(W>0S zI9fKR4>*Qlz=I+3Zp0($35S`=TUu|3ba%~Zl4L3aVN0cy84HVTYf`)B{&7Rk9Kell zVtG!!ft){*YYuPJ(vN*!ezY*W@iW_%Yc@!g{Ah8uD;wTy?*rV<04Mfu(WLqgbJk!U zPW%WbEA*8k93tu}BOF*|A-Jf%yK;1Ems(+iTl7s1@6ic2XnbRw+Xd?U_@-eemxyBl z5yvVlk*JX$-&8M=ryF=1#<%+L*f753l9YaYlNlw+)5bSBBxr3I-$sa!`0)+6jc>$l ze7oc-rb%F3_6rEtXgIBp5H&ZPYM4nb&xpsjOAX^&O~d9Tlycguy0s=17LaVMERPvX z81ZZ6b&2uq0JYWV!cbY0Bvv!|O69gD_!Q6&Z*gU?D*CM0qTv&=Jmg^v32{N)nFFX% zgIb^$3Tz zfCncc>=g)-Hyhfzmje-5dkr1_lgWlcS)+ACsfJS=tyYF-wc5kTG6q zG|sxsoU52epKEfKdhANwQAG9AahCL>xPueTQH90*kN8TI<%9qRBhOi?KwVGroMm~& z1Y#uTRkB1<3;5MIODs@V@jPcWs(94aahCXE4mU`1yn?f?LiuxeByJim z5aRa4oR!dM%vuc!XC0ve!dgOT%sl94abD5)Og1!NPyo_PiY2u-{%0PQD8goz5Q|^~ zl>&PO(*ggUXF3Fc7yiui7`5EJWls3BqT=Q@nTCZ6h%?NXi1H2?kd~qWj6Ra@rVzg+KG2cs5)S%{CuDu61 zn@|_SfUP$qhI4pvqA;i2veRszJ~UPNjfOg7%0$2A_J@6u{4U`eD^YKE*Ur6E`^A?o ze7bMgskj$tyHjZEdQksfyu-%g~CK;ha-7x zNA8&x^xjCGnee66s4bD|zDOS1@uy{}?u_KP>4Z|%RV7m08_B)Xluz}ZNdDR<>w3~X zk({<4S8Y*tu8-vC>6ml$B)8#)zU&eDM;#uK-y!pFeZ(5N7r825P=_0IBlN|cc#}$K z?{6%!_t>>@_mYzr*#%C5$&=PS0sgX3sQTX0+862OibKKfjLxlvxwigP_uRjpO>^VA zwy+V>i%umc`Um62%7iHIi8(cRPwP-5uljeZ7MYiFC@7NdG8bw~_%0lOB@JbBD$5sF z8JkMdurOBep6XI`~?1;iMJ#T#~Kedf3R zEo44u7dYHm&s>_DYEJ*ai0~#RZ|peyt{k$ji5Be419ol19pvPCV|U(Xesi$90P6Ss zEtJt`SCzcGUPhBEBhpnR_;%CHBy@4n_Ve#LgWiyb2<2c6S8vS(OaibjImvC(#_3a- zi0U%i-b-qTop{e9+G~SSD;t9ilg4g(#9ZMljWSRf0+8z$W91Nw(5%F&#yds~jdyju zS3pY8N?~)N=J|14GCN+kuxu~N4&pVgSv0O%4q?*fKVv7Rm&>-0GJ+^a%-XERRairn zhj^7#Ize4oZ%|$v2C!O&HKM_A=^JQ`z@@p8FY;a}bp{k)6BN;;b`1)vw_4LC?fC&I zmi!~uGJ|lzSDKyHXAGi!!S!})@r8C9J`T)RK*^BZn!>WywUSmC5G-SaZfGwX>(qI2 zwH)u87}Ul$VDjUe^ikZQx2sUG<#6^USALCd9@AqlRo$6>lODIGKEfRadtKTZY5UNG zV*k#pRCs(86NmCF#CU93n{H300yotgI>teGBd6Z{$7x-tZ z$`y#GS3J5K#(OoX5qTm}kJIN9T=!B?+y`4JX_S`vW=Y!@Np~BrwFjto)sd96O!uX^RT--|Ks&+Ll@Ou(oc8HRbnM*O0cm2$U+m-= zXLWVB#>NbVAoci5dY2?$8gJqoV%rto7PQB)jbA)ID| z0Vy|yo02OB9FPn*hntfd2^^4eb-BXE81wcy)zjq)@glWLNh@@@LcE*R0cor*S1>;; zjw~2;itciSh5-iIrrw0fZQ!GNxLuh=x9KNb1b?zhg3X$c%tx>;Je@VdA*}&QEKOQG{aPnvQ3zwTd{-#)SGp( zS2xya-8P&g1a2F36RK8^QB_aX&927FT{D)swspD&cQ`C8b*O1iXmVCsrO{%oktU@8 zc$%z>6#?mV&FAeymAPS+q?zbr*SI$eWoU91R5r)!jr#Y#NulsLUo z!W^KpV>(=!$h=iajk=O*tWL@flLFZq3(8DVh>8x_xGInQ^`4PO`FhXDM}NI%bWdfy zXLQ#hMC3(}yhlJp*OE6s5fRnQm^x2dupvJg))yrDL%adDEnMVbt;xN)&Eb+poua$0 zCv{rmZLs7RgLqviaU)hG5k+ef`Li|=I_nZivpx|o8xom<3T)XhzL=6E4FTtCI__R1 zFpuCVI^CV2wZ(qh@tJ};+_nl^^1p$x?*?qyDQGSnvxR9t+NYWUa%$d`ij-1tTt3!1 zSUNvq0s@aYdez;yf`0=`{T>@BdCiO!<`l#pD-HVStE}`7xxMVWj^NSU3i&R;*b0=w zOR*~^>t3E^uXx2bI~6@bY)ulY5nG$YUgN`cNlb^2)+e!7iET(?@J6B}rKGqTI#F>_ zcx$GXT7L`kOr>?f?tXd0&+j89C)Lam@wC}zo~m!b2@~5`aPTbi1rDoqn!E?y42wty%%zsujG+`OCi1`Gwx?g2>IK#+=V+oK?${G|sBq32;^| zU)ngU)>0tOszU;tRcmI3vue4u##yzTT;r@-*CyhuTAr_QR=t=2XVv-+XVnVuRjmMD z)wTpgTNLee0lumg!&kMuT;r=+F?>}kz*n^bd{ryJSG59sRV%<(wE|pKD_G}(wJuoW zf{OD59=ZT0)$$9@83hHns8)c7YS}h$P^|#})S6x5o>~FkspXCw=hQ+yzNuwu!Zo#e z0MFD4a7?WLztjqFORWhkUa1wZokZBeC$$1xQY*kCwE`ScYc`8NYT1}@N8L?;H)>gl za7Hbk=$wy|jR#lMa?s5Rt=8mNp_SL}OyC^gr{z?Ycq&K*f0DsjbL>%zLto7iE;MxB zK^sk^wB|!VLzzxofim@y<4%-x=Z^~S%$?X>2+AR5z`V}rHe+|v8C}xDl+rR-p>XM# zifEmxS-@O~<;`N8n8E6b6;%S-f-vLvjQK+ud3+jG(#oY+Y08dS#;k_j<~D*+zwXRB z^kst3*3_Fg8)qlL9@q7<+P+7T%Crpf1>#&U`TBsB?+x5ELtEN=j=j)qlowm_ABL z(SiFlXp*1K?vmEFjuGm7dGL#wbm4=Mpi%i~g?j>3YpSmPC}~Q;LOqtioPNwQ=rdQt zCi9&d=A6wq*Kml1gLuL{TY;?k@q#oNV8S7L)md4xDUe*{j4aERB^{MvM^8Cy&7@Ki zLX@8pHR0=k?JQt~x#wGSiE9DO8lG)#1J3>22B;cI8%e2>TplK)(&T76g9!YXAe*vq zq83ALG&6c;a&jivSqszyWs0^_x5RYT zD9^^f_UsrRaD0r@$>val&79u92OUSk{orDOPW7qQ>XUbpl11e#D0fUhwR?02UR7Scg>ZqBsGMRb^*w9~FRrrkxI-2!i7acZIYP#r)K znhsfdOF>0s%(Cn#WIq%91&VRBQNan@VF%EcXc}%(qG`BEiA}DYyvseC$dX_OIczNJ_8l@u0jdhk&Oca8_lQYv(@^U#Tj6lzV-Ix}(n#OTa}2d7R=&Wxs5lMQaXg$yPp zr%v5_UpO;8K6!Hd;LPEv$&=xU>8S?}ADZCnsqmgt$L=|N>{vL?@9?C`nVbPQ>5^_s zVVDk`eoOd$kYA1;HDH93bDwMd zr7-CPTqK`LE#Q+e!bOCC$avdqd7R4x3l5H-7(aM;=Am%vfr;sRj!nHkg`Fl?bnNim z)Om`Ejlch{2PO_$jV@h1{SPSQfG-4uTOlP1S!RVin!WOEy$a{EZ&21te0Iranj*8g zHNTX-YRzl8H^}X=Tu|;Kmyjy$CtPS%JI^S4c=FK1gW=SvnQ-c!@NT;I(8*CzM0jjs zQe={1<8ZJryqg4qy5t6bB^O*s_x1Jl_YL$7_Er0~_YL(8_l@-J=AKQJ&bI8YtfJ}@*eJTNk_W3X?qe{f)MaIiYKeQ;=ScyMHJN42lo zUmd6pR;$(R)uHNeb)>pud*Al{?E~8fw^z4s-#)Z`c>Boq9YcLX{X+vogG1G!?L$LD z!$TuOJBIs)`-caH2ZyV}+lPmShlfXocZ~Fn^p6aT431PswvP;r43CVA?ASpScToHe zvfjaGI{>AkX9_|21Z-0PH8sLDhN2gN?kBdG*aAY1aX@?*3&CP2LoV?OI;4Gl#?^#(=#W-@fq^D+!VB0M@`U)4pb`!=>w_gY%$2cXWO=I?@dLI7lY1= zI*g)1O0H0`6r@JO&KHAY_CzEUgg?r*zs68$^b76H8>fNPu9+qkJ<%ML&r=^!+? zGoNV=I?q$Z%|I^^ihpmVK*<0EQghH9x8V}sZU9)O-}oGD*L7jNO@G-OJeO8w^%vUz zZ(L!e`%!6rRHKxKkoBYTks!NPnpAWys3Yggw9ZlA`5;)BP~XgSLVFj3Ah`RXnV3nD zkwLH_7WL!d!TZLi9fyxkKeRJEJfl~KCr=`)A)d3Ppcr=RbMgGSQc&m-kse4zPnUx7 z7+6&gjZo)qLWE?gUWt2-&m@(&R0=ZN5bT#r!Ox`9*?hiO$TsDQ#pZI$ieOo3Y3sta zrR}+LcHzQB%}diA`OeI;?DD2n>D5ca?B@KI%+_FAx-Z+G9mqVDeme8H%;$5zS^O`V z|1baFazD(z-VE!t2In)+KKRhbKk<+H-hKOlM?U`O*_EsQysiB$Z{60r>(2My^-urx znNNK3)4%w+FTU_QUwQd!fB3In`HS3wg+2Y%;nAJf-~8tHp7|uNo_pbUUjD;xeDjsR zNab4DCCuB=oqP7){O0!^nmF_6U-{LqedC+C)&)I#ZhklMPkj1wB>&3SzW>T!Tn4)5 z=0g*;(`Wwii(me|?|k?2Uw`PsANlCVAAS7Xlb?P1bI-i+<=^|tSHJPiKmC_CJ^s6Y z{PH)xdGjr|zWZn2ch^Th`Kd2{>9>FH_h0_%cNZ+}c+Z{x@jw0W^;+xk`~TJV+uB!8 zPOV&Z*Ux|8x4!USmUeWl-n;LXTW`PP&i8%bga7m^-~P^@UH$lu`$9tNJ?d6TVfA#Mtr-rZJ zwR_LmPyg`sciemG!q+Z->wEv=-~RA*WKlVI8Qu7(Bl+9$b*-|c_4GQVDCHc|p zf~G>gT)eF*)3l^@f9}TY)@(YrpwM0#&8=GBT6k-CJa=S$?Lz+H^V#KvhyPplXPcG; z9nFhNi%UleErsQU+l!m?dt0{TO1X5lKiHC6UI?oO?%`ir7A*ONJF-ic<;t}m8*dpUzQ6Le+o$o*_{?L(a_ zTb4HOZK-{%@S9JTI&%G=$({bw4NawdzV;gnP9HBn*uAOn)?Doqx!RYrE3)ma(BQ&g zcdC$1)8q`4ooT^qb~(Kuw=lnG;o{7a%<}BY{Hol#^pWh*%!`?CWxiedPV+y{d^hu_ z=}Y-nGk+Cc&i!@zKcktQTNM0*bZO(x8*aJvQ@{3W|FF>1JaqjHxBZ8U-^wlSyzSk; zyZsyAytMEaKKjXDn@gp)+6K;ML6g*8E&POMgt{(!JYi53kDh zx3A2tYwpT#&c7+wwyE~{!n)kLTz9b=q-$qS4>vDuDb^m}kv&*!?pvC#WLMV;gNAt^@a;2vIHxCcC4mK4|A6R|*^ewrr_8Z%lHMJDpRNB~l zD%cfmD(uX+6y9D)=gZlA?c?uTb5pUU_SyHX*%P!BS{IEJTZWcr5hbS&yrYypow}*` zj#WEOH|=d%mECvqaJH@3^6+Or^vn003TiKX?8P&^pZeCr`#$r}9^TQkDVI60p=EDN zcYe`_PV5PK%L~RbUBC4IEPD7q{6_2P)o(xj=tpx$^R3zDrt<%Gp!OeIP8KIS_SRl_ zck{y9Cr|Ioet38Lk`M3S{0rZyeYfW=`IcPf%(?3d>D;^WE2^2(ZCi4OO1HJNX79{h zzhhPFmRvKGS*ZQ;hrSai!~l0aFUik!25q~irl+Ug|F%;zdkCi~w=*a{*ddY5U-W!uP>#pj|D7?+4LBD%gTmkkt=YrsoIuku#<3r5T2?S0AH+OnYY9N+Xeygi(}J-00A zA3u3=Vp@$4?-@S~E>K0M?m`nEpFB9hVyHDeyrBUI9+sgIHO?Sr#*ZGJyw@RPc`$Tk zmUmB09%2&I9nV^(rhCHcu4ia;;6oE9XL_Lj<-x`)zrAOA>UdJ28?KK#ITHlbx!#qn%pkr2` zBT~Q`B0Eq()*AHUieOFe!TTl-9;Lf`g@u?R=4z$2mBD&nfm4%76;z)qs&RhhRc972 ztqeN*sGStC1BCOYBP-uv-tmL0eAX~ET7_oO?iw|kH0p^}AOh%0iV6v(dVdX_iq?aO z=lJF#6%YbG%{QwIdT~{-_F9NIIW;}wD55J^d1bF2XRZqcppnxLU2mk@&vyNI*nXv} z-mH3G{QziO@u#RXTmEUznbmdZZvp5t=wqvcBHc9l{=>&$xhH%KJ|Onw>Yz#QPHJlY zjE_uAkAoT?IW}=H6}=dLgdjm<=GDDZ4~&kVfaSlwI>?V6oI1q!-v-XSdlbe>MSr#$ z#A7Hh#1nQ>7opivU@Z(*9vjC#pm{nKIDP_rojl2`aC{PD0`ul`VbIygiAh4k{PVos zPp&)2@hqWcJ4gAUS%Qa)VX$L-Mpgz2mYk}R|0DnxT!GHrb3!)l%a3U zG5(ximLKA!5^TPbVD5u=C#JU@I(#pv2(Q0Bobb<7Wz8E}G@f4LdI1Xwf_Dv59CT_4 zQt8&R76>;E+ZT9S1KQK@_QvGxCEo7m?be33dy}`X@iye`riQmSCvVTL4T_EwPCyus zuMIk9X*9Okq!w>W(w<)%FmsA#*9OCNVHqADf5@yy<0oY5k+q2M#MH_0W8uvEnG7?j zV8EIPAxh+0ZC$Xekt!&AVtP^n-FoNTx?odd-g7Nb<1_R!^x%skyNm0Bt!A)lFjghS ztKezT$(&DW>w_Mb0X2MJ3Zf!*>@XuOJtUKu z8kCfCf+Aev@2w9yFZa#9>OoG-2%NnR!WXojh?uTNk-7pt5C&s78nWZr& zGt@k@fnFw05oV20vbR17zPRBhR2XU-uc|OSwlQd;Ua zSr!xbpVE*#%NLhu=(>h4zLR`$X=|{qu`V;yhZ!uVQ0rntzVR|r^X#@@<^FLKa`&kS z-+ts;oZ^{n2pj4q>rPy^f0LASaa+*+4n%_14(bIQAD=mh@&7(>kPO&TWnbGC6fcvP zqq8xKDadzd`$61Uz901O^EU3_3F6hcSU9cG^j&2Rydo_=+Dw z$b|H`(ThX7NykZ)F4qh-<76~FR6$pTX(h#E=pJ{Xq)Ea|oDNmvDKpisE_I4O^oMIo zm3UIBv?t8xyVgGEo~!o&0nSvaD^lIJ&)#S6wbx#It+m%)`^QN>^TZ=*k|gPagNO1H zCr+d%9?I;mB8i@phZ;QUg@wsODM?KwDJ``>PbUv0%1qd{H})<`pMEHb0H4l&K3|s~ ze)P$?!%rQ5@V|WcGe-{J@Zb$M?M*TzE-3M{4SvRNUTm@#kACry!^b{z{P5=!f*k`RkSxut%i{<;6`rsEHJ^onI)~lXgJ!0jO&LrXRBcFZb zXkvvu2MI@i))V?x!n_08p%;@~2 z(@N7cNz=T^FH?@0bhgF6yvLs`%hS2uy#MRX*(_N&_QfaY=EI-=!lMs<@zJ08!lR!{w&|saG_nWCcSV~NqtXr~i8@!dBCW4# zSod8GRStjli^mVcGLL=sNb>RZW&HTD&pi6XXFhxU3y(dT+&lMEUwHI04}al_GTSHS zpCtOZ&p?g`Kl|7hA3dJj*Q-*VNPejQnJ*sy>Bo+J;rJI0Kat$u|J)ak|130n;`rfX z$phW_G%1pP_aE%ux$FAnYwp_9`?X(deBw{CtaBoLy5QAv)+qKI8Flw&jgS_d@p6_7 zo1t4Id$UcUdobOX4~PxM%$;E;KLETi4(Z^> zl(J*kQV@n2Wji6K#Hi^wCZVBNXB@K79E`Sv1{s>;QO9d&sfKLO=+opdrkZx~(0J6I zP5S+id(l)Fga6Jv8TIz*nU(}g?S|gIJQQl&9va^0e=N;TfH$=4j8X+NqwG#<@FJj) z9sz#w(Borj18(0lH-rVb6Ap`}LArnWUGv*Vo zRBX$5*o}{y$HQKH+&CWgHf-Axf1v^4t!Ifb~!Bt^a!PQ|-!E%^aurmx4ToV=)d?@Tv zuq&)nusf_*aBWyra9vnZuqSL#aDCXQ;D)eC!H2_*3T_OW72FiIDA*g@+8iskFKktC zvk3IW@FNP24fiW}e0Yn3qr+SKba6T!UM4awXSYf;a%sD5;nw|061MR&+~QBD@%{dk zkHbg&3Gu$!pPJ*a&!1Z3u-Bj3<8YHdp%8EMr|vj>*q?giaDzYf$KiT^LVNA;r`d71 z&Y$MS;aY#1ABWxkG#H0n{0ZJAAodVoe{4G&{|EZhxYZl<^$&t~FY{?l}f1NNR>n~BP z2!qXG1_i4>ol#>vYGD>9i<*zL)S48_d^t%x&M=S`yC!jlkF;2x#2I$dV#g#dV;e)g zDlfYqpjDjVF~tsv@tM#d^Qa{ZQ)UYofHNS`nZl6Kb9Nud*_)VI&uh2i##%dGPs)l~ z)JetPtR+}WFySiHtSPV7609v}Y6;euTPG!~F*ld-dSl)mzfaciLuFUB8-CxdB^Z9^ zY6*tlo3#YP?`$o>@cT|J!4Q0-N{ART(}CRBeJ}x*x^c+O&LMk-@#+92dA?Couxs_LkM9MRNfTB}gTyzr@B)38jKUI~MUyx1JG!lt1!u$=%w2U!^r zQ=ThKnF0z^f*l0B2{yN74x_Sx*&uUR!Rrn#V}8seT9H1u31D9phY==VFLZt0$HXyL z>W*PgZT3l5${eyYo6fW}XYBMLucnY*p{i#l3r0q3h=W+PLd)t2sZYqgrUN64$R-(> z&Qir4!<1q@5wt1ORs9m$!Z=FSVAQj?5Cn4-Yg1kXq52ZJuF5u;KQr~qi{m&aW;MIT zexr^};v7vNdlp?Brl6a71$xneGdi$J2b762Rq9zqCGegj=3E4ZHhFU5(SCUjW~V&| zGiZVQ05;!Dfn59KcSdtxrr!TPe@CATJ`mA$wNGZVx^Uu?X^Y2K`($vD$Y~?e00<)G z>KElyX{85$UX&)2PliA~nMh2V+DD&EyU33ZTd;NJJ#Aj1;0ytkeA1S}zC<9qTsEj| z^?VjG(nf9OAC8K7c6go2z&77b2RBodQ8FMOk)!}TgB&^y8YpMNYOoD~wcJ$dxr+qA zP&Zg?Wf@hgd6w7g$ew zh^+oq9-@Dlrg9Paf1Dyl8~PwU60-ZHGeR~V;U~IhmM0iBJ&q%Z`2Aa@C+?ojVo97f z)Jg5M2Jg*XWN!>J7#g{0k20jN86R=o0A9cQwhl%^yjlbE`OqR@V&lqD; zquR3UZ3)DTO&h2}AQNBCmc<;o1PaXpwJf*B7TC~U+lbMQBSzCljJ6fmh_Q!aWZNN$ zx{+ssMFNc&U{Q*Piiaj`VTyhk90(T@VYqTd(h`V)5TW}_$>BGpJDoD7Pa|dE2%}6x zC7?{yrLYYCz(E83Jlz9voJnI3M1mFz5J_BgDZOR0=J(uNu;8Ttx5@c?2A*FUaPtAk zlZt3ZCadY4+&a7BN~8puAY@Z$zYYE5XOMoH%KJ9lZeEf1goWTn280X6C^lBZp;AMg z>EWi0bmaKoD8m?qKJWiUD{IumIvkOk7$>hwb#o1=4k_Lym+59H(=C^2M4Eyo(oK*l zMOtcD5(-%Hp^J3W1zGlP$*#y-EgL$+?Doq_b22N;dR#Ie9wL~T6TFz6#LZOfR{62M zlT_LOM!yuiqBd|!4rM832jC5+2MqdpbdPg;)SOLeWswdMo0b-a770)}1D_>qB7m+w^x3pv z(+DP`t2e<3%o5-a%pnbX%$04n!@84r0~ng>n<4AZmR;$=Cm4$wf_Lyt(C}I*VWt}< z=4FhtZvI78Z`CnsO4X}Q<2hAQtzZR;tGnCkZieN3wg%Wj9a8}&lvC&{S=y}D@hajV zHY~J>D&Xu?Ff+jBN+lJ@beXlno7fm1{EI*TlmFu{e(Asat^M*H&=T4!(p*FflY65D zCW6t$X~A=#6!cmYT|^54(IV#38mU#<@HJ1QJ4zX4LHgN?M*#s_4uS=3!pifgC#FRgblPK~J!aEnTsnPiZa*wZht;smK zbC^v7BIEe8GY-#h!#FXQF;0Lwk#Vv(mYZ-UHj{}?p*X5n-ZL%WL9NPr7DxHTY83Y& z0l$uW@8YPB$zH~7m_iAcaq|yhOnZE4^&WP%2~L1D-$8QW)*igglp-5+Cy$-UV{h`< z@3+W1XnWA;cdX=KXaB{1I#(C`c|@(ade}FGs43ehDNg>ogta53<_E$&c2dCE(kY%E zqh)w^bkr^0OpY@9E1u8B*QLf^o#IP4I7okVI=xRiOVCO2*6)4$x_g-`8Hh(m-61ZL z(#eqwyC7i2??(A}mDGom#}Y59%c`*=R;c^&Nf~B!Xawzei1zISmZjHm?iW{waN^CR@0d51IY`|ym; z;OI+jOqqH))Liw0U}2>%1q-Ic5yv&LFlU`G$Mdp>U=Q4SX?U%sOsk|!S>sw%p~3{R zmV_=a0C#!!$&ZUZpgXYYmQj`ke!a9 zgPD@B*$Ao&fWMf{vBRl*#x2D3Nj7W1F?8*dSS7sZJ5tLgsIt*up0^U_I9Aj%RiL_mArcwg zxAqPK1c_SKi9%7_(2-ar!rqW=-jC!@_#rcXsE}1=n4vGLQxkC&;}4jap%#*f%6_Yx z_9~UlT-X+y5Mvy|r5bv>P)@jxbecA(^zggkLdIDQ>IoAqkd~8OgU^h6uG4^n&kWUa zF)Q?B2dWG?7BPZlV9jWFlp}d?tvt@#On=@v+YY_r#1q3F&4)k6BTC_iUn?)@%yc9M z;I~O58u*w8^xDfa1i*0h_5!DO8iPOuyIB6TpPg3y*_OO<{@B!1T=md)TI)6LCjae^1HCuoZMS$UeH;m4 zSQM%0_@;KwX^}?lR3UBBQHh31c!x4ioD@E*H>_rm}{84q)$BGI_n z1EDx>_B3wNt%ndXX(iY|u8FthCf?=Jq|7OzPGz&Lur_@U&CIhT^aZ0a>P6KGE%zsk z@53(H?RBqGtzD8kQmsu?t0wm4`%<-bQI;xes#UaZpjxGa)kT$RWhDUax-gdF3(U#2gw$~4R>`pM9A-)FQlrSq0F08|7(b|KJhb{ zhQ;L!n8o)nv((db+q((#KlWCy`p5q3ENgZ9#s4jnjOD_#_)dbUriZuQ%I}p36|c`1 zJB!nU;&fJ=U03{JHn@2<(UenNKej!(wGa@n5IKsg1=sWlqJjX>s!V zca8bezXy_~#h?A+@p17Ve`(jfJpcDE^8D+Y^!OkCjK^6${q@9 zUmO?9O8(@MYtRqmwe%bM9pEW0!T^^Jt^5s3)XeSyeSOTeq6rSM$x#Jr0=jK0(l#A&4eYD zT*Dffvf}^6fkHpw=tuWT_JXCuVV*2KY=woo-k||7?Uw(*B<^&BkOHP%NgB zQsJ%sfQB0<=}%+uq5iMrY3GD#-C>v3nnlJk77{CQu;E9mC#Gz#c)}uAr*L`H&7nUlNN!AB~2OBTe9Xf*sfeRxgjp0h*5tY|m~n zr-iB-C8ZWUhj_-;rWXk?nRGaT5dcozn{DIyRI@nEDlV~2PE+bd`0r(h0&K_w0Zm2C zSZ~?@%6qYemRk`&9t^z$cZ*E926}61&}fTSUYYqrcT3mhYM7N&!(geF+e2!a-l%aM z0;@q?O80lLlQ@BpG8Bsz7&S;BWRlXdjtCv_U#2zMz&CHX7>Y3l^*=!tsDC4+ zbVOrs_JGP@W!`Kl%cR^*%4t&eSjr|+K1~WMNPsmjpo&t>UXZnPD)4k=dbu^Y5nHlC z#N0n?BSI!Q52=r*8J@s}Ct*d6JgM%72-*EpHsMt~#~@bVQKSvUn?%7pVrOo~HL&w^ zW%^#*u!HRE3xF|b0@@9V$~zZ2NAN@4Ir6d7)NfGV_80ghLLl zCS-wPbe86)O{lRk5o;?-=TpkSxc!O@fQmG|=Ahyzt%SkWji?Z0m7CBvP3S>VG3J3- z1QdoNu}7?6JC=X}m6uUsBFa|i7~`}=`7XvqxCUV{kk%YUq!miW-GSt2c&CIcWsT)} z9_X2cPCc(Q?%C>+g>xFlgBa?}U35ld!N?Pe!6C5^oCV1w2T$Jf;y&+r@xXM? zQ$+0W(}ZjnE7{@eR4#UaUBwQs5}mMv&7Ia@2TvC}TcSFqWiXH09BL4e2@=Nc3?}YZlwIg(d>FTm`P91EF_N zhQLZg$EKL{%Uf?jaA?Z}RJO-q?9kCDLGx;OaWm0d;org}tyjFsl=Ks%eT(q!;>|0E zY4OU55`|4LJ@3xoK$9JNGn%HX+{qk|>06XmIr?pZO@CNE zAR66R8O*3{kgy^y1d7mlTe{#0N|6!md(h?~Wo@!C~3_;-D81anWemGPQ_IeWUwVz%uk z7R&nek_f{=<_kzW2Dq@miqBp;7`_tv&#?H7F>z#!71=V84cek#%0AJCC^*FXgl$=oL(o|%dt-+woj?$I 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 M*_=$c+Pv}q0+>)q9{>OV diff --git a/substrate/bft/src/error.rs b/substrate/bft/src/error.rs index 38f560c2cc78d..d248b217ff556 100644 --- a/substrate/bft/src/error.rs +++ b/substrate/bft/src/error.rs @@ -47,6 +47,12 @@ error_chain! { description("Unable to dispatch agreement future"), display("Unable to dispatch agreement future: {:?}", e), } + + /// Some other error. + Other(e: Box<::std::error::Error + Send>) { + description("Other error") + display("Other error: {}", e.description()) + } } } diff --git a/substrate/bft/src/generic/mod.rs b/substrate/bft/src/generic/mod.rs index f5cd34b8b69fd..4ebe508e36b0b 100644 --- a/substrate/bft/src/generic/mod.rs +++ b/substrate/bft/src/generic/mod.rs @@ -74,6 +74,8 @@ pub struct LocalizedMessage { /// Provides necessary types for protocol messages, and functions necessary for a /// participant to evaluate and create those messages. pub trait Context { + /// Errors which can occur from the futures in this context. + type Error: From; /// Candidate proposed. type Candidate: Debug + Eq + Clone; /// Candidate digest. @@ -83,9 +85,11 @@ pub trait Context { /// Signature. type Signature: Debug + Eq + Clone; /// A future that resolves when a round timeout is concluded. - type RoundTimeout: Future; + type RoundTimeout: Future; /// A future that resolves when a proposal is ready. - type CreateProposal: Future; + type CreateProposal: Future; + /// A future that resolves when a proposal has been evaluated. + type EvaluateProposal: Future; /// Get the local authority ID. fn local_id(&self) -> Self::AuthorityId; @@ -103,8 +107,8 @@ pub trait Context { /// Get the proposer for a given round of consensus. fn round_proposer(&self, round: usize) -> Self::AuthorityId; - /// Whether the candidate is valid. - fn candidate_valid(&self, candidate: &Self::Candidate) -> bool; + /// Whether the proposal is valid. + fn proposal_valid(&self, proposal: &Self::Candidate) -> Self::EvaluateProposal; /// Create a round timeout. The context will determine the correct timeout /// length, and create a future that will resolve when the timeout is @@ -246,6 +250,7 @@ struct Strategy { nodes: usize, max_faulty: usize, fetching_proposal: Option, + evaluating_proposal: Option, round_timeout: future::Fuse, local_state: LocalState, locked: Option>, @@ -278,6 +283,7 @@ impl Strategy { current_accumulator, future_accumulator, fetching_proposal: None, + evaluating_proposal: None, local_state: LocalState::Start, locked: None, notable_candidates: HashMap::new(), @@ -324,15 +330,12 @@ impl Strategy { // rounds if necessary. // // only call within the context of a `Task`. - fn poll( + fn poll( &mut self, context: &C, sending: &mut Sending<::Communication> ) - -> Poll, E> - where - C::RoundTimeout: Future, - C::CreateProposal: Future, + -> Poll, C::Error> { let mut last_watermark = ( self.current_accumulator.round_number(), @@ -361,18 +364,15 @@ impl Strategy { // perform one round of polling: attempt to broadcast messages and change the state. // if the round or internal round-state changes, this should be called again. - fn poll_once( + fn poll_once( &mut self, context: &C, sending: &mut Sending<::Communication> ) - -> Poll, E> - where - C::RoundTimeout: Future, - C::CreateProposal: Future, + -> Poll, C::Error> { self.propose(context, sending)?; - self.prepare(context, sending); + self.prepare(context, sending)?; self.commit(context, sending); self.vote_advance(context, sending)?; @@ -423,7 +423,7 @@ impl Strategy { context: &C, sending: &mut Sending<::Communication> ) - -> Result<(), ::Error> + -> Result<(), C::Error> { if let LocalState::Start = self.local_state { let mut propose = false; @@ -486,11 +486,13 @@ impl Strategy { &mut self, context: &C, sending: &mut Sending<::Communication> - ) { + ) + -> Result<(), C::Error> + { // prepare only upon start or having proposed. match self.local_state { LocalState::Start | LocalState::Proposed => {}, - _ => return + _ => return Ok(()) }; let mut prepare_for = None; @@ -508,8 +510,17 @@ impl Strategy { // this is necessary to preserve the liveness property. prepare_for = Some(digest); } - None => if context.candidate_valid(candidate) { - prepare_for = Some(digest); + None => { + let res = self.evaluating_proposal + .get_or_insert_with(|| context.proposal_valid(candidate)) + .poll()?; + + if let Async::Ready(valid) = res { + self.evaluating_proposal = None; + if valid { + prepare_for = Some(digest); + } + } } } } @@ -523,6 +534,8 @@ impl Strategy { self.import_and_send_message(message, context, sending); self.local_state = LocalState::Prepared; } + + Ok(()) } fn commit( @@ -561,7 +574,7 @@ impl Strategy { context: &C, sending: &mut Sending<::Communication> ) - -> Result<(), ::Error> + -> Result<(), C::Error> { // we can vote for advancement under all circumstances unless we have already. if let LocalState::VoteAdvance = self.local_state { return Ok(()) } @@ -592,6 +605,7 @@ impl Strategy { let threshold = self.nodes - self.max_faulty; self.fetching_proposal = None; + self.evaluating_proposal = None; self.round_timeout = context.begin_round_timeout(round).fuse(); self.local_state = LocalState::Start; @@ -647,17 +661,14 @@ pub struct Agreement { strategy: Strategy, } -impl Future for Agreement +impl Future for Agreement where C: Context, - C::RoundTimeout: Future, - C::CreateProposal: Future, - I: Stream::Communication,Error=E>, - O: Sink::Communication,SinkError=E>, - E: From, + I: Stream::Communication,Error=C::Error>, + O: Sink::Communication,SinkError=C::Error>, { type Item = Committed; - type Error = E; + type Error = C::Error; fn poll(&mut self) -> Poll { // even if we've observed the conclusion, wait until all @@ -721,15 +732,12 @@ impl Future for Agreement /// conclude without having witnessed the conclusion. /// In general, this future should be pre-empted by the import of a justification /// set for this block height. -pub fn agree(context: C, nodes: usize, max_faulty: usize, input: I, output: O) +pub fn agree(context: C, nodes: usize, max_faulty: usize, input: I, output: O) -> Agreement where C: Context, - C::RoundTimeout: Future, - C::CreateProposal: Future, - I: Stream::Communication,Error=E>, - O: Sink::Communication,SinkError=E>, - E: From, + I: Stream::Communication,Error=C::Error>, + O: Sink::Communication,SinkError=C::Error>, { let strategy = Strategy::create(&context, nodes, max_faulty); Agreement { diff --git a/substrate/bft/src/generic/tests.rs b/substrate/bft/src/generic/tests.rs index 41d79dcca3782..c64907cbeef77 100644 --- a/substrate/bft/src/generic/tests.rs +++ b/substrate/bft/src/generic/tests.rs @@ -159,12 +159,14 @@ struct TestContext { } impl Context for TestContext { + type Error = Error; type Candidate = Candidate; type Digest = Digest; type AuthorityId = AuthorityId; type Signature = Signature; type RoundTimeout = Box>; type CreateProposal = FutureResult; + type EvaluateProposal = FutureResult; fn local_id(&self) -> AuthorityId { self.local_id.clone() @@ -200,8 +202,8 @@ impl Context for TestContext { self.shared.lock().unwrap().round_proposer(round) } - fn candidate_valid(&self, candidate: &Candidate) -> bool { - candidate.0 % 3 != 0 + fn proposal_valid(&self, proposal: &Candidate) -> FutureResult { + Ok(proposal.0 % 3 != 0).into_future() } fn begin_round_timeout(&self, round: usize) -> Self::RoundTimeout { diff --git a/substrate/bft/src/lib.rs b/substrate/bft/src/lib.rs index 1f81b23cac0e5..977245e26f4ee 100644 --- a/substrate/bft/src/lib.rs +++ b/substrate/bft/src/lib.rs @@ -100,22 +100,35 @@ pub type Committed = generic::Committed; /// Communication between BFT participants. pub type Communication = generic::Communication; +/// Proposer factory. Can be used to create a proposer instance. +pub trait ProposerFactory { + /// The proposer type this creates. + type Proposer: Proposer; + /// Error which can occur upon creation. + type Error: From; + + /// Initialize the proposal logic on top of a specific header. + // TODO: provide state context explicitly? + fn init(&self, parent_header: &Header, authorities: &[AuthorityId], sign_with: Arc) -> Result; +} + /// Logic for a proposer. /// /// This will encapsulate creation and evaluation of proposals at a specific /// block. -pub trait Proposer: Sized { - type CreateProposal: IntoFuture; - - /// Initialize the proposal logic on top of a specific header. - // TODO: provide state context explicitly? - fn init(parent_header: &Header, sign_with: Arc) -> Self; - - /// Create a proposal. - fn propose(&self) -> Self::CreateProposal; - /// Evaluate proposal. True means valid. +pub trait Proposer { + /// Error type which can occur when proposing or evaluating. + type Error: From + From + 'static; + /// Future that resolves to a created proposal. + type Create: IntoFuture; + /// Future that resolves when a proposal is evaluated. + type Evaluate: IntoFuture; + + /// Create a proposal. + fn propose(&self) -> Self::Create; + /// Evaluate proposal. True means valid. // TODO: change this to a future. - fn evaluate(&self, proposal: &Block) -> bool; + fn evaluate(&self, proposal: &Block) -> Self::Evaluate; } /// Block import trait. @@ -141,12 +154,14 @@ struct BftInstance

{ } impl generic::Context for BftInstance

{ + type Error = P::Error; type AuthorityId = AuthorityId; type Digest = HeaderHash; type Signature = LocalizedSignature; type Candidate = Block; - type RoundTimeout = Box + Send>; - type CreateProposal = ::Future; + type RoundTimeout = Box + Send>; + type CreateProposal = ::Future; + type EvaluateProposal = ::Future; fn local_id(&self) -> AuthorityId { self.key.public().0 @@ -181,8 +196,8 @@ impl generic::Context for BftInstance

{ self.authorities[(index as usize) % self.authorities.len()] } - fn candidate_valid(&self, proposal: &Block) -> bool { - self.proposer.evaluate(proposal) + fn proposal_valid(&self, proposal: &Block) -> Self::EvaluateProposal { + self.proposer.evaluate(proposal).into_future() } fn begin_round_timeout(&self, round: usize) -> Self::RoundTimeout { @@ -194,24 +209,25 @@ impl generic::Context for BftInstance

{ .saturating_mul(self.round_timeout_multiplier); Box::new(self.timer.sleep(Duration::from_secs(timeout)) - .map_err(|_| ErrorKind::FaultyTimer.into())) + .map_err(|_| Error::from(ErrorKind::FaultyTimer)) + .map_err(Into::into)) } } -type Input = stream::Empty; +type Input = stream::Empty; // "black hole" output sink. -struct Output; +struct Output(::std::marker::PhantomData); -impl Sink for Output { +impl Sink for Output { type SinkItem = Communication; - type SinkError = Error; + type SinkError = E; - fn start_send(&mut self, _item: Communication) -> ::futures::StartSend { + fn start_send(&mut self, _item: Communication) -> ::futures::StartSend { Ok(::futures::AsyncSink::Ready) } - fn poll_complete(&mut self) -> ::futures::Poll<(), Error> { + fn poll_complete(&mut self) -> ::futures::Poll<(), E> { Ok(Async::Ready(())) } } @@ -219,7 +235,7 @@ impl Sink for Output { /// A future that resolves either when canceled (witnessing a block from the network at same height) /// or when agreement completes. pub struct BftFuture { - inner: generic::Agreement, Input, Output>, + inner: generic::Agreement, Input, Output>, cancel: Arc, send_task: Option>, import: Arc, @@ -282,30 +298,38 @@ pub struct BftService { timer: Timer, round_timeout_multiplier: u64, key: Arc, // TODO: key changing over time. - _marker: ::std::marker::PhantomData

, + factory: P, } impl BftService where - P: Proposer, - E: Executor>, + P: ProposerFactory, + E: Executor>, I: BlockImport + Authorities, { /// Signal that a valid block with the given header has been imported. /// - /// This will begin the consensus process to build a block on top of it. - /// If the executor fails to run the future, an error will be returned. - pub fn build_upon(&self, header: &Header) -> Result<(), Error> { + /// If the local signing key is an authority, this will begin the consensus process to build a + /// block on top of it. If the executor fails to run the future, an error will be returned. + pub fn build_upon(&self, header: &Header) -> Result<(), P::Error> { let hash = header.hash(); - let mut _preempted_consensus = None; + let mut _preempted_consensus = None; // defers drop of live to the end. - let proposer = P::init(header, self.key.clone()); + let authorities = self.client.authorities(&BlockId::Hash(hash))?; // TODO: check key is one of the authorities. - let authorities = self.client.authorities(&BlockId::Hash(hash))?; let n = authorities.len(); let max_faulty = max_faulty_of(n); + let local_id = self.key.public().0; + + if !authorities.contains(&local_id) { + self.live_agreements.lock().remove(&header.parent_hash); + return Ok(()) + } + + let proposer = self.factory.init(header, &authorities, self.key.clone())?; + let bft_instance = BftInstance { proposer, parent_hash: hash, @@ -320,7 +344,7 @@ impl BftService n, max_faulty, stream::empty(), - Output, + Output(Default::default()), ); let cancel = Arc::new(AtomicBool::new(false)); @@ -331,7 +355,7 @@ impl BftService cancel: cancel.clone(), send_task: Some(tx), import: self.client.clone(), - }).map_err(|e| e.kind()).map_err(ErrorKind::Executor)?; + }).map_err(|e| e.kind()).map_err(ErrorKind::Executor).map_err(Error::from)?; { let mut live = self.live_agreements.lock(); @@ -455,29 +479,37 @@ mod tests { } } + struct DummyFactory; struct DummyProposer(block::Number); - impl Proposer for DummyProposer { - type CreateProposal = Result; + impl ProposerFactory for DummyFactory { + type Proposer = DummyProposer; + type Error = Error; - fn init(parent_header: &Header, _sign_with: Arc) -> Self { - DummyProposer(parent_header.number + 1) + fn init(&self, parent_header: &Header, _authorities: &[AuthorityId], _sign_with: Arc) -> Result { + Ok(DummyProposer(parent_header.number + 1)) } + } + + impl Proposer for DummyProposer { + type Error = Error; + type Create = Result; + type Evaluate = Result; - fn propose(&self) -> Result { + fn propose(&self) -> Result { Ok(Block { header: Header::from_block_number(self.0), transactions: Default::default() }) } - fn evaluate(&self, proposal: &Block) -> bool { - proposal.header.number == self.0 + fn evaluate(&self, proposal: &Block) -> Result { + Ok(proposal.header.number == self.0) } } fn make_service(client: FakeClient, handle: Handle) - -> BftService + -> BftService { BftService { client: Arc::new(client), @@ -486,7 +518,7 @@ mod tests { timer: Timer::default(), round_timeout_multiplier: 4, key: Arc::new(Keyring::One.into()), - _marker: Default::default(), + factory: DummyFactory } } diff --git a/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm b/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm index cbc81694c0999d1af58aaad064d227df8200e417..8e3669ced5d9d8addd1005917f64ed6e7e072f85 100644 GIT binary patch literal 13600 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 literal 14298 zcmds8dvx4Yoxk_~p7Xmi$uE7RX_K~h#zLpGG?Uj%l7h{z(zK<87Fix5l7w~&nY2kW znHF$YGAU6(Ud2`6_`tf0@(`Bl@xdZWJqJ)+g}Mi1S6PW3JnJ93T32+>`XKxH-aC_| z7!c3yo;|zabiVg~@9TTN?|bhLHZZoIGsgI~c)vA1KF-Jch5n@q>$mYsI1O1p2Z~dj zU(cu?>t`DB>-#TX<30X@WF|4n;q9!m-*wQs4*Y>rvcACA;qRjTy%AopZGv+#+{(PG|!gqXMikR*2 z1Kjf*i?cfK2Rz~K&+i{8UME<*lpibg?HMQy^bHQPM4hhY_a7)-*H_G!4i<-5O`vfH z28IWBv)X!H**!A6XRtIlGCZ)a&oqR!x?zq`>Jl2G2`4HS%&F5x7B1B7uaVfIr3O2n zxE9wH4}#b$^H&WH_Z=L*W^i~9t9L81SZZq-E{i2Nim%UP!j8hBl$8~>=uteuqLVBMe3DC)A{oY_-?7M1Oz|*?j_}9}W6FwHR9goXPKe6{ zY-R3#v1nz#O3-F}B{uP##Zbep87L4$0jSdyU@bATmQ`8n6+QKx7I-;3_Y|9-nR zw;HgK#Dt}zeo7yr1nh12W6$Y$S zq`+jQp#)HcNUIrZNLi$Uf~uwjXeZy0*3;o9G;Sen z+=5ElP(2Z4DlVwv7NB{L2w~5031vQ%a%TL^oE1VHtT{(W7{@@;q3LPz;)}h8c@PC9GC#RQzfMu3YztW86#ZJa}T75g0qCnrI67=596;aj=MOP6#xBHzkFMvf==00M`PXWCi^G9A1KhPfmxpHt7;L zko3SOCn|HzD9^ZY_-dtixSC1Wt|@?XKXQb84d>$I;Nwxc07_DBgh0hmJ*$xNs%1MX z)&X@3v?vXD1TX{mA;3=26U9NdMQ$ZdUM&fct9V+h(@{sch*`9Nr955o5&0bSOcy{k zCkZEA!)B{TcS-uD3cfqa9a3Io7bxz5?)oFa!2rZ%#NUCGle`x1f9# zBWX!+*@Jjfo)TLUOoDipWjzEouyahU*VN86U(VG2l`I-eJIH2E5aN%MEy!0aqB%2kI?k1zH-R0EF)*m*%SY8g?n!szJdLJVNc7 zMPZjQLT%M3Dj{_AqrXoxD7O++bR7}Ln_GwZ$EtOV6#Y2?QIbFyaa|&jq2S`AT+;D4 zg`hnuuH39%07`PTq06jBQ7GOau1+Qh^e1be;_<4A*Qi7#MK~(Lw?M8e#KWGY=0$z#Goh^FO1vYdHu#nPFpRh^ZCwa{{Jb}*O;6rPn#?k7e z)Gh%?mSWM7XV^9*W57atYa?DzvXJtl>&e{Fb|4jtUSfBl8#?MdHEF`SAeF($#FrO-W=jDY|>d@J~Bmc)7~Y36**T6!5hL=TFc zJ3D3^nFfu?6uKFUb2(=&jh{=ij8-c)l#E4dqjLEP!{3yQ_-M*+gs+y7ID`rk22Bt7 zfT|78LXw9caaa)iVqBXv%uhk%YRE^*$RCATxTwdhU2 z&u&h@ev`1Tq!V|D6+Y<~kD6#kun(&=fOoazG}ozGWp%T45hoS`w+^mT$+U>qF_yp~ zrANW$nQrFLZ_J>R)9Q3H9f8oT2m!HE8M$roMKFjf@j{Y|9;-(|6gwesu$^2v z><1#jM5H`gK4iR*4+H}NL*;GFb(+95B&@hiYsX1xp(=-x6tp=+dkC%@4W!DDep(wU zc>yTTG}{g}sa0^xX)vk=V~rh0twNAkcv)5l^WT zL;R{uCbZ>XGYbwyCwY-(x6#u=Pl29g>dDb_V=_TxrQtJ+DuMp-L!&A{e`fk@OhUf8 z9fs_o-L1A8EW#0sHjbh*jj5=)t0honu}3TpDlCrA$70vaRilDg7L!+*)nBdU5XP)M zRpqM<39@^Q5fK};5mjYApQ=Dkt`;JZh^13L*&jS>l4*T#cEa*!^+9NTm?4%rLm8x2 zaIl+(;RlqM#E{Lp?8A=m#`*OmNsvXZASK|sD!WMwB&BtnR)!>JJyW%$v{UENHSmnl z3g}Dp3cL&^Vl^vcObDDq|M1TxlpB-L&&VVBWTY=Lcq%GPPg~oe-8`BKqczd-y66}V zzYC+MM7Rd|2bB2VX1o}OV})4|=a1J%$>_+E=p#Hj))4)aI`cTfCy$Q&Zc70_avRvi zqaWW~DnviJb=`K9KY1U@cQ;V+hd)L!L8Vuxr`c$9_sL)jD))c>U?EBq`tR;QDcC+r ze~84yR#%c5!*>*~B3JH>J+!HezY}Z{J|DV_Hp+@(o79c>Cb^2;oAiij5FSsmD*Fg3 zfpZb|fJYW*&`uoAhXxbr)Q0m2yqIYu??B3=yhaT2B2h{*fN>=CghCP*Wuh05 zFQZe_=%J{VVoR{CQ6cJ?83ecu4IxT?Tcv~}{DKpN`&AXERkD`OLaX&i;*%?H4Y-_1 z8`Mxrr`J%$5PpeL3B*g%v-v`#00(FP(*YBXQ-@3m9SEe7$Zknci^zw z8AIL;hibBSxIZ6_0E;MOa`adP2AD=9a+JV@iqiBZ9npIe?Q31*a@Er$56n~=y7ECU?8~XYPF~oNfq=u0wn8ou;Q8Mzmd`r_-G{b(KH{0&qks~ z%!PNAG=CgQLHndZUS$MyLc4yDhV#Yj;FB~M6RjLg;w(Y)DO=C#mWp(H_Qtc4abZSq z#g5z(rddz|(@(O|BC;OLRjh~r#}J52i6ID&2EgW#Dr_B~Ca}S#*zOU~QQkHT)xN7ZISlZbq!F z1bYg~F$(rBg1s}Ry&CKTIDi;B>0nR1b`b1+bR-eY1bgyo0o+2Y8tf@Qa1iVf2gt;f zQ-ohK!QQO~dl&6+rn()$p8OC6d);oZu>x>!9PH`ZfbuE&&+38Jc=HE*y-GlgspeGr z7(w9}d2}Tl^Haky@}2p@adoQK3CB3l>FWnZ9#L5lEI34T5g}FnH?piW{DWusuTv)_gre(8)LJp%h06w4g*(VMUZ^ z?S8%R!pDMo8siRN10aR+TsnY~qoL?SL8vkVIEiB=jNZ{k4c7z~X>rlAK` zvkMSMeUT&2CIEU+5vLR~kB zX7reV01)Iwkf}j5Hb{bxqU#_^-NFKr)YMF_s(VGa9O_ZQCOYes?VJ^&AI3Krpv-J( z04$asBJ%({ z;ZCZKtqQFkldGi1}I%pgxZrlGi)a37D7IoOa6v*?jp9pPijp`l`DBCdRtFwiRDmbo$vk!NO@kaI^u<2NDyf=N>f z4=RvOiHC6QtK=l!k>}Y)s2BWi-o~-lZX@w#w_!&9!8YimHoFZY0kFUv^H_A$tcSxc zu?>$N2&BX|L2NS~t|}Aa95lqp#Dl>a4S{3gu-qhv5CAH=LW4+aY<;k<+$KZ0wx;l0 zqIHa(O(-uT;}4=VF;iz1^g}wojxa{k=u`qf#33AVb@)O13G+hC=_3KHA>k?*@MAU^ zaP*)~F*IhjSmb;r6Tt;L;)o3j>gYrU;(4HFs}x5GZd!*j{*~F z3^^+W%&M8OP@iun$f4ZGPhAt9klvoCl5OgkA`@O?SsKcD9CVe)FsX% zXaRuBh*Tg9k2Z8-z|*5(^f`q_B1j@uV(lu@d<$SHatP$25Vo@7EOZ8W&;w_Ur5`bM z9R#`6I$m@vg?AeaKuLd>Kz&dJbHaKi$MCW|`&~;_X!!CV1l0gUHGPLbRL@*Fa0TZI zVUY+4UlHvSnwKO(3Lj85ycL6F_@0~vfdY?jCBUhhUL!LwlJpC+K(}ds6!qrF46e(( zFbgdmdR;bR(+#+apj=l0O9W6lH%De@tH?~u$V_+mcXhuzV-+sv3OHNvGZ}{uF*nCLWdR0h z74mergZMVMpFq)N9Tb30oET{mXG(>^e00XNI)BC`laiF*>sxy$9$ixgXpKR4af-o} z51pS*!Qcu_C(o4gR35*kt-eENwgrp1f;Tnz-MWGTAAH$O(Zg=QxLOCLQDx(7lqZ@iOkHUZ5)ksbY z1A{OP2oBIY`V?7gmD5!SmYVlzTN@y`WNSzv+|dCACkQZ(9;@lph{tL;bDY#0kuB)Q zYP|b!rGqB&Rb^Aab#VcO_(@|)eq{L?;o#xa0|#-E)kP$A^t6qC`e7THEgrTpA6SYC;A_BiHW6 zr-%7Hs(9~sW~t3w0(4(4$U#bn*S!7F!<6!Xm^ zdcgYP7{g~{vH{bvwfNVAf4D?oJ2_*E0qN0A%DEpQ;)^)x3=SVSSi&@`DsUy>3jD+6|2(ZJG}yZJ79s6-=Zhfah>#XI!0=|3ra$v+E)HCS4@!4y zDqj}zn>>@rv}9T{ZJG8=M<$!eWjZrmEt!^1gR_?P%+0@95~rcH}xbJG!!&Y)iH^+m>z5c4V{JT(&dYmCNK>a;>?xTzjq~m(AsJ zow=^gOlM1HYiC<$duK;ywlmk++1b?v61%W`7pCsQur8n=AzOwAu`LCDMvc*T)%$( zyP%+sY&hV+INmF+LlHtu#dyglNa3X{Ll>U8vQmEe_>+{FRr8$TV zZ!{0A!=K&K=ddO04y=8`mkm=Wl3s+^%BgzsqA$}`v6Rv4bo4p~h~exwAO_6Y_+*Td zE}-a7>EHkTjT1d2r#GSphpAweIbWM$&WT{w0LDti83Q;ONO|RTrM$xD%K2**k^m`B zSA%0}c%%e}z5D8cqPlYA;P9S-;&mI;V2PRrhsOr@CTDhp|Ur7e}83j90E8VJYP1VX&RUXBG;j8j$??_S0EKh>L{;n!rjr~oAGR#1A z$#w1mOb{K>hk&iFykvIeP}b`eD~uQ`4HQdbYM_L9PJ}X{`2>}zpr%6kcE&Bo@m4PvRa%v;V^)+=kRvre2T*Yk|kVzr8U`F-Mk z@qqnV|2N{d&hPD4t?3xFu}&Tn4_$lR&A0wl=8{YMZ@l@IBTdWysit=Oj`htOFMn6x z7k@l?>uq;@@cz#|`jsc2diq;GeEBDK-GVhO?YZs^XKy?AU6Z$==?jm3<*9Ey^X$t% zVRoWMw{~yX+`H}EEB53k@A%j!o_^+8J5jf0^R`P+zx9s$(f!G%UwZi`CxP9(ZBM>D zG5Pt&zV`U@FP!|v4ex#5O*h|i*U@`EbKm_BKKixCpZvx%&wl?0Tkrbncb>vH%OEtAChew*0_r2%(zj^pK z^-ET)?A>zy&Py-5{EF+xzxd>H&%b!`7r!cw-CjEQkvpGm?mK;b^Suv$`SEW&`@%~f z?YZ-==FIIYryqWG`kCqTcV6~R&#w(vH~;MC!y~z~H*VT|hMeU;dA^($Ellmux5iZ)Ul$z{F1fQ=XS~p>~`C;xaWGI+*P~4 zyT})IQxLO!%d>=K;T7Mpq|0j-JKa{D=Q^Q(u_wI6iCy;FtTQcc*SWRvZhQG@33rFu zZx>E0f73a9%v$Ci{=M}MZ?RkwTNGauFSvob%)QiK>+}Ze?6}RX7P-z|=1QylAevT2 zJM1&9l7E&}Yn_$z{WILd({&AgbKRMi3X`?vTkOMkE|rVlf0&7n`_zQTY+S{K&=*J8(PwUO(=Z{YQ9&RXXjyXK7Y z1MVt&m7Vt6B`+VD$i?adzkFAhwcC$n>Yb$3=ocAx3kQ% zNv+#xkn`LuY*CSTk`L7EP|MJs`iIo>j+;WpWCXb%wa{D5uv0Y5m zth4vTFAfsc<@VWK%M z|65U`Y&Zu0OG(uf;HgQ~vBp0!zE3sI8w_8;Dj`x)nmq$}>T%~t)4XS-V@>m(g8maM C);o&; diff --git a/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.wasm b/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.wasm index ab23e9b4f7a2a110b637faa5c07e1bf18823a350..c55856204bcacaccb24f50297dfa6fe8387b362c 100644 GIT binary patch literal 13725 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 diff --git a/substrate/primitives/src/block.rs b/substrate/primitives/src/block.rs index 36640873ba3bf..f41f0ec8480f2 100644 --- a/substrate/primitives/src/block.rs +++ b/substrate/primitives/src/block.rs @@ -179,7 +179,7 @@ impl Slicable for Header { } /// Block indentification. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, PartialEq, Eq)] #[cfg_attr(feature = "std", derive(Debug))] pub enum Id { /// Identify by block header hash. diff --git a/substrate/runtime-support/src/storage.rs b/substrate/runtime-support/src/storage.rs index 7dbfd8013b35e..0960ecb0ba284 100644 --- a/substrate/runtime-support/src/storage.rs +++ b/substrate/runtime-support/src/storage.rs @@ -66,16 +66,11 @@ pub fn get_or_else T>(key: &[u8], default_va get(key).unwrap_or_else(default_value) } -/// Please `value` in storage under `key`. +/// Put `value` in storage under `key`. pub fn put(key: &[u8], value: &T) { value.using_encoded(|slice| runtime_io::set_storage(&twox_128(key)[..], slice)); } -/// Please `value` in storage under `key`. -pub fn place(key: &[u8], value: T) { - value.using_encoded(|slice| runtime_io::set_storage(&twox_128(key)[..], slice)); -} - /// Remove `key` from storage, returning its value if it had an explicit entry or `None` otherwise. pub fn take(key: &[u8]) -> Option { let r = get(key); @@ -199,16 +194,11 @@ pub mod unhashed { get(key).unwrap_or_else(default_value) } - /// Please `value` in storage under `key`. + /// Put `value` in storage under `key`. pub fn put(key: &[u8], value: &T) { value.using_encoded(|slice| runtime_io::set_storage(key, slice)); } - /// Please `value` in storage under `key`. - pub fn place(key: &[u8], value: T) { - value.using_encoded(|slice| runtime_io::set_storage(key, slice)); - } - /// Remove `key` from storage, returning its value if it had an explicit entry or `None` otherwise. pub fn take(key: &[u8]) -> Option { let r = get(key); diff --git a/substrate/state-machine/src/lib.rs b/substrate/state-machine/src/lib.rs index 363f29383039a..3da401d0dd73e 100644 --- a/substrate/state-machine/src/lib.rs +++ b/substrate/state-machine/src/lib.rs @@ -47,7 +47,7 @@ pub use backend::Backend; /// /// A transaction shares all prospective changes within an inner overlay /// that can be cleared. -#[derive(Default)] +#[derive(Debug, Default, Clone)] pub struct OverlayedChanges { prospective: HashMap, Option>>, committed: HashMap, Option>>, diff --git a/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index 5007dd36a299a2003b715f43d1551870e737ebf6..e60f92cc39843093812044a04992155f8f3c5f44 100644 GIT binary patch literal 33085 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 literal 32296 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