From 1e6cad908e187406854b6a722cf39b74dca9fbc1 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 --- 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 18 files changed, 1166 insertions(+), 208 deletions(-) create mode 100644 polkadot/consensus/src/error.rs diff --git a/polkadot/api/Cargo.toml b/polkadot/api/Cargo.toml index de3e082548..5e78af8c12 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 efe0f45220..0ffb55233a 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 b520b269fc..14b430ebba 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 aeda287f80..298d647870 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 0000000000..648072ef0b --- /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 f3e62ba1d5..ef00318209 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 f7ded05025..a1f472a859 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 987744baa6..b2d90a19c0 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 14b8e78d30..d65291476a 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 a39904f44e..34a8b34733 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 6279a2d0aa..d0b5ab9557 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 { } } +/// 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 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 { - /// Set the timestamp. - TimestampSet(u64), + /// 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 3f9ff71473..b8371a5da8 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 d7651c575a..5b311ce1f9 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 99aebd5990..4059a16551 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 7d5e8835ed..b9d28cf18e 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,9 +260,37 @@ 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] + #[should_panic] + fn fails_if_first_not_timestamp_set() { + 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, || { + internal::execute_transaction(tx, Header::from_block_number(1)); + }); + } + #[test] fn staking_balance_transfer_dispatch_works() { let one = Keyring::One.to_raw_public(); @@ -261,7 +310,9 @@ mod tests { }; with_externalities(&mut t, || { - internal::execute_transaction(tx, Header::from_block_number(1)); + 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 0b96f39bd4..8252f37225 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^ 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%0AJCC^*FXgl$=oL(o|%dt-+woj?$I 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 M*_=$c+Pv}q0+>)q9{>OV