From 52093c4b7a124293c6d865b493cee578833ccbfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Tue, 23 Oct 2018 08:21:05 +0200 Subject: [PATCH 01/16] Runtime version pub sub. (#948) --- substrate/core/rpc/src/chain/mod.rs | 61 ++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/substrate/core/rpc/src/chain/mod.rs b/substrate/core/rpc/src/chain/mod.rs index 6c1724a787..f56ec59c1a 100644 --- a/substrate/core/rpc/src/chain/mod.rs +++ b/substrate/core/rpc/src/chain/mod.rs @@ -26,7 +26,7 @@ use rpc::futures::{stream, Future, Sink, Stream}; use runtime_primitives::generic::{BlockId, SignedBlock}; use runtime_primitives::traits::{Block as BlockT, Header, NumberFor}; use runtime_version::RuntimeVersion; -use primitives::{Blake2Hasher}; +use primitives::{Blake2Hasher, storage}; use subscriptions::Subscriptions; @@ -68,6 +68,16 @@ build_rpc_trait! { #[rpc(name = "chain_unsubscribeNewHead", alias = ["unsubscribe_newHead", ])] fn unsubscribe_new_head(&self, SubscriptionId) -> RpcResult; } + + #[pubsub(name = "chain_runtimeVersion")] { + /// New runtime version subscription + #[rpc(name = "chain_subscribeRuntimeVersion")] + fn subscribe_runtime_version(&self, Self::Metadata, pubsub::Subscriber); + + /// Unsubscribe from runtime version subscription + #[rpc(name = "chain_unsubscribeRuntimeVersion")] + fn unsubscribe_runtime_version(&self, SubscriptionId) -> RpcResult; + } } } @@ -163,4 +173,53 @@ impl ChainApi, Block:: fn unsubscribe_new_head(&self, id: SubscriptionId) -> RpcResult { Ok(self.subscriptions.cancel(id)) } + + + fn subscribe_runtime_version(&self, _meta: Self::Metadata, subscriber: pubsub::Subscriber) { + let stream = match self.client.storage_changes_notification_stream(Some(&[storage::StorageKey(storage::well_known_keys::CODE.to_vec())])) { + Ok(stream) => stream, + Err(err) => { + let _ = subscriber.reject(error::Error::from(err).into()); + return; + } + }; + + self.subscriptions.add(subscriber, |sink| { + let version = self.runtime_version(None.into()) + .map_err(Into::into); + + let client = self.client.clone(); + let mut previous_version = version.clone(); + + let stream = stream + .map_err(|e| warn!("Error creating storage notification stream: {:?}", e)) + .filter_map(move |_| { + let version = client.info().and_then(|info| { + client.runtime_version_at(&BlockId::hash(info.chain.best_hash)) + }) + .map_err(error::Error::from) + .map_err(Into::into); + if previous_version != version { + previous_version = version.clone(); + Some(version) + } else { + None + } + }); + + sink + .sink_map_err(|e| warn!("Error sending notifications: {:?}", e)) + .send_all( + stream::iter_result(vec![Ok(version)]) + .chain(stream) + ) + // we ignore the resulting Stream (if the first stream is over we are unsubscribed) + .map(|_| ()) + }); + } + + + fn unsubscribe_runtime_version(&self, id: SubscriptionId) -> RpcResult { + Ok(self.subscriptions.cancel(id)) + } } From 1ba73e0e88ee3bd4d1732821772c0e13e724878d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 23 Oct 2018 09:58:15 +0200 Subject: [PATCH 02/16] Make `decl_module!` implement `OnFinalise` (#947) --- .../release/node_runtime.compact.wasm | Bin 721937 -> 607894 bytes substrate/srml/assets/src/lib.rs | 4 - substrate/srml/balances/src/lib.rs | 7 +- substrate/srml/consensus/src/lib.rs | 22 +++-- substrate/srml/consensus/src/tests.rs | 3 +- substrate/srml/contract/src/lib.rs | 12 +-- substrate/srml/council/src/motions.rs | 7 +- substrate/srml/council/src/seats.rs | 17 ++-- substrate/srml/council/src/voting.rs | 17 ++-- substrate/srml/democracy/src/lib.rs | 15 ++-- substrate/srml/example/src/lib.rs | 21 +++-- substrate/srml/session/src/lib.rs | 11 +-- substrate/srml/staking/src/lib.rs | 9 +-- substrate/srml/support/src/dispatch.rs | 75 +++++++++++++++++- substrate/srml/support/src/event.rs | 10 +++ substrate/srml/support/src/metadata.rs | 6 ++ .../srml/support/src/storage/generator.rs | 8 +- substrate/srml/timestamp/src/lib.rs | 11 +-- substrate/srml/treasury/src/lib.rs | 20 +++-- 19 files changed, 158 insertions(+), 117 deletions(-) diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 392b360796baf5f93c2a1b99150e48df37ed35c3..c50aa4a3eb6e688722fc322e3653e210c1343fc7 100644 GIT binary patch literal 607894 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≺jYge@!#QY1$P8}FOAgo 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 z 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]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�DLEI6->QuSP^qbdSiW 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%0A2HLx5Hs~np=3nXU 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 z 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 IA!Tm=4?p0qa{vGU diff --git a/substrate/srml/assets/src/lib.rs b/substrate/srml/assets/src/lib.rs index 61b36dc3c1..d92bf44495 100644 --- a/substrate/srml/assets/src/lib.rs +++ b/substrate/srml/assets/src/lib.rs @@ -52,7 +52,6 @@ extern crate sr_primitives as primitives; // depend on it being around. extern crate srml_system as system; -use primitives::traits::OnFinalise; use runtime_support::{StorageValue, StorageMap, dispatch::Result, Parameter}; use primitives::traits::{Member, SimpleArithmetic, Zero}; use system::ensure_signed; @@ -161,9 +160,6 @@ impl Module { } } -// This trait expresses what should happen when the block is finalised. -impl OnFinalise for Module {} - #[cfg(test)] mod tests { use super::*; diff --git a/substrate/srml/balances/src/lib.rs b/substrate/srml/balances/src/lib.rs index 50c9b27d76..f06990626e 100644 --- a/substrate/srml/balances/src/lib.rs +++ b/substrate/srml/balances/src/lib.rs @@ -44,7 +44,7 @@ use rstd::{cmp, result}; use codec::{Encode, Decode, Codec, Input, Output, HasCompact}; use runtime_support::{StorageValue, StorageMap, Parameter}; use runtime_support::dispatch::Result; -use primitives::traits::{Zero, One, SimpleArithmetic, OnFinalise, MakePayment, +use primitives::traits::{Zero, One, SimpleArithmetic, MakePayment, As, Lookup, Member, CheckedAdd, CheckedSub, CurrentHeight, BlockNumberToHash}; use address::Address as RawAddress; use system::ensure_signed; @@ -652,11 +652,6 @@ impl Module { } } -impl OnFinalise for Module { - fn on_finalise(_n: T::BlockNumber) { - } -} - pub struct ChainContext(::rstd::marker::PhantomData); impl Default for ChainContext { fn default() -> Self { diff --git a/substrate/srml/consensus/src/lib.rs b/substrate/srml/consensus/src/lib.rs index 835d39a44c..ba72df18f5 100644 --- a/substrate/srml/consensus/src/lib.rs +++ b/substrate/srml/consensus/src/lib.rs @@ -48,7 +48,7 @@ use runtime_support::storage::StorageValue; use runtime_support::storage::unhashed::StorageVec; use primitives::RuntimeString; use primitives::traits::{ - MaybeSerializeDebug, OnFinalise, Member, ProvideInherent, Block as BlockT + MaybeSerializeDebug, Member, ProvideInherent, Block as BlockT }; use substrate_primitives::storage::well_known_keys; use system::{ensure_signed, ensure_inherent}; @@ -148,6 +148,14 @@ decl_module! { fn remark(origin, remark: Vec) -> Result; fn set_code(new: Vec) -> Result; fn set_storage(items: Vec) -> Result; + fn on_finalise() { + if let Some(original_authorities) = >::take() { + let current_authorities = AuthorityStorageVec::::items(); + if current_authorities != original_authorities { + Self::deposit_log(RawLog::AuthoritiesChange(current_authorities)); + } + } + } } } @@ -267,15 +275,3 @@ impl ProvideInherent for Module { ) } } - -/// Finalization hook for the consensus module. -impl OnFinalise for Module { - fn on_finalise(_n: T::BlockNumber) { - if let Some(original_authorities) = >::take() { - let current_authorities = AuthorityStorageVec::::items(); - if current_authorities != original_authorities { - Self::deposit_log(RawLog::AuthoritiesChange(current_authorities)); - } - } - } -} diff --git a/substrate/srml/consensus/src/tests.rs b/substrate/srml/consensus/src/tests.rs index e27f617115..b823367c15 100644 --- a/substrate/srml/consensus/src/tests.rs +++ b/substrate/srml/consensus/src/tests.rs @@ -18,8 +18,7 @@ #![cfg(test)] -use super::*; -use primitives::{generic, testing}; +use primitives::{generic, testing, traits::OnFinalise}; use runtime_io::with_externalities; use substrate_primitives::H256; use mock::{Consensus, System, new_test_ext}; diff --git a/substrate/srml/contract/src/lib.rs b/substrate/srml/contract/src/lib.rs index 31a7d4ed22..d57a65bc1f 100644 --- a/substrate/srml/contract/src/lib.rs +++ b/substrate/srml/contract/src/lib.rs @@ -103,7 +103,7 @@ use double_map::StorageDoubleMap; use rstd::prelude::*; use rstd::marker::PhantomData; use codec::{Codec, HasCompact}; -use runtime_primitives::traits::{Hash, As, SimpleArithmetic, OnFinalise}; +use runtime_primitives::traits::{Hash, As, SimpleArithmetic}; use runtime_support::dispatch::Result; use runtime_support::{Parameter, StorageMap, StorageValue}; use system::ensure_signed; @@ -167,6 +167,9 @@ decl_module! { init_code: Vec, data: Vec ) -> Result; + fn on_finalise() { + >::kill(); + } } } @@ -326,10 +329,3 @@ impl balances::OnFreeBalanceZero for Module { >::remove_prefix(who.clone()); } } - -/// Finalization hook for the smart-contract module. -impl OnFinalise for Module { - fn on_finalise(_n: T::BlockNumber) { - >::kill(); - } -} diff --git a/substrate/srml/council/src/motions.rs b/substrate/srml/council/src/motions.rs index ab6ea5f4ef..a260eec60e 100644 --- a/substrate/srml/council/src/motions.rs +++ b/substrate/srml/council/src/motions.rs @@ -20,7 +20,7 @@ use rstd::prelude::*; use rstd::result; use codec::Compact; use substrate_primitives::u32_trait::Value as U32; -use primitives::traits::{Hash, EnsureOrigin, MaybeSerializeDebug, OnFinalise}; +use primitives::traits::{Hash, EnsureOrigin, MaybeSerializeDebug}; use srml_support::dispatch::{Result, Dispatchable, Parameter}; use srml_support::{StorageValue, StorageMap}; use super::{Trait as CouncilTrait, Module as Council}; @@ -194,11 +194,6 @@ impl Module { } } -impl OnFinalise for Module { - fn on_finalise(_n: T::BlockNumber) { - } -} - /// Ensure that the origin `o` represents at least `n` council members. Returns /// `Ok` or an `Err` otherwise. pub fn ensure_council_members(o: OuterOrigin, n: u32) -> result::Result diff --git a/substrate/srml/council/src/seats.rs b/substrate/srml/council/src/seats.rs index 42c3858efb..24d06ecf6a 100644 --- a/substrate/srml/council/src/seats.rs +++ b/substrate/srml/council/src/seats.rs @@ -18,7 +18,7 @@ use rstd::prelude::*; use codec::{Compact, HasCompact}; -use primitives::traits::{Zero, One, As, OnFinalise}; +use primitives::traits::{Zero, One, As}; use runtime_io::print; use srml_support::{StorageValue, StorageMap, dispatch::Result}; use democracy; @@ -97,6 +97,12 @@ decl_module! { fn remove_member(who: Address) -> Result; fn set_presentation_duration(count: ::Type) -> Result; fn set_term_duration(count: ::Type) -> Result; + fn on_finalise(n: T::BlockNumber) { + if let Err(e) = Self::end_block(n) { + print("Guru meditation"); + print(e); + } + } } } @@ -560,15 +566,6 @@ impl Module { } } -impl OnFinalise for Module { - fn on_finalise(n: T::BlockNumber) { - if let Err(e) = Self::end_block(n) { - print("Guru meditation"); - print(e); - } - } -} - #[cfg(test)] mod tests { use super::*; diff --git a/substrate/srml/council/src/voting.rs b/substrate/srml/council/src/voting.rs index 094066327c..86c2c40c2a 100644 --- a/substrate/srml/council/src/voting.rs +++ b/substrate/srml/council/src/voting.rs @@ -19,7 +19,7 @@ use rstd::prelude::*; use rstd::borrow::Borrow; use codec::HasCompact; -use primitives::traits::{OnFinalise, Hash, As}; +use primitives::traits::{Hash, As}; use runtime_io::print; use srml_support::dispatch::Result; use srml_support::{StorageValue, StorageMap, IsSubType}; @@ -39,6 +39,12 @@ decl_module! { fn set_cooloff_period(blocks: ::Type) -> Result; fn set_voting_period(blocks: ::Type) -> Result; + fn on_finalise(n: T::BlockNumber) { + if let Err(e) = Self::end_block(n) { + print("Guru meditation"); + print(e); + } + } } } @@ -227,15 +233,6 @@ impl Module { } } -impl OnFinalise for Module { - fn on_finalise(n: T::BlockNumber) { - if let Err(e) = Self::end_block(n) { - print("Guru meditation"); - print(e); - } - } -} - #[cfg(test)] mod tests { use super::*; diff --git a/substrate/srml/democracy/src/lib.rs b/substrate/srml/democracy/src/lib.rs index f5c3153251..0d54dbf441 100644 --- a/substrate/srml/democracy/src/lib.rs +++ b/substrate/srml/democracy/src/lib.rs @@ -41,7 +41,7 @@ extern crate srml_system as system; use rstd::prelude::*; use rstd::result; use codec::{HasCompact, Compact}; -use primitives::traits::{Zero, OnFinalise, As, MaybeSerializeDebug}; +use primitives::traits::{Zero, As, MaybeSerializeDebug}; use srml_support::{StorageValue, StorageMap, Parameter, Dispatchable, IsSubType}; use srml_support::dispatch::Result; use system::ensure_signed; @@ -68,6 +68,11 @@ decl_module! { fn start_referendum(proposal: Box, vote_threshold: VoteThreshold) -> Result; fn cancel_referendum(ref_index: Compact) -> Result; + fn on_finalise(n: T::BlockNumber) { + if let Err(e) = Self::end_block(n) { + runtime_io::print(e); + } + } } } @@ -308,14 +313,6 @@ impl Module { } } -impl OnFinalise for Module { - fn on_finalise(n: T::BlockNumber) { - if let Err(e) = Self::end_block(n) { - runtime_io::print(e); - } - } -} - #[cfg(test)] mod tests { use super::*; diff --git a/substrate/srml/example/src/lib.rs b/substrate/srml/example/src/lib.rs index f60168d37b..587c4af258 100644 --- a/substrate/srml/example/src/lib.rs +++ b/substrate/srml/example/src/lib.rs @@ -57,7 +57,6 @@ extern crate srml_system as system; // might find it useful). extern crate srml_balances as balances; -use sr_primitives::traits::OnFinalise; use support::{StorageValue, dispatch::Result}; use system::ensure_signed; @@ -111,6 +110,13 @@ decl_module! { /// A privileged call; in this case it resets our dummy value to something new. fn set_dummy(new_dummy: T::Balance) -> Result; + + // The signature could also look like: `fn on_finalise()` + fn on_finalise(_n: T::BlockNumber) { + // Anything that needs to be done at the end of the block. + // We just kill our dummy storage item. + >::kill(); + } } } @@ -266,15 +272,6 @@ impl Module { } } -// This trait expresses what should happen when the block is finalised. -impl OnFinalise for Module { - fn on_finalise(_: T::BlockNumber) { - // Anything that needs to be done at the end of the block. - // We just kill our dummy storage item. - >::kill(); - } -} - #[cfg(test)] mod tests { use super::*; @@ -283,7 +280,9 @@ mod tests { use substrate_primitives::{H256, Blake2Hasher}; // The testing primitives are very useful for avoiding having to work with signatures // or public keys. `u64` is used as the `AccountId` and no `Signature`s are requried. - use sr_primitives::{BuildStorage, traits::{BlakeTwo256}, testing::{Digest, DigestItem, Header}}; + use sr_primitives::{ + BuildStorage, traits::{BlakeTwo256, OnFinalise}, testing::{Digest, DigestItem, Header} + }; impl_outer_origin! { pub enum Origin for Test {} diff --git a/substrate/srml/session/src/lib.rs b/substrate/srml/session/src/lib.rs index 087e37ecfe..44d8922723 100644 --- a/substrate/srml/session/src/lib.rs +++ b/substrate/srml/session/src/lib.rs @@ -42,7 +42,7 @@ extern crate srml_system as system; extern crate srml_timestamp as timestamp; use rstd::prelude::*; -use primitives::traits::{As, Zero, One, OnFinalise, Convert}; +use primitives::traits::{As, Zero, One, Convert}; use codec::HasCompact; use runtime_support::{StorageValue, StorageMap}; use runtime_support::dispatch::Result; @@ -71,6 +71,9 @@ decl_module! { fn set_length(new: ::Type) -> Result; fn force_new_session(apply_rewards: bool) -> Result; + fn on_finalise(n: T::BlockNumber) { + Self::check_rotate_session(n); + } } } @@ -228,12 +231,6 @@ impl Module { } } -impl OnFinalise for Module { - fn on_finalise(n: T::BlockNumber) { - Self::check_rotate_session(n); - } -} - #[cfg(test)] mod tests { use super::*; diff --git a/substrate/srml/staking/src/lib.rs b/substrate/srml/staking/src/lib.rs index 6b47e01c33..370c17ddb5 100644 --- a/substrate/srml/staking/src/lib.rs +++ b/substrate/srml/staking/src/lib.rs @@ -55,7 +55,7 @@ use codec::{HasCompact, Compact}; use runtime_support::{Parameter, StorageValue, StorageMap}; use runtime_support::dispatch::Result; use session::OnSessionChange; -use primitives::{Perbill, traits::{Zero, One, Bounded, OnFinalise, As}}; +use primitives::{Perbill, traits::{Zero, One, Bounded, As}}; use balances::{address::Address, OnDilution}; use system::ensure_signed; @@ -76,7 +76,7 @@ pub enum LockStatus { /// Preference of what happens on a slash event. #[derive(PartialEq, Eq, Clone, Encode, Decode)] #[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] -pub struct ValidatorPrefs { // TODO: @bkchr shouldn't need this Copy but derive(Encode) breaks otherwise +pub struct ValidatorPrefs { // TODO: @bkchr shouldn't need this Copy but derive(Encode) breaks otherwise /// Validator should ensure this many more slashes than is necessary before being unstaked. #[codec(compact)] pub unstake_threshold: u32, @@ -525,11 +525,6 @@ impl Module { } } -impl OnFinalise for Module { - fn on_finalise(_n: T::BlockNumber) { - } -} - impl OnSessionChange for Module { fn on_session_change(elapsed: T::Moment, should_reward: bool) { Self::new_session(elapsed, should_reward); diff --git a/substrate/srml/support/src/dispatch.rs b/substrate/srml/support/src/dispatch.rs index a413f06b0f..8bdfcc88b9 100644 --- a/substrate/srml/support/src/dispatch.rs +++ b/substrate/srml/support/src/dispatch.rs @@ -76,6 +76,7 @@ macro_rules! decl_module { $(#[$attr])* pub struct $mod_type<$trait_instance: $trait_name> for enum $call_type where origin: $origin_type where system = system + {} [] $($t)* ); @@ -91,6 +92,7 @@ macro_rules! decl_module { $(#[$attr])* pub struct $mod_type<$trait_instance: $trait_name> for enum $call_type where origin: $origin_type where system = $system + {} [] $($t)* ); @@ -100,6 +102,26 @@ macro_rules! decl_module { $(#[$attr:meta])* pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> for enum $call_type:ident where origin: $origin_type:ty where system = $system:ident + { $( $on_finalise:tt )* } + [ $($t:tt)* ] + $(#[doc = $doc_attr:tt])* + fn on_finalise($($param_name:ident : $param:ty),* ) { $( $impl:tt )* } + $($rest:tt)* + ) => { + decl_module!(@normalize + $(#[$attr])* + pub struct $mod_type<$trait_instance: $trait_name> + for enum $call_type where origin: $origin_type where system = $system + { fn on_finalise( $( $param_name : $param ),* ) { $( $impl )* } } + [ $($t)* ] + $($rest)* + ); + }; + (@normalize + $(#[$attr:meta])* + pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> + for enum $call_type:ident where origin: $origin_type:ty where system = $system:ident + { $( $on_finalise:tt )* } [ $($t:tt)* ] $(#[doc = $doc_attr:tt])* fn $fn_name:ident(origin $(, $param_name:ident : $param:ty)* ) -> $result:ty ; @@ -109,6 +131,7 @@ macro_rules! decl_module { $(#[$attr])* pub struct $mod_type<$trait_instance: $trait_name> for enum $call_type where origin: $origin_type where system = $system + { $( $on_finalise )* } [ $($t)* $(#[doc = $doc_attr])* fn $fn_name(origin $( , $param_name : $param )* ) -> $result; ] $($rest)* ); @@ -117,6 +140,7 @@ macro_rules! decl_module { $(#[$attr:meta])* pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> for enum $call_type:ident where origin: $origin_type:ty where system = $system:ident + { $( $on_finalise:tt )* } [ $($t:tt)* ] $(#[doc = $doc_attr:tt])* fn $fn_name:ident($( $param_name:ident : $param:ty),* ) -> $result:ty ; @@ -126,6 +150,7 @@ macro_rules! decl_module { $(#[$attr])* pub struct $mod_type<$trait_instance: $trait_name> for enum $call_type where origin: $origin_type where system = $system + { $( $on_finalise )* } [ $($t)* $(#[doc = $doc_attr])* fn $fn_name(root $( , $param_name : $param )* ) -> $result; ] $($rest)* ); @@ -134,6 +159,7 @@ macro_rules! decl_module { $(#[$attr:meta])* pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> for enum $call_type:ident where origin: $origin_type:ty where system = $system:ident + { $( $on_finalise:tt )* } [ $($t:tt)* ] ) => { decl_module!(@imp @@ -142,6 +168,7 @@ macro_rules! decl_module { for enum $call_type where origin: $origin_type where system = $system { $($t)* } + { $( $on_finalise )* } ); }; @@ -161,14 +188,46 @@ macro_rules! decl_module { } }; + (@impl_on_finalise + $module:ident<$trait_instance:ident: $trait_name:ident>; + fn on_finalise() { $( $impl:tt )* } + ) => { + impl<$trait_instance: $trait_name> + $crate::runtime_primitives::traits::OnFinalise<$trait_instance::BlockNumber> + for $module<$trait_instance> { + fn on_finalise(_block_number_not_used: $trait_instance::BlockNumber) { $( $impl )* } + } + }; + + (@impl_on_finalise + $module:ident<$trait_instance:ident: $trait_name:ident>; + fn on_finalise($param:ident : $param_ty:ty) { $( $impl:tt )* } + ) => { + impl<$trait_instance: $trait_name> + $crate::runtime_primitives::traits::OnFinalise<$trait_instance::BlockNumber> + for $module<$trait_instance> { + fn on_finalise($param: $param_ty) { $( $impl )* } + } + }; + + (@impl_on_finalise + $module:ident<$trait_instance:ident: $trait_name:ident>; + ) => { + impl<$trait_instance: $trait_name> + $crate::runtime_primitives::traits::OnFinalise<$trait_instance::BlockNumber> + for $module<$trait_instance> {} + }; + (@imp $(#[$attr:meta])* pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> for enum $call_type:ident where origin: $origin_type:ty where system = $system:ident { - $( - $(#[doc = $doc_attr:tt])* - fn $fn_name:ident($from:ident $( , $param_name:ident : $param:ty)*) -> $result:ty; - )*} + $( + $(#[doc = $doc_attr:tt])* + fn $fn_name:ident($from:ident $( , $param_name:ident : $param:ty)*) -> $result:ty; + )* + } + { $( $on_finalise:tt )* } ) => { // Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. #[derive(Clone, Copy, PartialEq, Eq)] @@ -185,6 +244,12 @@ macro_rules! decl_module { #[cfg(not(feature = "std"))] pub struct $mod_type<$trait_instance: $trait_name>(::core::marker::PhantomData<$trait_instance>); + decl_module! { + @impl_on_finalise + $mod_type<$trait_instance: $trait_name>; + $( $on_finalise )* + } + #[cfg(feature = "std")] $(#[$attr])* #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] @@ -615,6 +680,7 @@ mod tests { pub trait Trait { type Origin; + type BlockNumber; } pub mod system { @@ -722,6 +788,7 @@ mod tests { impl Trait for TraitImpl { type Origin = u32; + type BlockNumber = u32; } #[test] diff --git a/substrate/srml/support/src/event.rs b/substrate/srml/support/src/event.rs index 8a6c153029..ae7ddea412 100644 --- a/substrate/srml/support/src/event.rs +++ b/substrate/srml/support/src/event.rs @@ -433,6 +433,7 @@ mod tests { mod system { pub trait Trait { type Origin; + type BlockNumber; } decl_module! { @@ -449,6 +450,7 @@ mod tests { mod system_renamed { pub trait Trait { type Origin; + type BlockNumber; } decl_module! { @@ -466,6 +468,7 @@ mod tests { pub trait Trait { type Origin; type Balance; + type BlockNumber; } decl_module! { @@ -488,6 +491,7 @@ mod tests { pub trait Trait { type Origin; type Balance; + type BlockNumber; } decl_module! { @@ -539,29 +543,35 @@ mod tests { impl event_module::Trait for TestRuntime { type Origin = u32; type Balance = u32; + type BlockNumber = u32; } impl event_module2::Trait for TestRuntime { type Origin = u32; type Balance = u32; + type BlockNumber = u32; } impl system::Trait for TestRuntime { type Origin = u32; + type BlockNumber = u32; } impl event_module::Trait for TestRuntime2 { type Origin = u32; type Balance = u32; + type BlockNumber = u32; } impl event_module2::Trait for TestRuntime2 { type Origin = u32; type Balance = u32; + type BlockNumber = u32; } impl system_renamed::Trait for TestRuntime2 { type Origin = u32; + type BlockNumber = u32; } const EXPECTED_METADATA: OuterEventMetadata = OuterEventMetadata { diff --git a/substrate/srml/support/src/metadata.rs b/substrate/srml/support/src/metadata.rs index a3095851a6..79df4815bb 100644 --- a/substrate/srml/support/src/metadata.rs +++ b/substrate/srml/support/src/metadata.rs @@ -111,6 +111,7 @@ mod tests { pub trait Trait { type Origin: Into>> + From>; type AccountId; + type BlockNumber; } decl_module! { @@ -148,6 +149,7 @@ mod tests { pub trait Trait { type Origin; type Balance; + type BlockNumber; } decl_event!( @@ -175,6 +177,7 @@ mod tests { pub trait Trait { type Origin; type Balance; + type BlockNumber; } decl_event!( @@ -226,16 +229,19 @@ mod tests { impl event_module::Trait for TestRuntime { type Origin = Origin; type Balance = u32; + type BlockNumber = u32; } impl event_module2::Trait for TestRuntime { type Origin = Origin; type Balance = u32; + type BlockNumber = u32; } impl system::Trait for TestRuntime { type Origin = Origin; type AccountId = u32; + type BlockNumber = u32; } impl_runtime_metadata!( diff --git a/substrate/srml/support/src/storage/generator.rs b/substrate/srml/support/src/storage/generator.rs index 8398819ebe..5b01a686c6 100644 --- a/substrate/srml/support/src/storage/generator.rs +++ b/substrate/srml/support/src/storage/generator.rs @@ -2702,7 +2702,8 @@ mod tests { } pub trait Trait { - type Origin: codec::Encode + codec::Decode + ::std::default::Default; + type Origin: codec::Encode + codec::Decode + ::std::default::Default; + type BlockNumber; } decl_module! { @@ -2754,6 +2755,7 @@ mod tests { impl Trait for TraitImpl { type Origin = u32; + type BlockNumber = u32; } const EXPECTED_METADATA: StorageMetadata = StorageMetadata { @@ -2932,7 +2934,8 @@ mod tests { #[allow(dead_code)] mod test2 { pub trait Trait { - type Origin; + type Origin; + type BlockNumber; } decl_module! { @@ -2959,5 +2962,6 @@ mod test2 { impl Trait for TraitImpl { type Origin = u32; + type BlockNumber = u32; } } diff --git a/substrate/srml/timestamp/src/lib.rs b/substrate/srml/timestamp/src/lib.rs index c13972c7da..6b42a8218a 100644 --- a/substrate/srml/timestamp/src/lib.rs +++ b/substrate/srml/timestamp/src/lib.rs @@ -59,7 +59,7 @@ use runtime_support::{StorageValue, Parameter}; use runtime_support::dispatch::Result; use runtime_primitives::RuntimeString; use runtime_primitives::traits::{ - As, OnFinalise, SimpleArithmetic, Zero, ProvideInherent, Block as BlockT, Extrinsic + As, SimpleArithmetic, Zero, ProvideInherent, Block as BlockT, Extrinsic }; use system::ensure_inherent; use rstd::{result, ops::{Mul, Div}, vec::Vec}; @@ -75,6 +75,9 @@ pub trait Trait: consensus::Trait + system::Trait { decl_module! { pub struct Module for enum Call where origin: T::Origin { fn set(origin, now: ::Type) -> Result; + fn on_finalise() { + assert!(::DidUpdate::take(), "Timestamp must be updated once in the block"); + } } } @@ -171,12 +174,6 @@ impl ProvideInherent for Module { } } -impl OnFinalise for Module { - fn on_finalise(_n: T::BlockNumber) { - assert!(::DidUpdate::take(), "Timestamp must be updated once in the block"); - } -} - #[cfg(test)] mod tests { use super::*; diff --git a/substrate/srml/treasury/src/lib.rs b/substrate/srml/treasury/src/lib.rs index febe5fed89..4c7c9c9107 100644 --- a/substrate/srml/treasury/src/lib.rs +++ b/substrate/srml/treasury/src/lib.rs @@ -45,7 +45,7 @@ extern crate srml_balances as balances; use rstd::prelude::*; use runtime_support::{StorageValue, StorageMap}; use runtime_support::dispatch::Result; -use runtime_primitives::{Permill, traits::{OnFinalise, Zero, EnsureOrigin}}; +use runtime_primitives::{Permill, traits::{Zero, EnsureOrigin}}; use codec::{HasCompact, Compact}; use balances::{OnDilution, address::Address}; use system::ensure_signed; @@ -90,6 +90,13 @@ decl_module! { // Approve a proposal. At a later time, the proposal will be allocated to the beneficiary // and the original deposit will be returned. fn approve_proposal(origin, proposal_id: Compact) -> Result; + + fn on_finalise(n: T::BlockNumber) { + // Check to see if we should spend some funds! + if (n % Self::spend_period()).is_zero() { + Self::spend_funds(); + } + } } } @@ -284,15 +291,6 @@ impl OnDilution for Module { } } -impl OnFinalise for Module { - fn on_finalise(n: T::BlockNumber) { - // Check to see if we should spend some funds! - if (n % Self::spend_period()).is_zero() { - Self::spend_funds(); - } - } -} - #[cfg(test)] mod tests { use super::*; @@ -300,7 +298,7 @@ mod tests { use runtime_io::with_externalities; use substrate_primitives::{H256, Blake2Hasher}; use runtime_primitives::BuildStorage; - use runtime_primitives::traits::{BlakeTwo256}; + use runtime_primitives::traits::{BlakeTwo256, OnFinalise}; use runtime_primitives::testing::{Digest, DigestItem, Header}; impl_outer_origin! { From 6244b6a3b922a774328c0bc20b152c1db6a7f8da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 25 Oct 2018 09:36:57 +0200 Subject: [PATCH 03/16] Encode `Metadata` once instead of two times (#946) --- substrate/core/client/src/client.rs | 9 ++------- substrate/core/rpc/src/state/mod.rs | 2 +- substrate/core/sr-api/src/lib.rs | 4 ++-- substrate/node/runtime/src/lib.rs | 6 +++--- substrate/srml/support/src/lib.rs | 1 + substrate/srml/support/src/metadata.rs | 18 ++++++++---------- 6 files changed, 17 insertions(+), 23 deletions(-) diff --git a/substrate/core/client/src/client.rs b/substrate/core/client/src/client.rs index 9182ab0a78..fcf917584e 100644 --- a/substrate/core/client/src/client.rs +++ b/substrate/core/client/src/client.rs @@ -346,11 +346,6 @@ impl Client where &self.executor } - /// Returns the runtime metadata. - pub fn metadata(&self, id: &BlockId) -> error::Result> { - self.executor.call(id, "metadata",&[]).map(|v| v.return_data) - } - /// Reads storage value at a given block + key, returning read proof. pub fn read_proof(&self, id: &BlockId, key: &[u8]) -> error::Result>> { self.state_at(id) @@ -1074,7 +1069,7 @@ impl api::Core for Client where } } -impl api::Metadata for Client where +impl api::Metadata> for Client where B: backend::Backend, E: CallExecutor, Block: BlockT, @@ -1082,7 +1077,7 @@ impl api::Metadata for Client where type Error = Error; fn metadata(&self, at: &BlockId) -> Result, Self::Error> { - self.call_api_at(at, "metadata", &()) + self.executor.call(at, "metadata",&[]).map(|v| v.return_data) } } diff --git a/substrate/core/rpc/src/state/mod.rs b/substrate/core/rpc/src/state/mod.rs index 4c3110f8e1..3fda746dcb 100644 --- a/substrate/core/rpc/src/state/mod.rs +++ b/substrate/core/rpc/src/state/mod.rs @@ -21,7 +21,7 @@ use std::{ sync::Arc, }; -use client::{self, Client, CallExecutor, BlockchainEvents}; +use client::{self, Client, CallExecutor, BlockchainEvents, runtime_api::Metadata}; use jsonrpc_macros::Trailing; use jsonrpc_macros::pubsub; use jsonrpc_pubsub::SubscriptionId; diff --git a/substrate/core/sr-api/src/lib.rs b/substrate/core/sr-api/src/lib.rs index 2021e2f2a0..b610606d02 100644 --- a/substrate/core/sr-api/src/lib.rs +++ b/substrate/core/sr-api/src/lib.rs @@ -436,8 +436,8 @@ decl_apis! { } /// The `Metadata` api trait that returns metadata for the runtime. - pub trait Metadata { - fn metadata() -> Vec; + pub trait Metadata { + fn metadata() -> Data; } /// The `OldTxQueue` api trait for interfering with the old transaction queue. diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index 36dcd347b9..1f4a44bb29 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -81,7 +81,7 @@ pub use timestamp::Call as TimestampCall; pub use balances::Call as BalancesCall; pub use runtime_primitives::{Permill, Perbill}; pub use timestamp::BlockPeriod; -pub use srml_support::StorageValue; +pub use srml_support::{StorageValue, RuntimeMetadata}; const TIMESTAMP_SET_POSITION: u32 = 0; const NOTE_OFFLINE_POSITION: u32 = 1; @@ -246,8 +246,8 @@ impl_apis! { } } - impl Metadata for Runtime { - fn metadata() -> Vec { + impl Metadata for Runtime { + fn metadata() -> RuntimeMetadata { Runtime::metadata() } } diff --git a/substrate/srml/support/src/lib.rs b/substrate/srml/support/src/lib.rs index 02747b199a..a8b1fa88a4 100644 --- a/substrate/srml/support/src/lib.rs +++ b/substrate/srml/support/src/lib.rs @@ -65,6 +65,7 @@ pub mod inherent; pub use self::storage::{StorageVec, StorageList, StorageValue, StorageMap}; pub use self::hashable::Hashable; pub use self::dispatch::{Parameter, Dispatchable, Callable, IsSubType}; +pub use self::metadata::RuntimeMetadata; pub use runtime_io::print; #[macro_export] diff --git a/substrate/srml/support/src/metadata.rs b/substrate/srml/support/src/metadata.rs index 79df4815bb..2a6b05bde2 100644 --- a/substrate/srml/support/src/metadata.rs +++ b/substrate/srml/support/src/metadata.rs @@ -33,14 +33,12 @@ macro_rules! impl_runtime_metadata { $( $rest:tt )* ) => { impl $runtime { - pub fn metadata() -> Vec { - $crate::codec::Encode::encode( - &$crate::metadata::RuntimeMetadata { - outer_event: Self::outer_event_metadata(), - modules: __runtime_modules_to_metadata!($runtime;; $( $rest )*), - outer_dispatch: Self::outer_dispatch_metadata(), - } - ) + pub fn metadata() -> $crate::metadata::RuntimeMetadata { + $crate::metadata::RuntimeMetadata { + outer_event: Self::outer_event_metadata(), + modules: __runtime_modules_to_metadata!($runtime;; $( $rest )*), + outer_dispatch: Self::outer_dispatch_metadata(), + } } } } @@ -105,7 +103,7 @@ mod tests { StorageFunctionModifier, StorageFunctionType, FunctionMetadata, StorageMetadata, StorageFunctionMetadata, OuterDispatchMetadata, OuterDispatchCall }; - use codec::Decode; + use codec::{Decode, Encode}; mod system { pub trait Trait { @@ -352,7 +350,7 @@ mod tests { #[test] fn runtime_metadata() { - let metadata_encoded = TestRuntime::metadata(); + let metadata_encoded = TestRuntime::metadata().encode(); let metadata_decoded = RuntimeMetadata::decode(&mut &metadata_encoded[..]); assert_eq!(EXPECTED_METADATA, metadata_decoded.unwrap()); From f8896f954d113db7149895e79c65544d1c105925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 25 Oct 2018 09:44:47 +0200 Subject: [PATCH 04/16] Make `decl_storage!` assume less about the environment (#956) --- .../release/node_runtime.compact.wasm | Bin 607894 -> 607677 bytes substrate/srml/support/src/lib.rs | 3 ++- .../srml/support/src/storage/generator.rs | 10 +++++----- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index c50aa4a3eb6e688722fc322e3653e210c1343fc7..461eff1a39b998d3475828130dfaee6cacad27bb 100644 GIT binary patch delta 97023 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

k?me1QO{yKYWA@qM0h^a~Qu1zQjJl3jWNOu&4wO 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 L(EJRKZ?5`(5@O?i delta 97499 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

>::Input, -

>::Output, + In, + Out, >>, P::Error> where + In: Stream, Error=Error>, + Out: Sink, SinkError=Error>, { let hash = header.hash(); @@ -527,22 +564,23 @@ impl BftService return Ok(None) } - let authorities = self.client.authorities(&BlockId::Hash(hash.clone()))?; + let authorities = self.client.authorities(&BlockId::Hash(hash.clone())) + .map_err(|e| CommonErrorKind::Other(Box::new(e)).into())?; let n = authorities.len(); let max_faulty = max_faulty_of(n); - trace!(target: "bft", "Initiating agreement on top of #{}, {:?}", header.number(), hash); - trace!(target: "bft", "max_faulty_of({})={}", n, max_faulty); + trace!(target: "rhd", "Initiating agreement on top of #{}, {:?}", header.number(), hash); + trace!(target: "rhd", "max_faulty_of({})={}", n, max_faulty); let local_id = self.local_id(); if !authorities.contains(&local_id) { // cancel current agreement live_agreement.take(); - Err(ErrorKind::InvalidAuthority(local_id).into())?; + Err(CommonErrorKind::InvalidAuthority(local_id).into())?; } - let (proposer, input, output) = self.factory.init(header, &authorities, self.key.clone())?; + let proposer = self.factory.init(header, &authorities, self.key.clone())?; let bft_instance = BftInstance { proposer, @@ -564,9 +602,9 @@ impl BftService // fast forward round number if necessary. { let mut cache = self.round_cache.lock(); - trace!(target: "bft", "Round cache: {:?}", &*cache); + trace!(target: "rhd", "Round cache: {:?}", &*cache); if cache.hash.as_ref() == Some(&hash) { - trace!(target: "bft", "Fast-forwarding to round {}", cache.start_round); + trace!(target: "rhd", "Fast-forwarding to round {}", cache.start_round); let start_round = cache.start_round; cache.start_round += 1; @@ -622,6 +660,103 @@ impl BftService } } +/// Stream that decodes rhododendron messages and checks signatures. +/// +/// This stream is localized to a specific parent block-hash, as all messages +/// will be signed in a way that accounts for it. When using this with +/// `BftService::build_upon`, the user should take care to use the same hash as for that. +pub struct CheckedStream { + inner: S, + local_id: AuthorityId, + authorities: Vec, + parent_hash: B::Hash, +} + +impl CheckedStream { + /// Construct a new checked stream. + pub fn new( + inner: S, + local_id: AuthorityId, + authorities: Vec, + parent_hash: B::Hash, + ) -> Self { + CheckedStream { + inner, + local_id, + authorities, + parent_hash, + } + } +} + +impl>> Stream for CheckedStream + where S::Error: From, +{ + type Item = Communication; + type Error = S::Error; + + fn poll(&mut self) -> Poll, Self::Error> { + use rhododendron::LocalizedMessage as RhdLocalized; + loop { + match self.inner.poll()? { + Async::Ready(Some(item)) => { + let comms: Communication = match Decode::decode(&mut &item[..]) { + Some(x) => x, + None => continue, + }; + + match comms { + RhdCommunication::Auxiliary(prepare_just) => { + let checked = check_prepare_justification::( + &self.authorities, + self.parent_hash, + UncheckedJustification(prepare_just.uncheck()), + ); + if let Ok(checked) = checked { + return Ok(Async::Ready( + Some(RhdCommunication::Auxiliary(checked.0)) + )); + } + } + RhdCommunication::Consensus(RhdLocalized::Propose(p)) => { + if p.sender == self.local_id { continue } + + let checked = check_proposal::( + &self.authorities, + &self.parent_hash, + &p, + ); + + if let Ok(()) = checked { + return Ok(Async::Ready( + Some(RhdCommunication::Consensus(RhdLocalized::Propose(p))) + )); + } + } + RhdCommunication::Consensus(RhdLocalized::Vote(v)) => { + if v.sender == self.local_id { continue } + + let checked = check_vote::( + &self.authorities, + &self.parent_hash, + &v, + ); + + if let Ok(()) = checked { + return Ok(Async::Ready( + Some(RhdCommunication::Consensus(RhdLocalized::Vote(v))) + )); + } + } + } + } + Async::Ready(None) => return Ok(Async::Ready(None)), + Async::NotReady => return Ok(Async::NotReady), + } + } + } +} + /// Given a total number of authorities, yield the maximum faulty that would be allowed. /// This will always be under 1/3. pub fn max_faulty_of(n: usize) -> usize { @@ -634,7 +769,116 @@ pub fn bft_threshold(n: usize) -> usize { n - max_faulty_of(n) } -// /// Sign a BFT message with the given key. +// actions in the signature scheme. +#[derive(Encode)] +enum Action { + Prepare(u32, H), + Commit(u32, H), + AdvanceRound(u32), + // signatures of header hash and full candidate are both included. + ProposeHeader(u32, H), + Propose(u32, B), +} + +// encode something in a way which is localized to a specific parent-hash +fn localized_encode(parent_hash: H, value: E) -> Vec { + (parent_hash, value).encode() +} + +fn check_justification_signed_message( + authorities: &[AuthorityId], + message: &[u8], + just: UncheckedJustification) +-> Result, UncheckedJustification> { + // additional error information could be useful here. + just.0.check(authorities.len() - max_faulty_of(authorities.len()), |_, _, sig| { + let auth_id = sig.signer.clone().into(); + if !authorities.contains(&auth_id) { return None } + + if ed25519::verify_strong(&sig.signature, message, &sig.signer) { + Some(sig.signer.0) + } else { + None + } + }).map(RhdJustification).map_err(UncheckedJustification) +} + +/// Check a full justification for a header hash. +/// Provide all valid authorities. +/// +/// On failure, returns the justification back. +pub fn check_justification( + authorities: &[AuthorityId], + parent: B::Hash, + just: UncheckedJustification +) -> Result, UncheckedJustification> { + let vote: Action = Action::Commit(just.0.round_number as u32, just.0.digest.clone()); + let message = localized_encode(parent, vote); + + check_justification_signed_message(authorities, &message[..], just) +} + +/// Check a prepare justification for a header hash. +/// Provide all valid authorities. +/// +/// On failure, returns the justification back. +pub fn check_prepare_justification(authorities: &[AuthorityId], parent: B::Hash, just: UncheckedJustification) + -> Result, UncheckedJustification> +{ + let vote: Action = Action::Prepare(just.0.round_number as u32, just.0.digest.clone()); + let message = localized_encode(parent, vote); + + check_justification_signed_message(authorities, &message[..], just).map(|e| PrepareJustification(e.0)) +} + +/// Check proposal message signatures and authority. +/// Provide all valid authorities. +pub fn check_proposal( + authorities: &[AuthorityId], + parent_hash: &B::Hash, + propose: &rhododendron::LocalizedProposal) + -> Result<(), Error> +{ + if !authorities.contains(&propose.sender) { + return Err(CommonErrorKind::InvalidAuthority(propose.sender.into()).into()); + } + + let action_header = Action::ProposeHeader(propose.round_number as u32, propose.digest.clone()); + let action_propose = Action::Propose(propose.round_number as u32, propose.proposal.clone()); + check_action::(action_header, parent_hash, &propose.digest_signature)?; + check_action::(action_propose, parent_hash, &propose.full_signature) +} + +/// Check vote message signatures and authority. +/// Provide all valid authorities. +pub fn check_vote( + authorities: &[AuthorityId], + parent_hash: &B::Hash, + vote: &rhododendron::LocalizedVote) + -> Result<(), Error> +{ + if !authorities.contains(&vote.sender) { + return Err(CommonErrorKind::InvalidAuthority(vote.sender.into()).into()); + } + + let action = match vote.vote { + rhododendron::Vote::Prepare(r, ref h) => Action::Prepare(r as u32, h.clone()), + rhododendron::Vote::Commit(r, ref h) => Action::Commit(r as u32, h.clone()), + rhododendron::Vote::AdvanceRound(r) => Action::AdvanceRound(r as u32), + }; + check_action::(action, parent_hash, &vote.signature) +} + +fn check_action(action: Action, parent_hash: &B::Hash, sig: &LocalizedSignature) -> Result<(), Error> { + let message = localized_encode(*parent_hash, action); + if ed25519::verify_strong(&sig.signature, &message, &sig.signer) { + Ok(()) + } else { + Err(CommonErrorKind::InvalidSignature(sig.signature.into(), sig.signer.clone().into()).into()) + } +} + +/// Sign a BFT message with the given key. pub fn sign_message( message: RhdMessage, key: &ed25519::Pair, @@ -642,13 +886,9 @@ pub fn sign_message( ) -> LocalizedMessage { let signer = key.public(); - let sign_action = |action: ::rhododendron::Vote| { - let primitive = ::rhododendron::LocalizedVote { - parent: parent_hash.clone(), - action, - }; + let sign_action = |action: Action| { + let to_sign = localized_encode(parent_hash.clone(), action); - let to_sign = Encode::encode(&primitive); LocalizedSignature { signer: signer.clone(), signature: key.sign(&to_sign), @@ -658,10 +898,10 @@ pub fn sign_message( match message { RhdMessage::Propose(r, proposal) => { let header_hash = proposal.hash(); - let action_header = ::rhododendron::ProposeHeader(r as u32, header_hash.clone()); - let action_propose = ::rhododendron::Propose(r as u32, proposal.clone()); + let action_header = Action::ProposeHeader(r as u32, header_hash.clone()); + let action_propose = Action::Propose(r as u32, proposal.clone()); - ::rhododendron::LocalizedMessage::Propose(::rhododendron::LocalizedProposal { + rhododendron::LocalizedMessage::Propose(rhododendron::LocalizedProposal { round_number: r, proposal, digest: header_hash, @@ -670,20 +910,443 @@ pub fn sign_message( full_signature: sign_action(action_propose), }) } - RhdMessage::Vote(vote) => ::rhododendron::LocalizedMessage::Vote( - ::rhododendron::LocalizedVote { + RhdMessage::Vote(vote) => rhododendron::LocalizedMessage::Vote({ + let action = match vote { + RhdMessageVote::Prepare(r, h) => Action::Prepare(r as u32, h), + RhdMessageVote::Commit(r, h) => Action::Commit(r as u32, h), + RhdMessageVote::AdvanceRound(r) => Action::AdvanceRound(r as u32), + }; + + rhododendron::LocalizedVote { vote: vote, sender: signer.clone().into(), signature: sign_action(action), } - ) + }) } } + +impl<'a, B, E, Block> BlockBuilder for client::block_builder::BlockBuilder<'a, B, E, Block, Blake2Hasher> where + B: client::backend::Backend + Send + Sync + 'static, + E: CallExecutor + Send + Sync + Clone + 'static, + Block: BlockT +{ + fn push_extrinsic(&mut self, extrinsic: ::Extrinsic) -> Result<(), Error> { + client::block_builder::BlockBuilder::push(self, extrinsic).map_err(Into::into) + } +} + +impl<'a, B, E, Block> AuthoringApi for SubstrateClient where + B: client::backend::Backend + Send + Sync + 'static, + E: CallExecutor + Send + Sync + Clone + 'static, + Block: BlockT, +{ + type Block = Block; + type Error = client::error::Error; + + fn build_block) -> ()>( + &self, + at: &BlockId, + inherent_data: InherentData, + mut build_ctx: F, + ) -> Result { + let runtime_version = self.runtime_version_at(at)?; + + let mut block_builder = self.new_block_at(at)?; + if runtime_version.has_api(*b"blkbuild", 1) { + for inherent in self.inherent_extrinsics(at, &inherent_data)? { + block_builder.push(inherent)?; + } + } + + build_ctx(&mut block_builder); + + block_builder.bake().map_err(Into::into) + } +} + + +/// Proposer factory. +pub struct ProposerFactory where + C: AuthoringApi, + A: txpool::ChainApi, +{ + /// The client instance. + pub client: Arc, + /// The transaction pool. + pub transaction_pool: Arc>, + /// The backing network handle. + pub network: N, + /// handle to remote task executor + pub handle: TaskExecutor, + /// Offline-tracker. + pub offline: SharedOfflineTracker, + /// Force delay in evaluation this long. + pub force_delay: u64, +} + +impl consensus::Environment<::Block> for ProposerFactory where + N: Network::Block>, + C: AuthoringApi + BlockNumberToHash, + A: txpool::ChainApi::Block>, + // <::Block as BlockT>::Hash: + // Into<::Hash> + PartialEq + Into, + Error: From<::Error> +{ + type Proposer = Proposer; + type Error = Error; + + fn init( + &self, + parent_header: &<::Block as BlockT>::Header, + authorities: &[AuthorityId], + sign_with: Arc, + ) -> Result { + use runtime_primitives::traits::Hash as HashT; + let parent_hash = parent_header.hash(); + + let id = BlockId::hash(parent_hash); + let random_seed = self.client.random_seed(&id)?; + let random_seed = <<::Block as BlockT>::Header as HeaderT>::Hashing::hash(random_seed.as_ref()); + + let validators = self.client.validators(&id)?; + self.offline.write().note_new_block(&validators[..]); + + info!("Starting consensus session on top of parent {:?}", parent_hash); + + let local_id = sign_with.public().0.into(); + let (input, output) = self.network.communication_for( + authorities, + local_id, + parent_hash.clone(), + self.handle.clone(), + ); + let now = Instant::now(); + let proposer = Proposer { + client: self.client.clone(), + start: now, + local_key: sign_with, + parent_hash, + parent_id: id, + parent_number: *parent_header.number(), + random_seed, + transaction_pool: self.transaction_pool.clone(), + offline: self.offline.clone(), + validators, + minimum_timestamp: current_timestamp() + self.force_delay, + network: self.network.clone() + }; + + Ok(proposer) + } +} + +/// The proposer logic. +pub struct Proposer { + client: Arc, + start: Instant, + local_key: Arc, + parent_hash: <::Block as BlockT>::Hash, + parent_id: BlockId<::Block>, + parent_number: <<::Block as BlockT>::Header as HeaderT>::Number, + random_seed: <::Block as BlockT>::Hash, + transaction_pool: Arc>, + offline: SharedOfflineTracker, + validators: Vec, + minimum_timestamp: u64, + network: N, +} + +impl Proposer { + fn primary_index(&self, round_number: u32, len: usize) -> usize { + use primitives::uint::U256; + + let big_len = U256::from(len); + let offset = U256::from_big_endian(self.random_seed.as_ref()) % big_len; + let offset = offset.low_u64() as usize + round_number as usize; + offset % len + } +} + +impl BaseProposer<::Block> for Proposer where + C: AuthoringApi + BlockNumberToHash, + A: txpool::ChainApi::Block>, + <::Block as BlockT>::Hash: + Into<::Hash> + PartialEq + Into, + error::Error: From<::Error> +{ + type Create = Result<::Block, Error>; + type Error = Error; + type Evaluate = Box>; + + fn propose(&self) -> Self::Create { + use runtime_primitives::traits::BlakeTwo256; + + const MAX_VOTE_OFFLINE_SECONDS: Duration = Duration::from_secs(60); + + let timestamp = ::std::cmp::max(self.minimum_timestamp, current_timestamp()); + + let elapsed_since_start = self.start.elapsed(); + let offline_indices = if elapsed_since_start > MAX_VOTE_OFFLINE_SECONDS { + Vec::new() + } else { + self.offline.read().reports(&self.validators[..]) + }; + + if !offline_indices.is_empty() { + info!( + "Submitting offline validators {:?} for slash-vote", + offline_indices.iter().map(|&i| self.validators[i as usize]).collect::>(), + ) + } + + let inherent_data = InherentData { + timestamp, + offline_indices, + }; + + let block = self.client.build_block( + &self.parent_id, + inherent_data, + |block_builder| { + let mut unqueue_invalid = Vec::new(); + self.transaction_pool.ready(|pending_iterator| { + let mut pending_size = 0; + for pending in pending_iterator { + // TODO [ToDr] Probably get rid of it, and validate in runtime. + let encoded_size = pending.data.encode().len(); + if pending_size + encoded_size >= MAX_TRANSACTIONS_SIZE { break } + + match block_builder.push_extrinsic(pending.data.clone()) { + Ok(()) => { + pending_size += encoded_size; + } + Err(e) => { + trace!(target: "transaction-pool", "Invalid transaction: {}", e); + unqueue_invalid.push(pending.hash.clone()); + } + } + } + }); + + self.transaction_pool.remove_invalid(&unqueue_invalid); + })?; + + info!("Proposing block [number: {}; hash: {}; parent_hash: {}; extrinsics: [{}]]", + block.header().number(), + <::Block as BlockT>::Hash::from(block.header().hash()), + block.header().parent_hash(), + block.extrinsics().iter() + .map(|xt| format!("{}", BlakeTwo256::hash_of(xt))) + .collect::>() + .join(", ") + ); + + let substrate_block = Decode::decode(&mut block.encode().as_slice()) + .expect("blocks are defined to serialize to substrate blocks correctly; qed"); + + assert!(evaluation::evaluate_initial( + &substrate_block, + &self.parent_hash, + self.parent_number, + ).is_ok()); + + Ok(substrate_block) + } + + fn evaluate(&self, unchecked_proposal: &::Block) -> Self::Evaluate { + debug!(target: "rhd", "evaluating block on top of parent ({}, {:?})", self.parent_number, self.parent_hash); + + // do initial serialization and structural integrity checks. + if let Err(e) = evaluation::evaluate_initial( + unchecked_proposal, + &self.parent_hash, + self.parent_number, + ) { + debug!(target: "rhd", "Invalid proposal: {:?}", e); + return Box::new(future::ok(false)); + }; + + let current_timestamp = current_timestamp(); + let inherent = InherentData::new( + current_timestamp, + self.offline.read().reports(&self.validators) + ); + let proposed_timestamp = match self.client.check_inherents( + &self.parent_id, + &unchecked_proposal, + &inherent + ) { + Ok(Ok(())) => None, + Ok(Err(BlockBuilderError::TimestampInFuture(timestamp))) => Some(timestamp), + Ok(Err(e)) => { + debug!(target: "rhd", "Invalid proposal (check_inherents): {:?}", e); + return Box::new(future::ok(false)); + }, + Err(e) => { + debug!(target: "rhd", "Could not call into runtime: {:?}", e); + return Box::new(future::ok(false)); + } + }; + + let vote_delays = { + + // the duration until the given timestamp is current + let proposed_timestamp = ::std::cmp::max(self.minimum_timestamp, proposed_timestamp.unwrap_or(0)); + let timestamp_delay = if proposed_timestamp > current_timestamp { + let delay_s = proposed_timestamp - current_timestamp; + debug!(target: "rhd", "Delaying evaluation of proposal for {} seconds", delay_s); + Some(Instant::now() + Duration::from_secs(delay_s)) + } else { + None + }; + + match timestamp_delay { + Some(duration) => future::Either::A( + Delay::new(duration).map_err(|e| ErrorKind::Timer(e).into()) + ), + None => future::Either::B(future::ok(())), + } + }; + + // evaluate whether the block is actually valid. + // it may be better to delay this until the delays are finished + let evaluated = match self.client.execute_block(&self.parent_id, &unchecked_proposal.clone()) + .map_err(Error::from) { + Ok(()) => Ok(true), + Err(err) => match err.kind() { + error::ErrorKind::Client(client::error::ErrorKind::Execution(_)) => Ok(false), + _ => Err(err) + } + }; + + let future = future::result(evaluated).and_then(move |good| { + let end_result = future::ok(good); + if good { + // delay a "good" vote. + future::Either::A(vote_delays.and_then(|_| end_result)) + } else { + // don't delay a "bad" evaluation. + future::Either::B(end_result) + } + }); + + Box::new(future) as Box<_> + } +} + +impl LocalProposer<::Block> for Proposer where + C: AuthoringApi + BlockNumberToHash, + A: txpool::ChainApi::Block>, + Self: BaseProposer<::Block, Error=Error>, + <::Block as BlockT>::Hash: + Into<::Hash> + PartialEq + Into, + error::Error: From<::Error> +{ + + fn round_proposer(&self, round_number: u32, authorities: &[AuthorityId]) -> AuthorityId { + let offset = self.primary_index(round_number, authorities.len()); + let proposer = authorities[offset as usize].clone(); + trace!(target: "rhd", "proposer for round {} is {}", round_number, proposer); + + proposer + } + + fn import_misbehavior(&self, _misbehavior: Vec<(AuthorityId, Misbehavior<<::Block as BlockT>::Hash>)>) { + use rhododendron::Misbehavior as GenericMisbehavior; + use runtime_primitives::bft::{MisbehaviorKind, MisbehaviorReport}; + use node_runtime::{Call, UncheckedExtrinsic, ConsensusCall}; + + let mut next_index = { + let local_id = self.local_key.public().0; + let cur_index = self.transaction_pool.cull_and_get_pending(&BlockId::hash(self.parent_hash), |pending| pending + .filter(|tx| tx.verified.sender == local_id) + .last() + .map(|tx| Ok(tx.verified.index())) + .unwrap_or_else(|| self.client.account_nonce(&self.parent_id, local_id)) + .map_err(Error::from) + ); + + match cur_index { + Ok(cur_index) => cur_index + 1, + Err(e) => { + warn!(target: "consensus", "Error computing next transaction index: {:?}", e); + return; + } + } + }; + + for (target, misbehavior) in misbehavior { + let report = MisbehaviorReport { + parent_hash: self.parent_hash.into(), + parent_number: self.parent_number.as_(), + target, + misbehavior: match misbehavior { + GenericMisbehavior::ProposeOutOfTurn(_, _, _) => continue, + GenericMisbehavior::DoublePropose(_, _, _) => continue, + GenericMisbehavior::DoublePrepare(round, (h1, s1), (h2, s2)) + => MisbehaviorKind::BftDoublePrepare(round as u32, (h1.into(), s1.signature), (h2.into(), s2.signature)), + GenericMisbehavior::DoubleCommit(round, (h1, s1), (h2, s2)) + => MisbehaviorKind::BftDoubleCommit(round as u32, (h1.into(), s1.signature), (h2.into(), s2.signature)), + } + }; + let payload = ( + next_index, + Call::Consensus(ConsensusCall::report_misbehavior(report)), + Era::immortal(), + self.client.genesis_hash() + ); + let signature = self.local_key.sign(&payload.encode()).into(); + next_index += 1; + + let local_id = self.local_key.public().0.into(); + let extrinsic = UncheckedExtrinsic { + signature: Some((node_runtime::RawAddress::Id(local_id), signature, payload.0, Era::immortal())), + function: payload.1, + }; + let uxt: <::Block as BlockT>::Extrinsic = Decode::decode( + &mut extrinsic.encode().as_slice()).expect("Encoded extrinsic is valid"); + let hash = BlockId::<::Block>::hash(self.parent_hash); + if let Err(e) = self.transaction_pool.submit_one(&hash, uxt) { + warn!("Error importing misbehavior report: {:?}", e); + } + } + } + + fn on_round_end(&self, round_number: u32, was_proposed: bool) { + let primary_validator = self.validators[ + self.primary_index(round_number, self.validators.len()) + ]; + + // alter the message based on whether we think the empty proposer was forced to skip the round. + // this is determined by checking if our local validator would have been forced to skip the round. + if !was_proposed { + let public = ed25519::Public::from_raw(primary_validator.0); + info!( + "Potential Offline Validator: {} failed to propose during assigned slot: {}", + public, + round_number, + ); + } + + self.offline.write().note_round_end(primary_validator, was_proposed); + } +} + +fn current_timestamp() -> u64 { + time::SystemTime::now().duration_since(time::UNIX_EPOCH) + .expect("now always later than unix epoch; qed") + .as_secs() +} + + #[cfg(test)] mod tests { use super::*; use std::collections::HashSet; + use std::marker::PhantomData; + use runtime_primitives::testing::{Block as GenericTestBlock, Header as TestHeader}; use primitives::H256; use self::keyring::Keyring; @@ -698,14 +1361,21 @@ mod tests { } impl BlockImport for FakeClient { - fn import_block(&self, block: TestBlock, _justification: Justification, _authorities: &[AuthorityId]) -> bool { + type Error = Error; + + fn import_block(&self, + block: ImportBlock, + _new_authorities: Option> + ) -> Result { assert!(self.imported_heights.lock().insert(block.header.number)); - true + Ok(ImportResult::Queued) } } impl Authorities for FakeClient { - fn authorities(&self, _at: &BlockId) -> Result, Error> { + type Error = Error; + + fn authorities(&self, _at: &BlockId) -> Result, Self::Error> { Ok(self.authorities.clone()) } } @@ -740,18 +1410,16 @@ mod tests { impl Environment for DummyFactory { type Proposer = DummyProposer; - type Input = Comms; - type Output = Comms; type Error = Error; fn init(&self, parent_header: &TestHeader, _authorities: &[AuthorityId], _sign_with: Arc) - -> Result<(DummyProposer, Self::Input, Self::Output), Error> + -> Result { - Ok((DummyProposer(parent_header.number + 1), Comms(::std::marker::PhantomData), Comms(::std::marker::PhantomData))) + Ok(DummyProposer(parent_header.number + 1)) } } - impl Proposer for DummyProposer { + impl BaseProposer for DummyProposer { type Error = Error; type Create = Result; type Evaluate = Result; @@ -767,11 +1435,13 @@ mod tests { fn evaluate(&self, proposal: &TestBlock) -> Result { Ok(proposal.header.number == self.0) } + } + impl LocalProposer for DummyProposer { fn import_misbehavior(&self, _misbehavior: Vec<(AuthorityId, Misbehavior)>) {} - fn round_proposer(&self, round_number: usize, authorities: &[AuthorityId]) -> AuthorityId { - authorities[round_number % authorities.len()].clone() + fn round_proposer(&self, round_number: u32, authorities: &[AuthorityId]) -> AuthorityId { + authorities[(round_number as usize) % authorities.len()].clone() } } @@ -791,9 +1461,9 @@ mod tests { } } - fn sign_vote(vote: ::rhododendron::Vote, key: &ed25519::Pair, parent_hash: H256) -> LocalizedSignature { + fn sign_vote(vote: rhododendron::Vote, key: &ed25519::Pair, parent_hash: H256) -> LocalizedSignature { match sign_message::(vote.into(), key, parent_hash) { - ::rhododendron::LocalizedMessage::Vote(vote) => vote.signature, + rhododendron::LocalizedMessage::Vote(vote) => vote.signature, _ => panic!("signing vote leads to signed vote"), } } @@ -829,10 +1499,10 @@ mod tests { second.parent_hash = first_hash; let _second_hash = second.hash(); - let mut first_bft = service.build_upon(&first).unwrap().unwrap(); + let mut first_bft = service.build_upon(&first, Comms(PhantomData), Comms(PhantomData)).unwrap().unwrap(); assert!(service.live_agreement.lock().as_ref().unwrap().0 == first); - let _second_bft = service.build_upon(&second).unwrap(); + let _second_bft = service.build_upon(&second, Comms(PhantomData), Comms(PhantomData)).unwrap(); assert!(service.live_agreement.lock().as_ref().unwrap().0 != first); assert!(service.live_agreement.lock().as_ref().unwrap().0 == second); @@ -929,8 +1599,8 @@ mod tests { extrinsics: Default::default() }; - let proposal = sign_message(::rhododendron::Message::Propose(1, block.clone()), &Keyring::Alice.pair(), parent_hash);; - if let ::rhododendron::LocalizedMessage::Propose(proposal) = proposal { + let proposal = sign_message(rhododendron::Message::Propose(1, block.clone()), &Keyring::Alice.pair(), parent_hash);; + if let rhododendron::LocalizedMessage::Propose(proposal) = proposal { assert!(check_proposal(&authorities, &parent_hash, &proposal).is_ok()); let mut invalid_round = proposal.clone(); invalid_round.round_number = 0; @@ -943,8 +1613,8 @@ mod tests { } // Not an authority - let proposal = sign_message::(::rhododendron::Message::Propose(1, block), &Keyring::Bob.pair(), parent_hash);; - if let ::rhododendron::LocalizedMessage::Propose(proposal) = proposal { + let proposal = sign_message::(rhododendron::Message::Propose(1, block), &Keyring::Bob.pair(), parent_hash);; + if let rhododendron::LocalizedMessage::Propose(proposal) = proposal { assert!(check_proposal(&authorities, &parent_hash, &proposal).is_err()); } else { assert!(false); @@ -961,8 +1631,8 @@ mod tests { Keyring::Eve.to_raw_public().into(), ]; - let vote = sign_message::(::rhododendron::Message::Vote(::rhododendron::Vote::Prepare(1, hash)), &Keyring::Alice.pair(), parent_hash);; - if let ::rhododendron::LocalizedMessage::Vote(vote) = vote { + let vote = sign_message::(rhododendron::Message::Vote(rhododendron::Vote::Prepare(1, hash)), &Keyring::Alice.pair(), parent_hash);; + if let rhododendron::LocalizedMessage::Vote(vote) = vote { assert!(check_vote::(&authorities, &parent_hash, &vote).is_ok()); let mut invalid_sender = vote.clone(); invalid_sender.signature.signer = Keyring::Eve.into(); @@ -972,8 +1642,8 @@ mod tests { } // Not an authority - let vote = sign_message::(::rhododendron::Message::Vote(::rhododendron::Vote::Prepare(1, hash)), &Keyring::Bob.pair(), parent_hash);; - if let ::rhododendron::LocalizedMessage::Vote(vote) = vote { + let vote = sign_message::(rhododendron::Message::Vote(rhododendron::Vote::Prepare(1, hash)), &Keyring::Bob.pair(), parent_hash);; + if let rhododendron::LocalizedMessage::Vote(vote) = vote { assert!(check_vote::(&authorities, &parent_hash, &vote).is_err()); } else { assert!(false); @@ -1000,7 +1670,7 @@ mod tests { let mut second = from_block_number(3); second.parent_hash = first_hash; - let _ = service.build_upon(&first).unwrap(); + let _ = service.build_upon(&first, Comms(PhantomData), Comms(PhantomData)).unwrap(); assert!(service.live_agreement.lock().as_ref().unwrap().0 == first); service.live_agreement.lock().take(); } @@ -1028,14 +1698,14 @@ mod tests { let mut third = from_block_number(4); third.parent_hash = second.hash(); - let _ = service.build_upon(&first).unwrap(); + let _ = service.build_upon(&first, Comms(PhantomData), Comms(PhantomData)).unwrap(); assert!(service.live_agreement.lock().as_ref().unwrap().0 == first); // BFT has not seen second, but will move forward on third - service.build_upon(&third).unwrap(); + service.build_upon(&third, Comms(PhantomData), Comms(PhantomData)).unwrap(); assert!(service.live_agreement.lock().as_ref().unwrap().0 == third); // but we are not walking backwards - service.build_upon(&second).unwrap(); + service.build_upon(&second, Comms(PhantomData), Comms(PhantomData)).unwrap(); assert!(service.live_agreement.lock().as_ref().unwrap().0 == third); } } diff --git a/substrate/node/consensus/src/service.rs b/substrate/core/consensus/rhd/src/service.rs similarity index 89% rename from substrate/node/consensus/src/service.rs rename to substrate/core/consensus/rhd/src/service.rs index f8ebd6f421..34efc942d4 100644 --- a/substrate/node/consensus/src/service.rs +++ b/substrate/core/consensus/rhd/src/service.rs @@ -22,12 +22,9 @@ use std::thread; use std::time::{Duration, Instant}; use std::sync::Arc; -use rhd::{self, BftService}; use client::{BlockchainEvents, ChainHead, BlockBody}; -use ed25519; use futures::prelude::*; use transaction_pool::txpool::{Pool as TransactionPool, ChainApi as PoolChainApi}; -use primitives; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, BlockNumberToHash}; use tokio::executor::current_thread::TaskExecutor as LocalThreadHandle; @@ -35,8 +32,11 @@ use tokio::runtime::TaskExecutor as ThreadPoolHandle; use tokio::runtime::current_thread::Runtime as LocalRuntime; use tokio::timer::Interval; +use parking_lot::RwLock; +use consensus::offline_tracker::OfflineTracker; + use super::{Network, ProposerFactory, AuthoringApi}; -use error; +use {consensus, primitives, ed25519, error, BftService, LocalProposer}; const TIMER_DELAY_MS: u64 = 5000; const TIMER_INTERVAL_MS: u64 = 500; @@ -47,11 +47,12 @@ fn start_bft( header: ::Header, bft_service: Arc>, ) where - F: rhd::Environment + 'static, - C: rhd::BlockImport + rhd::Authorities + 'static, + F: consensus::Environment + 'static, + C: consensus::BlockImport + consensus::Authorities + 'static, F::Error: ::std::fmt::Debug, - >::Error: ::std::fmt::Display + Into, - >::Error: ::std::fmt::Display, + >::Error: ::std::fmt::Display + Into, + >::Proposer : LocalProposer, + >::Error: ::std::fmt::Display, Block: BlockT, { let mut handle = LocalThreadHandle::current(); @@ -88,14 +89,12 @@ impl Service { C: BlockchainEvents<::Block> + ChainHead<::Block> + BlockBody<::Block>, - C: bft::BlockImport<::Block> - + bft::Authorities<::Block> + Send + Sync + 'static, + C: consensus::BlockImport<::Block> + + consensus::Authorities<::Block> + Send + Sync + 'static, primitives::H256: From<<::Block as BlockT>::Hash>, <::Block as BlockT>::Hash: PartialEq + PartialEq, N: Network::Block> + Send + 'static, { - use parking_lot::RwLock; - use super::OfflineTracker; let (signal, exit) = ::exit_future::signal(); let thread = thread::spawn(move || { diff --git a/substrate/core/network/Cargo.toml b/substrate/core/network/Cargo.toml index db4f6c34e2..7eadefb363 100644 --- a/substrate/core/network/Cargo.toml +++ b/substrate/core/network/Cargo.toml @@ -17,6 +17,7 @@ linked-hash-map = "0.5" rustc-hex = "1.0" rand = "0.5" substrate-primitives = { path = "../../core/primitives" } +substrate-consensus-common = { path = "../../core/consensus/common" } substrate-client = { path = "../../core/client" } sr-primitives = { path = "../../core/sr-primitives" } parity-codec = "2.1" diff --git a/substrate/core/network/src/chain.rs b/substrate/core/network/src/chain.rs index 97c2322989..74a01577a7 100644 --- a/substrate/core/network/src/chain.rs +++ b/substrate/core/network/src/chain.rs @@ -16,10 +16,12 @@ //! Blockchain access trait -use client::{self, Client as SubstrateClient, ImportBlock, ImportResult, ClientInfo, BlockStatus, CallExecutor}; +use client::{self, Client as SubstrateClient, ClientInfo, BlockStatus, CallExecutor}; use client::error::Error; +use consensus::BlockImport; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, NumberFor}; -use runtime_primitives::generic::BlockId; +use runtime_primitives::generic::{BlockId}; +use consensus::{ImportBlock, ImportResult}; use runtime_primitives::Justification; use primitives::{Blake2Hasher, AuthorityId}; @@ -69,9 +71,12 @@ pub trait Client: Send + Sync { impl Client for SubstrateClient where B: client::backend::Backend + Send + Sync + 'static, E: CallExecutor + Send + Sync + 'static, - Block: BlockT, + Self: BlockImport, + Block: BlockT { - fn import(&self, block: ImportBlock, new_authorities: Option>) -> Result { + fn import(&self, block: ImportBlock, new_authorities: Option>) + -> Result + { (self as &SubstrateClient).import_block(block, new_authorities) } diff --git a/substrate/core/network/src/import_queue.rs b/substrate/core/network/src/import_queue.rs index 26ad83e852..955dc12321 100644 --- a/substrate/core/network/src/import_queue.rs +++ b/substrate/core/network/src/import_queue.rs @@ -28,8 +28,6 @@ use std::collections::{HashSet, VecDeque}; use std::sync::{Arc, Weak}; use std::sync::atomic::{AtomicBool, Ordering}; use parking_lot::{Condvar, Mutex, RwLock}; - -pub use client::{BlockOrigin, ImportBlock, ImportResult}; use network_libp2p::{NodeIndex, Severity}; use primitives::AuthorityId; @@ -42,6 +40,9 @@ use protocol::Context; use service::ExecuteInContext; use sync::ChainSync; +pub use consensus::{ImportBlock, ImportResult, BlockOrigin}; + + #[cfg(any(test, feature = "test-helpers"))] use std::cell::RefCell; @@ -65,7 +66,6 @@ pub trait ImportQueue: Send + Sync { /// /// This is called automatically by the network service when synchronization /// begins. - fn start( &self, _sync: Weak>>, @@ -284,7 +284,7 @@ struct SyncLink<'a, B: 'a + BlockT, E: 'a + ExecuteInContext> { } impl<'a, B: 'static + BlockT, E: 'a + ExecuteInContext> SyncLink<'a, B, E> { - /// Execute closure with locked ChainSync. + /// Execute closure with locked ChainSync. fn with_sync, &mut Context)>(&mut self, closure: F) { let service = self.context; let sync = self.chain; @@ -440,7 +440,6 @@ fn import_single_block>( trace!(target: "sync", "Verifying {}({}) failed: {}", number, hash, msg); } BlockImportError::VerificationFailed(peer, msg) - })?; match chain.import(import_block, new_authorities) { @@ -545,7 +544,7 @@ unsafe impl Sync for ImportCB {} #[cfg(any(test, feature = "test-helpers"))] /// A Verifier that accepts all blocks and passes them on with the configured -/// finality to be imported. +/// finality to be imported. pub struct PassThroughVerifier(pub bool); #[cfg(any(test, feature = "test-helpers"))] @@ -564,7 +563,7 @@ impl Verifier for PassThroughVerifier { body, finalized: self.0, external_justification: justification, - internal_justification: vec![], + post_runtime_digests: vec![], auxiliary: Vec::new(), }, None)) } diff --git a/substrate/core/network/src/lib.rs b/substrate/core/network/src/lib.rs index 82bdf0a877..4a441dcc6f 100644 --- a/substrate/core/network/src/lib.rs +++ b/substrate/core/network/src/lib.rs @@ -28,6 +28,7 @@ extern crate substrate_primitives as primitives; extern crate substrate_client as client; extern crate sr_primitives as runtime_primitives; extern crate substrate_network_libp2p as network_libp2p; +extern crate substrate_consensus_common as consensus; extern crate parity_codec as codec; extern crate futures; extern crate rustc_hex; diff --git a/substrate/core/network/src/protocol.rs b/substrate/core/network/src/protocol.rs index a8edaaceb6..4e98ee8f80 100644 --- a/substrate/core/network/src/protocol.rs +++ b/substrate/core/network/src/protocol.rs @@ -776,41 +776,41 @@ macro_rules! construct_simple_protocol { fn on_connect( &mut self, - ctx: &mut $crate::Context<$block>, - who: $crate::NodeIndex, - status: $crate::StatusMessage<$block> + _ctx: &mut $crate::Context<$block>, + _who: $crate::NodeIndex, + _status: $crate::StatusMessage<$block> ) { - $( self.$sub_protocol_name.on_connect(ctx, who, status); )* + $( self.$sub_protocol_name.on_connect(_ctx, _who, _status); )* } - fn on_disconnect(&mut self, ctx: &mut $crate::Context<$block>, who: $crate::NodeIndex) { - $( self.$sub_protocol_name.on_disconnect(ctx, who); )* + fn on_disconnect(&mut self, _ctx: &mut $crate::Context<$block>, _who: $crate::NodeIndex) { + $( self.$sub_protocol_name.on_disconnect(_ctx, _who); )* } fn on_message( &mut self, - ctx: &mut $crate::Context<$block>, - who: $crate::NodeIndex, - message: &mut Option<$crate::message::Message<$block>> + _ctx: &mut $crate::Context<$block>, + _who: $crate::NodeIndex, + _message: &mut Option<$crate::message::Message<$block>> ) { - $( self.$sub_protocol_name.on_message(ctx, who, message); )* + $( self.$sub_protocol_name.on_message(_ctx, _who, _message); )* } fn on_abort(&mut self) { $( self.$sub_protocol_name.on_abort(); )* } - fn maintain_peers(&mut self, ctx: &mut $crate::Context<$block>) { - $( self.$sub_protocol_name.maintain_peers(ctx); )* + fn maintain_peers(&mut self, _ctx: &mut $crate::Context<$block>) { + $( self.$sub_protocol_name.maintain_peers(_ctx); )* } fn on_block_imported( &mut self, - ctx: &mut $crate::Context<$block>, - hash: <$block as $crate::BlockT>::Hash, - header: &<$block as $crate::BlockT>::Header + _ctx: &mut $crate::Context<$block>, + _hash: <$block as $crate::BlockT>::Hash, + _header: &<$block as $crate::BlockT>::Header ) { - $( self.$sub_protocol_name.on_block_imported(ctx, hash, header); )* + $( self.$sub_protocol_name.on_block_imported(_ctx, _hash, _header); )* } } } diff --git a/substrate/core/network/src/service.rs b/substrate/core/network/src/service.rs index c4b10abe7e..0bed8db83d 100644 --- a/substrate/core/network/src/service.rs +++ b/substrate/core/network/src/service.rs @@ -178,6 +178,12 @@ impl, H: ExHashT> Service { } } +impl, H: ExHashT> ::consensus::SyncOracle for Service { + fn is_major_syncing(&self) -> bool { + self.handler.sync().read().status().is_major_syncing() + } +} + impl, H:ExHashT> Drop for Service { fn drop(&mut self) { self.handler.stop(); diff --git a/substrate/core/network/src/specialization.rs b/substrate/core/network/src/specialization.rs index ccd1071adb..70ad9e9b2e 100644 --- a/substrate/core/network/src/specialization.rs +++ b/substrate/core/network/src/specialization.rs @@ -25,9 +25,6 @@ pub trait Specialization: Send + Sync + 'static { /// Get the current specialization-status. fn status(&self) -> Vec; - /// Called on start-up. - fn on_start(&mut self) { } - /// Called when a peer successfully handshakes. fn on_connect(&mut self, ctx: &mut Context, who: NodeIndex, status: ::message::Status); diff --git a/substrate/core/network/src/sync.rs b/substrate/core/network/src/sync.rs index b758b8f205..e69b22fc57 100644 --- a/substrate/core/network/src/sync.rs +++ b/substrate/core/network/src/sync.rs @@ -18,7 +18,8 @@ use std::collections::HashMap; use std::sync::Arc; use protocol::Context; use network_libp2p::{Severity, NodeIndex}; -use client::{BlockStatus, BlockOrigin, ClientInfo}; +use client::{BlockStatus, ClientInfo}; +use consensus::BlockOrigin; use client::error::Error as ClientError; use blocks::{self, BlockCollection}; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, As, NumberFor}; @@ -77,6 +78,17 @@ pub struct Status { pub best_seen_block: Option>, } +impl Status { + /// Whether the synchronization status is doing major downloading work or + /// is near the head of the chain. + pub fn is_major_syncing(&self) -> bool { + match self.state { + SyncState::Idle => false, + SyncState::Downloading => true, + } + } +} + impl ChainSync { /// Create a new instance. pub(crate) fn new(role: Roles, info: &ClientInfo, import_queue: Arc>) -> Self { diff --git a/substrate/core/network/src/test/mod.rs b/substrate/core/network/src/test/mod.rs index 243e63e2b3..0da6523d0d 100644 --- a/substrate/core/network/src/test/mod.rs +++ b/substrate/core/network/src/test/mod.rs @@ -34,14 +34,16 @@ use service::TransactionPool; use network_libp2p::{NodeIndex, PeerId, Severity}; use keyring::Keyring; use codec::Encode; -use import_queue::{SyncImportQueue, PassThroughVerifier}; -use test_client::{self, TestClient}; +use import_queue::{SyncImportQueue, PassThroughVerifier, Verifier}; +use consensus::BlockOrigin; use specialization::Specialization; use consensus_gossip::ConsensusGossip; use import_queue::ImportQueue; use service::ExecuteInContext; +use test_client; pub use test_client::runtime::{Block, Hash, Transfer, Extrinsic}; +pub use test_client::TestClient; struct DummyContextExecutor(Arc>, Arc>>); unsafe impl Send for DummyContextExecutor {} @@ -135,20 +137,22 @@ pub struct TestPacket { recipient: NodeIndex, } -pub struct Peer { - client: Arc>, +pub type PeersClient = client::Client; + +pub struct Peer> { + client: Arc, pub sync: Arc>, pub queue: Arc>>, - import_queue: Arc>, + import_queue: Arc>, executor: Arc, } -impl Peer { +impl> Peer { fn new( - client: Arc>, + client: Arc, sync: Arc>, queue: Arc>>, - import_queue: Arc>, + import_queue: Arc>, ) -> Self { let executor = Arc::new(DummyContextExecutor(sync.clone(), queue.clone())); Peer { client, sync, queue, import_queue, executor} @@ -201,6 +205,13 @@ impl Peer { self.sync.tick(&mut TestIo::new(&self.queue, None)); } + /// Send block import notifications. + fn send_import_notifications(&self) { + let info = self.client.info().expect("In-mem client does not fail"); + let header = self.client.header(&BlockId::Hash(info.chain.best_hash)).unwrap().unwrap(); + self.sync.on_block_imported(&mut TestIo::new(&self.queue, None), info.chain.best_hash, &header); + } + /// Restart sync for a peer. fn restart_sync(&self) { self.sync.abort(); @@ -218,15 +229,18 @@ impl Peer { } /// Add blocks to the peer -- edit the block before adding - pub fn generate_blocks(&self, count: usize, mut edit_block: F) + pub fn generate_blocks(&self, count: usize, origin: BlockOrigin, mut edit_block: F) where F: FnMut(&mut BlockBuilder) { for _ in 0 .. count { let mut builder = self.client.new_block().unwrap(); edit_block(&mut builder); let block = builder.bake().unwrap(); - trace!("Generating {}, (#{}, parent={})", block.header.hash(), block.header.number, block.header.parent_hash); - self.client.justify_and_import(client::BlockOrigin::File, block).unwrap(); + let hash = block.header.hash(); + trace!("Generating {}, (#{}, parent={})", hash, block.header.number, block.header.parent_hash); + let header = block.header.clone(); + self.client.justify_and_import(origin, block).unwrap(); + self.sync.on_block_imported(&mut TestIo::new(&self.queue, None), hash, &header); } } @@ -234,7 +248,7 @@ impl Peer { pub fn push_blocks(&self, count: usize, with_tx: bool) { let mut nonce = 0; if with_tx { - self.generate_blocks(count, |builder| { + self.generate_blocks(count, BlockOrigin::File, |builder| { let transfer = Transfer { from: Keyring::Alice.to_raw_public().into(), to: Keyring::Alice.to_raw_public().into(), @@ -246,7 +260,7 @@ impl Peer { nonce = nonce + 1; }); } else { - self.generate_blocks(count, |_| ()); + self.generate_blocks(count, BlockOrigin::File, |_| ()); } } @@ -258,7 +272,7 @@ impl Peer { } /// Get a reference to the client. - pub fn client(&self) -> &Arc> { + pub fn client(&self) -> &Arc { &self.client } } @@ -277,25 +291,30 @@ impl TransactionPool for EmptyTransactionPool { fn on_broadcasted(&self, _: HashMap>) {} } -pub struct TestNet { - peers: Vec>, - started: bool, - disconnect_events: Vec<(NodeIndex, NodeIndex)>, //disconnected (initiated by, to) -} +pub trait TestNetFactory: Sized { + type Verifier: 'static + Verifier; -impl TestNet { - /// Create new test network with this many peers. - pub fn new(n: usize) -> Self { - Self::new_with_config(n, ProtocolConfig::default()) + /// These two need to be implemented! + fn from_config(config: &ProtocolConfig) -> Self; + fn make_verifier(&self, client: Arc, config: &ProtocolConfig) -> Arc; + + + /// Get reference to peer. + fn peer(&self, i: usize) -> &Peer; + fn peers(&self) -> &Vec>>; + fn mut_peers>>)>(&mut self, closure: F ); + + fn started(&self) -> bool; + fn set_started(&mut self, now: bool); + + fn default_config() -> ProtocolConfig { + ProtocolConfig::default() } - /// Create new test network with peers and given config. - pub fn new_with_config(n: usize, config: ProtocolConfig) -> Self { - let mut net = TestNet { - peers: Vec::new(), - started: false, - disconnect_events: Vec::new(), - }; + /// Create new test network with this many peers. + fn new(n: usize) -> Self { + let config = Self::default_config(); + let mut net = Self::from_config(&config); for _ in 0..n { net.add_peer(&config); @@ -304,10 +323,11 @@ impl TestNet { } /// Add a peer. - pub fn add_peer(&mut self, config: &ProtocolConfig) { + fn add_peer(&mut self, config: &ProtocolConfig) { let client = Arc::new(test_client::new()); let tx_pool = Arc::new(EmptyTransactionPool); - let import_queue = Arc::new(SyncImportQueue::new(Arc::new(PassThroughVerifier(false)))); + let verifier = self.make_verifier(client.clone(), config); + let import_queue = Arc::new(SyncImportQueue::new(verifier)); let specialization = DummySpecialization { gossip: ConsensusGossip::new(), }; @@ -320,93 +340,107 @@ impl TestNet { specialization ).unwrap(); - self.peers.push(Arc::new(Peer::new( + let peer = Arc::new(Peer::new( client, Arc::new(sync), Arc::new(RwLock::new(VecDeque::new())), import_queue - ))); - } + )); - /// Get reference to peer. - pub fn peer(&self, i: usize) -> &Peer { - &self.peers[i] + self.mut_peers(|peers| { + peers.push(peer.clone()) + }); } /// Start network. fn start(&mut self) { - if self.started { + if self.started() { return; } - for peer in 0..self.peers.len() { - self.peers[peer].start(); - for client in 0..self.peers.len() { - if peer != client { - self.peers[peer].on_connect(client as NodeIndex); + self.mut_peers(|peers| { + for peer in 0..peers.len() { + peers[peer].start(); + for client in 0..peers.len() { + if peer != client { + peers[peer].on_connect(client as NodeIndex); + } } } - } - self.started = true; + }); + self.set_started(true); } /// Do one step of routing. - pub fn route(&mut self) { - for peer in 0..self.peers.len() { - let packet = self.peers[peer].pending_message(); - if let Some(packet) = packet { - let disconnecting = { - let recipient = packet.recipient; - trace!("--- {} -> {} ---", peer, recipient); - let to_disconnect = self.peers[recipient].receive_message(peer as NodeIndex, packet); - for d in &to_disconnect { - // notify this that disconnecting peers are disconnecting - self.peers[recipient].on_disconnect(*d as NodeIndex); - self.disconnect_events.push((peer, *d)); + fn route(&mut self) { + self.mut_peers(move |peers| { + for peer in 0..peers.len() { + let packet = peers[peer].pending_message(); + if let Some(packet) = packet { + let disconnecting = { + let recipient = packet.recipient; + trace!(target: "sync", "--- {} -> {} ---", peer, recipient); + let to_disconnect = peers[recipient].receive_message(peer as NodeIndex, packet); + for d in &to_disconnect { + // notify this that disconnecting peers are disconnecting + peers[recipient].on_disconnect(*d as NodeIndex); + } + to_disconnect + }; + for d in &disconnecting { + // notify other peers that this peer is disconnecting + peers[*d].on_disconnect(peer as NodeIndex); } - to_disconnect - }; - for d in &disconnecting { - // notify other peers that this peer is disconnecting - self.peers[*d].on_disconnect(peer as NodeIndex); } } - } + }); } /// Route messages between peers until all queues are empty. - pub fn route_until_complete(&mut self) { + fn route_until_complete(&mut self) { while !self.done() { self.route() } } /// Do a step of synchronization. - pub fn sync_step(&mut self) { + fn sync_step(&mut self) { self.route(); - for peer in &mut self.peers { - peer.sync_step(); - } + self.mut_peers(|peers| { + for peer in peers { + peer.sync_step(); + } + }) + } + + /// Send block import notifications for all peers. + fn send_import_notifications(&mut self) { + self.mut_peers(|peers| { + for peer in peers { + peer.send_import_notifications(); + } + }) } /// Restart sync for a peer. - pub fn restart_peer(&mut self, i: usize) { - self.peers[i].restart_sync(); + fn restart_peer(&mut self, i: usize) { + self.peers()[i].restart_sync(); } /// Perform synchronization until complete. - pub fn sync(&mut self) -> u32 { + fn sync(&mut self) -> u32 { self.start(); let mut total_steps = 0; while !self.done() { self.sync_step(); total_steps += 1; + self.route(); } total_steps } /// Do the given amount of sync steps. - pub fn sync_steps(&mut self, count: usize) { + fn sync_steps(&mut self, count: usize) { self.start(); for _ in 0..count { self.sync_step(); @@ -414,7 +448,50 @@ impl TestNet { } /// Whether all peers have synced. - pub fn done(&self) -> bool { - self.peers.iter().all(|p| p.is_done()) + fn done(&self) -> bool { + self.peers().iter().all(|p| p.is_done()) + } +} + +pub struct TestNet { + peers: Vec>>, + started: bool +} + +impl TestNetFactory for TestNet { + type Verifier = PassThroughVerifier; + + /// Create new test network with peers and given config. + fn from_config(_config: &ProtocolConfig) -> Self { + TestNet { + peers: Vec::new(), + started: false + } + } + + fn make_verifier(&self, _client: Arc, _config: &ProtocolConfig) + -> Arc + { + Arc::new(PassThroughVerifier(false)) + } + + fn peer(&self, i: usize) -> &Peer { + &self.peers[i] + } + + fn peers(&self) -> &Vec>> { + &self.peers + } + + fn mut_peers>>)>(&mut self, closure: F ) { + closure(&mut self.peers); + } + + fn started(&self) -> bool { + self.started + } + + fn set_started(&mut self, new: bool) { + self.started = new; } } diff --git a/substrate/core/network/src/test/sync.rs b/substrate/core/network/src/test/sync.rs index 02531259f2..0f9e407828 100644 --- a/substrate/core/network/src/test/sync.rs +++ b/substrate/core/network/src/test/sync.rs @@ -16,6 +16,7 @@ use client::backend::Backend; use client::blockchain::HeaderBackend as BlockchainHeaderBackend; +use consensus::BlockOrigin; use sync::SyncState; use Roles; use super::*; @@ -68,6 +69,7 @@ fn sync_no_common_longer_chain_fails() { fn sync_after_fork_works() { ::env_logger::init().ok(); let mut net = TestNet::new(3); + net.sync_step(); net.peer(0).push_blocks(30, false); net.peer(1).push_blocks(30, false); net.peer(2).push_blocks(30, false); @@ -87,6 +89,20 @@ fn sync_after_fork_works() { assert!(net.peer(2).client.backend().blockchain().canon_equals_to(&peer1_chain)); } +#[test] +fn own_blocks_are_announced() { + ::env_logger::init().ok(); + let mut net = TestNet::new(3); + net.sync(); // connect'em + net.peer(0).generate_blocks(1, BlockOrigin::Own, |_| ()); + net.sync(); + assert_eq!(net.peer(0).client.backend().blockchain().info().unwrap().best_number, 1); + assert_eq!(net.peer(1).client.backend().blockchain().info().unwrap().best_number, 1); + let peer0_chain = net.peer(0).client.backend().blockchain().clone(); + assert!(net.peer(1).client.backend().blockchain().canon_equals_to(&peer0_chain)); + assert!(net.peer(2).client.backend().blockchain().canon_equals_to(&peer0_chain)); +} + #[test] fn blocks_are_not_announced_by_light_nodes() { ::env_logger::init().ok(); diff --git a/substrate/core/primitives/src/ed25519.rs b/substrate/core/primitives/src/ed25519.rs index 2047a0c7af..027298b4b1 100644 --- a/substrate/core/primitives/src/ed25519.rs +++ b/substrate/core/primitives/src/ed25519.rs @@ -31,7 +31,7 @@ pub type Signature = H512; pub const PKCS_LEN: usize = 85; /// A localized signature also contains sender information. -#[derive(PartialEq, Eq, Clone, Debug)] +#[derive(PartialEq, Eq, Clone, Debug, Encode, Decode)] pub struct LocalizedSignature { /// The signer of the signature. pub signer: Public, @@ -40,6 +40,7 @@ pub struct LocalizedSignature { } /// Verify a message without type checking the parameters' types for the right size. +/// Returns true if the signature is good. pub fn verify>(sig: &[u8], message: &[u8], public: P) -> bool { let public_key = untrusted::Input::from(public.as_ref()); let msg = untrusted::Input::from(message); @@ -52,7 +53,7 @@ pub fn verify>(sig: &[u8], message: &[u8], public: P) -> bool { } /// A public key. -#[derive(PartialEq, Eq, Clone)] +#[derive(PartialEq, Eq, Clone, Encode, Decode)] pub struct Public(pub [u8; 32]); /// A key pair. @@ -246,7 +247,7 @@ impl Pair { } } -/// Verify a signature on a message. +/// Verify a signature on a message. Returns true if the signature is good. pub fn verify_strong>(sig: &Signature, message: &[u8], pubkey: P) -> bool { let public_key = untrusted::Input::from(&pubkey.as_ref().0[..]); let msg = untrusted::Input::from(message); diff --git a/substrate/core/rpc/Cargo.toml b/substrate/core/rpc/Cargo.toml index 453b288c9d..3f35394c91 100644 --- a/substrate/core/rpc/Cargo.toml +++ b/substrate/core/rpc/Cargo.toml @@ -22,5 +22,6 @@ tokio = "0.1.7" [dev-dependencies] assert_matches = "1.1" substrate-test-client = { path = "../test-client" } +substrate-consensus-common = { path = "../consensus/common" } rustc-hex = "2.0" hex-literal = "0.1" diff --git a/substrate/core/rpc/src/chain/tests.rs b/substrate/core/rpc/src/chain/tests.rs index fc9817140d..644c7fed07 100644 --- a/substrate/core/rpc/src/chain/tests.rs +++ b/substrate/core/rpc/src/chain/tests.rs @@ -16,9 +16,9 @@ use super::*; use jsonrpc_macros::pubsub; -use client::BlockOrigin; use test_client::{self, TestClient}; use test_client::runtime::{Block, Header}; +use consensus::BlockOrigin; #[test] fn should_return_header() { diff --git a/substrate/core/rpc/src/lib.rs b/substrate/core/rpc/src/lib.rs index 9e4bd96978..dbbc8e3a6a 100644 --- a/substrate/core/rpc/src/lib.rs +++ b/substrate/core/rpc/src/lib.rs @@ -47,6 +47,8 @@ extern crate hex_literal; #[cfg(test)] extern crate substrate_test_client as test_client; #[cfg(test)] +extern crate substrate_consensus_common as consensus; +#[cfg(test)] extern crate rustc_hex; mod errors; diff --git a/substrate/core/rpc/src/state/tests.rs b/substrate/core/rpc/src/state/tests.rs index 74b5fab841..71978f88ea 100644 --- a/substrate/core/rpc/src/state/tests.rs +++ b/substrate/core/rpc/src/state/tests.rs @@ -17,7 +17,7 @@ use super::*; use self::error::{Error, ErrorKind}; -use client::BlockOrigin; +use consensus::BlockOrigin; use jsonrpc_macros::pubsub; use rustc_hex::FromHex; use test_client::{self, runtime, keyring::Keyring, TestClient, BlockBuilderExt}; diff --git a/substrate/core/service/Cargo.toml b/substrate/core/service/Cargo.toml index 694cd5a553..a15e010d5c 100644 --- a/substrate/core/service/Cargo.toml +++ b/substrate/core/service/Cargo.toml @@ -20,6 +20,7 @@ substrate-keystore = { path = "../../core/keystore" } sr-io = { path = "../../core/sr-io" } sr-primitives = { path = "../../core/sr-primitives" } substrate-primitives = { path = "../../core/primitives" } +substrate-consensus-common = { path = "../../core/consensus/common" } substrate-network = { path = "../../core/network" } substrate-client = { path = "../../core/client" } substrate-client-db = { path = "../../core/client/db" } diff --git a/substrate/core/service/src/chain_ops.rs b/substrate/core/service/src/chain_ops.rs index 38aabe7d68..e94db8c6f0 100644 --- a/substrate/core/service/src/chain_ops.rs +++ b/substrate/core/service/src/chain_ops.rs @@ -20,11 +20,12 @@ use std::{self, io::{Read, Write}}; use futures::Future; use serde_json; -use client::BlockOrigin; use runtime_primitives::generic::{SignedBlock, BlockId}; use runtime_primitives::traits::{As, Block, Header}; use network::import_queue::{ImportQueue, BlockData}; use network::message; + +use consensus_common::BlockOrigin; use components::{self, Components, ServiceFactory, FactoryFullConfiguration, FactoryBlockNumber, RuntimeGenesis}; use new_client; use codec::{Decode, Encode}; diff --git a/substrate/core/service/src/components.rs b/substrate/core/service/src/components.rs index a30fb9940e..d2503ded23 100644 --- a/substrate/core/service/src/components.rs +++ b/substrate/core/service/src/components.rs @@ -25,7 +25,7 @@ use chain_spec::ChainSpec; use client_db; use client::{self, Client}; use {error, Service}; -use network::{self, OnDemand}; +use network::{self, OnDemand, import_queue::ImportQueue}; use substrate_executor::{NativeExecutor, NativeExecutionDispatch}; use transaction_pool::txpool::{self, Options as TransactionPoolOptions, Pool as TransactionPool}; use runtime_primitives::{traits::Block as BlockT, traits::Header as HeaderT, BuildStorage}; @@ -136,8 +136,10 @@ pub trait ServiceFactory: 'static + Sized { type FullService: Deref>> + Send + Sync + 'static; /// Extended light service type. type LightService: Deref>> + Send + Sync + 'static; - /// ImportQueue - type ImportQueue: network::import_queue::ImportQueue + 'static; + /// ImportQueue for full client + type FullImportQueue: network::import_queue::ImportQueue + 'static; + /// ImportQueue for light clients + type LightImportQueue: network::import_queue::ImportQueue + 'static; //TODO: replace these with a constructor trait. that TransactionPool implements. /// Extrinsic pool constructor for the full client. @@ -162,7 +164,7 @@ pub trait ServiceFactory: 'static + Sized { fn build_full_import_queue( config: &FactoryFullConfiguration, _client: Arc> - ) -> Result { + ) -> Result { if let Some(name) = config.chain_spec.consensus_engine() { match name { _ => Err(format!("Chain Specification defines unknown consensus engine '{}'", name).into()) @@ -177,7 +179,7 @@ pub trait ServiceFactory: 'static + Sized { fn build_light_import_queue( config: &FactoryFullConfiguration, _client: Arc> - ) -> Result { + ) -> Result { if let Some(name) = config.chain_spec.consensus_engine() { match name { _ => Err(format!("Chain Specification defines unknown consensus engine '{}'", name).into()) @@ -196,13 +198,16 @@ pub trait Components: 'static { /// Client backend. type Backend: 'static + client::backend::Backend, Blake2Hasher>; /// Client executor. - type Executor: 'static + client::CallExecutor, Blake2Hasher> + Send + Sync; + type Executor: 'static + client::CallExecutor, Blake2Hasher> + Send + Sync + Clone; /// Extrinsic pool type. type TransactionPoolApi: 'static + txpool::ChainApi< Hash = <::Block as BlockT>::Hash, Block = FactoryBlock >; + /// Our Import Queue + type ImportQueue: ImportQueue> + 'static; + /// Create client. fn build_client( config: &FactoryFullConfiguration, @@ -221,7 +226,7 @@ pub trait Components: 'static { fn build_import_queue( config: &FactoryFullConfiguration, client: Arc> - ) -> Result<::ImportQueue, error::Error>; + ) -> Result; } /// A struct that implement `Components` for the full client. @@ -234,6 +239,7 @@ impl Components for FullComponents { type Executor = FullExecutor; type Backend = FullBackend; type TransactionPoolApi = ::FullTransactionPoolApi; + type ImportQueue = Factory::FullImportQueue; fn build_client( config: &FactoryFullConfiguration, @@ -267,7 +273,7 @@ impl Components for FullComponents { fn build_import_queue( config: &FactoryFullConfiguration, client: Arc> - ) -> Result<::ImportQueue, error::Error> { + ) -> Result { Factory::build_full_import_queue(config, client) } } @@ -282,6 +288,7 @@ impl Components for LightComponents { type Executor = LightExecutor; type Backend = LightBackend; type TransactionPoolApi = ::LightTransactionPoolApi; + type ImportQueue = ::LightImportQueue; fn build_client( config: &FactoryFullConfiguration, @@ -316,7 +323,7 @@ impl Components for LightComponents { fn build_import_queue( config: &FactoryFullConfiguration, client: Arc> - ) -> Result<::ImportQueue, error::Error> { + ) -> Result { Factory::build_light_import_queue(config, client) } } diff --git a/substrate/core/service/src/consensus.rs b/substrate/core/service/src/consensus.rs new file mode 100644 index 0000000000..61968ee04d --- /dev/null +++ b/substrate/core/service/src/consensus.rs @@ -0,0 +1,263 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! provide consensus service to substrate. + +// FIXME: move this into substrate-consensus-common - https://github.com/paritytech/substrate/issues/1021 + +use std::sync::Arc; +use std::time::{self, Duration, Instant}; +use std; + +use client::{self, error, Client as SubstrateClient, CallExecutor}; +use client::runtime_api::{Core, BlockBuilder as BlockBuilderAPI, id::BLOCK_BUILDER}; +use codec::{Decode, Encode}; +use consensus_common::{self, InherentData, evaluation, offline_tracker::OfflineTracker}; +use primitives::{AuthorityId, ed25519, Blake2Hasher}; +use runtime_primitives::traits::{Block as BlockT, Hash as HashT, Header as HeaderT}; +use runtime_primitives::generic::BlockId; +use transaction_pool::txpool::{self, Pool as TransactionPool}; + +use parking_lot::RwLock; + +/// Shared offline validator tracker. +pub type SharedOfflineTracker = Arc>; +type Timestamp = u64; + +// block size limit. +const MAX_TRANSACTIONS_SIZE: usize = 4 * 1024 * 1024; + +/// Build new blocks. +pub trait BlockBuilder { + /// Push an extrinsic onto the block. Fails if the extrinsic is invalid. + fn push_extrinsic(&mut self, extrinsic: ::Extrinsic) -> Result<(), error::Error>; +} + +/// Local client abstraction for the consensus. +pub trait AuthoringApi: + Send + + Sync + + BlockBuilderAPI<::Block, Error=::Error> + + Core<::Block, AuthorityId, Error=::Error> +{ + /// The block used for this API type. + type Block: BlockT; + /// The error used by this API type. + type Error: std::error::Error; + + /// Build a block on top of the given, with inherent extrinsics pre-pushed. + fn build_block) -> ()>( + &self, + at: &BlockId, + inherent_data: InherentData, + build_ctx: F, + ) -> Result; +} + +impl<'a, B, E, Block> BlockBuilder for client::block_builder::BlockBuilder<'a, B, E, Block, Blake2Hasher> where + B: client::backend::Backend + Send + Sync + 'static, + E: CallExecutor + Send + Sync + Clone + 'static, + Block: BlockT +{ + fn push_extrinsic(&mut self, extrinsic: ::Extrinsic) -> Result<(), error::Error> { + client::block_builder::BlockBuilder::push(self, extrinsic).map_err(Into::into) + } +} + +impl<'a, B, E, Block> AuthoringApi for SubstrateClient where + B: client::backend::Backend + Send + Sync + 'static, + E: CallExecutor + Send + Sync + Clone + 'static, + Block: BlockT, +{ + type Block = Block; + type Error = client::error::Error; + + fn build_block) -> ()>( + &self, + at: &BlockId, + inherent_data: InherentData, + mut build_ctx: F, + ) -> Result { + let runtime_version = self.runtime_version_at(at)?; + + let mut block_builder = self.new_block_at(at)?; + if runtime_version.has_api(BLOCK_BUILDER, 1) { + self.inherent_extrinsics(at, &inherent_data)? + .into_iter().try_for_each(|i| block_builder.push(i))?; + } + + build_ctx(&mut block_builder); + + block_builder.bake().map_err(Into::into) + } +} + +/// Proposer factory. +pub struct ProposerFactory where + C: AuthoringApi, + A: txpool::ChainApi, +{ + /// The client instance. + pub client: Arc, + /// The transaction pool. + pub transaction_pool: Arc>, + /// Offline-tracker. + pub offline: SharedOfflineTracker, + /// Force delay in evaluation this long. + pub force_delay: Timestamp, +} + +impl consensus_common::Environment<::Block> for ProposerFactory where + C: AuthoringApi, + A: txpool::ChainApi::Block>, + client::error::Error: From<::Error> +{ + type Proposer = Proposer; + type Error = error::Error; + + fn init( + &self, + parent_header: &<::Block as BlockT>::Header, + _: &[AuthorityId], + _: Arc, + ) -> Result { + let parent_hash = parent_header.hash(); + + let id = BlockId::hash(parent_hash); + + let authorities: Vec = self.client.authorities(&id)?; + self.offline.write().note_new_block(&authorities[..]); + + info!("Starting consensus session on top of parent {:?}", parent_hash); + + let now = Instant::now(); + let proposer = Proposer { + client: self.client.clone(), + start: now, + parent_hash, + parent_id: id, + parent_number: *parent_header.number(), + transaction_pool: self.transaction_pool.clone(), + offline: self.offline.clone(), + authorities, + minimum_timestamp: current_timestamp() + self.force_delay, + }; + + Ok(proposer) + } +} + +/// The proposer logic. +pub struct Proposer { + client: Arc, + start: Instant, + parent_hash: <::Block as BlockT>::Hash, + parent_id: BlockId<::Block>, + parent_number: <<::Block as BlockT>::Header as HeaderT>::Number, + transaction_pool: Arc>, + offline: SharedOfflineTracker, + authorities: Vec, + minimum_timestamp: u64, +} + +impl consensus_common::Proposer<::Block> for Proposer where + C: AuthoringApi, + A: txpool::ChainApi::Block>, + client::error::Error: From<::Error> +{ + type Create = Result<::Block, error::Error>; + type Error = error::Error; + + fn propose(&self) -> Result<::Block, error::Error> { + use runtime_primitives::traits::BlakeTwo256; + + const MAX_VOTE_OFFLINE_SECONDS: Duration = Duration::from_secs(60); + + let timestamp = ::std::cmp::max(self.minimum_timestamp, current_timestamp()); + + let elapsed_since_start = self.start.elapsed(); + let offline_indices = if elapsed_since_start > MAX_VOTE_OFFLINE_SECONDS { + Vec::new() + } else { + self.offline.read().reports(&self.authorities[..]) + }; + + if !offline_indices.is_empty() { + info!("Submitting offline authorities {:?} for slash-vote", + offline_indices.iter().map(|&i| self.authorities[i as usize]).collect::>(), + ) + } + + let inherent_data = InherentData { + timestamp, + offline_indices, + }; + + let block = self.client.build_block( + &self.parent_id, + inherent_data, + |block_builder| { + let mut unqueue_invalid = Vec::new(); + let mut pending_size = 0; + let pending_iterator = self.transaction_pool.ready(); + + for pending in pending_iterator { + // TODO [ToDr] Probably get rid of it, and validate in runtime. + let encoded_size = pending.data.encode().len(); + if pending_size + encoded_size >= MAX_TRANSACTIONS_SIZE { break } + + match block_builder.push_extrinsic(pending.data.clone()) { + Ok(()) => { + pending_size += encoded_size; + } + Err(e) => { + trace!(target: "transaction-pool", "Invalid transaction: {}", e); + unqueue_invalid.push(pending.hash.clone()); + } + } + } + + self.transaction_pool.remove_invalid(&unqueue_invalid); + })?; + + info!("Proposing block [number: {}; hash: {}; parent_hash: {}; extrinsics: [{}]]", + block.header().number(), + <::Block as BlockT>::Hash::from(block.header().hash()), + block.header().parent_hash(), + block.extrinsics().iter() + .map(|xt| format!("{}", BlakeTwo256::hash_of(xt))) + .collect::>() + .join(", ") + ); + + let substrate_block = Decode::decode(&mut block.encode().as_slice()) + .expect("blocks are defined to serialize to substrate blocks correctly; qed"); + + assert!(evaluation::evaluate_initial( + &substrate_block, + &self.parent_hash, + self.parent_number, + ).is_ok()); + + Ok(substrate_block) + } +} + +fn current_timestamp() -> Timestamp { + time::SystemTime::now().duration_since(time::UNIX_EPOCH) + .expect("now always later than unix epoch; qed") + .as_secs() +} diff --git a/substrate/core/service/src/lib.rs b/substrate/core/service/src/lib.rs index 2acc8d7661..9e7c201e8f 100644 --- a/substrate/core/service/src/lib.rs +++ b/substrate/core/service/src/lib.rs @@ -29,6 +29,7 @@ extern crate parking_lot; extern crate substrate_keystore as keystore; extern crate substrate_primitives as primitives; extern crate sr_primitives as runtime_primitives; +extern crate substrate_consensus_common as consensus_common; extern crate substrate_network as network; extern crate substrate_executor; extern crate substrate_client as client; @@ -56,6 +57,7 @@ mod error; mod chain_spec; pub mod config; pub mod chain_ops; +pub mod consensus; use std::io; use std::net::SocketAddr; @@ -63,7 +65,7 @@ use std::collections::HashMap; #[doc(hidden)] pub use std::{ops::Deref, result::Result, sync::Arc}; use futures::prelude::*; -use parking_lot::Mutex; +use parking_lot::{Mutex, RwLock}; use keystore::Store as Keystore; use client::BlockchainEvents; use runtime_primitives::traits::{Header, As}; @@ -80,6 +82,8 @@ pub use chain_spec::ChainSpec; pub use transaction_pool::txpool::{self, Pool as TransactionPool, Options as TransactionPoolOptions, ChainApi, IntoPoolError}; pub use client::ExecutionStrategy; +use consensus_common::offline_tracker::OfflineTracker; +pub use consensus::ProposerFactory; pub use components::{ServiceFactory, FullBackend, FullExecutor, LightBackend, LightExecutor, Components, PoolApi, ComponentClient, ComponentBlock, FullClient, LightClient, FullComponents, LightComponents, @@ -98,6 +102,7 @@ pub struct Service { keystore: Keystore, exit: ::exit_future::Exit, signal: Option, + proposer: Arc, Components::TransactionPoolApi>>, _rpc_http: Option, _rpc_ws: Option>, // WsServer is not `Sync`, but the service needs to be. _telemetry: Option, @@ -118,6 +123,7 @@ pub fn new_client(config: &FactoryFullConfi impl Service where Components: components::Components, + ::Executor: std::clone::Clone, txpool::ExHash: serde::de::DeserializeOwned + serde::Serialize, txpool::ExtrinsicFor: serde::de::DeserializeOwned + serde::Serialize, { @@ -254,6 +260,13 @@ impl Service ) }; + let proposer = Arc::new(ProposerFactory { + client: client.clone(), + transaction_pool: transaction_pool.clone(), + offline: Arc::new(RwLock::new(OfflineTracker::new())), + force_delay: 0 // FIXME: allow this to be configured + }); + // Telemetry let telemetry = match config.telemetry_url { Some(url) => { @@ -287,6 +300,7 @@ impl Service transaction_pool: transaction_pool, signal: Some(signal), keystore: keystore, + proposer, exit, _rpc_http: rpc_http, _rpc_ws: rpc_ws.map(Mutex::new), @@ -303,6 +317,13 @@ impl Service where self.client.clone() } + /// Get shared proposer instance + pub fn proposer(&self) + -> Arc, Components::TransactionPoolApi>> + { + self.proposer.clone() + } + /// Get shared network instance. pub fn network(&self) -> Arc> { self.network.as_ref().expect("self.network always Some").clone() @@ -324,6 +345,7 @@ impl Service where } } + impl Drop for Service where Components: components::Components { fn drop(&mut self) { debug!(target: "service", "Substrate service shutdown"); @@ -450,7 +472,7 @@ macro_rules! construct_simple_service { $name: ident ) => { pub struct $name { - inner: $crate::Service, + inner: $crate::Arc<$crate::Service>, } impl $name { @@ -460,7 +482,7 @@ macro_rules! construct_simple_service { ) -> $crate::Result { Ok( Self { - inner: $crate::Service::new(config, executor)? + inner: $crate::Arc::new($crate::Service::new(config, executor)?) } ) } @@ -525,8 +547,9 @@ macro_rules! construct_service_factory { Configuration = $config:ty, FullService = $full_service:ty { $( $full_service_init:tt )* }, LightService = $light_service:ty { $( $light_service_init:tt )* }, - ImportQueue = $import_queue:ty - { $( $full_import_queue_init:tt )* } + FullImportQueue = $full_import_queue:ty + { $( $full_import_queue_init:tt )* }, + LightImportQueue = $light_import_queue:ty { $( $light_import_queue_init:tt )* }, } ) => { @@ -544,7 +567,8 @@ macro_rules! construct_service_factory { type Configuration = $config; type FullService = $full_service; type LightService = $light_service; - type ImportQueue = $import_queue; + type FullImportQueue = $full_import_queue; + type LightImportQueue = $light_import_queue; fn build_full_transaction_pool( config: $crate::TransactionPoolOptions, @@ -571,14 +595,14 @@ macro_rules! construct_service_factory { fn build_full_import_queue( config: &$crate::FactoryFullConfiguration, client: $crate::Arc<$crate::FullClient>, - ) -> $crate::Result { + ) -> $crate::Result { ( $( $full_import_queue_init )* ) (config, client) } fn build_light_import_queue( config: &FactoryFullConfiguration, client: Arc<$crate::LightClient>, - ) -> Result { + ) -> Result { ( $( $light_import_queue_init )* ) (config, client) } diff --git a/substrate/core/service/test/Cargo.toml b/substrate/core/service/test/Cargo.toml index cfdfacf4da..12282b16f1 100644 --- a/substrate/core/service/test/Cargo.toml +++ b/substrate/core/service/test/Cargo.toml @@ -12,6 +12,7 @@ env_logger = "0.4" fdlimit = "0.1" substrate-service = { path = "../../../core/service" } substrate-network = { path = "../../../core/network" } +substrate-consensus-common = { path = "../../../core/consensus/common" } substrate-primitives = { path = "../../../core/primitives" } substrate-client = { path = "../../../core/client" } sr-primitives = { path = "../../../core/sr-primitives" } diff --git a/substrate/core/service/test/src/lib.rs b/substrate/core/service/test/src/lib.rs index 31ac007c4f..0a967e3cd6 100644 --- a/substrate/core/service/test/src/lib.rs +++ b/substrate/core/service/test/src/lib.rs @@ -27,6 +27,7 @@ extern crate substrate_service as service; extern crate substrate_network as network; extern crate substrate_primitives as primitives; extern crate substrate_client as client; +extern crate substrate_consensus_common as consensus; extern crate sr_primitives; use std::iter; use std::sync::Arc; @@ -47,9 +48,9 @@ use service::{ FactoryExtrinsic, }; use network::{NetworkConfiguration, NonReservedPeerMode, Protocol, SyncProvider, ManageNetwork}; -use client::ImportBlock; use sr_primitives::traits::As; use sr_primitives::generic::BlockId; +use consensus::{ImportBlock, BlockImport}; struct TestNet { runtime: Runtime, diff --git a/substrate/core/sr-api/src/lib.rs b/substrate/core/sr-api/src/lib.rs index 0ddc89b14e..7fffc43590 100644 --- a/substrate/core/sr-api/src/lib.rs +++ b/substrate/core/sr-api/src/lib.rs @@ -28,7 +28,7 @@ extern crate sr_version as runtime_version; #[doc(hidden)] pub use primitives::{traits::Block as BlockT, generic::BlockId, transaction_validity::TransactionValidity, ApplyResult}; -use runtime_version::RuntimeVersion; +use runtime_version::{ApiId, RuntimeVersion}; use rstd::vec::Vec; #[doc(hidden)] pub use rstd::slice; @@ -429,6 +429,20 @@ macro_rules! decl_apis { }; } +/// The ApiIds for the various standard runtime APIs. +pub mod id { + use super::ApiId; + + /// ApiId for the BlockBuilder trait. + pub const BLOCK_BUILDER: ApiId = *b"blkbuild"; + + /// ApiId for the TaggedTransactionQueue trait. + pub const TAGGED_TRANSACTION_QUEUE: ApiId = *b"validatx"; + + /// ApiId for the Metadata trait. + pub const METADATA: ApiId = *b"metadata"; +} + decl_apis! { /// The `Core` api trait that is mandantory for each runtime. pub trait Core { @@ -453,13 +467,6 @@ decl_apis! { fn validate_transaction(tx: ::Extrinsic) -> TransactionValidity; } - /// The `Miscellaneous` api trait for getting miscellaneous information from the runtime. - pub trait Miscellaneous { - fn validator_count() -> u32; - fn validators() -> Vec; - fn timestamp() -> Moment; - } - /// The `BlockBuilder` api trait that provides required functions for building a block for a runtime. pub trait BlockBuilder ExtraClientSide { /// Initialise a block with the given header. diff --git a/substrate/core/sr-primitives/Cargo.toml b/substrate/core/sr-primitives/Cargo.toml index df80d43a9f..45e0396df3 100644 --- a/substrate/core/sr-primitives/Cargo.toml +++ b/substrate/core/sr-primitives/Cargo.toml @@ -31,3 +31,4 @@ std = [ "substrate-primitives/std", ] api-for-runtime = [] + diff --git a/substrate/core/sr-primitives/src/generic/digest.rs b/substrate/core/sr-primitives/src/generic/digest.rs index 4d44ff5ce0..41ffd6da0d 100644 --- a/substrate/core/sr-primitives/src/generic/digest.rs +++ b/substrate/core/sr-primitives/src/generic/digest.rs @@ -21,6 +21,8 @@ use rstd::prelude::*; use codec::{Decode, Encode, Codec, Input}; use traits::{self, Member, DigestItem as DigestItemT}; +use substrate_primitives::hash::H512 as Signature; + #[derive(PartialEq, Eq, Clone, Encode, Decode)] #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] pub struct Digest { @@ -46,6 +48,10 @@ impl traits::Digest for Digest where fn push(&mut self, item: Self::Item) { self.logs.push(item); } + + fn pop(&mut self) -> Option { + self.logs.pop() + } } /// Digest item that is able to encode/decode 'system' digest items and @@ -60,10 +66,13 @@ pub enum DigestItem { /// block. It is created for every block iff runtime supports changes /// trie creation. ChangesTrieRoot(Hash), + /// Put a Seal on it + Seal(u64, Signature), /// Any 'non-system' digest item, opaque to the native code. Other(Vec), } + /// A 'referencing view' for digest item. Does not own its contents. Used by /// final runtime implementations for encoding/decoding its log items. #[derive(PartialEq, Eq, Clone)] @@ -73,6 +82,9 @@ pub enum DigestItemRef<'a, Hash: 'a, AuthorityId: 'a> { AuthoritiesChange(&'a [AuthorityId]), /// Reference to `DigestItem::ChangesTrieRoot`. ChangesTrieRoot(&'a Hash), + /// A sealed signature for testing + Seal(&'a u64, &'a Signature), + /// Any 'non-system' digest item, opaque to the native code. /// Reference to `DigestItem::Other`. Other(&'a Vec), } @@ -87,6 +99,7 @@ enum DigestItemType { Other = 0, AuthoritiesChange, ChangesTrieRoot, + Seal, } impl DigestItem { @@ -103,6 +116,7 @@ impl DigestItem { match *self { DigestItem::AuthoritiesChange(ref v) => DigestItemRef::AuthoritiesChange(v), DigestItem::ChangesTrieRoot(ref v) => DigestItemRef::ChangesTrieRoot(v), + DigestItem::Seal(ref v, ref s) => DigestItemRef::Seal(v, s), DigestItem::Other(ref v) => DigestItemRef::Other(v), } } @@ -137,6 +151,10 @@ impl Decode for DigestItem DigestItemType::ChangesTrieRoot => Some(DigestItem::ChangesTrieRoot( Decode::decode(input)?, )), + DigestItemType::Seal => { + let vals: (u64, Signature) = Decode::decode(input)?; + Some(DigestItem::Seal(vals.0, vals.1)) + }, DigestItemType::Other => Some(DigestItem::Other( Decode::decode(input)?, )), @@ -173,6 +191,10 @@ impl<'a, Hash: Encode, AuthorityId: Encode> Encode for DigestItemRef<'a, Hash, A DigestItemType::ChangesTrieRoot.encode_to(&mut v); changes_trie_root.encode_to(&mut v); }, + DigestItemRef::Seal(val, sig) => { + DigestItemType::Seal.encode_to(&mut v); + (val, sig).encode_to(&mut v); + }, DigestItemRef::Other(val) => { DigestItemType::Other.encode_to(&mut v); val.encode_to(&mut v); diff --git a/substrate/core/sr-primitives/src/generic/header.rs b/substrate/core/sr-primitives/src/generic/header.rs index ff8222c59a..fc6f73b5cf 100644 --- a/substrate/core/sr-primitives/src/generic/header.rs +++ b/substrate/core/sr-primitives/src/generic/header.rs @@ -137,6 +137,7 @@ impl traits::Header for Header &Self::Digest { &self.digest } + fn digest_mut(&mut self) -> &mut Self::Digest { &mut self.digest } fn set_digest(&mut self, digest: Self::Digest) { self.digest = digest } fn new( diff --git a/substrate/core/sr-primitives/src/testing.rs b/substrate/core/sr-primitives/src/testing.rs index ab57f1aa6c..847af9a3c2 100644 --- a/substrate/core/sr-primitives/src/testing.rs +++ b/substrate/core/sr-primitives/src/testing.rs @@ -42,6 +42,10 @@ impl traits::Digest for Digest { fn push(&mut self, item: Self::Item) { self.logs.push(item); } + + fn pop(&mut self) -> Option { + self.logs.pop() + } } #[derive(PartialEq, Eq, Clone, Serialize, Deserialize, Debug, Encode, Decode)] @@ -74,6 +78,7 @@ impl traits::Header for Header { fn set_parent_hash(&mut self, hash: Self::Hash) { self.parent_hash = hash } fn digest(&self) -> &Self::Digest { &self.digest } + fn digest_mut(&mut self) -> &mut Self::Digest { &mut self.digest } fn set_digest(&mut self, digest: Self::Digest) { self.digest = digest } fn new( diff --git a/substrate/core/sr-primitives/src/traits.rs b/substrate/core/sr-primitives/src/traits.rs index 4fc09f3e9e..0ee2db117a 100644 --- a/substrate/core/sr-primitives/src/traits.rs +++ b/substrate/core/sr-primitives/src/traits.rs @@ -197,11 +197,13 @@ impl Clear for T { pub trait SimpleBitOps: Sized + Clear + rstd::ops::BitOr + + rstd::ops::BitXor + rstd::ops::BitAnd {} impl + + rstd::ops::BitXor + rstd::ops::BitAnd > SimpleBitOps for T {} @@ -429,6 +431,8 @@ pub trait Header: Clone + Send + Sync + Codec + Eq + MaybeSerializeDebug + 'stat fn set_parent_hash(&mut self, Self::Hash); fn digest(&self) -> &Self::Digest; + /// Get a mutable reference to the digest. + fn digest_mut(&mut self) -> &mut Self::Digest; fn set_digest(&mut self, Self::Digest); fn hash(&self) -> Self::Hash { @@ -458,6 +462,10 @@ pub trait Block: Clone + Send + Sync + Codec + Eq + MaybeSerializeDebug + 'stati pub type HashFor = <::Header as Header>::Hashing; /// Extract the number type for a block. pub type NumberFor = <::Header as Header>::Number; +/// Extract the digest type for a block. +pub type DigestFor = <::Header as Header>::Digest; +/// Extract the digest item type for a block. +pub type DigestItemFor = as Digest>::Item; /// A "checkable" piece of information, used by the standard Substrate Executive in order to /// check the validity of a piece of extrinsic information, usually by verifying the signature. @@ -516,6 +524,8 @@ pub trait Digest: Member + Default { fn logs(&self) -> &[Self::Item]; /// Push new digest item. fn push(&mut self, item: Self::Item); + /// Pop a digest item. + fn pop(&mut self) -> Option; /// Get reference to the first digest item that matches the passed predicate. fn log Option<&T>>(&self, predicate: F) -> Option<&T> { diff --git a/substrate/core/state-machine/src/lib.rs b/substrate/core/state-machine/src/lib.rs index 4853b2afb5..9bb9110886 100644 --- a/substrate/core/state-machine/src/lib.rs +++ b/substrate/core/state-machine/src/lib.rs @@ -64,6 +64,9 @@ pub use overlayed_changes::OverlayedChanges; pub use trie_backend_essence::Storage; pub use trie_backend::TrieBackend; +/// Default num of pages for the heap +const DEFAULT_HEAP_PAGES :u64 = 1024; + /// State Machine Error bound. /// /// This should reflect WASM error type bound for future compatibility. @@ -291,7 +294,7 @@ where .to_vec(); let heap_pages = try_read_overlay_value(overlay, backend, well_known_keys::HEAP_PAGES)? - .and_then(|v| u64::decode(&mut &v[..])).unwrap_or(8) as usize; + .and_then(|v| u64::decode(&mut &v[..])).unwrap_or(DEFAULT_HEAP_PAGES) as usize; // read changes trie configuration. The reason why we're doing it here instead of the // `OverlayedChanges` constructor is that we need proofs for this read as a part of diff --git a/substrate/core/test-client/Cargo.toml b/substrate/core/test-client/Cargo.toml index a1bf2f592e..aa48f95211 100644 --- a/substrate/core/test-client/Cargo.toml +++ b/substrate/core/test-client/Cargo.toml @@ -7,6 +7,7 @@ authors = ["Parity Technologies "] substrate-client = { path = "../client" } parity-codec = "2.1" substrate-executor = { path = "../executor" } +substrate-consensus-common = { path = "../consensus/common" } substrate-keyring = { path = "../../core/keyring" } substrate-primitives = { path = "../primitives" } substrate-test-runtime = { path = "../test-runtime" } diff --git a/substrate/core/test-client/src/client_ext.rs b/substrate/core/test-client/src/client_ext.rs index 76e9888d0b..61133c4d9d 100644 --- a/substrate/core/test-client/src/client_ext.rs +++ b/substrate/core/test-client/src/client_ext.rs @@ -16,15 +16,17 @@ //! Client extension for tests. -use client::{self, ImportBlock, Client}; +use client::{self, Client}; +use consensus::{ImportBlock, BlockImport, BlockOrigin}; use runtime_primitives::generic::BlockId; use primitives::Blake2Hasher; use runtime; /// Extension trait for a test client. -pub trait TestClient { +pub trait TestClient: Sized { /// Justify and import block to the chain. No finality. - fn justify_and_import(&self, origin: client::BlockOrigin, block: runtime::Block) -> client::error::Result<()>; + fn justify_and_import(&self, origin: BlockOrigin, block: runtime::Block) + -> client::error::Result<()>; /// Finalize a block. fn finalize_block(&self, id: BlockId) -> client::error::Result<()>; @@ -36,21 +38,23 @@ pub trait TestClient { impl TestClient for Client where B: client::backend::Backend, - E: client::CallExecutor + E: client::CallExecutor, + Self: BlockImport { - fn justify_and_import(&self, origin: client::BlockOrigin, block: runtime::Block) -> client::error::Result<()> { + fn justify_and_import(&self, origin: BlockOrigin, block: runtime::Block) + -> client::error::Result<()> + { let import = ImportBlock { origin, header: block.header, external_justification: vec![], - internal_justification: vec![], + post_runtime_digests: vec![], body: Some(block.extrinsics), finalized: false, auxiliary: Vec::new(), }; - self.import_block(import, None)?; - Ok(()) + self.import_block(import, None).map(|_| ()) } fn finalize_block(&self, id: BlockId) -> client::error::Result<()> { diff --git a/substrate/core/test-client/src/lib.rs b/substrate/core/test-client/src/lib.rs index b692d4858b..ff3cfbac0e 100644 --- a/substrate/core/test-client/src/lib.rs +++ b/substrate/core/test-client/src/lib.rs @@ -28,6 +28,7 @@ extern crate sr_primitives as runtime_primitives; pub extern crate substrate_client as client; pub extern crate substrate_keyring as keyring; pub extern crate substrate_test_runtime as runtime; +pub extern crate substrate_consensus_common as consensus; pub mod client_ext; pub mod trait_tests; diff --git a/substrate/core/test-client/src/trait_tests.rs b/substrate/core/test-client/src/trait_tests.rs index 86d08cd8a5..3a05b78600 100644 --- a/substrate/core/test-client/src/trait_tests.rs +++ b/substrate/core/test-client/src/trait_tests.rs @@ -21,7 +21,7 @@ use std::sync::Arc; use keyring::Keyring; -use client::BlockOrigin; +use consensus::BlockOrigin; use primitives::Blake2Hasher; use ::TestClient; use runtime_primitives::traits::Block as BlockT; diff --git a/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm new file mode 100644 index 0000000000000000000000000000000000000000..5d9b1fcac3726fbcf0d4a685d6c9f8481ee438a8 GIT binary patch literal 47463 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 literal 0 HcmV?d00001 diff --git a/substrate/node/cli/Cargo.toml b/substrate/node/cli/Cargo.toml index 61b31a5f67..6f1f92cc82 100644 --- a/substrate/node/cli/Cargo.toml +++ b/substrate/node/cli/Cargo.toml @@ -9,14 +9,19 @@ log = "0.4" tokio = "0.1.7" exit-future = "0.1" substrate-cli = { path = "../../core/cli" } +parity-codec = { version = "2.1" } +parking_lot = "0.4" +slog = "^2" +sr-io = { path = "../../core/sr-io" } +substrate-client = { path = "../../core/client" } substrate-primitives = { path = "../../core/primitives" } node-runtime = { path = "../runtime" } node-primitives = { path = "../primitives" } -node-network = { path = "../network" } hex-literal = "0.1" substrate-service = { path = "../../core/service" } substrate-transaction-pool = { path = "../../core/transaction-pool" } substrate-network = { path = "../../core/network" } +substrate-consensus-aura = { path = "../../core/consensus/aura" } sr-primitives = { path = "../../core/sr-primitives" } node-executor = { path = "../executor" } diff --git a/substrate/node/cli/src/chain_spec.rs b/substrate/node/cli/src/chain_spec.rs index cc4612f27b..53cf074767 100644 --- a/substrate/node/cli/src/chain_spec.rs +++ b/substrate/node/cli/src/chain_spec.rs @@ -17,8 +17,9 @@ //! Substrate chain configurations. use primitives::{AuthorityId, ed25519}; +use node_primitives::AccountId; use node_runtime::{GenesisConfig, ConsensusConfig, CouncilSeatsConfig, CouncilVotingConfig, DemocracyConfig, - SessionConfig, StakingConfig, TimestampConfig, BalancesConfig, TreasuryConfig, + SessionConfig, StakingConfig, TimestampConfig, BalancesConfig, TreasuryConfig, UpgradeKeyConfig, ContractConfig, Permill, Perbill}; use substrate_service; @@ -45,7 +46,7 @@ fn staging_testnet_config_genesis() -> GenesisConfig { const CENTS: u128 = 1_000 * MILLICENTS; // assume this is worth about a cent. const DOLLARS: u128 = 100 * CENTS; - const SECS_PER_BLOCK: u64 = 5; + const SECS_PER_BLOCK: u64 = 4; const MINUTES: u64 = 60 / SECS_PER_BLOCK; const HOURS: u64 = MINUTES * 60; const DAYS: u64 = HOURS * 24; @@ -121,6 +122,9 @@ fn staging_testnet_config_genesis() -> GenesisConfig { max_depth: 1024, block_gas_limit: 10_000_000, }), + upgrade_key: Some(UpgradeKeyConfig { + key: endowed_accounts[0].clone(), + }), } } @@ -139,7 +143,7 @@ pub fn staging_testnet_config() -> ChainSpec { ) } -fn testnet_genesis(initial_authorities: Vec) -> GenesisConfig { +fn testnet_genesis(initial_authorities: Vec, upgrade_key: AccountId) -> GenesisConfig { let endowed_accounts = vec![ ed25519::Pair::from_seed(b"Alice ").public().0.into(), ed25519::Pair::from_seed(b"Bob ").public().0.into(), @@ -220,13 +224,18 @@ fn testnet_genesis(initial_authorities: Vec) -> GenesisConfig { max_depth: 1024, block_gas_limit: 10_000_000, }), + upgrade_key: Some(UpgradeKeyConfig { + key: upgrade_key, + }), } } fn development_config_genesis() -> GenesisConfig { testnet_genesis(vec![ ed25519::Pair::from_seed(b"Alice ").public().into(), - ]) + ], + ed25519::Pair::from_seed(b"Alice ").public().0.into() + ) } /// Development config (single validator Alice) @@ -238,7 +247,9 @@ fn local_testnet_genesis() -> GenesisConfig { testnet_genesis(vec![ ed25519::Pair::from_seed(b"Alice ").public().into(), ed25519::Pair::from_seed(b"Bob ").public().into(), - ]) + ], + ed25519::Pair::from_seed(b"Alice ").public().0.into() + ) } /// Local testnet config (multivalidator Alice + Bob) diff --git a/substrate/node/cli/src/lib.rs b/substrate/node/cli/src/lib.rs index 0d8c9c4d71..beb47f91ff 100644 --- a/substrate/node/cli/src/lib.rs +++ b/substrate/node/cli/src/lib.rs @@ -30,9 +30,9 @@ extern crate hex_literal; #[cfg(test)] extern crate substrate_service_test as service_test; extern crate substrate_transaction_pool as transaction_pool; +#[macro_use] extern crate substrate_network as network; -extern crate node_network; -extern crate sr_primitives as runtime_primitives; +extern crate substrate_consensus_aura as consensus; extern crate node_primitives; #[macro_use] extern crate substrate_service; diff --git a/substrate/node/cli/src/service.rs b/substrate/node/cli/src/service.rs index 4e718816e1..d02ea48767 100644 --- a/substrate/node/cli/src/service.rs +++ b/substrate/node/cli/src/service.rs @@ -22,38 +22,19 @@ use std::sync::Arc; use transaction_pool::{self, txpool::{Pool as TransactionPool}}; use node_primitives::Block; use node_runtime::GenesisConfig; -use node_network::Protocol as NodeProtocol; use substrate_service::{ FactoryFullConfiguration, LightComponents, FullComponents, FullBackend, - LightBackend, FullExecutor, LightExecutor + FullClient, LightClient, LightBackend, FullExecutor, LightExecutor, + Roles, TaskExecutor, }; -use network::import_queue::{BasicQueue, BlockOrigin, ImportBlock, Verifier}; -use runtime_primitives::{traits::Block as BlockT}; -use primitives::AuthorityId; use node_executor; +use consensus::{import_queue, start_aura, Config as AuraConfig, AuraImportQueue}; -// TODO: Remove me, when we have a functional consensus. -/// A verifier that doesn't actually do any checks -pub struct NoneVerifier; -/// This Verifiyer accepts all data as valid -impl Verifier for NoneVerifier { - fn verify( - &self, - origin: BlockOrigin, - header: B::Header, - justification: Vec, - body: Option> - ) -> Result<(ImportBlock, Option>), String> { - Ok((ImportBlock { - origin, - header, - body, - finalized: true, - external_justification: justification, - internal_justification: vec![], - auxiliary: Vec::new(), - }, None)) - } +const AURA_SLOT_DURATION: u64 = 6; + +construct_simple_protocol! { + /// Demo protocol attachment for substrate. + pub struct NodeProtocol where Block = Block { } } construct_simple_service!(Service); @@ -70,15 +51,48 @@ construct_service_factory! { Genesis = GenesisConfig, Configuration = (), FullService = Service> - { |config, executor| Service::>::new(config, executor) }, + { |config: FactoryFullConfiguration, executor: TaskExecutor| { + let is_auth = config.roles == Roles::AUTHORITY; + Service::>::new(config, executor.clone()).map(move |service|{ + if is_auth { + if let Ok(Some(Ok(key))) = service.keystore().contents() + .map(|keys| keys.get(0).map(|k| service.keystore().load(k, ""))) + { + info!("Using authority key {}", key.public()); + let task = start_aura( + AuraConfig { + local_key: Some(Arc::new(key)), + slot_duration: AURA_SLOT_DURATION, + }, + service.client(), + service.proposer(), + service.network(), + ); + + executor.spawn(task); + } + } + + service + }) + } + }, LightService = Service> { |config, executor| Service::>::new(config, executor) }, - ImportQueue = BasicQueue - { |_, _| Ok(BasicQueue::new(Arc::new(NoneVerifier {}))) } - { |_, _| Ok(BasicQueue::new(Arc::new(NoneVerifier {}))) }, + FullImportQueue = AuraImportQueue> + { |config, client| Ok(import_queue(AuraConfig { + local_key: None, + slot_duration: 5 + }, client)) }, + LightImportQueue = AuraImportQueue> + { |config, client| Ok(import_queue(AuraConfig { + local_key: None, + slot_duration: 5 + }, client)) }, } } + #[cfg(test)] mod tests { #[cfg(feature = "rhd")] diff --git a/substrate/node/consensus/Cargo.toml b/substrate/node/consensus/Cargo.toml deleted file mode 100644 index c45818ee07..0000000000 --- a/substrate/node/consensus/Cargo.toml +++ /dev/null @@ -1,24 +0,0 @@ -[package] -name = "node-consensus" -version = "0.1.0" -authors = ["Parity Technologies "] - -[dependencies] -error-chain = "0.12" -exit-future = "0.1" -futures = "0.1.17" -log = "0.4" -node-primitives = { path = "../primitives" } -node-runtime = { path = "../runtime" } -parity-codec = "2.1" -parking_lot = "0.4" -rhododendron = "0.3" -sr-primitives = { path = "../../core/sr-primitives" } -srml-system = { path = "../../srml/system" } -substrate-client = { path = "../../core/client" } -substrate-primitives = { path = "../../core/primitives" } -substrate-transaction-pool = { path = "../../core/transaction-pool" } -tokio = "0.1.7" - -[dev-dependencies] -substrate-keyring = { path = "../../core/keyring" } diff --git a/substrate/node/consensus/README.adoc b/substrate/node/consensus/README.adoc deleted file mode 100644 index ca2daa9eb2..0000000000 --- a/substrate/node/consensus/README.adoc +++ /dev/null @@ -1,5 +0,0 @@ - -= Substrate Consensus - -placeholder -//TODO Write content :) diff --git a/substrate/node/consensus/src/error.rs b/substrate/node/consensus/src/error.rs deleted file mode 100644 index 13192ae202..0000000000 --- a/substrate/node/consensus/src/error.rs +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2018 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -//! Errors that can occur during the consensus process. - -use primitives::AuthorityId; -use client; - -error_chain! { - links { - Client(client::error::Error, client::error::ErrorKind); - Bft(::bft::Error, ::bft::ErrorKind); - } - - errors { - NotValidator(id: AuthorityId) { - description("Local account ID not a validator at this block."), - display("Local account ID ({:?}) not a validator at this block.", id), - } - PrematureDestruction { - description("Proposer destroyed before finishing proposing or evaluating"), - display("Proposer destroyed before finishing proposing or evaluating"), - } - Timer(e: ::tokio::timer::Error) { - description("Failed to register or resolve async timer."), - display("Timer failed: {}", e), - } - Executor(e: ::futures::future::ExecuteErrorKind) { - description("Unable to dispatch agreement future"), - display("Unable to dispatch agreement future: {:?}", e), - } - } -} - -impl From<::bft::InputStreamConcluded> for Error { - fn from(err: ::bft::InputStreamConcluded) -> Self { - ::bft::Error::from(err).into() - } -} diff --git a/substrate/node/consensus/src/lib.rs b/substrate/node/consensus/src/lib.rs deleted file mode 100644 index 2b100c10a8..0000000000 --- a/substrate/node/consensus/src/lib.rs +++ /dev/null @@ -1,533 +0,0 @@ -// Copyright 2018 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -//! This service uses BFT consensus provided by the substrate. - -#![cfg(feature="rhd")] - -extern crate node_runtime; -extern crate node_primitives; - -extern crate parity_codec as codec; -extern crate sr_primitives as runtime_primitives; -extern crate srml_system; -extern crate substrate_bft as bft; -extern crate substrate_client as client; -extern crate substrate_primitives as primitives; -extern crate substrate_transaction_pool as transaction_pool; - -extern crate exit_future; -extern crate futures; -extern crate parking_lot; -extern crate rhododendron; -extern crate tokio; - -#[macro_use] -extern crate error_chain; - -#[macro_use] -extern crate log; - -#[cfg(test)] -extern crate substrate_keyring; - -use std::sync::Arc; -use std::time::{self, Duration, Instant}; - -use client::{Client as SubstrateClient, CallExecutor}; -use client::runtime_api::{Core, BlockBuilder as BlockBuilderAPI, Miscellaneous, OldTxQueue}; -use codec::{Decode, Encode}; -use node_primitives::{AccountId, Timestamp, SessionKey}; -use node_runtime::{Runtime, InherentError, TimestampInherentError, InherentData}; -use primitives::{AuthorityId, ed25519, Blake2Hasher}; -use runtime_primitives::traits::{Block as BlockT, Hash as HashT, Header as HeaderT, As, BlockNumberToHash}; -use runtime_primitives::generic::{BlockId, Era}; -use srml_system::Trait as SystemT; -use transaction_pool::txpool::{self, Pool as TransactionPool}; -use tokio::runtime::TaskExecutor; -use tokio::timer::Delay; - -use futures::prelude::*; -use futures::future; -use parking_lot::RwLock; - -pub use self::error::{ErrorKind, Error, Result}; -pub use self::offline_tracker::OfflineTracker; -pub use service::Service; - -mod evaluation; -mod error; -mod service; - -/// Shared offline validator tracker. -pub type SharedOfflineTracker = Arc>; - -// block size limit. -const MAX_TRANSACTIONS_SIZE: usize = 4 * 1024 * 1024; - -/// Build new blocks. -pub trait BlockBuilder { - /// Push an extrinsic onto the block. Fails if the extrinsic is invalid. - fn push_extrinsic(&mut self, extrinsic: ::Extrinsic) -> Result<()>; -} - -/// Local client abstraction for the consensus. -pub trait AuthoringApi: - Send - + Sync - + BlockBuilderAPI<::Block, Error=::Error> - + Core<::Block, AuthorityId, Error=::Error> - + Miscellaneous<::Block, Error=::Error> - + OldTxQueue<::Block, Error=::Error> -{ - /// The block used for this API type. - type Block: BlockT; - /// The error used by this API type. - type Error: std::error::Error; - - /// Build a block on top of the given, with inherent extrinsics pre-pushed. - fn build_block) -> ()>( - &self, - at: &BlockId, - inherent_data: InherentData, - build_ctx: F, - ) -> Result; -} - -impl<'a, B, E, Block> BlockBuilder for client::block_builder::BlockBuilder<'a, B, E, Block, Blake2Hasher> where - B: client::backend::Backend + Send + Sync + 'static, - E: CallExecutor + Send + Sync + Clone + 'static, - Block: BlockT -{ - fn push_extrinsic(&mut self, extrinsic: ::Extrinsic) -> Result<()> { - client::block_builder::BlockBuilder::push(self, extrinsic).map_err(Into::into) - } -} - -impl<'a, B, E, Block> AuthoringApi for SubstrateClient where - B: client::backend::Backend + Send + Sync + 'static, - E: CallExecutor + Send + Sync + Clone + 'static, - Block: BlockT, -{ - type Block = Block; - type Error = client::error::Error; - - fn build_block) -> ()>( - &self, - at: &BlockId, - inherent_data: InherentData, - mut build_ctx: F, - ) -> Result { - let runtime_version = self.runtime_version_at(at)?; - - let mut block_builder = self.new_block_at(at)?; - if runtime_version.has_api(*b"inherent", 1) { - self.inherent_extrinsics(at, &inherent_data)? - .into_iter().try_for_each(|i| block_builder.push(i))?; - } - - build_ctx(&mut block_builder); - - block_builder.bake().map_err(Into::into) - } -} - -/// A long-lived network which can create BFT message routing processes on demand. -pub trait Network { - /// The block used for this API type. - type Block: BlockT; - /// The input stream of BFT messages. Should never logically conclude. - type Input: Stream,Error=Error>; - /// The output sink of BFT messages. Messages sent here should eventually pass to all - /// current authorities. - type Output: Sink,SinkError=Error>; - - /// Instantiate input and output streams. - fn communication_for( - &self, - validators: &[SessionKey], - local_id: SessionKey, - parent_hash: ::Hash, - task_executor: TaskExecutor - ) -> (Self::Input, Self::Output); -} - -/// Proposer factory. -pub struct ProposerFactory where - C: AuthoringApi, - A: txpool::ChainApi, -{ - /// The client instance. - pub client: Arc, - /// The transaction pool. - pub transaction_pool: Arc>, - /// The backing network handle. - pub network: N, - /// handle to remote task executor - pub handle: TaskExecutor, - /// Offline-tracker. - pub offline: SharedOfflineTracker, - /// Force delay in evaluation this long. - pub force_delay: Timestamp, -} - -impl bft::Environment<::Block> for ProposerFactory where - N: Network::Block>, - C: AuthoringApi + BlockNumberToHash, - A: txpool::ChainApi::Block>, - <::Block as BlockT>::Hash: - Into<::Hash> + PartialEq + Into, - Error: From<::Error> -{ - type Proposer = Proposer; - type Input = N::Input; - type Output = N::Output; - type Error = Error; - - fn init( - &self, - parent_header: &<::Block as BlockT>::Header, - authorities: &[AuthorityId], - sign_with: Arc, - ) -> Result<(Self::Proposer, Self::Input, Self::Output)> { - use runtime_primitives::traits::Hash as HashT; - let parent_hash = parent_header.hash(); - - let id = BlockId::hash(parent_hash); - let random_seed = self.client.random_seed(&id)?; - let random_seed = <<::Block as BlockT>::Header as HeaderT>::Hashing::hash(random_seed.as_ref()); - - let validators = self.client.validators(&id)?; - self.offline.write().note_new_block(&validators[..]); - - info!("Starting consensus session on top of parent {:?}", parent_hash); - - let local_id = sign_with.public().0.into(); - let (input, output) = self.network.communication_for( - authorities, - local_id, - parent_hash.clone(), - self.handle.clone(), - ); - let now = Instant::now(); - let proposer = Proposer { - client: self.client.clone(), - start: now, - local_key: sign_with, - next_index: None, - parent_hash, - parent_id: id, - parent_number: *parent_header.number(), - random_seed, - transaction_pool: self.transaction_pool.clone(), - offline: self.offline.clone(), - validators, - minimum_timestamp: current_timestamp() + self.force_delay, - }; - - Ok((proposer, input, output)) - } -} - -/// The proposer logic. -pub struct Proposer { - client: Arc, - start: Instant, - local_key: Arc, - next_index: Option, - parent_hash: <::Block as BlockT>::Hash, - parent_id: BlockId<::Block>, - parent_number: <<::Block as BlockT>::Header as HeaderT>::Number, - random_seed: <::Block as BlockT>::Hash, - transaction_pool: Arc>, - offline: SharedOfflineTracker, - validators: Vec, - minimum_timestamp: u64, -} - -impl Proposer { - fn primary_index(&self, round_number: usize, len: usize) -> usize { - use primitives::uint::U256; - - let big_len = U256::from(len); - let offset = U256::from_big_endian(self.random_seed.as_ref()) % big_len; - let offset = offset.low_u64() as usize + round_number; - offset % len - } -} - -impl bft::Proposer<::Block> for Proposer where - C: AuthoringApi + BlockNumberToHash, - A: txpool::ChainApi::Block>, - <::Block as BlockT>::Hash: - Into<::Hash> + PartialEq + Into, - error::Error: From<::Error> -{ - type Create = Result<::Block>; - type Error = Error; - type Evaluate = Box>; - - fn propose(&self) -> Result<::Block> { - use runtime_primitives::traits::BlakeTwo256; - - const MAX_VOTE_OFFLINE_SECONDS: Duration = Duration::from_secs(60); - - // TODO: handle case when current timestamp behind that in state. - let timestamp = ::std::cmp::max(self.minimum_timestamp, current_timestamp()); - - let elapsed_since_start = self.start.elapsed(); - let offline_indices = if elapsed_since_start > MAX_VOTE_OFFLINE_SECONDS { - Vec::new() - } else { - self.offline.read().reports(&self.validators[..]) - }; - - if !offline_indices.is_empty() { - info!( - "Submitting offline validators {:?} for slash-vote", - offline_indices.iter().map(|&i| self.validators[i as usize]).collect::>(), - ) - } - - let inherent_data = InherentData { - timestamp, - offline_indices, - }; - - let block = self.client.build_block( - &self.parent_id, - inherent_data, - |block_builder| { - let mut unqueue_invalid = Vec::new(); - self.transaction_pool.ready(|pending_iterator| { - let mut pending_size = 0; - for pending in pending_iterator { - // TODO [ToDr] Probably get rid of it, and validate in runtime. - let encoded_size = pending.data.encode().len(); - if pending_size + encoded_size >= MAX_TRANSACTIONS_SIZE { break } - - match block_builder.push_extrinsic(pending.data.clone()) { - Ok(()) => { - pending_size += encoded_size; - } - Err(e) => { - trace!(target: "transaction-pool", "Invalid transaction: {}", e); - unqueue_invalid.push(pending.hash.clone()); - } - } - } - }); - - self.transaction_pool.remove_invalid(&unqueue_invalid); - })?; - - info!("Proposing block [number: {}; hash: {}; parent_hash: {}; extrinsics: [{}]]", - block.header().number(), - <::Block as BlockT>::Hash::from(block.header().hash()), - block.header().parent_hash(), - block.extrinsics().iter() - .map(|xt| format!("{}", BlakeTwo256::hash_of(xt))) - .collect::>() - .join(", ") - ); - - let substrate_block = Decode::decode(&mut block.encode().as_slice()) - .expect("blocks are defined to serialize to substrate blocks correctly; qed"); - - assert!(evaluation::evaluate_initial( - &substrate_block, - &self.parent_hash, - self.parent_number, - ).is_ok()); - - Ok(substrate_block) - } - - fn evaluate(&self, unchecked_proposal: &::Block) -> Self::Evaluate { - debug!(target: "bft", "evaluating block on top of parent ({}, {:?})", self.parent_number, self.parent_hash); - - // do initial serialization and structural integrity checks. - match evaluation::evaluate_initial( - unchecked_proposal, - &self.parent_hash, - self.parent_number, - ) { - Ok(p) => p, - Err(e) => { - // TODO: these errors are easily re-checked in runtime. - debug!(target: "bft", "Invalid proposal (initial evaluation failed): {:?}", e); - return Box::new(future::ok(false)); - } - }; - - let current_timestamp = current_timestamp(); - let inherent = InherentData::new( - current_timestamp, - self.offline.read().reports(&self.validators) - ); - let proposed_timestamp = match self.client.check_inherents( - &self.parent_id, - &unchecked_proposal, - &inherent - ) { - Ok(Ok(())) => None, - Ok(Err(InherentError::Timestamp(TimestampInherentError::TimestampInFuture(timestamp)))) => Some(timestamp), - Ok(Err(e)) => { - debug!(target: "bft", "Invalid proposal (check_inherents): {:?}", e); - return Box::new(future::ok(false)); - }, - Err(e) => { - debug!(target: "bft", "Could not call into runtime: {:?}", e); - return Box::new(future::ok(false)); - } - }; - - let vote_delays = { - // the duration until the given timestamp is current - let proposed_timestamp = ::std::cmp::max(self.minimum_timestamp, proposed_timestamp.unwrap_or(0)); - let timestamp_delay = if proposed_timestamp > current_timestamp { - let delay_s = proposed_timestamp - current_timestamp; - debug!(target: "bft", "Delaying evaluation of proposal for {} seconds", delay_s); - Some(Instant::now() + Duration::from_secs(delay_s)) - } else { - None - }; - - match timestamp_delay { - Some(duration) => future::Either::A( - Delay::new(duration).map_err(|e| ErrorKind::Timer(e).into()) - ), - None => future::Either::B(future::ok(())), - } - }; - - // evaluate whether the block is actually valid. - // TODO: is it better to delay this until the delays are finished? - let evaluated = match self.client.execute_block(&self.parent_id, &unchecked_proposal.clone()).map_err(Error::from) { - Ok(()) => Ok(true), - Err(err) => match err.kind() { - error::ErrorKind::Client(client::error::ErrorKind::Execution(_)) => Ok(false), - _ => Err(err) - } - }; - - let future = future::result(evaluated).and_then(move |good| { - let end_result = future::ok(good); - if good { - // delay a "good" vote. - future::Either::A(vote_delays.and_then(|_| end_result)) - } else { - // don't delay a "bad" evaluation. - future::Either::B(end_result) - } - }); - - Box::new(future) as Box<_> - } - - fn round_proposer(&self, round_number: usize, authorities: &[AuthorityId]) -> AuthorityId { - let offset = self.primary_index(round_number, authorities.len()); - let proposer = authorities[offset].clone(); - trace!(target: "bft", "proposer for round {} is {}", round_number, proposer); - - proposer - } - - fn import_misbehavior(&self, misbehavior: Vec<(AuthorityId, bft::Misbehavior<<::Block as BlockT>::Hash>)>) { - use rhododendron::Misbehavior as GenericMisbehavior; - use runtime_primitives::bft::{MisbehaviorKind, MisbehaviorReport}; - use node_runtime::{Call, UncheckedExtrinsic, ConsensusCall}; - - let mut next_index = { - let cur_index: Result = self.client - .account_nonce(&self.parent_id, &self.local_key.public().0) - .map_err(Error::from); - - let cur_index = match cur_index { - Ok(cur_index) => cur_index + 1, - Err(e) => { - warn!(target: "consensus", "Error computing next transaction index: {:?}", e); - return; - } - }; - - let index = match self.next_index { - // make sure there were no other transactions in the meantime - Some(idx) if idx > cur_index => idx, - _ => cur_index, - }; - - index - }; - - for (target, misbehavior) in misbehavior { - let report = MisbehaviorReport { - parent_hash: self.parent_hash.into(), - parent_number: self.parent_number.as_(), - target, - misbehavior: match misbehavior { - GenericMisbehavior::ProposeOutOfTurn(_, _, _) => continue, - GenericMisbehavior::DoublePropose(_, _, _) => continue, - GenericMisbehavior::DoublePrepare(round, (h1, s1), (h2, s2)) - => MisbehaviorKind::BftDoublePrepare(round as u32, (h1.into(), s1.signature), (h2.into(), s2.signature)), - GenericMisbehavior::DoubleCommit(round, (h1, s1), (h2, s2)) - => MisbehaviorKind::BftDoubleCommit(round as u32, (h1.into(), s1.signature), (h2.into(), s2.signature)), - } - }; - let payload = (next_index, Call::Consensus(ConsensusCall::report_misbehavior(report)), Era::immortal(), self.client.genesis_hash()); - let signature = self.local_key.sign(&payload.encode()).into(); - next_index += 1; - self.next_index = Some(next_index); - - let local_id = self.local_key.public().0.into(); - let extrinsic = UncheckedExtrinsic { - signature: Some((node_runtime::RawAddress::Id(local_id), signature, payload.0, Era::immortal())), - function: payload.1, - }; - let uxt: <::Block as BlockT>::Extrinsic = Decode::decode(&mut extrinsic.encode().as_slice()).expect("Encoded extrinsic is valid"); - let hash = BlockId::<::Block>::hash(self.parent_hash); - if let Err(e) = self.transaction_pool.submit_one(&hash, uxt) { - warn!("Error importing misbehavior report: {:?}", e); - } - } - } - - fn on_round_end(&self, round_number: usize, was_proposed: bool) { - let primary_validator = self.validators[ - self.primary_index(round_number, self.validators.len()) - ]; - - - // alter the message based on whether we think the empty proposer was forced to skip the round. - // this is determined by checking if our local validator would have been forced to skip the round. - if !was_proposed { - let public = ed25519::Public::from_raw(primary_validator.0); - info!( - "Potential Offline Validator: {} failed to propose during assigned slot: {}", - public, - round_number, - ); - } - - self.offline.write().note_round_end(primary_validator, was_proposed); - } -} - -fn current_timestamp() -> Timestamp { - time::SystemTime::now().duration_since(time::UNIX_EPOCH) - .expect("now always later than unix epoch; qed") - .as_secs() -} diff --git a/substrate/node/executor/src/lib.rs b/substrate/node/executor/src/lib.rs index 6a2b8061c3..bdd8b10235 100644 --- a/substrate/node/executor/src/lib.rs +++ b/substrate/node/executor/src/lib.rs @@ -254,6 +254,7 @@ mod tests { timestamp: Some(Default::default()), treasury: Some(Default::default()), contract: Some(Default::default()), + upgrade_key: Some(Default::default()), }.build_storage().unwrap()) } @@ -291,9 +292,9 @@ mod tests { 1, GENESIS_HASH.into(), if support_changes_trie { - hex!("ffa85ed1832eae3e25e684d4f993ff0b5e8b6ac4d7ba0f40a5fb0114fda22f3d").into() + hex!("978a3ff733a86638da39d36a349c693b5cf562bcc8db30fec6c2b6c40f925a9b").into() } else { - hex!("98971908b8923d07944cdf7ee658c203d17042ef447169adbdfec8160cfabcad").into() + hex!("7bbad534e3de3db3c8cda015c4e8ed8ba10dde7e3fca21f4fd4fbc686e6c1410").into() }, if support_changes_trie { Some(hex!("1f8f44dcae8982350c14dee720d34b147e73279f5a2ce1f9781195a991970978").into()) @@ -317,7 +318,7 @@ mod tests { construct_block( 2, block1(false).1, - hex!("788a2e8b23e4b30e1bce347ca6415fd0080e989d40741c86995b9ad539bb76b3").into(), + hex!("7be30152ee2ee909047cffad5f0a28bf8c2b0a97c124b500aeac112f6917738e").into(), None, vec![ CheckedExtrinsic { @@ -340,7 +341,7 @@ mod tests { construct_block( 1, GENESIS_HASH.into(), - hex!("acc03af5b3972deaf9dde4dfd99c5614a5360454313681b6fc299d1644ae8a59").into(), + hex!("325a73726dc640af41becb42938e7152e218f130219c0695aae35b6a156f93f3").into(), None, vec![ CheckedExtrinsic { @@ -622,7 +623,7 @@ mod tests { let b = construct_block( 1, GENESIS_HASH.into(), - hex!("21fb6fb965f012ae3c6e521b71b5b57d6df17c738c52f202ec2809ca235eb082").into(), + hex!("d68586d5098535e04ff7a12d71a9c9dc719960f318862e636e78a8e98cf4b8d4").into(), None, vec![ CheckedExtrinsic { diff --git a/substrate/node/network/Cargo.toml b/substrate/node/network/Cargo.toml deleted file mode 100644 index 44fbdb5aba..0000000000 --- a/substrate/node/network/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "node-network" -version = "0.1.0" -authors = ["Parity Technologies "] -description = "Substrate node networking protocol" - -[dependencies] -node-consensus = { path = "../consensus" } -node-primitives = { path = "../primitives" } -substrate-consensus-rhd = { path = "../../core/consensus/rhd" } -substrate-network = { path = "../../core/network" } -substrate-primitives = { path = "../../core/primitives" } -futures = "0.1" -tokio = "0.1.7" -log = "0.4" -rhododendron = "0.3" diff --git a/substrate/node/network/src/consensus.rs b/substrate/node/network/src/consensus.rs deleted file mode 100644 index 44d338d330..0000000000 --- a/substrate/node/network/src/consensus.rs +++ /dev/null @@ -1,293 +0,0 @@ -// Copyright 2018 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -//! The "consensus" networking code built on top of the base network service. -//! This fulfills the `node_consensus::Network` trait, providing a hook to be called -//! each time consensus begins on a new chain head. - -use bft; -use substrate_primitives::ed25519; -use substrate_network::{self as net, generic_message as msg}; -use substrate_network::consensus_gossip::ConsensusMessage; -use node_consensus::{AuthoringApi, Network}; -use node_primitives::{Block, Hash, SessionKey}; -use rhododendron; - -use futures::prelude::*; -use futures::sync::mpsc; - -use std::sync::Arc; - -use tokio::runtime::TaskExecutor; -use tokio::executor::Executor; - -use super::NetworkService; - -/// Sink for output BFT messages. -pub struct BftSink { - network: Arc, - parent_hash: Hash, - _marker: ::std::marker::PhantomData, -} - -impl Sink for BftSink { - type SinkItem = bft::Communication; - // TODO: replace this with the ! type when that's stabilized - type SinkError = E; - - fn start_send(&mut self, message: bft::Communication) - -> ::futures::StartSend, E> - { - let network_message = net::LocalizedBftMessage { - message: match message { - rhododendron::Communication::Consensus(c) => msg::BftMessage::Consensus(match c { - rhododendron::LocalizedMessage::Propose(proposal) => msg::SignedConsensusMessage::Propose(msg::SignedConsensusProposal { - round_number: proposal.round_number as u32, - proposal: proposal.proposal, - digest: proposal.digest, - sender: proposal.sender, - digest_signature: proposal.digest_signature.signature, - full_signature: proposal.full_signature.signature, - }), - rhododendron::LocalizedMessage::Vote(vote) => msg::SignedConsensusMessage::Vote(msg::SignedConsensusVote { - sender: vote.sender, - signature: vote.signature.signature, - vote: match vote.vote { - rhododendron::Vote::Prepare(r, h) => msg::ConsensusVote::Prepare(r as u32, h), - rhododendron::Vote::Commit(r, h) => msg::ConsensusVote::Commit(r as u32, h), - rhododendron::Vote::AdvanceRound(r) => msg::ConsensusVote::AdvanceRound(r as u32), - } - }), - }), - rhododendron::Communication::Auxiliary(justification) => { - let unchecked: bft::UncheckedJustification<_> = justification.uncheck().into(); - msg::BftMessage::Auxiliary(unchecked.into()) - } - }, - parent_hash: self.parent_hash, - }; - self.network.with_spec( - move |spec, ctx| spec.consensus_gossip.multicast_bft_message(ctx, network_message) - ); - Ok(::futures::AsyncSink::Ready) - } - - fn poll_complete(&mut self) -> ::futures::Poll<(), E> { - Ok(Async::Ready(())) - } -} - -// check signature and authority validity of message. -fn process_bft_message( - msg: msg::LocalizedBftMessage, - local_id: &SessionKey, - authorities: &[SessionKey] - ) -> Result>, bft::Error> -{ - Ok(Some(match msg.message { - msg::BftMessage::Consensus(c) => rhododendron::Communication::Consensus(match c { - msg::SignedConsensusMessage::Propose(proposal) => rhododendron::LocalizedMessage::Propose({ - if &proposal.sender == local_id { return Ok(None) } - let proposal = rhododendron::LocalizedProposal { - round_number: proposal.round_number as usize, - proposal: proposal.proposal, - digest: proposal.digest, - sender: proposal.sender, - digest_signature: ed25519::LocalizedSignature { - signature: proposal.digest_signature, - signer: ed25519::Public(proposal.sender.into()), - }, - full_signature: ed25519::LocalizedSignature { - signature: proposal.full_signature, - signer: ed25519::Public(proposal.sender.into()), - } - }; - bft::check_proposal(authorities, &msg.parent_hash, &proposal)?; - - trace!(target: "bft", "importing proposal message for round {} from {}", proposal.round_number, Hash::from(proposal.sender.0)); - proposal - }), - msg::SignedConsensusMessage::Vote(vote) => rhododendron::LocalizedMessage::Vote({ - if &vote.sender == local_id { return Ok(None) } - let vote = rhododendron::LocalizedVote { - sender: vote.sender, - signature: ed25519::LocalizedSignature { - signature: vote.signature, - signer: ed25519::Public(vote.sender.0), - }, - vote: match vote.vote { - msg::ConsensusVote::Prepare(r, h) => rhododendron::Vote::Prepare(r as usize, h), - msg::ConsensusVote::Commit(r, h) => rhododendron::Vote::Commit(r as usize, h), - msg::ConsensusVote::AdvanceRound(r) => rhododendron::Vote::AdvanceRound(r as usize), - } - }; - bft::check_vote::(authorities, &msg.parent_hash, &vote)?; - - trace!(target: "bft", "importing vote {:?} from {}", vote.vote, Hash::from(vote.sender.0)); - vote - }), - }), - msg::BftMessage::Auxiliary(a) => { - let justification = bft::UncheckedJustification::from(a); - // TODO: get proper error - let justification: Result<_, bft::Error> = bft::check_prepare_justification::(authorities, msg.parent_hash, justification) - .map_err(|_| bft::ErrorKind::InvalidJustification.into()); - rhododendron::Communication::Auxiliary(justification?) - }, - })) -} - -// task that processes all gossipped consensus messages, -// checking signatures -struct MessageProcessTask { - inner_stream: mpsc::UnboundedReceiver>, - bft_messages: mpsc::UnboundedSender>, - validators: Vec, - local_id: SessionKey, -} - -impl MessageProcessTask { - fn process_message(&self, msg: ConsensusMessage) -> Option> { - match msg { - ConsensusMessage::Bft(msg) => { - match process_bft_message(msg, &self.local_id, &self.validators[..]) { - Ok(Some(msg)) => { - if let Err(_) = self.bft_messages.unbounded_send(msg) { - // if the BFT receiving stream has ended then - // we should just bail. - trace!(target: "bft", "BFT message stream appears to have closed"); - return Some(Async::Ready(())); - } - } - Ok(None) => {} // ignored local message - Err(e) => { - debug!("Message validation failed: {:?}", e); - } - } - } - ConsensusMessage::ChainSpecific(_, _) => { - panic!("ChainSpecific messages are not allowed by the top level message handler"); - } - } - - None - } -} - -impl Future for MessageProcessTask { - type Item = (); - type Error = (); - - fn poll(&mut self) -> Poll<(), ()> { - loop { - match self.inner_stream.poll() { - Ok(Async::Ready(Some(val))) => if let Some(async) = self.process_message(val) { - return Ok(async); - }, - Ok(Async::Ready(None)) => return Ok(Async::Ready(())), - Ok(Async::NotReady) => return Ok(Async::NotReady), - Err(e) => { - debug!(target: "node-network", "Error getting consensus message: {:?}", e); - return Err(e); - }, - } - } - } -} - -/// Input stream from the consensus network. -pub struct InputAdapter { - input: mpsc::UnboundedReceiver>, -} - -impl Stream for InputAdapter { - type Item = bft::Communication; - type Error = ::node_consensus::Error; - - fn poll(&mut self) -> Poll, Self::Error> { - match self.input.poll() { - Err(_) | Ok(Async::Ready(None)) => Err(bft::InputStreamConcluded.into()), - Ok(x) => Ok(x) - } - } -} - -/// Wrapper around the network service -pub struct ConsensusNetwork

{ - network: Arc, - api: Arc

, -} - -impl

ConsensusNetwork

{ - /// Create a new consensus networking object. - pub fn new(network: Arc, api: Arc

) -> Self { - ConsensusNetwork { network, api } - } -} - -impl

Clone for ConsensusNetwork

{ - fn clone(&self) -> Self { - ConsensusNetwork { - network: self.network.clone(), - api: self.api.clone(), - } - } -} - -/// A long-lived network which can create parachain statement and BFT message routing processes on demand. -impl Network for ConsensusNetwork

{ - /// The input stream of BFT messages. Should never logically conclude. - type Input = InputAdapter; - /// The output sink of BFT messages. Messages sent here should eventually pass to all - /// current validators. - type Output = BftSink<::node_consensus::Error>; - type Block = Block; - - /// Get input and output streams of BFT messages. - fn communication_for( - &self, validators: &[SessionKey], - local_id: SessionKey, - parent_hash: Hash, - mut task_executor: TaskExecutor - ) -> (Self::Input, Self::Output) - { - let sink = BftSink { - network: self.network.clone(), - parent_hash, - _marker: Default::default(), - }; - - let (bft_send, bft_recv) = mpsc::unbounded(); - - // spin up a task in the background that processes all incoming statements - // TODO: propagate statements on a timer? - let process_task = self.network.with_spec(|spec, _ctx| { - spec.consensus_gossip.new_session(parent_hash); - MessageProcessTask { - inner_stream: spec.consensus_gossip.messages_for(parent_hash), - bft_messages: bft_send, - validators: validators.to_vec(), - local_id, - } - }); - - if let Err(e) = Executor::spawn(&mut task_executor, Box::new(process_task)) { - debug!(target: "node-network", "Cannot spawn message processing: {:?}", e) - } - - (InputAdapter { input: bft_recv }, sink) - } -} diff --git a/substrate/node/network/src/lib.rs b/substrate/node/network/src/lib.rs deleted file mode 100644 index 9e2f96d5f7..0000000000 --- a/substrate/node/network/src/lib.rs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2018 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -//! Substrate-specific network implementation. -//! -//! This manages gossip of consensus messages for BFT. - -#![warn(unused_extern_crates)] - -#[macro_use] -extern crate substrate_network; -extern crate node_primitives; - -use node_primitives::{Block, Hash}; -use substrate_network::consensus_gossip::ConsensusGossip; - -/// Specialization of the network service for the node protocol. -pub type NetworkService = ::substrate_network::Service; - -construct_simple_protocol! { - /// Demo protocol attachment for substrate. - pub struct Protocol where Block = Block { - consensus_gossip: ConsensusGossip, - } -} diff --git a/substrate/node/runtime/Cargo.toml b/substrate/node/runtime/Cargo.toml index ac37cff456..8add782018 100644 --- a/substrate/node/runtime/Cargo.toml +++ b/substrate/node/runtime/Cargo.toml @@ -29,6 +29,7 @@ srml-staking = { path = "../../srml/staking" } srml-system = { path = "../../srml/system" } srml-timestamp = { path = "../../srml/timestamp" } srml-treasury = { path = "../../srml/treasury" } +srml-upgrade-key = { path = "../../srml/upgrade-key" } sr-version = { path = "../../core/sr-version" } node-primitives = { path = "../primitives" } @@ -53,6 +54,7 @@ std = [ "srml-system/std", "srml-timestamp/std", "srml-treasury/std", + "srml-upgrade-key/std", "sr-version/std", "node-primitives/std", "serde_derive", diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs index 1f4a44bb29..998bb6640b 100644 --- a/substrate/node/runtime/src/lib.rs +++ b/substrate/node/runtime/src/lib.rs @@ -52,6 +52,7 @@ extern crate srml_staking as staking; extern crate srml_system as system; extern crate srml_timestamp as timestamp; extern crate srml_treasury as treasury; +extern crate srml_upgrade_key as upgrade_key; #[macro_use] extern crate sr_version as version; extern crate node_primitives; @@ -62,12 +63,12 @@ use node_primitives::{ AccountId, AccountIndex, Balance, BlockNumber, Hash, Index, SessionKey, Signature }; -use runtime_api::runtime::*; +use runtime_api::{runtime::*, id::*}; use runtime_primitives::ApplyResult; use runtime_primitives::transaction_validity::TransactionValidity; use runtime_primitives::generic; use runtime_primitives::traits::{Convert, BlakeTwo256, Block as BlockT}; -use version::{RuntimeVersion, ApiId}; +use version::RuntimeVersion; use council::{motions as council_motions, voting as council_voting}; #[cfg(feature = "std")] use council::seats as council_seats; @@ -86,9 +87,6 @@ pub use srml_support::{StorageValue, RuntimeMetadata}; const TIMESTAMP_SET_POSITION: u32 = 0; const NOTE_OFFLINE_POSITION: u32 = 1; -const INHERENT: ApiId = *b"inherent"; -const VALIDATX: ApiId = *b"validatx"; - /// Runtime version. pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: ver_str!("node"), @@ -96,7 +94,11 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { authoring_version: 1, spec_version: 1, impl_version: 0, - apis: apis_vec!([(INHERENT, 1), (VALIDATX, 1)]), + apis: apis_vec!([ + (BLOCK_BUILDER, 1), + (TAGGED_TRANSACTION_QUEUE, 1), + (METADATA, 1) + ]), }; /// Native version. @@ -191,15 +193,19 @@ impl contract::Trait for Runtime { type Event = Event; } +impl upgrade_key::Trait for Runtime { + type Event = Event; +} + construct_runtime!( pub enum Runtime with Log(InternalLog: DigestItem) where Block = Block, UncheckedExtrinsic = UncheckedExtrinsic { System: system::{default, Log(ChangesTrieRoot)}, + Timestamp: timestamp::{Module, Call, Storage, Config, Inherent}, Consensus: consensus::{Module, Call, Storage, Config, Log(AuthoritiesChange), Inherent}, Balances: balances, - Timestamp: timestamp::{Module, Call, Storage, Config, Inherent}, Session: session, Staking: staking, Democracy: democracy, @@ -209,6 +215,7 @@ construct_runtime!( CouncilSeats: council_seats::{Config}, Treasury: treasury, Contract: contract::{Module, Call, Config, Event}, + UpgradeKey: upgrade_key, } ); @@ -278,33 +285,9 @@ impl_apis! { } } - impl OldTxQueue for Runtime { - fn account_nonce(account: AccountId) -> Index { - System::account_nonce(&account) - } - - fn lookup_address(address: Address) -> Option { - Balances::lookup_address(address) - } - } - impl TaggedTransactionQueue for Runtime { fn validate_transaction(tx: ::Extrinsic) -> TransactionValidity { Executive::validate_transaction(tx) } } - - impl Miscellaneous for Runtime { - fn validator_count() -> u32 { - Session::validator_count() - } - - fn validators() -> Vec { - Session::validators() - } - - fn timestamp() -> u64 { - Timestamp::get() - } - } } diff --git a/substrate/node/runtime/wasm/Cargo.lock b/substrate/node/runtime/wasm/Cargo.lock index fc45e6f94c..0aa58928c2 100644 --- a/substrate/node/runtime/wasm/Cargo.lock +++ b/substrate/node/runtime/wasm/Cargo.lock @@ -285,6 +285,7 @@ dependencies = [ "srml-system 0.1.0", "srml-timestamp 0.1.0", "srml-treasury 0.1.0", + "srml-upgrade-key 0.1.0", "substrate-primitives 0.1.0", ] @@ -817,6 +818,24 @@ dependencies = [ "substrate-primitives 0.1.0", ] +[[package]] +name = "srml-upgrade-key" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-io 0.1.0", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-consensus 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "substrate-primitives 0.1.0", +] + [[package]] name = "stable_deref_trait" version = "1.1.1" diff --git a/substrate/node/runtime/wasm/Cargo.toml b/substrate/node/runtime/wasm/Cargo.toml index 7fb33ff26b..7df582a8f0 100644 --- a/substrate/node/runtime/wasm/Cargo.toml +++ b/substrate/node/runtime/wasm/Cargo.toml @@ -28,6 +28,7 @@ srml-staking = { path = "../../../srml/staking", default-features = false } srml-system = { path = "../../../srml/system", default-features = false } srml-timestamp = { path = "../../../srml/timestamp", default-features = false } srml-treasury = { path = "../../../srml/treasury", default-features = false } +srml-upgrade-key = { path = "../../../srml/upgrade-key", default-features = false } sr-version = { path = "../../../core/sr-version", default-features = false } node-primitives = { path = "../../primitives", default-features = false } @@ -53,6 +54,7 @@ std = [ "srml-system/std", "srml-timestamp/std", "srml-treasury/std", + "srml-upgrade-key/std", "sr-version/std", "node-primitives/std", ] diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 3ffbf0d1b1afbc7e6ddf799faccd87cf2e2f81cb..2a48d20c98d216742495a038849834566e6ccc45 100644 GIT binary patch literal 624959 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�W=9YT-*ADeN*mT#dvG}Ne(q-nSQVM`XcX7U zJ@+;tNEfZF8>|BKpFyB}k*UhN8PX`bB(DB3k z;I2PJbwz!cPwBn90aQv{99g-WNBpi@KI9tx<{_C&1T9AkUuS*tK)=rVgvNIea5(|X z&aPc$5|^$ziJF*~p2XGqAQ9(FX(GvR^b!;4S8+h<3-lfR_=G)TlL6 z?2<4~r|~El$3c)HQ1Nh!iickXDjw1(gjZ;^2Lcrj8^I1NpyDB+;vtQIcZG^VTl!(7 zO{iG!OQ_pC_k}G~J~27C6tXZFp29pS`ghGq8_enET9`a63)c_uVSJD%tW; z8Pvi9X)W+gOlN%K@*bddDWp}iz5Sn9BXc0fmV8J^amigJStcey9!rO_BJ8jFLJonQ zYNl`#s5aKgw3^a85j#m0XKJ-Ub$^7q>xj|kQ|T~@qrorn^F7qJ^$WGJxO))ZBXUJN?fA*VOsJc(LK+(EHBwnWt zj4>xVVTIl6?bsIXr_^J*N|X$Hhcx?>yWa-Qaix4eDNYDig)|hxYCF-r*q2^`L?|x& zCYQcfC$f7Vgg~xwdfE34onwhLbtfYN?152Ui%N3xO3U2~8_c>YqBj zJ&u90=Zm{jo!(}WvtKSWq)+)zeW(>_F>}gAxlx?Gv}|gJWyt}jcjQAyd5fSp9wAJn ziRuxT^T;P2(P1q|>k*f2h?BHRdR_x_jb_Ga$>@3!LP~xFlnIANMal(h#ZDfoX^G6C z-hkk*z(F>+s0JXQW0#B2t$j8VHR+oGKu${GJIyh@Lfifo(EDxWovOhcxvNlkt_}qwC+AXPx@&(gIEKVuZUhGGqBbOYq4@NXtZXUi)Avd@(wLNf* zbfONTZt$RTP)Tf};fO$l3W@(UcM6ZfKPUIY6we01QEFCG<+BwWG?8Z(JxJuXB;5%| zx%>zCzDU}SoY8bKRnp`=SYV(5uQqEmfF>k3rV;yHR!X-I9*t23ctWGp7z`ozCC&Qw zNymYWg5#5Y@)RmFCURWdp0~dU3D7hM*xl4ZiMCyR-1eFHZK=_0rLasvp6E|3yo)s20!>|Ju{6D3yQ5ya*!IAxMtETdKLy#MJpXs}%PZ zZ!Sp%OfP#)g-{2Ep6D;JG@*#w4^*sscW*o; zQtHJgZ3qAw1)OEagNaDXGkk)BFMlFv=@X7bQD@FAY4wC?whK8d3JuOE$7+avf8!wM zpH#?^iuCSsM&%d+^@Jk;Q8(fcKstdpgs5Ec%?x5V%RJKey zfXXb|5Ov)$Lke-1%4oA(jtxQ2;gM<&oU@d^@E~q z)DqjfQ0Pv@33P3h?o^yYr!q>YUX#^&puc2XsH&ZKK0V=kon*ty!9_#g zVad%)pQ;1IBw6~D%|vFyXIaDqU2{4osUK&d;W)(U2wJ&U~~gsS2Uj%95t0eSex$uF>6@loI4$v0}o7#KL0QQ5Y zzRh0LY+9G1kG-Zd!z!geigfABFe#f!M)2{Z{GzLGqDZY5OIpiWFDg3`X~~}9wDik7 ztOD|x4_Pj0!W$T7Y2u*fF@t4emVxtm!z&JCW+~o~WsXhLx?`a+-bBI|0?P1~0=q+) z_woL0Re2J);f$5O8er5lW!gckO722UP=qCrq*H5)ozgCfPN(+##dPY+Ri{&ztE+a( z0w4oUQw8I1@WwZXSh$lSJhdRuPT@eOCLq<~a;Uz>s(@OH^Lhf43uw++oIv(@(&K2G zwIIf(jja}~B(@M--a-%xO?!Y!2#lYFR=n@Tv!=bCW%JLgF4|Htxp!1KGxZPBR6U&< z+hTHlTGyHc()DmD^;&KZC`>#9!k?lMBG1v1WsVT-;2*IkN5v8zsnrWNAWcN;&_=2e zw%+^%$eJ)7f27QC8-QU+3s*`>6G@?M3eHO1+v)XBIpJ`G|u|toEH{`+V@eORUGBXuwXDc z%CpB&p8S`O@+_N8Ayu3p))z|^|7s_JCeRxAdk*Vt?4yrtmTBt#q}6ps;A2q2~96w&%oW68?%yj-{QrJB7O>@ZM2WKpsXbv6jIxFYbo^@qG$$;y>C2W~?6ETKLa#A|1?n%P z)or8v&gQCisD<{8={_5PaR-|4j z%?3Rh>kk@HE&oFA!bUOqeGMS+VX?12ztC4h3dXYoo_uY3m8VzJI{s<^>mkSvWC+5> z7y@d!hOj4wFj;N>6>K_FBzftV-GEwbh8{S_|P4(ENj%a4_n_7OSHbnP9Q<;i?1q%;j&!K@PMXv~Ai zEE;PM#C_Tson(xQ9WW)C39~rJ-H^7h`Syvf+?Mb_t{=4{vX{f)oLTRxY<6G zn@kmNSP~T+$y#7V&%IvI`oZPmgUgu)!@!|4oaljro(l1^16pu38;6MGoU~9=iZd@i zu?ZbFgnR&8JLhrV+*%+~Hn#9)Z4$WNpL^PAA_VE!9vW%L)sc+s)ns{3ZPff0rJb4Ug)rfv6r|AK8e8M7AlCHfEKrR|XWr>`z`V0+TK+ zae#onRu-VZa;#YW7gcXr8}MkYvyUlnI;((k{Ig)>JwZ+?(2`c}$ce5E_e*k%as41P z=8XfWp7=uVRB3XHNd~1fx>|74BBC4tD@ilN!DNF-nCL*`^sdq`D8QKR)+_o^+uD*z zngQBY3C%Ml&E{hd@K@j&2s}%GhyDSV*95 zAP>M*g=QF_mO7zw`av`q^BB9~9b4*<^O(tW6mfRN0T;XC25~^hWy0zr@6S4(i^;F| zgbVBCdRXi+&*~veyp(IqcTU8%%q!aFH9TT3wei zo3u-b?~7)0+3C0KZxm}`X~0o<2DCF6%$Dx~VmJv`c$wwkP3Ipzg?hl996kgKGJ0)Z z(Hv<6d|U&YNK!nA=sB-@`SFSl1qQc>LG80o8SLR00{4$^xjq86mZ&f4!f5h08%2U; zXh@_>%N9Un`w8zfvi<|0BxXwyYaarMlweq67dX7g0`!*=D9ck%nnzPo6Q@fK;xyl0kg zEq-a4?hS4)<_3p&;}%cky7uh;Z+QhUaN#V4Y%cCxD zc2y%fK~w4yX7V!vx~fv~l)-RFS=DxD-T-eH#q@}J*+Zmx5ylr;^Ur;OV>p}02wJ zh9rbbNOq!t8KK{s@hqFSut0tPgZ1zM{7hA|B$l}hW4>RQMhiyVzrjAP=FfZgEB_k{ z9ht1g0s+$(TTJKWdl$<~VUf5$3ey~iZtkMcJ9rux1i`8LWBdgEtQ&pyf-$iR@HVb) z;;GP@8jUz_(Y1p(TeO+nTD*ZC?LeBkgEMc+;x`{=4C*9yS1ewW_2shE z;xf~9C1O)y6Q~vEddwAqkEzffRd7yTSlukk{sE%eRgAFa3dZ0E3}{)?N)dU;L0e4S zo(Y_f;cwq8L_P;Dunx+Q*gh%J!M!U6wzELCrr@ELlhs+;t&sW^0)iKMMy#27JCPTe zdv&~$0OZfR=~v-iIrJDWD~d@|DVkUWEo0c#Pw7;)nIYg_Zj>EU^n;Ai1i(pPX(?KED@)NDJ2)b>8sw51i26{qv))2i z%|Fl}37B{K;d$?I&wr<8y`$DW1Yx$K+9sbg&9MgL_Sf5sfO|hNn)%Kf@IYO@;VS2xfkm4ON^4-wF^VE zX1vP~H6dXjg1%Ceha0`=lFoui3wq2_0iCp{TI^q818>^x zH^)uMkr+-)n>W#`jJ0oVxM9ZPOaj6(v{M9ZduuV-(2Q0OvUBhL$sY;<4aa)%u|9JpSm2rAC`g==L=3Sl$ z(Uj!ACS@m0(SN$GeSX3$a4X`S(+%{r9Q0(vh?j+Jj{8gW#6Uz(hCU$3bDvNnH7$Co z7G`TsPm+IgB%q5yM4l|xp%YE{R*Gr^UCrCn3~X--YIr4d#T?z(>o%sqd&Y0tN~2|$ zXmTuwnqG2@u&9Lr&e3skfHLlafEZ2cx@88uDK*d%P?|a1DGOEaN_ zs4*b9&^i!ZdzF$((y!o_5-&6=C~6x>nymysj0}|-Ge;Rq2v|r6{#L&13%PH*|H9*Q zL^eJ2rF2MPzB(d{HGsZ<`ld<(nVtT|zOT2xHK)`^v|EF-8u$qRwHpd`Ve&e##c`e@ zWtK@CPT&U=dsPV~;GZ%v@~Sc0{ikP9fec`-s4%LR{ewmz#HG$$tGvH_kP?JeYS<`4 z!%`lkpYrR3F|VV)u#w<@@~BLLJEy%lyN%;bmM7td~cfj`TW~HpbrGobzk;WWE@}! zkJ7!HPO?+uX*fLOK+^qD zYQW(^sn+(mmh#SWl7MV~B7{r`pLV;Nb z*S5W?Tm`%e`DON)fyZwGon9%WLl|zgt`&1GxV16ol*&<*;70tp97O>)U?$jg;HKdV zzy?=(7iSP=t94%{Po|dowH;jH3KO`1M0e>v;$$A#qDNv=|y?|cfsm8?~-3J#@I=RT?A!Y#gsJGA9 zd>WV}d;~#yJ7xVgC513%dZGUnWR%=dFDV-c`0F3kTzP+ohofn6zl~> z;ou|Q5Go5rbLb-8V+$prsCS*GcVpgL6ivvwJBreeyP21jY`^X@MXNEcm8(L4QS41@ zFrl-MFmXXp!6aimGzN6|pe7-+@j$uX5cLNuSeWnah`7KyUJ}E$p=`qJSHML)Mc3>) zMU;MhOi>JjKEh6Cm9z;dt3HT%JNX&1o@Y2fMFI`E+spwfW&y^^Htu%TAWNV1yBlR@ z#80i7jiIFz)3U9G6&=TCp0e%1vi6#L=C?i2=K1FLGQVptwth7!5%~fGB{*REbv1Kk zN*vJ2lx15-smQaw`)|TdFa!v7Rn7%X{+sA!aU|x)_>Ns}ChLC>;u%*m+dC ziy|s;G|R%MES__EDwm>uO7o@pl~(HwcATY3&53@V2{^E2Q?TG|YC^mM>rKEKrCM#H zg!-}@laJ4&#;rD6e~?ro(KH%%O9YGx<2zX-9>>eEu9x6aQUicVYvY0c*8TY1Reez$ z=uY*8(w6bCuodbHS=LbdUYYu`P1}1V>dQ3ChV7&4aMnD!9SXyOCa`Vpw#n}WRbbaw z0g3pWIZjWI0E_0+g;3Y&tnGX@&;P(Lh3%0qq)AJ0>SAECLJbKE=k{k^oGAL@0wMcC zMtPou*Wf}XEpb&|y{cC0tadT;e6^klJu{$}!vZFC7c8K3Cl>r$R${kf0Uc{?A9V+X ze?AqEEKwdWZ_C?%8o<42hxukGn-$HCdeLK2QUgO4l!Q5}0X2mS4xM{GrG{+sMMeXL z@X`i;Z}MR}5n5+~LDtbe*VB#l%SoD6y`6~JGFYA6O$QF{vy&6gnO5e+yqOR#*PD1& zLT#B+EbTR;Iqczur7XU!jQx66HfD^?s;^fw%ME9Xd%X*5Yl%7=)!RiuYabg5Hy8@a z!XCYrH)b1&FKBH6!fd!F>5{E?*BC@L7q)h@gs|0gw9U+w)}2_X5laww&01qumB9tVID(>!#LGqcGH9b!5L1WsDK2@H0F$l1lekZN@x)IhH6~yDiegSO zE6{Id2e@6bSg6vDCzjlBE!UjlBabMOfz=uQRagyGL_o}W0tN+=0sk%WD#!+=pMSCS z?ph3rxz*5@{gB?3zbw{|C7BeqDec^7H?=R#R(-@)(=Jv6q4_D+0Zeg>Lno;(K{Sj< zNqvckD*kHSyNlG|Xs7t6o+h&bLb)RI-;OwjE;QoW>-@d<;Z*M*^}=}anP3YgVq3`a zOMH#8{Gu2t%db2koh-i!(zN>vpNVqN;zLoQbZ!6>!0OokaGD4(=;x+;G#Kuhg{J4Z ze%&-|c$cOrRXmD3Z!h1p;!X78P;N=qf4-M=zZ+Y{BL?Krg~Y!K-^_`BK|T5BL3fr$ z= zJ_&-}d7Og7K^*44|aQH#sM8)#RMO6(Kd{d-yKr1g=!k z%@pLEz^ryDCver~1lG!Vi>9ibJKa)GCoT_gnU^bB?#iwSlD1vGJ(KtSl+r*rR^RDW+C*@{g4nh zAk$*PY)g5C-a#sJB3fv4PDE~$1D1Aalv1CfVA^=OMunAnaiHujuy810*WtQP^HkmA zU0bG9=gtRJ=9c$eWw?sViI#=SaYb(ukZ=j(!Ff6S?qtx`yausoxjEJ1G!`#gOAc3q zj$Dh0M1Jd3iz)Y2)pAP#Il&aP`&u~TbqiLHi6hGh=a9f~yQ8Z}hTxH9xh~GT+9|kL zmXk7TKxqNdf=e7(tgOesEVz_6MzU5A?Fuf%6FRKsNaRw z=pTBU+Me)3Jck`PY>2>*1JCh6!RzHs3YJhDvFOXIIi90q(rKI}&gvP{r&QQl(be*O zn<0ZKO=bRZ9~fn=?Sl|C0lurVviY!`$8j7mokX;$5(LI=+AgJS7=1Vz(MB~hU_DLW z!y4$G^cHq|Tca5z^OCX%8Y`1bK|dwgKSw#REuRu<51O0qy}NmV zq|tht>iA3O)8u#3?c{fz)5nhl(SE~mLsT9EQs>uIs7=#l8j<#<_Pt{|N>r1!O2?i0 zp*_<1?JI7Q4brK=GZDk2AJo2)s-?+`(Q^fg<-vR=^^*d1`}cYxJ70TBVrp`KH8Hj0 z%%JUC%X=j$ZYdK)d(E*lc)k~0e;>FSVT@es<;@Z6lc1|YCG~^yMT%|5X{BR z`32TPD1l-FWY0x#R+k80(e>FcemYzU?L{42V)6&QV)e(X2!FhygZ!lTX1alwdD=xU zAax&U1dhKbzYW?s9#A6&(Hzi*=tpR3HTy~&1IZf-Q%8WE1cOGpBULakrg!fAG0Ut%gEKwcN4fGPG z8J;wvC`8xdqDp)T-cTob`{=x}yU##~_;HF256bbV@ZQ*2CzVgbiAAEgVwKQ(o$NXI zf-MPZ=rhj_p_ZjBGV>O2nT60Qws*b<(@UtSy{~moERmlBNmNb1r>4-&hBhqdY-DJE zrgHE#i{r`b26tpWmK}7$nJ`}JMqGeOK4+7fuOq)iObOi8i8`pac-M>|rf{Iz-YZZ3&_=-wi-AX`9A1E@h)!^krGa99Wn^41(kCpx&(kL{7JM! zL~o){zl0??$~rRrWYtLRwEc`OhU|zA(j`8qhoFonkxlIFP}{Gs-o4zp&=GsoVo7qH zF<~SMJP3vq>c$$A01hbCqh>i~o_RGSe2#eFfM%-ZCB~U_PrvFo5#qR4|F|sCb`_)= z8*Pj*buszD5_HkjDe?fK0z)*HG&WTIIbi;BLfrvt*^<#FIcDeVGoLr78WQ+BEgr)Pw% zvHzAGDST3DrM0@i?iTfw!bYh|qFo0oL?>0P>Hu8Y7p!Wd(q-jJUrNXQo>s+J^o|Ay z`KcwtR3`w*9mS?n^P*~pb4V^b1Xsmzv%0z7yFpRh&x|65j$uy_*Mey za6?%?p>1G15izpFtlp62rU(nPo-I>&Y@rYwUZL>1wy-Xa7YAdv!o?Mdo|&fCPNE3) zQz=0aBX<{9+`N=lHJNtQ%}Z$($cbfi-=$sUE`V{QQf!_BZ0TIv2P9EJca@VccHo-R+bbFQ~O&CfjqtMqDoc_qZgJR`Y9dsfqsexZK0O zQD&&8d1CG-0^#>^u7zg*w@Ls}X!>|~kpyx3m{vy!O`4&g%&`H2B7Hqk{Nc*&#h<}+ z6dwA*3VB9+O=v&Z_Cj12KM8vLYcVDf3Ro9pB;-{AXtqctUlAK5Hyo3a4Kp|)B=$LES;1cL<*pM zbSuPY+}63-ej*^VkK2E1G+I?++-1yZ2i z*YeDXAe4bV5rlL?x!^t#gbwAKb~>0#v&_EGlWP$4KwD{=kiN{&mS$wtwDcmgv7M2= zCN9&7Y~9^v1jLZw61SAgNw%1BkU$_OAY=JFKu5~J`%JKNkoyUf)aNBpZi~e64V@PO zgf!GpEuT~yQcRQ()V}a!T}(2bthdZoyyVM0a=(a_!Q2;c6r6)lxQ371TKr^OBRCPp zyn_PWn`*~8nA3rQ?*T(bS>H23b8cfyld+ll%01IGXHWQa74vi=yg}~EMfyV6mAZA# z=||nGpB!nw6_+>C>9_X|n)P@sGLp*Qh>E68vsv^sZ`tUYu{mv1H>iVW^o!#AvC=AD z3K-2VFT6Lvkm^NV$+Li#opTC2`u|q$o+?J{&-r}~zaQm1p=+DL-P5DxNp!oi(YuU| zwu<_iwD(fmD!6+6!Xq#=F$=Eh{7CZxSGX9=e@VDL z68}HKnMWY^YwA7vxz^L?KvPm^9A^NcQKhdb{zO7`?Uv$C^~-cV%XCV#)Dwf^kAS`fNS+SV%T2d@#Tqech4O}M0;#g`DRJfkfT~w$yQoM@_^(KmUQK8l;-bIBvPH|U- zf~L=q>ka5(OIfec+~ZS$Sr?(yTnj{`(=1u1!D|pY4T~>B6+XdE?SAuL!>P17!hUVa z&~|VX*M_RM%6>|K!p4^gP@Z(!Mr<=xF)c)9>pX#R+VcjRB!87wUXyK$^INlm(Z}9X z9S5TKKea-kzl%(Y+=?%YRRY3ZeSOC4#679?jSEH4%yRvvg(7I>&Gq_15j66a`gkr9 zvPpY3VlOCeU4`x{O5C$_4c2f&M`UD%{j9)4-DcQv9SoamYdH+*M2Ej7I}N8*?pe~7 z80DO6hrYxp-@Nb^Lwa-lmRzJ}Ef3Tz`2Pj{GE*{dZ1?zX$C+7G9 zZ^vHwSdwV6R~`m_k_MP7kNVO!^PL>n6$|n&te|DQ0S-Ka15e?=$4D)-0$(K(aJAOi zuF*Vuh_a9Nu((DII5-y`;OnN_{dr zcZi^(3GoB(^R_t>6Lb8PXp?PpD$yP|`GV1xUK}d%owz3UcOW!FL&f+~a1$wNU3W>J zj#%l-(`rGBh9O0i2QBDBMw?eAHE`hzIHp*X^}&S)Fd0#i6~pv^aY(d88caw|iV@mF zA)HNmQ+KY=MmFI{(kbwFNyR{*NE?w88f`?THmU-{{F1#W)M!pt8~|QDTL+x6ieDu2 z$ihC8ti%@fnPg_kiJtT#8v$(F=WdkyZRtnl;Wr7n=OtIV{@~s9VJi(G><;UvUmx}) z2riHET8EN* zlcE(phD699fYUk{k@D%l(q;Ne*w>sXEu48P);pA9W;JR@0xxT7$m4x4`N$MUaNl&y zlE=syDmdw^Y+uCJn{-5X()~sa)r#z1VtZHw;gm||$+b)#Q8i5uGmeFk*Q(_a=Uj!O*V(4|^l`d#$x$o4s;IkY; z?Q#KB=jDPkJwSvb2y7<)O~DrdZQkc3C1x?I0te5aq&~@kwe>z9$+TDb+D8b{8QLnY zN@uE-lVa~ZJh970eOS`jG-)Ogu&SNHHNgFO9DlhV%gyIf-e91^jhA_mYs*S^ z!CS18h-6qS<}X;WR}e>&COOBwGv)7@%0y%Wd5o{pDSbfPz2P222bbP#zlAzAhgM7? z0Pqs#e;yO_0nuc_rlh8=@dB&U-8t!E9_V(j`jT)?t0=X)SdUtqb6^AR(RIimM=%u-?iipWyF6#^~N`j6xaVb6+!U zX}pgxUKrcMrXQVCjo`$0KtBbh_3~lyE|D`VpG@Q8z;^%W#7f3eg3lrxTcW)FNUVlF zOk@O;(Ideh0}LvJPwQ~KfOOy+a)8H|1J3Z5?qi9F570SUdocQVpZmBHM%W~#E})0? zm1fYG#OoQ0# z*vW}gdVW0FYJKN2p%9t z;3_-}4vX-MlZv=rlklTcCMgYJuRd6_AOI`s8Lz5>(A<@CA0!6J| zl6VC+BafLCR!h|pba!4A5=u~)SZHV|_(+9t(f}>zg2KD71u4W<>@5#;@askjbnTFm zT{)T#KiMKg%UgXoX~7qC+P`OeJ?HOKs{ zwS=9oz~>uy^$E7sN3;WP5H8)E|L3aZNUe$$;j-?l$or+Tb;@dfsrD&t$tTeFeATP0 zY}2DQ25=$rj~OMj2`IeEh&_F>5V5DlTp7?n*vJaISohpdUI56%`6;GB;5G^PWs^d8 zM&PrG@7oF{;b22XEN(4qks_oucPZsuH~>*3A%cl`EsH7Mw`wDAIvh=}k*y6uYXWQ!%n*`Xw;JPIzOD zUP0Ad2>;5_U3A1_qL)^>C3;BI^0N^}q>z-su|l15zZ4KnL`n1K{Euy?1ym`4%}C53 zy`7?*{79)IXcP`~jL@uliJXt->5kA)tPh1NB2pv<9HwTl~eGHnla2JfoWyNbGh@oe)kzB6y>t0tEz0;1&TX`zow%b3h%5t)>Pb zxzK0wb6Am|UFj>k&L9rl+uA+Q)+6nP_JUTs2iq#hQ&`uHx2?2~3~97pp5&)e_5~XQ zck#nYyfPy5>;v($Ju=rTWWb_~jZ=u1QX!f^-QpZIUYBxYMC>Qh#ESNjh_#i_V`2ut zh1p`hfKd&42uO91J585Mw2UGMe zfEf^PXCrQ3Vm^{cU;>bJ&DK{KO5BP6UywcB@+^m%9T!iJO7es$F7g>T*$4%OIXVIl z9YHOcbu#vAh$H>f&ENi$PZtfQ4G&2cK1!N@8*w#~AF-C+9n2&DO>gc@AwCkd*7>pP zZJ?h?iR5YeI!Az>z<}6mDK<|s2LdR;`rNzKh2H(kKcaUB{jl4+938gUyWHrGwB|9? z{5Un0`?Rc61T@I$7{Rsi{SZ9TX9E!$WHWx0NV%~R&yU%!v8w$V;DMxV^X!+mAi3rZ zQx8R?fDaN;<0)mjX@{bQbj@No`uIB|yoxtoqE#8kT;{4IA!+HxJYIkL4P-BB%iU>}G4b7Z&+o^nBS z-VntN&%2l$0G9@Bb&Rx8p{SlcG}jJtE3Zn*(0btJ;_X3FvYWzMt_d0KOmGiGHg8%{TVUl)$=P$TE-Bw)G@kV&Nz2<<h{0LM7OT+w~>K z;2(i1XdD*;jknvzQUy0f_t&WacCfp`wT`ok3U0E()mG3|xUd+caFr-rl0m4u5rhE{ z?+Kfd?{5&QVfqPJr9seEgv9N!z-U@oyqLr9rm(7VgWAzD3}W zW2ttiTaM}KC|vNltZ*rPwakC2Ml)jIiZC1^>EOAOFW{iEf!;q+yx+E$RHWwrY1>pl zaMiq@;W-l31R8k+G7?#6Im z0>dne!H`fPjcBW1I9Q2GEqUujxlO6V7qv~PTc0a+>!H-8D8L*>Z|MLYM67f$1>^6? z@q$-T>JSU@m|q&*MX6htQpfUVD0OIeev#gFmAduj2flz(ci0cD)TQ3FQc>Di+q>N8 z?n>RZKCx^Zie^^o)m@HZEBo%|)Bi?l4a!IJ zOljJWu|bo0Y=Q~#1X;V*EhFFCQD@g7FKwe^Qud}{@%^OT>yW^!VD)yU3~}n&--Zp% zCyzQ5k_fd-5;;TxWRgP?qX7DFbTWkGuQ{)|LgJ>Lryei%G?W_mbl$;vzpm1qOJ-A@ z?xwG@NT39bPd(%TN zIle=+tcq7VK2Tx-+T1UUj{DsPw+z+Osne`?74;!W83e^EwiQOyxr@25-ZdB2!(2#| zl*q2D_L-hqgJE5y$;)9esDYO@8rE4nnMxcoiYGh@F3$EsMB0q$Qq46j)%?NkRI_|{ zwm%>eB97-K2>Xz;2_pHVp7H+{yD#UmRse*`?e|(4YD5xe2wUU^FbX5&oq_wyUIdgv zcpC-s%K#?ZA}2eH5S1t_586?J;Fh`g`E2wh4_quFDl?U6&HNLDN?ZLrwmufs~L+b8|)fO{xa?Fw#O97hNQ}FX$4#G^s8|+BGjIiyq-)GS!%^ z&MfEw98tK&gU*!cfty&EU9o*;M`JK<8jJf6L<{Vq7xJA&FOhe3q!l5$#@c1(nz~a{ zG3hcWKr)5h$1u$awQb(FY@2V6pr{UzRcV7graL=DDUd?liIv7PipgTGFEeB zbHaf8MAQKa4{TkVeTh}*z^`Ysr!zXB5Oxo9k?kJB1Q~}bO&WewJQq4Idg4AaHx>>5 zbxqi(QgDZ6@ddy3Y+E8YfluxOP6zI=fzuu4zTXBZa|v?+o~6l%xc5x5FzF`)xRN0m z-cNz34s~Kw6!Hms{TD$heGhQkZq*3)YH0M!iW&st_=b#sKtb>xY0^3Q3S7^kUg`ub z0AY#OmNf)UAx%wO^UsqiVd9?;2|mLsTGCfVVM+@`0srZKAe2|W>B4c4QrZ&Rfbx2@ zOC?9wYoQc^#I`iS39uWjfYV+5-~nNb`;skvbGD^<{~E9>WgB^oKnC7$fEQ|QA>Of1 zML|oxCw9eD6wFXXK`w<_PuTGi=CG3xETHqT7M=fIM(3z!^-7P^f9ycyq>SB{8>@x2 z4^}R;WYL#2VfTm5^GMd~tc;^KOSE2yn=D_4Dk6 zIZ+1jDlrU764EYNaJA;uJ}sCmcdbS_zEIteZLOWA!xI)0sx0XISyw+Sh#TMNU8dRo z>Zf}>0FlJP!gA~4_^YOqXr&>uF~d#O%vkdYLw+VVKQJ2HLy2>(%pyBx8kvBoVe$sn z%!D!KBr2pHl3zc(7cViIuBCE5WusUenPnY@#aB5pSM%ye#y0f7z>)o5-#yUw|MIcH zhkdZvGfS~0y%bTM)neIM_IChK)+P*BHieL!VW6d+Jf~mlUroQTz%F2+LZp%)<{8k; zw6OiP?$OszdvT^{d4joPrdHoQUK7*UvsNq*hSkbw33ne$wM=VwddZHUN%c94s5m4e z^=*eUKT7Jkl4eTKr(Vy?-;)~fn>E= zdH49eP3gQFt9wT8E#CQU8>jxtyWaDc->XK@=<43&7V-5bu`&2+oft!qVfi6K7Altb z-}ROE#c5xd9yVvh^fa6{`P%YiJ=ilSjvl%88spaGN?rI90kXV|uUA_+u2hoB24?j_ zi3rf!pBPGqLK7;Rr{a=K37RL(&I!#9a7MQp`gH2D`M6(V&%D5o zv+uHg35&Wi1b2tcbUMzje7^)(;1JMghC@6WuTiKXYM4@`a724ps#+#S2IGCA0~dt_z;Zg?&xbX9yOi^L@7H@^dJLI| zER6{6dzpFqbG-V%bRrMoSBi`o0lqOKz#XJ0gg(D*Oyq4t7H1wT@D_z>WPu?DeQNyQ z!djTVSisvslb}ngyXoCe`ni2yeP8R`S0QVikac$5>kb=PV*>x!$Qsn&T!zhfX0blV z>E*Bn0;a!hOij%e;4V1ge|?*Mlo;8Ih9JRr`1%fS5+0av1(o*TIH3E(sA zq(mv&pY!w`<2xxNo~h+HXG->cYZBi0)s6NkvmeV=4m*3Q=kcx-Z~Mk?dh0E>-TciS z^F?>Y4EQ46d40l0)spNW%*1A|-gn3NKdJXI6Y$Z$&+P@cf{0-Xp-lI)T%lM!NuLEe zvI?eP^Ol%^$Eop0rS))?BpZ}($p$+9XE8AfZmUUUbmr-L`RUM=6~C(W9)HcvgJez6 z&Yc7KV3dzCE{#m)rBLR;9pmqp`-T8CwdGJa0=fxlnJ_IrN73&wpvMt(%lJ&#JM>Yu z&T#gij;wb365YM~Z!cK9@C$4UTCVr2FZ=6#=yPlT>0ba}x-V0Rw|k38Q=%=EvBqLv^cJZWH2LmnAk`=Tf8OuTlyIy*4e-t;ri>SjE`6FER)F{zIURDTU~qfl5U z)J51HccQNU_*LPXjz-MdR;vmjGqNfq#?Fu=MZ~tMrq+L_IQ07!szO&~yGs(gSrxjB zK(Z=?G@7eIs6aGq6$puD6^QHtR)NS(U{wiVN)@_Huzpg7_?0TuJa3i2;Cmhxubc<# z<>w`ng!;3CLV1b7u3Bo8KNPy@0W;wtIEwth>C9C^`9t-AQ0AoTtO(JkY-@OWN(&x? zGQrWOPtlWKkTN!0`>9=()-?054EV?Y$k$lf3>f`VbE0*O4QEVJNO3+CbFT5SQ=bZM zfr262_3|0;;7z)Cb`Tu+`^13XWh#OGABXH)27ISbB&iYGbs-M|RRVxpl>p#hkt)F| zXG;Jl<>cNEF*-b-HP4ou<_4~-eQ_iFW{#u{W+YKa1yp8Y(&!Wri+opZxt7fWM- z3|_HCuyi%;W2i%+c8~#xX)=%kC5wQ38@32oi#Iu#Ot1(#1RoGm;Dg2o`GeR0JShWBSBQZq3@A~uvwB8h+?k#ux6vvG0o_F}}ewM=O~MXPH+ zW}t7)ac2um5nh*{5$<3ca!MQe5g~-7IG(z0rX>B{|AoPwbYbd2m)~Jd0~Zz-Y&tjR z+*TNY=V**)%`<`OOvUl)ytnK$XZ>2B`q_Am9eI7rWA_7NL7y5w<%SB{o$c54kgoCH zso6f_s@=8yNQSCahAK;jeGw#{l=~|PPS!_oSioMwU}T{Qkrz-12yB^90-3iekQu<@ zzOE87_k_$t0}TC!P6KGPBmv*n5cNOpNv4T`&Un-MdRBa${x=5tRq#ji#2*$Lr`;L zbmo^iH<~8o^2RcqNTMXdV$Cr2mAKN;QOz>D({xPG1A(*P;#xdaM~_o$+_BP22&h8{ z@zj7f>869I9>n7Ct~R(%*HedgIG=9ED> zp|NLae3NP4P9o6ctJRD;e4)c#f{*mXM}}*SaO(Wrj5v=O@eRT@;ngQlymj6i@arJy zGYOqYgR~7v!9JnToEfZr>*DRlcJkv_rcciKadyCB9E1b5UK+pU<)9WkcURuLQ;;4= z+>~FT>w=z`+?O2{@uBG2TuH>Z$x7nwX$GM}!DP#NA@AdDKyNfVk7*F`t-T|`>M|a} zv%|ITH>}Rhr{)|}V@2;N*+bT4ZN6>qV=~_`4Bj=1l+*P3)c9VpQ4mukq#b;La-lp* zdsVNfl#UPv3Pd^@+n6DJEY8={W~+pX*CDGq@yz7S50)^+irs~gv^dPommZAixg z@GR$6-#$LZ0?#1!h&?%n=9574nBXo%|2Pm`oulr|GXN0yg>br}5!R6y6P%Fq;l-?i ziPfxRB_V6i6@1U8z@nfOTS|_T`i}8C)i_IQvh3b3wSB!#ev=1eesd$k?zkoZ-j=>2 z`1~*HyX)e+@6>n4cl++me5W8kb+7;@m`++h=Fhj03?gY%vzAsOAAW9GbmXaKcp?R)1#{l0`p zJovWphjfFMhqkxf*NQ@&eXY`|ldn~Txy{!qALxnX5YVn{Dl&hvPUNYvGL*QDall)2iN|VM)Lf;lIN-90loeC zQUTr%p-1+4&5GFN`D>SX?S8%Xd+lojUSmbGbbg!gTYwxA1o$^lq9h31Hp)uBS>bKX zRrB1u(&wo3zf`541IDTd(b=110NWeSgPS`r{YP{crHPC6k#=TCIFAN=8v}WqtB4QfJf*3 zC=}N7vguUSMdDk$k`qfxYWA7lj4mDqzlRErL(`qt`66|W)ZCZbMW|I?Gk))aZ;)CC z-$c_L*x?3ABpqyvD8-eH2{4r8UglQ`zvg(EVHxIGo)&c!rzH{R2LCn6kx_bYTLREI zdQ3~}q~8eBXbEmR)OK8W!hB#?c#Y1jmtSmOTcO$*nL>dwNj@jY0clM5YzV&{0ew%C5nhMCXxKmXgqHQTay#I{}stBS?XZ2*+eNAYPMAajZ3LF&Fk( zQrCxWFOJvbB6)l7&9r(0Sv_q~NZ6p9ElTQ+1ll2J`jcthS1^=VP4Z3bB97)&7?ktd zRi7@6CR#%?X=Sq3MkKOU!6@e!Z2ODdC`%vlsI&Grxto^lBVJFKn^aCPsGz-e1yrj}B zv43?4ZKoeD#qK>d{uWd(E_O8S_s6f%$^*v|cDf3|D$@MbxAd1@vZZU((viiM2=0V3 zUVTgNc*&Lysinh3-l~iHg5q`Dq<5R%xY%1pcSSH|Y97@&_x}?BJ=R7Z7A9l1}r*!|~HI@+00k zzQMq>n{kPi5q7)XN~=mx!ts0eQZKvyd=8|7-dIS&4=IY&yJ)eubk>p9yo^K&Br$Bh zl@kM%0k>4R$si!57GV!MjHU&s+z*|VrUUB#f%=fPi9=QZA9|;~B4-Z6c1RJ&xHp33 zsY3Ix)>$DQF}F!lrc5>7$SR$&M%x&cTw2$S7&9NsmKVqKu;Yyc4WII&R=1p`Jsl^`Xv44~X=HVf@EPowb?O zA(dWJFNsYbAbIyv7wwlM7LBKTBi_um0wJNfhUJLXjSzoYja(Id;A+$kF@ZjBg$S=A?m)P?xD!*cMG!6*U@*t2z^#3(7Eh85RiTM5 zt$ovKy>||gkm~_Jk?l4+6X;CtWdUBR(*G8JCv183DTcW{R%CsOAynjctNNgSbvCg2 zffFk3(|h@SP{7~idw`hUALth&IZ}l(pj^@Z^uoe#`(k^c`B3m&Y2o%8c?TDh1#CO%XP`Y}cDIX$yY0ZmZ^N}Tod?%hb#hvV|7d?Qk(eqT_ zm;b!FKUIoZ&XxezKSUfdAl=Rf2VrP%tVfsV6}TAWR$Y&u1Y&iB^We16zT!aT`Qqiy zj#RSHVO(-;*xgr8mp6LT(b|f%mQ;JET8>$j%l74~wIxqw;bve-vr|c0y?psfdU9o{ z5>%(YOhL{o*TEc`Eqf(N1UHs;#eXZmy+BI^3Sb!c6l*^tDNzDWN$p zD!#R-H=wbmdXO}c_fP(im|EbIj1}TzZ0`z6HJ%LKL&NqK7O}dT?4SjMHu&rn$r5v$ zgjSbT2aFkFrBe3fXqnH^B`nbvbmk@^%U8Ds)quSUrYH8)wDctJE?oPi=;@Ww5-8TC zCQcd_HQ9pcbB>@f&?E&Swj?FS=nRnLKU^TGm!DNogVP7)nGDAy5@G4|MtNqs1U#0* zTMJdC@$ICl6vna>nS-j{TA)QQRw;*qX)0P!Y9zy*i}N72)VM;*-D+#HWWb_$gaL=h)t9Wf9xilor@-L4i69Tk}p486sdipb9j< z?fwgbSoFTeQMnzfSA^A-v3eP$zEFk zu$PQ!Y#T6-*dSc$7`Rp6-CX)-pN1INnvHc-YhP6S)9o>BAYyOdY;aFwZJYHPX9_%p zF@*ql5R;vJWtcx0M6${$)re(flhQ-GS(SW;Toc(Cm%6E_&PtwK)rK>QD}6x!FfNzm zmSWjbN=6~#q=&>Auoca;s-K$Yq6;U(GI6p=Egs9SS@R-jS2jCSB$OJqL-v&IQ#I(d zyC>h|u`9f?0@y5Y9h3c!XGVgb5e-ExMPp1W*dDCXai2okuzoI`y|c3q3oNPa(h(Db z`O!fY84TkzR2WPKHN6#kX+DhWp&|CV^PuxewP#rL%c?hU9I#jt;3E-Lk)!BPM>HC0 z3Vj7wpp;4Qq(ef3k>#(Fn))ignk#`X-Bw;BHSgq4o}t_qr3kl*a$(lrc-@(&ad!7N z%E!|(Arf8t6(J>|lNLyaNbi_NSz{DO6jjd_W}%8vkSv@--e~VbR{4e@MX&G*9|G;_qkua&* z67yj5@ZC-IkR5PrrFO#1NqD^=JYJ0>lck`F@Yrjs#6plhA#dnMU`G}s6+$bbQL0Vh+l4sh{6D)~)$5=gS1a!>Q)z4vlH1)>clo^*96ehgkm zW=AB{x-#>)T*lzMoGfa)KOl8=eo$%whmPehYhwN(TMhbH`jt|)J*k^x}kK5&qdW{z4zu+)inuO5uNx@Mt)|tGdm~fSxc5|8Z z@n_`jCiG2*)SY)?!`}T0oiEkyFX@ibOBz2F1srZKKG}mH z$~7_(_XsATlemFJ3%Z(c6?{QllKgw>Uawi2PXTnQj)@l@FRcb}d=6!Fuh+bG4*uSa z1vdT@>VtTX-+h=%r++Y3SgOFNdnby%rv7SJ0S;uWIA0knH2*uXLi4{9E2Kv5h85>E ziHlevwUJl>4SC#R1zRvR-uc1IDqyh7U933I?$9n)JjqEhvYTRqN5+b%N?5Va_>{0B zDil`ikK(Iig~m^3_61hxj-JFmV^r90_VkF#W~H#N;@BkN^@qcOjM+YdTAsM>VKf$w{iDIzP&xEn3zT&x7cL)UpUGrRc%h^>eY;{P=%Ieb)hrizL1g z>rH5$wZ5*riHAzlZFVqOQdE!__&VyG1n&*LIuMA%+VGr@ukOOfuiJ%>PZ#(&X9Ffa zez42Og>-5-__$2?kn=Ag;J;?9TnosFb^Haga@88BI%nkz0)EcQUsk|-?pgt_yH_FL zVdc9B_-(9wEXDT~qbeC7nsqHp${qH%m`n@mJ9LR{$Vw`)j#cv+D=afbM|X4r2`p?F zp+H9~P$_B|0)D4n@EPeOtzK}ce8mLS}?!fO1B&&|7aTP+Fg|dUCv2C1EiPX1yR* zK|j@WRGw5*pYmGrstlRXfDd4CO1DS|NvE~wrEz9$^R#2 zLiw}yf?oc+!fW*Mf2ChlTi#myk*)(He@8f)rXjQCb__v9ybvn3MTSO@=t!qxgrePT z{0Soc3~?IcoHBHM@~r>=?7a<;WY=}y*ZsO@rl-4Srf0u*XR-Ub@iib8!b&2sFu_>+ zwn%W-APb$}Yn=zzyJT-`}%cH&wc<4(Tc$(rr*2oz58+Q`M&3# z8;Yj{t5A1k26a~w>Pmhj)TQRDqAnKN0@Rha3yROcAUt+4>LL<^y7sy+M%{ixEl#LQ z#@t#Z4!%<^0jwHznUjVt%-vKMUP%_xYO;{7gt}QL1{utiq!SlL-OWWfNdCA)?(;bK z30n#Zt1<%BPPmSbYBCNAk9OkVFPW;?!3FQZawyjRL#p`IPSA6h1lq&asXj%tZiY4Z zs{`51^Fh47C#nPSenG$B0w+Yaeo@zfct6LbkU?Cim{mRgM7}0z2|T_=)nl|y7;yE^ zKP}oE{wJ>rO47mwjn@FBze*K?lFxWGnZ9-?RR?fj7VOXha_p8ChdXoN6wEe(??;~j zSO@Ul=iZY$+af_eU;|!G0dWHEAW^GpjmT{vgc8*`b_g4M?)QAKp$$CJ;V!9gBqQBGVHz zuce*3K>9Q&FI-|p_Jz&EA7OcEMrHjxDSVPIY^U5OF5@~oJBv8(>@4EUcGfskWOweh zbarugc6?A*t72b5 z>QW6@L!N*nfw@Q2u`C^GFyj9^C}JyBEwz8GjiN(@axJjuWY6cM77$5$4LX!48{wEF z_gp6>Fj-EP+7X6JR9O*HR-YDib97V3Y~b4_fl!|Rrq1#gbN=@aA8x=n1tDY?+26P7 z6#!|Vz@!gz*r6E-%KW!_Lm-V$e6BA)slE_+pXPgE7xEO&O)&$!c07cncjDnN!^pf; zCZRnI*)F<1UurT&)2h?;xC7v+A8vX98jDUly#PyIf6bP5l4mpS?%`P_=&y zm^)Q6ucZHm%&pDiPlWX%y&-8^wMINOu=Hfsz>;q#8(3K57)Ia(B;KNN&gE9r02(<` z7QMgfzkBWdO7j(Jt8CJ1F~4BoHoveocbH$YSl`;Zg88*MUaIEU2UhiBjDAhne5~dh z)sO!}K&~Jv*vC5c^0ulJ{9LcXI*kaETnX(4+s~IFg0y}B|bkslsJl8-3i=sqSLn(&O!oO>vE$RWG zYM#%ACaS&zLyv8zy8+~%N(jm2$M;PRgkx^!eDRu*aSkLf4UxaV5N{;VOuGadw>O4B zsJnS3iJ=23rFSdCy?3!BNZKMCWkkTB&E+nHV3CW4ks=gV<-)*=Y|D)^Cq!J54 zgOEdb#`?#7Y=t7`H(USkt;qMH-{+Mkw??y-8HWtEzj$2WSYe;;oY^noHXX+tg4HU7 zm}_)_u<2;4sYZ;2Mv9P)U>G=JJ$%rvc7E)lNL+3B;r!sO*J=29U~_{P?OK1j%HW}O z(b$+^$=HAy-JS!@vzHjx92cb7WMrUeRtZ#{xr5hdkxML>|iq_pQcDUN>G!GO~V zav2V0#SP}kOmMM&9vmCP!O?B3^r8hS=FD+{>hiEWpa@rvDduKvxQ;oWhM?F*j|CQ0 z;qcuuJ+G9j+Cu|Q-oJMDp!!3*@2UgRP_+3@!hlQ!iB~8IM7~5s%yJO8hS#9996~qm z$DNrjqpx=>+e{#8>6NPltUOGkFhP#O=784B6B3WfeXA!8a0S}4{uNIeK*JsFP^nI} zjin0Py_r-0v^WCFx5{(;40yt{slxyVr;{pw+S0{5?Jsd-zWg24V_ z^=Xbk??d^Vj6Pm#-~elL3lMs7)GA13~gMr(Wl4*DxXH z`E=?DZ=6p3ngVXuMq3ky9d>$e&IzJ35OYR`@k$W z5fYdJyD^hG?9sG2DYW0UOQ)Au&6Tuf;uL0@E^|z4^?cCjVbLjP{hb@TtMv8i6V3r<_mhI7uL;NEP=__)bWTl-_t4=p{HVhRdCYkP zB+%H*6m#f>Gp*5=Iot=rX9Y@@5^n_Gj5@x5d>E`}pNA0cOjEb~8Vmi&Nf`(&lDoQU zy|i5@2#GgIrHG8PYMs<)!IFJ+R-W}koBcA0C(O5{X{2xFNY7tUtyUdZAsCsRN?|ew zKa4)Z?;wH+-br4(;mv{}3Db4IHsLnQt%0-#qS77MQL-=I3}ZbpjJ3ot5KE(9Q*V6| zFT7WX)F0jluUWfuctVvE-y4i&qa2O?>-O;8T-Yf7w{nI6G#v4kSK0*v`_m%W+J7*- zGXYD0yfWoni3?o?DX+~Z3pyR4-^m!ZErl_x93%ABu_2+S)Da*=CCuq|2F6sh+crWJ zH>5g~B$Wg_VK05Tv?UYCy_ec1Cj`M!zVKe>A|z>XPRWraNzp<0*GH1F6@2MOlO&zg zl9bo7Bn8?>jf}7y1qh#gDPBPAg{5~2g9lh_^!QQk&~Dgq;kBGY?I@)MDnqf{(1 zn_8J)Kr&=WB7jh4>0_koXDP%;gjcit@EHQ--?7Gtkm#@b#)+!e{?hQRgX*QP#5SD9 zzKLBf4^*);3lXja3A?2!0(E-&QI=YJa?Zr_mhg%{5A08H3B2QqZG&_&3d zrVCQLS#ywe0wSQ*F9-fC`b+YX!{^03{pUSfvRr;Ulol4E%XKsfkRVUpJo)|WzYDia zp=k|I)FLGyH%?uP1nkvi*aGLF0h{hMbH;#T#QUwjb;RNYM9N7g^z z%gKOygSsYrbhAf;l#Q5F>N$?`+AUFulqlilmbUpu>vfQaR+l zjd3QGlj5tstBqCH{4$FM@p4f;>#bJ1wGdmcV&fH=bjvhKMpX|*QgyeXC=ITMfup$v zLW_&-mx1vhS!;^ZrB91pwWt$XM5Uu&FRC9y>5=j(%+n?c_EVIH_&0oDYl3_fIMVE) zWf%pImdn_IJ@1%DgBst&f5$qfvobEeNUg>LdLmXxnjLzN zr+~jo{6g_strhJjjnKhJ<={!i-Yt*l$XXC)uRJMN`UmEMt{1C+qV0?H4YPZ9+m7d# zp_D7Wz`pX$KyrHDjn6jPJXePR$q?t%>VqU~LlO7*)l|ul<%M#08FD>P zxU9g(0TvIEzD-MB23g%dwaJ&cVRy(Fl=^Qqvf&G}CfV?U+5eJYM34JwhrAxxTjDRY z+dnsE%#h#8m?Kx9XIQlK7v&dl0eWnp$5P-~w>%WXQqMRa*U%TED38}SU{slJvVn$8 zGk{pS)Z9@b>{w?Z8RqE!ZOcLu{;LzD3f zXHI74*NRkjF!Eh%1T2dx#d-=9@yRh4Ib&eElOA#<#F# z{Wu)`R{p!KJTktW$-Etxb!&V(Q(J2Vvm6Sk%Jhjv=We_@U%|?n6wl^s+_UIx{dd_(ncFyweh}b8|cy6 zubHK8&0|bQLI5+96{i;jC%tpNU#&_t z=#FnMZ!2$o=h{GrR(K}5U>Gx@$-4dA8U_z{w`*P!`wlct?E7}(w7Bp*`z8r7v#kd; zS4)bD09C@^n7^raJhAU>%7NYNyi(B}l=E4J1Af=czG1*=_|w&44$qol-@=NTeG4UP z_8oW>6+q5M#SAn1X5Z9U8rV?)GLTvDAW1Ud;!`rt>|5QPW#6j;A8hnN(sD>dybkO; z!H6ESP-V~dSV?%yzPsn((o4|%>X@8hAOZ&<1p7_}^Xz-2JQ~9i`>vTZa4Iv&2)}Eb zt1%7seY;#Bx6@X?>Ld5yDMqMOt@1tf8=pn}#NlujPr);~0VcYk&j*}>Cu5q-hw}Ei z@W|+*UJC5IKTPKX@E}*so40D5MS1Hve3D#02CNA(ao**n7tVCDtL9MfeHJ|s%s}ea z%=aOKRr)~A9zO3V4G-Kh7CwsdI13-e__&-kk`c#6GC=dz0q@_&+iDq43;0&vjxj;K zx2Zd~nL>)w9a@TidVg|AsE|HGC07rQBP>RynB%cpu_rTSidi|lr>672BgoK#@@{N`&=1}`e%1-%H<#~FbnSI6I^`nY~K z$O=TDc!l_lGf$0uOYcNl*Tl)TZM2$?wZ5TuZ@ z*OZcccL%y)d6W!c#UE-Kat)xZ=x5bz z(yMXjDS6n!RN^qM5UY4g-?KFtkN_nyioTG1sGH}A>@abK{k?d6Hj={M_QcSZJ`as=gH6C?GBHD|gK{jQn&_%i zZYBRZi8Ybd7$pt=`mf5rUR$GFD`04cIf`;316xLEi)^uEk9qT;`ub;KUT-Q7nUndZ zh@0{bn1r&oLJ($JY}B_$5k*12PHcoqs&_IATy-sGj^K`O8lKIkf9JEUihuLv*%>;0 z)kgJh!|(vs2O7a}qLqTi3goOuqxxM1zosa;rt>iqOvAS!#)kU6i)Z6n7gU5zEJ(>> z#&!n9)HyGxj6j<+tFhDpdfB#>^*8#rOy+h$M)-F1jaZF6rey;B4C2!5AsW`y%QNG! zspf()qxT}=gxihbG56Ycwd(+{>bjvW$04!vNE^>^^iv{fA!NMD#(4+6 zmXz158yO4wJHeCzBo;J+tVddPGBFM9+X?YU8CC!ejWjbTa17C&jGFJ%nt1ky)*Psw zO}t@K?}vDs=PRx2;Eauq(8nddVS0&eSjq(OqtY`&EMoqo!Bv?igLDDgL zSt%{=D#+n-yP64=e?~KJXP+`~p)E6ysK{D=GU_J3YcYdo)h?0$wSU79ijW5ZPi|Cx z6^Nr9P6wRgdzYo7v_8cK3oq)u-XALPv2`LO{|Y)(p0qx7jsN`pp6k^oiK?r%;&GFGFX&Z<=3G#Qn9S97sen*) z#C^K>An`!UgX;hOg%^>P)d_HKYf$}q+~Kqtvbf31Rr}((HDUq(CqEb-+-0$F*Ky4S za|9xQs0+q*6|r>XMWjYdhuB_PhR7>nqAN`%BvnBvtRX`#ZC!M$&pV#6+9RO>9T4v2 zS0+OgTkbjQzze(rFUYG*cj?k@UsUnxSE7ayY88iN*^I;Sq*YDCqFUrA^L~v7*7gtg3E&6hoNAW`w(L|D><>7HA<$r9eX@#n##^eB z7)nV*1yD*N+8y6RRV+H1ls*Q3~#}lq2s7wur!!~$AbInCLc)?r6!AOMx zSn62~w9K3ZuhBHdY=tk-@Dy*lL&Gzys7}c9s;kQpI2&LPkQfOXA_n+FfK5u{4{0X< zd#07Rr9ygUZ2tL8mvDe!UGlpwAuKyeLXK4=te5<&IJDBX1hSco4y|8T8RH#2-NtK1 z!}d#KU%BDY#}J9kIWL!#*aExs5XgE6T?6R?Na|SpLyb+HAN}v(;)lGcQ!vHpMdx?u zgWifDeDI|08jCN8L?>0z^=?Oq%4aa*I;UUhg_-`uP628iamI26z85)%{`8-|DCsdl zUO4`YwGk2pv-@>w;9S?`p&6l`_fSHkHMp-Fp0+Ev6A@lv>jU6c^qgqmRe)RQB81sN zh5|bMzg8mAHY~?}(5fIj6^2RR!v9s&7__E$zHH*8C(YXaWnI{)?HhGrt_=>{rwVrL%~LW4#0(`P zh#H8Ojcq=c{GSm~ur=Xt9YTdL22{HSBOo|#)K2Y^l*CQ7`ZZ=50Wg9pIyJNIctPbF zsrCk=Vj^qG+1p@LUsJsD-d8s!=E8<6RzjUI1;x`6g)}R0*;Of-=B|H02OJ0jaK#5B z8kDdI$^1lWbJ3s*tcj1a!jdheY&Omr6}aX+_}YTW=r2HU?S&|Xvw%lLXn;#uPr-Yk z;~t7&Iu+-a+3Ul*jaLe(H}X?hpyW>Nj<#e)WcY4%FQlCQG#SXw=lYeatpIvh)%J1*{NQF@fPwf;Cz#^ z7da?ia;Wk|lhnwPsZw&Zk+^VSmduxo_Pn9IOr3|zRqHS$9)}V3>#CnJGn#JYs8m3< zkeQsNFOkiOs5G&%hfj5$B9Vfnd zel;0sgSUn*B)2MSK+ui&NWPxGX2#U|kJXL4+r0^yA0Lh`Jyod5@8O2B&ui4w5u<-= z>wVz5g|s$uUu$Yi1ds7o93RL@_n~W(Lh>t#vF+*?zYOn#|J_8)(X(TR!h zz+N3bd7^eAlq$VWgn|r=Py+I+$EeS@cSEVOJ29$==*w%yC@s8I${olFeC=v1w71EF zb~8KwNP}4fcs{Ud0R}wZ{??;_e4PRI21^N?ovwUyzlfnU5P$=IGDA^~G5@Xx3Y_I9 zu1pzsGCO%4X1~|qCkrRvVz8)4{TNvweT3BK+!L1Z0EsVa9=mPsp|IZIab_!$Z#=+v z8O2j~tN7d5``T{@?VyjBAogt%mfg#HzY2ErYBf~I)2ZHK&d?HP;Jdezc268oc^~wv zw0rucqHVJ7=`!+F{~VV(cYE|FB0KCo(FV{XI(SB_F~#@l;K!#Y>(6NwV>G-?O3Z4SIZdJ%ahg3% zQXur)?5XS5JbRx6Vo^m%vV$H`mrRd8tY7HyztC^c<41KF z^k@eU)tDYBHqg-qOr*)AlQPbY0k};hBt{ zs!u(99@fJo=<+Gj(|owv3NC>$E-oRGKeKhJ_M*kv#mtTYfDX`Fy5 zbPP^j%#htL{*gxQhfV%<&3Yhf@?V9)qMqJ~JdtMjorCHhMG5c{b46Q!?M3TddsOtEg6wx2Mu9WA65aYB#UdR{2U!J|lkK=g1_O9}8J06rmnQ!Aj& z=jo0Hw6)}lFT9dpD5_`is)wYZ?pU{QBun+<%pl+|6ZlDRz#=5u3=gyX6PK|srdOt+ zFpRqIVDL=eX7`mSGL_1-)|^5` z#D+3}nIbA86et&&8Otz4svvZkb%|ws80iJpuhZ2^EY4;QBewEz_9u(lGF!o)T(gyr z{tg5d{^V<9E6uF7H<+s|Qa;+%zx=W>=s4thU{L*L+<{M#m@nu^%>9dANoC^XKZoqL zi|>^aNTO^LsjM}hU@=Wc_x5g*eFpwEHG%&XrTPx;*UQ`wvF^wfxZk?`Md(zlm1r8* z36I9<|FN%lh^!DYsH*4f8jINBAOAM9B_HzD7*Z8$Ua*@TItUbX6^8UC%bgp;39B3V``#`RNfGNdf(zx?@z^NmVILWyaNAN*B-G+zeJma z@n{>K)G7Ejt8iJ%Tw}?v(FL)aMx2P6x(*4hE?5!+Fu7aQ4WSvAFo=f$6=y=eoY2)7(N@eE=lWs#q0;Y2+z|oiK-{5Ls7Dl{a`CmJPCp>qy_RF8zYt^K#Rq zts?bYIt*oI>j=&lMUn(=sJGz#VQmCz@k5Y!8$N%y>=V06;42})QkuE1cL3=SYPU-b zbtj}0PS&898UqNZ?!o=N9Vj`si~%H7>4{_4WNhSwv+k!Ho~uwvzb{3TIeu6PgHl;f z5NJehYG+N2&4O?q7F>855DJ!RS)|_AvyuYCHyG%E31#!l9vWdo68oA2?~;MAJ|8jQ z-t|Kl60Ea~Q1t+!4#-S!t~;=B%Z}o7Vkq>-8;V-x%2*qhQ}`3w*AnR7#Z4k%tVA!4 zn@k1ZW6W}|+=$+qi-uo}{)`fw94VBu&p1+Oe>}nCoFXv~YoEpuqp-}x=Rni7w8zGY zSEhSx2)HCHb3D*GN{@}jy)n{#j}pAF3!-|Oy(u?U-SIx?f&tO^$BfFX&&EMiCpgCW(7 zCo`l&!H}jdnX5A-?MJB@lDJdN59S!sNDQD#8x6Hn1-?EWG0Z-$v=!}CQSyRWhLkp? z@N`)`@rE-bL|g1bVNXIZB=(^YrViDtYKIiGu#p*3DrhjI(ISSF@xcr!qpTTH+6qLF zkk-l$(8fyMf8xn+?mt;^D0SL@;u}J<``k_+Ql&4e?r7Iz}hFVuKgz@ z>0*&@NjtCimB)EoEt7Xj=HCGXd1icI#Bp`&xUsrZvrK(8*%0ohkG;M~Xge}Mm8~w= zg|eYtC~9w`YVJaTr=?vee5w~#(=HT5jy9(#!97nJyHMt87~}J$67NFUNV`zPsOWa7 z$OW#olNh+TYx}jC1g=1jHRye1>EeUjPY#{40Sv=jD)(y_$^>?Q$VfCSd80cKM&(^7 z+aG935g>QyBAip_)R!Y6?H02kwIuCA0p8jc$?4RMT_{J(6>UvnZv%9OK@KC5^w$rr zczBrOY0ppk)2$}j&1RmMIGlE|HK}@jrJ(rIe;))MV=p(g_< ziaE$zOSX6`wwBCxpK)qy2|A?qqv)fdhcLgjWYXgl^3+ku6ey}zPfUR7ef=C=T)nUF z>9~5I?$J|W*JUsEiB)?riR(Aj{mxk#PoVUs301Hw{}q8J9BjNY1RcF@#Wqw|SGc`HO{_EPWhC+r{l<8Lp!Pln+>8HM|#2LcvNm!5b-R4=cK3{=LM)m?YP#&&u( zf`a;vy|C*;$t?i3wVf1tMC+q5Z}Tgv35eAQ808Bg9EQ$r5PldRmILuLd$KV-3FtO) z=c$sxB=gaGdENHZ7;Q-tp;*2))4L;1K)}l;0rmC69Ow zFll6j9vh=n*g$c4!~>Yq*%CbMwhDxlW&UAaBEs_R**^}7)Q+sz*FWA2n_`g=#GUuM z)ViGdJ&U%n=+!pr){AMtok@9@7zDp(#Usda;;0$N4G|YkqVG46urkF9mFbs#j^3WI zmEwm$DBn**(Zp3%q>W_F2(?^O`m)M3O}}isjb?s$mmO&E;rX3rjVhl0FMp#oI*0MH z3@tJw#<42*T*OC-Il<_4Je@dMNgTJXQe=LAi{^H zD+_tj0Kceh%A74D7E)&xrL)v|ovWks7?Oz_8rG#3Nx9s3YwK)rI!l8@=a!eRuQYfy zK^4%6m&rxyfK$HJIf-C~&#J~8dzMLI1|Qr4t6d@9eN&yx3YqyzfKn39DCK`uc$X$j zt9(`KuaH|@2zim*F-gyr3uyK=Wl)(B{;zGq8#5+cK~>a-#p55s3tMu+N~?PQ8!uW+ z6gVKDMUk!@&6q4o7Jze`fCHJiBEr>kTQ5vDl~8l9J%=mhUU?3oUTPByl+}x;Kxu6l z8q0@JuRi5N?;B^uPn@eqzG8UPZ~f7WT8DfSy;^%tu`4{*{0vD>k!pgz*Uq4jJ@o@W zTy9=c2*yUHXxTXm8(z6cE8cEy(zfR%PUf_>XSYnghoEhvrF*&t8dq|{P37SXps5nxG=918j|+l z%vV?DAFL^PGv?~9IYhb2ST)yXO)?^@6g;cH_ z7V;(m;9;$0ONIck22@tGN`h?AnhqGw;TVFuF7Wue)!2n9SCxkvLR||Qk~rW~6u{N6 zu(2kYqU4f^2Po$auX24Qf70{lPvD95dg*ZuT&c?%_@c7FG(>$= z!(Y%{@(gZ|O3O4)RuCHaY&w}7wRFey;ognuo#bLdBD^0 zi=##o0;!@+&6FqT+G<`;8p9Vel^x=fE^x*6g_aRtiVKx?Yc{@5hL7BUGL82MD%KBu z132n@O$|S zwpAwTWed`(#r>pk+yfGk5CT$ww0MIH{_zM(Hr0HCMp&p~EXuH;|6o z1;o=&#G?vgY6;9T!`Bb#7_q?SwXn>S+}|1JsENlLNu8{^!I~yss%P$*Jmk6lNDq_F z0a|7LcBQfS>j`9A9`F4-TIou3U)W#clR4M4?Wg57H6gV>k$H@8G&Z_W)n}zR=`rgl+lAM+x>`|m0%xWBc+#$ZwnXx{3)^$L za^mN}W7mS9?8oHU!A<-WdujCq6`H(@NqE$Cs#kiv!&T|8579v|KzW$`A56c}S)M)+ zg|IX2G*^t1CBzt@(NQ`A*2=3$r+`)X5E~Pdc2)Z<6gQ7mf1U%YAm{V?6Q?HptAF+) zRzkHO#~c`P3|wuGF1061ImX9JVRmrUpoEDgP}XS_t_75aVHYB(L8*8ECInEXt;IDc zc{hX7xtCCYUKdcV2Pm=8YEZ5db!B&K1C%-2fuf&FCDSh+M;Bq;>Twj3q4wyr6JOh@ zizfuxC(30u=l@U}g2SKLl8dv;k4?2MDhT-dpS26^5e8|!Mc66D6j;SD3*`^%B)}96 z1~H-z`I(GkQu=Cb*vuj29v1?!$y^z0cvp>W462l%>DTuyX^ZkY6th>&Kht4N{uWFh ztu1LDVlP2rYX$o_3()fEHZPdF^416*SCEWQnv_cU&9AG}OqSAGm+`x1#gx{nj7t;4 zrjkT0)ND=WWOT^wj6Q~4ng8ke^X*CZOz|E-Ra9R7 zOp25Z@GeG)6)lN$sUxkfsQ$DdpAAZX;lq|tk~LUCgUj{YFF!-cmtS1ZxXhtm@g1P^ zDNp9+MKUTTd#u1`@Tl`oBP71R#OO0%A1-zL9HCqa1Q-))$*VX^R`tU%Qu;Yai&E9; z%^{{EjE*Rx6Nl?)t|+1#N6O9omKywiYwtz%O3W{T3C-?cY`x+|ANWuEyA4trLvh|a z`fu2C*D8`lZ_ReUke~58__);mddWV|*((g|Y2gLHiC0GdTY}^0Ux>|X0__~AHp1N~ zS0g&IQ0vUbsp4bl?O=}^_?mJmz_RD`;c=%*NSSTX6C3acsc zotD^XX+NffyEys`q@ho^=Myp``IA_IzU=W$I2%Ed+4Of=u`-IJ<(WJr5X%8 zJQ+2qY3W6?Q&SmwZXw<$$_WTq}bLJ>*DH2Wt->gz(Lm!sL6<)qL| zQ2uf*|K|VkqVg^ZPneXbfAm{zb?$S;_!j+MF2=X&_e;g(w(@3mZ2e-quEC5{utg*q zYIRx_O|OE?Bx0f>p?Quo6}&AmXm84?7Gta?iehkS__E5md(L(LqP1&daxyfRZb3r zWwX3(d{D~-`SvKc$i4(Doi$k=yoagacT;Iq27qtZEo=O zf;f~(G`kT$?M5f4AUXj}upi0TC!sgV7%X&zZfeFnnsROR@9XsM@)i4M?1|Bhs_1Dn zGddmJCFQ-l>u%Fsh0BvRn*i(uqdi)dQHMqw-zoi&>wwzn9k^nCCBo0HTW1%w>y~W4 zo$@GC&D^HR#J#e3GH*_kIhmQvTUGDP-@?hf?YbxPwm-kg1cf}AX+p+GyxAjW6 z4T_&2m~jI!3(wZ4;@EcOTKphv%VWsdNBLkzW?NRCynr%gf1flc#62EhDPp6)C9e96 z64`9nG9=J1EW-3#;o_2o_;;6!r6*TpY<;n{yS0U#BWvsJ=%JVKZZ*s;^g}qWEv~a- z=~n4apX!_}W!%t_rqT80FuG1^(-KNt%BW}y;bbzl_(C>UscLJdr7Jyo3Wj|eSo-NM zR@d3Ey7Eh@zl$v|7M(!~lt@gk(=(|4zJO8n z8O@%yVvl06t%13<6(`I!_VU&ahk@(aW`z`-C{>TGyr#oIYf33K-L|n7mGzEJNo*Wv zD%+m-O0gXW%hNIkzE>vnW-yz*Vl<=(*ju74nfqi+-z0CC}STOKsw^fJaoMXU=r-PPrk1vf9VqdJRU`^DR3afx&N;EC-Y{2-#C zHTn&#j}FokH{AcT)LFq9wv>Ev_`(vqP+CUk45lY?AQxxI%BY<(fbzHg>~iE}ME@G; z^vV2B3fVrz8sSl%bS_q1ZFcFfT?Vf!`*fHiSzOBO%|S(qs+4(2sa)eaLjbny{mQ5} z+Irl}TaV?+V`Gs^g$csZr zd67wd56ctZOZP(s-3%3UqZK4A69H$yEsQ8RR9pvX_)!f6jXq$Z2SI-pZxl;Rpuk8< z38MN@bJ^&SnP^`wPwDuIMO>uRhHV$8Bgj;n4!GuUY0Zu-1WvwITjBB50#CVKg)~q3 zGGWl6)~7W6pYF6*L43qOP5@~~R1ax_S%7Dlu>v$%h?8XxxjM>(C39K`qv3a|);lM7 zxE(T6Cd6Q$aoeM-x{rc;%i}(Hz_Q48@yhaqASEruhgYX$^M$H`)ZZyWYisWue+W=v zIur0zi7o+?&R3;FF$1f26xNJ0g!|>RpM>tjOR1mH#byWT5+9Vycej_T;;{?WE6YZ7 zS5bexd-rnZBIK-1Ef6M=c&Y@o(j>41V$+Qw80&SY7Sp8>gTg{2LxMnMb|AS-*#t@+ zF-{FOjT4j+ZWOJ-FLw&DEA-4~+ZQKoJoln+Sel&VqVVnTjJNH925N#Un)_IOebR?9 zvu)|kFj8V{U?hMb-W38;Rl-3FVIZrRAnkaGGXlF@3DJVBR_r{P>nKz133;YXtzRXC zpsknWy!5TC)4IQQeJ3k)${n zy6v4Qf3#eA;nIXK2vA6RiEgSfg}U%uVK)bf$%imZ70~(XwO)uDocOHPp1y*07x67ua^z2d$OvQqfyo9(4MMLQM!;k^YSdKlm@h7L!dZFPLtY!PU!Q>-#GT#i&le zGb~c{>KV*eF>xws^Jm9*sl893B~)JbHNTgfs@uDk_Q^FMmd&Jh?rOm)st%jK?ne{i z>YZzM^5~>0MDU28>uQCodwr$oMR+~;!waKZxzS<1(&l_K(CB$g-SD|k91p6Dw;E*< zJ*Q8#Q2uoF(5V(aaS~H@#*h?g)mD{!Ou~g8cB6+Y?jak~DW{kBudP>IUvfCroh2_x z(vREPFrd%)h^^`DSXg~v?M_vO%1^v?Iau$%xpmXAt?}ge%}3v?cZcfegczg`;mM%( z;c-guYIT|QfQrIu1Qqp;f&7k#i}FpWno*u=O*mDB;>QFQO8eTbZpw-tJpS$$nK2(S z!h}A^YwhY*ca)BYo5K)w*)k=Q&e%J273UW3piMkp|6?ChJ3@6ceWW ztS}|C0MA+xvlv)*uO`Mb9rq`7@A;1VZQa+Asx2gA3-r;b_UZPDb7 zZzm8)^T@0kcjVJ$9`EoNfEQEPNIDGEVcG-?impU)%NrS$%u@CphQOXJl!;8k+!HHkA}_Qest#g(V1q!29=^8)C8T0 zHv3#=+O%G#!VL(61L{;h?hjZqn{xhOeYZ0&5-L2Mr?V82G4X|y^;!H2w87T6A7Z+ewO3WtaLzD5Q>je)*1*>`; z_Z#D3+c2f=74!&sOl*VBwQ1t(YzR~Sl=xwdUto*9ZPH}X2UNqaSgWA z9N_kaw@`DtIw8U^rmItH8Y90OW}u_T9yRISqQRIO6B@zQI&XMPmW7zdl%bg_6ssmW zjD}2<7H0AshzwtkRt3Y(eXTVBh3z4DZHSSKJ~Smc%odf4KE2iuBpEM*^c;z#$C!@J zGGVk{3EYPY6LH*9QvqOIj;Bz0;yBR&Od&D2xHo2u0vUuki5z$-ge@kagzYlo8YEAg zx0W*rc{JT}APIdSeD!+vdu}bO#yvEF_K-ZWv(Kv~O69wtJn+A+FK`J?-ev+j1Esvl z--aTPKk-~UG-fOxf(c}@{2cOjS=%1rM$1TpgY%zP14`M}sPj%#aT3g{I-q^FAv&ow zqWRKQ^=eba3z}Tv6RSB3o@vPmZ5m~VZ%u7di#Dr%{$?jK3Tbzefb_#40qGV&0#Z$a z1h9DJAre^_f&dwOK|K;QmpV4epE00g2K zO@YUf)KccT`qNK+*4t^T%YWxL;^GUrWfgVR>{Fp zB2N<2H18AB#IqwfGW;p@68i)MiLMvXa0cSA0Yu=v{(_W(r57y16W9hnw9@WR!%BfW z)Od)cJG+AA&j@d|qfPB~Ktw6h_x({za*Vcf-o|nBv6Av?91{^`i3>XpH z`S~F4&mKQRnr@z6#POhzTDN$j&qQ=SDcO(Xfc_)&#OzjG-fiDR0dJAaW#d4-z9s zea|fCEnd2hty^3zW0)+dUFA5yrMzN?QXvXWAhY*y24rzUSb(e2a>5i~lkP)n9o-P-BfqJ)Sr9>qkS{4ejN5Al5VT~C_m5t=8F`R)G0GZxkYrPyj}PD>Lgd&lu+%@h;@BW zYw&>h&`*C&-=TIlTpCGf0KY!vr=fG4>4q+G^g{LV&!}}3M_(Rv!W{~fp2ClP4L&0$_nBZte^9)mBjZ_Sscm{D^$w03YPBg? zm4XwdAmnBvCYy@B$B4gUz*+FA0gn2i>6T? zGt{UM9Z3~-9Es_b%088FaWSf6-3%-$bv7wqQk8z(l>$TXc=XQR;9!Nl4SWp1y*spd=a1=M`FB8bZQK?Q!X1qg70zy4P^#Rw>qvJ zIuZHrfm3gD;4-X>>Q4e)I^dBl{Q$)AscFWDAJL&<8gc7CRm@be-TEHP9B#jFtle8n z@V%VUj*Jkcc7W>>Vy<^fHjo{XB!w;#T*{eCx(+pqIT z%CTO(&C|JDSHA6e#HDRhPrfLsDSP?3jQjWB*M3`6#LOwzk<3+q?sNRqZlT4+BC5_G z3afIj-A3Jl9;8mYvHXRadfR<%00oScJ?s(TDL1UD2?dw(i&V@1<%Umv=6=4HDn zeYC{V7{iLR3_iHKefmDLz0P!;w#I=3TuN`FiFm}mLD7_+MLkl3t*0s2yJky@ta$co zms{1b(O>2j$i@j9h4>%fKL6IA!g&{Pw8Yy6e|x3SnTRlXb~#BBdJzw{EzMFMAy$_W z8gxj!N_DZi3@7q+tS(Dhds(}6RCaN>YSF!Rk9$;`wD1S zq1An)GhVGe-u8#mR9OL49eqC?^0X72-L;0U+~GTRD7AR|lWp6eO7iB^{aWOw4Q(Tx zc=1)qeo=;2Sk9CI(0k#MlYMhB7IiUAEYJFzfec^5Hd?87i~|bHomPc50a~f1L0$nx znTkea?&eZgj%qC7wM0*IanZeRmT^u)q zA6d?^1Ft7Je&E$mqwM-?pvJGY5_(LjQ4lFk0|{+3XC9%!jO`>ZhQtzK>39Sd@Rdg> zj4drN$PAp$_af?AhPt#bwp@Mz=M`;Dsf&<<>!GeXz5v!UrLJ7+${W;`E8j_7Uk?}r zb&*iIHXVDZ#PhWqL&_PgE2>H_BZ7SxUjJU>YHV zrv-`ti;UhfvyhEWGqxj!W7h8TZ90s(29lmEOw)Mh%*so~auiM&u# zSn^U}qM?KPS|$TRxhJHg>rR-VGg{KUm3UAEWA3QziS6PR9BZMlG|<{nVv4%krh$8{ zQg<47jUk#a`&8%NNTI+4L0h&869Oyrk!5nY*T=0ag#H(3=?Sz(SFrg+F&#Q!N7YK7 zJ1aF1%3?5h=zB_PFFaDcn&xVi2LKeL+Af|Ue?rVrs&2j}*DlR)S^GllDmF>Q^>=yKXY-Bdh_@DL?9ejKPo(6GBt>hQ z1XLpghmJ}J6t}XV?nrR_X~b$L$e~Ly@+ACx@(#S-_#9#bY)*1xB)PGg<%TFH$&FFS z4H_mw-PP6=?yPHGa@6&#Fj?0uIrJ6qS7euFCHtjRY%R?^b*5Oethbq?=G!osV5N=n zPs2K*Fcdv=7x9`XY_xaTg(!b@onkxj+IC%dUEBu=HHsZOqmWRekWePqRi0TwjU=J| zY`LQV(iJV4u&Y=WIwZckd>X=VcsfKkgm_KD1!ytA3}rwju>^Ns ztk?(xaH`dcONzE3-lVd%-%|7lxl)&{z}Ctuybm)h6fTtZ%=;W~fO9n|uS~Gxn9TT= z7cf4s90Fu1Ix{}jH5V|xRiM&PVF$tZe9qevXS{XHc!T{e{;P<}85MT6omr)IAjY?x z7+%(16?m3xSK>bL&cN*k;&$R`kSWY<3XO=n01itJu1Rkl)ZA`2a0m!+I|q4)4MC>h zbMQP8+}3KUovGpveIOTZ122Lql%i%BCKBdHYOMa8X!xe&z>#3#9kfk)7`^u4c8uW7 zh{0eRCs_(y6*duFq$|(}rj$6zK%B(q)JX%SE*ME4^=lwT;#^m_Cf!oq!d&Iy#%L&@ zxe`tp3@*}7gSP(J2OLR}oa&z(e>g>T0gSN_R??vcYlwrOzd_KSu|{1q{S8EaKe{>? zSwmDZwdQ}&qxJyZ(#q(BQQ9M=8$az2Re#2A2@<_|2oU6hY-3|R^Rcr1g9IsWeyCj1 z@6u!XU9O(w*^?K(k4)B3095FD;OWNsIXtr8ylR z;F?yH=yZ$|LcLJhn(+|=3YOH*E$$>uIk8ATYvm#RY?KG|vsv!bPq*BopRHO^9dfVOHsDxo4A&hVYXVL^9S#Kps&5La<-^^vHBa7CU?ex?U~flIOW&_Hl-t zOc5N6RmcE8HG%w}EYLV_P8`+751IcHYLYN7U2)b~x`MsNm6Z9sapWI;mY$bw9e`63 zqCcp9QYAoMCBNKXm8GgQ3c-hp*iH1CcDcVk4P&`gmS1SDWqePUg_r$ z3jd~hm6LPz%7f}0S)cVYjPpdT7u2YC(mL(IZjt=H8jaonaWt$k1I5>UD1C%(4U``8T1!qY77=g z&eupU<2DE(BW#WSu8qxTI`Q;s=&wpM`kNGTZ9;$Pk>FT{dqVn*%vvE~_A;_W!c}9h zAl0u~IDr@e0plOjWGwd-BrG>(CoH$vuCbi_W9mWXYh)Q$-D@#5dtz!vGgyvrNUa^N zXXrpZLsNX8?xx&{sJ0b z;W|g>p;8*B-aA;Q)yE)=vO)`TW`_a>+m|*BBGH9sXma#@X#ezH=_qlMY7mqD``|2n z?;h>dO&_Q;Rsvrob=b#;wO@dQcF|x%J=$Mp(Cy*X+FJk%XUOSo(kd|EbVGtAh7l-5 z$DQL|-R4Bw1NF?7^w^#&_qXndEV0m*Bpj zx-;f^-+@k`(p*~^b^+YW_&ZK6s_yAx$dfpHOw0&)cHBk9zJ2coz9;e1TmF?7HFG5h+jO#O(CKW|{GJ zZ=H>Ef1RQ8Fnz9Z;0QNmh9Wji69+VK$bAo;UaxduHejQS%UiJODuluEQa=5S2x~FqL4umYzur<4; z5#69G$?{wS#1qa+*CEPlw94j@HB_MkAOjsQp?wjRcwMS!0!}0tqqX#m^!#|HSIgA# zS25E>ak3ZDoB2XEl&hHWR*+$nmH}q_uvOhW*J=0UF>9>pB-Qx!GSR`~F3n*>LP>1` zA#srjxtF3)KR(b)O0AzCfvC;jcd@C$W?f`eNw@AqwX0DVM2Y&gpsmyw+IsayoJNs` z)=tgQ^J#N}vWFJEQVgi9nwMjtrSi1wYS#Si?!t*mleN1YgP?v?k{XK?I|egSirk8R zoIHr$5v##$;1J?^IbWaKVr_=6{H7FiJ`gz5_>{q;{&b=!0Rg< zRC?Bx-L!PJ9q<9N+&x4~NAvJE%-FPJEET#=`v~)tf$X)~s@d~s2_Zu%D^oNbKll_G zjJ8YU(JERjT~9~r59qrz)4)JEJ2cw-=|nzWjaJ%abP>hUb$PUS7^8SPTIL{YYk9I4 zscXwq4Q-`tsB3Jwn9?oq(ak59+M@>D0q>s_EP=6If+glT#pK5y06JZ;KZHk<-aNXX3{DaC@;d3i3iMT!sU(xzJ{K^3}(*9 z?MS39u`a0UytaWAQ{~u@ua}GjEJ8-((DJODMG#4D0nnF;zt9+L_DFu!9Y*srY%pOO z<6aAi$2XTd5-)-u-Q-x54xtGo>a}>=Fd)>ka+p6yq?T)vM?|>G@dFdrHNYnsF()sU zIyQH;+~gS@DoIt1nvI0=*3W@PGir=RvIO;{W>OL*oDgXouH+rwRjm9(zrDwMSJ+G7 z95sroYcVCbxHTRq2e2nDiEYBa#HjTH9YNt*fZ;9Oi*;zt!s`Zfk}Y=%8}Ov_L_Kok zn~+A~Xxgy_7LVHiN((WfXWH<4%!OdX=A;zDFnfx9BLR{u3hfqggJijvTeorm_#Ew za=?lG|Ts2YY{jsjS8 zB{dLrbU-PWDKa(a&43!Kp*?B{HoWenUHx*88o@#72|1^O6v%P}UEv&5BiIKtVtkA5 z`eUbs?U(BSi{5QqmbN2n@e{8Y3r_L2b0OPl@C<^aDA~_HP#D zvGV<@et5M9acY?ETIc>PNEuD9T)P;hs=7}p{vg`1V!+Ic+UhA`CypmPLoS@2d3ck= zdpU)YZkr56ntnM(m8MI$sG;aU);)r{tbHvz(gE6|PwN+T3I(Hvq=0YTPT&Ny)*yXB zFij5%yPGw*8tu{z9tcx7D#cBsDFeXNw4%`**eCx_=B*L{q`Vez{yO^@!Jr1`sTC4Q zdDV?@N}NaP=1kKTA@7b{4BB?a)5}W^a151=iY1ZZ2K~`Ren}wZL))#-!S5`)#VITP z>E`F!?d2y+Law`7qy{{WzV5R2>7_1wE3GjYo0A>#0`AKD*Tf=$0kEu~Zd48jaaKBy z5nk9jyHz0}Ic`)tFGQ2 zilP{NwA1#AI-%b1aq5NfCQeMRhhsq;$AOk2>P1DAMJ+dC9LdG0$6A_hJdWgUECJ}5 zd^p1oOdN692Qf-GM%%gcbh_g316Hb3dmWz2*kx=o6U$n%smmu@tvBr?2VOK zzT>PizKdLa?F;wuwim;ft7m9;MN=`PF9Hf*Dv=5e_@0NZytv3ycM6q~YC$u9gt;p1 zRkdj*J7|1>t9VSIiQ|?gQ7=%5M6%mN$CX;5(caevXv!!TAlB3&>u7*unvuV936o^> zrw%Wzrlk!h8vSB7W`$+x9s-jec3SHv1=$v-0llmXiZ;8Ja0-^4N4eLL^fC`K|wwmIxlL{!FhpC+$>f`BIp8w zqpwt@5HjLIh^F(l`8J`+o5Cne27xBUun{&&t~0%fgGr9RA%s@PzD6mqfsX>BOe@4z zi)ua$+?K&PHvCrusVy-DRDza4--IJkWa7z7)J{70Va|jQkKA;O*alNV(+cb*pn>|3 zpqZeC(O)7TRo_sd3q8pdZ?r+(wWmzP1zM#q_XR2Ts-NUxKlP-iklk2Nq#i6LPR`)4 zW#-o30Wng^Ak)nsm=*S}vK3+t9PsWL!rR1e$PMucaWn|vdHsT4KdE1`ygw@dFnEPh zG$6>>Wxwr!UWScfjxH=fq%qO$iB6H30idvy5lm{1#l42@7&!sc=PLLca4oSNCN^Dx zW~s)hx85@W5a53iC7<4K{Cuv0ex@qA)fc-VO-zjNXP9&lB0uV^nOK7mLDw25aT?zQ1AQ`G85k5L9^M69vcw zKodWJacQcDVjJD+6A^GW1+ofYB7F^2;vk_%N0Y6wy)EYaUNeP2+F`XU&Z(ucpq&Ig zMQ*5o8E;gU5gsH5)g9N*j%Ok4uts%+f=JV$sp@Q?y2qoD=ribf`dPyB0(A4KL-iDR z7)I?H%i#-xRA4!%d|llZk5aeW)oCe2zvPt+sBM{YU_Yuy(5`+3L%UblKVo9SgwJw)@nnvN%EAxanQa_Jko>nEEm_~8Emknn~E~az}azBBzM$ua3QbP`in4`v@j3M9 zv9JaW3=}31=APp7`h|6T0l5@x-JIid3Aq}t?ZF;lf4+E)@hW||s+TG#cc>t!L2x)hlD z%yWe|p-8>(VM)7@{WIE9kAx?T>pX@$%=aPm>zWCWX<`u*AZJO{WCDDBNv8%$X!cF( z>I4D;Wa~*V$jlBx@0-wjna~T#MZUR&=02?crWTOUf%JO6f(6K3*E0(ch#m(-F!B$Z zsI`29ZlMZn`GOrE27RmyA{7fMK9)Y1>*$u4GzEAF>T%37iYu=_&balJGx?WoZT-o} zM+G{4E6^)=4Vq|P^`7N6Nf6@!slNzzLM3@|qsHP7GX#k1<3cco@=V)fSq;|I3#^Dv zXd{u^7m`|L0RhXhwNu3}>3fowd|Jl399DXh6RVpX3=$Bcik$eXU|UZsVey}^AwO+~ zX^NKUkz1mNv?MKq9kB7}1~e-0dOHr2kQdTj0*0d?Wax>N!+r17+&rVyhv<#z*@0Oi zzZW7e@R9IzA}!#3LR*H5T)S6U0E2>TT*dwewhy+gV zj(nAiP^sb4XuPy)IpD3{R&}-T05GMui0zsPq^ki%$qS*s_^R}s#LhGZP8-w;g7lt5 z-puEOZ&WHN31rI93Wu6~32>2*U2+aOkMPzYUziM94zkgTwnUD<$n>;n^uSRgLII9E zl%XxvD3E{#gl_rk%$Cwr)NN#*vKykRzgAhBYzK7*b)n7Mtjfa1Bjj#@-}Vb%x(mIZ0fn^t@`Qb2QYBtz@OOwiCx#!e3(4ciBZcyjcBv--}#l1>gt5Qww6jx4$X;f%yOBh2?bfK+g zbvQ_v5QBDid6y`oLllu26CFg6{I zsqChJmEfm%WvShLQX+Huj~-r5YlQ0d=vdjd$~Jvt=M~>P^_15u;WO@nETd2zNalt+ zPmGU=KtVXiIhwe~9-APz`PU@{4;IE*m0Gi60Q9ztzDI6_P2S)Jeu|!&lDRF%DU@pR zsi!z^rA<={8s&-9VtK*Ts4V!MjZ&(NadyO9wNWLARqvLFv!~4tpxLcu4L7&U8rFiA zDRpk8ncVGWMtcRnh&bGQ0lmVxDqO9vaGO<3~H{r=JN8<_tF=9|fUi!q-Nq)ru) z5%`&vZL&=kK%5muYI8P_+sri6fi*70i6JYrF$fY-ems$PN~^+~KWVE(CC)YJ5_$JZ zy&gekks4|G>2{*4PvXOal1@TNku${=-?HfGRSE5DZ-|&TL`+EYZ!w`A3K7Fu!UrHbrb#kUh=fPKBc<%IhS5~6FIB2iQ zD#eY^xurF07tq=bup{v9Bs+p51Z_tw$&O(4_S~8_=AhEcLeTw|_UoNhX>CUkMhNF& z{c4ZQLMgxeTS|5WD_T;27uXRqjoOZI7?T@SsLakrDXp1&-6+fE3meULgig3*cuhNE zzGWQ1vLoEGcD3$onbO*hs9Rp!rR8i#L`GGS-LeQU0ZCbgV(mg^O|}KBc*vJ)J3`R6 zQAt`gK-aV*QY{+Y)oTemf^nr}KYOx&w+Om&;AQu+o@j~FF*2<$63)sZ1 zE6Vy@5pzM{mSGOpZ$5*_!fvf>ekV5r*uFveJCO-Am4`#JO!t4f_v*=Q3gC7cxx zcrBUwx^i%!TU*m~5<$dIR8MSAy!#WZ>-&1b%8DR_#_71zj`T;AMroW@BIB{u#kjPh znU9@x9?dAXDj1hmCu4D#&DB`j<{MNj2ee*k>EZnN6r0BQ00H0RZti%CQ`O`{#l3Td zS9qbo#yb|1!tksK1GLkE+}ms5zbk-$wgLR}Jp5@X-7D{0TM{$K@P6Aa@WwNt_|T|= zj8@UDpB8|1odNu|53m%XkxA3wS+ZOWFkTD5SxA- zZ-&yEk=MQ%HtoaPZiGW<&%#D2tr>aU=x%PA%*e0PA#?@*7wm{_fM)6KlIP+mh=w3&5n)C~C1B#Me zOgx^#T1*YoQpefmH^V@ln$C7MnX&OfHhVwgbXd8Xou7!1Pl%T#+uFu-Fe4e^Z%%A3 z+178HwXHJ~oOx>7T2g}mPAN%RxN8dPr6~G&l>IJ%&QxaP_ zSU9=wjRRQUIDl2><#sAI)7)9LQN^VT+|{z${>A~U+79LueBU^LmFRo)LPga`b;~Cv z!$ki5I)L?!V^_g~=^3&`l_iQJXFBqd*~#$6v8&syH;!G!Ak2pk6Seflv8(7|ZydX- zO<8XoyQ)Y7IK;mP$FBZV(Qc=}xw0+Qk}c<~ny}8BeNx5gvRGegb&F1$NL(L`PE0lN z%ixJUS)(7u^DO_I1Dm}8Dao7Ikc8*oahkD-rd1Ve%4W}}KS@<+C8kyBys$+N)Uh^a zD7>|W7rD}L?`VFxBLwK}(h+|a-{=(TMKxDC#+J%1|2F4Kp7ZeHAY7`Ci=SV`kIc#- zyHQg{Z!WUu`V`zU7r}j~xcdp~v@6zKg&>1&R|ghP#%v8pRhx zh@V_#==>dx0?*kyiE&E7GbA*@1q2`rHGl6Ya~6Zr87OvBvOq%3b5Fc;z}vzaQ&QwF zqbt!W%Hu=_(5dM#JnRwF;sS@&FK&9KzxpT~E?%B&RsERdS#+q|E~;a~6BY@vcVy%+ zGiWn@dtVOnby&3mO5Sm59_{8!v!1^n0qX@?qkl?Wm)w8{-~Zu5V7x(xau;H6fD|A z3k#^iYHzh_DSVjS92$6m9QW2fDju@mk*Gj@j77&~X#1Uj5hcTafV z;Er*>&gcM7iNVLHl^8M*qhUvQHgvjMW8|-G*7MXtEUbk&k`=oD1DL1$V<2Jz3{9r1 zS-zT(r>^GmSAutq2!sB@v8AOamp-Db^ghV9aZ1!IPio%Pe4kAg4>b9H^Q9Ym4NIJr zC~&{;01qrrobp5|Rk~IGfwgYI=D77iYryG6!?pg#%DS=(1Yf{O_HUe{K&aF)dh#F< zV22`28fSa;hTkQwmCmCC#52tA>&fjFqJ7^?zL|#J3388UL^AzKeu_o9f0S$?#BaSOYbO z>-~FLHyzs=PmbSw^q#43C%NT^;I7m@JWgrTMWqB5f{J>_K>kM$7r94i&9!Nf{~HW7 zW8bg)o6P71hO%qMe%AU=V(fzItqCQxRU!!(Qq2HdX|w?YU2RB-(8vHQO?$RdzvexS zycX*n%Q{+NN_#&mjIrSA5F({Xq1Uyv>~I-Ho_pznTDXs*dS6aQBF`VzyK*|nz9_2m zBVI2?erL0r Z%SYDsTz9S)*=9n2bUJ($aIlhx|Fc{0Re0Vo-NNUUGRA_rCAP)c5 z^I!`c8ZG=GMlQ{hv`+S8Jg{~rnAe4c?%muovPNmBo4kV1*!kzVuHD5q)sxsB5=&ts z(%v^=mx&6JCo})FM}dIdbRxMs)fHcal_((2M68ZQ%Q70FNKrP~p_tQe2gL{iP$Bop zCmA$5^+}$c^vRZRiGGs|g9Do`je8wDwb@dSh6x7BbahnCF?BGT?4M#IEY zv_?Nuh|j5aC=6$%IJ#R3;$RDwcemJ4 zD_Y2`j!Lo)OOYv}sm2np2j7ZA8YLe5vXGJ5TP@@MssK60#fg-AtFeYrXZGr9q)Lh$`Ih&1XWxpLukL*<0u)5TC;8#*&C~oq^CBm7a7`kTMpFl=?c-eVs1U=$OC|x=;aG_3NE=wJW%n{r z!&)?g8gPN-W`&+VIW$H|{JIulW3viwL)#($B9*Q0Xkv*{dE|L9p;oR>Jj(pP4K{Rr zuu!f$REzwHQ79q`0)_Z;!il=;rBC7oo0gFwho?;^&166+M=z2;(49`qBsSSHnDM&K z2%2rOTH+hJJ6F1@{_Rz<$z`&l##fXEhsIa;`H{o7zIO8!TWlgd!v)SAGNe#=4r=F z(339Qv|vgY(UJ;!-ONS<3}z#&psH4|$Y3^74P*Fnagz5t>(jX>%`r2;v*2%+Q?RO+ ze(X2q9A$s{sW3mQ%YP?5`a&-GQoeZU#q`cEeIs3b{Acr5^A%bwZO(Go1@t0Ne0L@`DT0(jXa9gJ)Jc&BF=U8DQ|h z$Q4&EDGZn<%j1=79CuFVEAMtzq6%nH``Mg{fqX~j@TGD6*aRhoe|>`e$=!KYrEF)2 zph*&*;szvF7%{pfHz-G_M=98UK(N1p0I8XLYFwpv9iC`hBh!iqLv4@I2go?#G!$fX zEwLy#cJ#?d`TNb*2l>15p-FE`JhCSpOzBVL0%Sk@l*CDNV0jg;Jg0MwK}I?)S>4Kj z4BrBWiAf(qz$D^?f0LV^xM#9yaDK;l)p^^Tla?JrG|je+mH&^ucY%}Rs_y)|s(N~Q z`Z3dzM$gfsx+Pg7+p=UZl8j%ffzbow*citcu!(sEXXF5qg=2`Z1Q=u9CYWHt%Ycat zv9sj=&x;NFUqeXZe;%y!Ao2c}?B670<0Sld{of=T??3EjzrS;DRabXck2HE9lYgv_ zr@HD^-Fxo2=bU@ax#yls-Y`xkBUv9PVpE7xqY>f0$d$6yL5b2p0?1bGDAMF)=+yvp zENZ#di(|UGuSrkc4g=dJk#4BqX@+CY$pXjdcR~<1hU0WY#bgf0W#QPrYumnz;&>z+ zt8L+!A@Vq;`D5ca;*1W>RgxKyvm}~h`PMh_W^hJ`Q-k=0f~cDky8yP7T4W1ZwMWs^ z8Yn{*ZIgbOG;=X2M3j@F9fJ63hx`=m83=d9qrwiPMC>#e<3>Nn6s#S_BFwsysM>)C z4LvL+tDpw$&w))OjYyPN zCP^9jHwtN@?d{c5OTwleDEBr}LwkL6^ax+^uaevA!{`iDE2C?$TApT+=f|uT$G%CG zswq8!q^e+j4-C4C?PEdqxm=9!3{8@6M2vvqL#&@uwrqEW_+1^`pIEvF5g#INbYGJ! zfC5xJQzNzY6j>bUeL3W%hh`pMn|-}Ne72|PMKy9-vj)n^{CT%uvO zL%0hTyP+IUIIzYXSmgEOABWI6un@n11@;9Ns6xp^f7>}~${<5an z&ahwIQ&KU%{VE|Hh}`!OFo_(qDAyDLn%naTIf+)NJJ*UC8(AyijC6K~G{G+SXZ6^y zk6xj34%A_%JZc~{@>Jx;FFu78dj-c=+>e)&y=Op_i1_v0HDztfWRg%SRQiLLG2nt{ zOeRm6-3{tD z%rZxeuA<4P2ug9NTlA%F5;R_5j`SR5gactUXf^tyH?_%)v0^wA&QJZP=zuV%j_|~7 z{&Ll%N(B=bN@z~0ka{7dqUDqddgCP)O2u-gRA{JlQcg_`%W7!{DMX}9>C`|4g4w{T z=fLWRDYqewZIZ}zdZ_M7TBcxuyhr?EjsI2u*1l*2G77zdF|ZN1OE&-V>*O%tRvc}G z?~6L8B$PM%=Ymogl}Fxm>rdQP8Lhr~tX6+Zqd7j&TD15lZ(lO`);kU_UAFv4u;OjO z+k=&>rdGcrShIHBok860tbb>4SFqt-!QH{ev)&!NC)hN-`RsGfeQ)r-V9Wc14+I|! z&buer`k`Rk`OkXxPX!+iF1R=NNbu9abGGl;dEs+E8eDYoCHDm%3w|cJ^s-$a50aVZ zJ%4uhp1q$4_I)yV!KZ>x2bbR;d?t9|6+d+4XM?L=boJ+g7hm&0@cH0}uYJjNFMZj| zum9QLXmG=W!7F~`3&9tI8(;Zz!K+^Vn%Dm5>u&n7x&1f)`0L;B#sdd$ImE0MC1@d< z8DwI@Ma;eH8b1d|L}*@j2_K8_pgw`fOi6<5LAigPQaG zjFR>#tNJtjRj)r~Ro~xV^@dYc^`~9c&J}`s;i*fbG@UgfN^l&`4{^7R{fJT5h*8%_ zm%4HK|A{lgZ7Expq+DuLHqb{(9S)>p#98n z(6*jo&^|UCv~6b?wEKpGcEK42?W4m%d(IgK?Wc!>w*3r)_L1SB?L5Pv-8&q#i_S1; zA07_c#b+3_pBfI@C1)744-E(H(lZR&JqB88t~`?2Gd(s%?972oHEMhyr?pC*`D*t& zr94U%C_HGaRMA6BL>80Z)R8~%kBSLWOV-On5EH%QG(MMP7Se60&;|b-$lu9WN&BhHr`_;zgbZ7ZY%k%f|9$fnf;&|3rv(LXRl)yVP;k2n zzFko8lPdVLf`YfG;Li&R-mHS}6cpU1g1;;%_z4yKO+mq}D)??e!JAa@{}dD)Qo(;N zD7Zxh|D~YdpbDNUC^(>k|5{M+Miu;RLBShT@OK3TuUEm-1qDB@g8yDnaI*^jzk-7O zD)?SO!JG>IM?t}lso;MW6x^hOe<~<=oeGW=c#D2i1#c@Tc&!TFUQqBF6}+RM;MFR4 zXF)~GJp~0fs^I+v1wW#K4-^!f=?6_T%&?d78JZ#1)nM?xLO6D zE+}}B3hpl`xJm_|DJZy71rHPy{E!NMwxHk&6&x)nc%cfuSWs}e3VyDj-~}ppxS(L4 z3VyzzV6O`PRYAcX6@00nV7Cf>p`c(^1^-(?!Shw{zZVodPX)hNP%xu{Un(d_RPf6M z1-n%6D+L8?NQshPEhxBD1z#>GxI_j2x}e}<75rL3!9^u4m`8igz#cwLM3!RCDCEE_| z`k|#kR;>y==H}*$$Fy37B1j@u9La&X`U1K7%6(3F)K3yIo4x4Z=Cd~Kg-6Z$nm-*Ya{0sov+u^$Syp?kexFWvge**$j%mIsn6uH44C{<>43{*x>vaV zdS*TJd0H$a5}6M=^=J05M9KeIP_R)2zf(}KK?T2CP_SMF|E{2b zK);Bf`m}@GI8TJOTSUp96cofNc)Xy1ZIn^+e-#w4oh?fKLqWkB6@06pV6_VVV?n`` z3Z5t^Sfzr$C@5fKMU?!ff`Sz)c(R~ixeETOpkSE_{<@%GsS5tzf`UmE{CzHsE) z)@ipZF|QVExk5KO2>^Y+f?|tT*l$dzX$MJCkq#Xbh?k2gwLndsMo;J>fqNGI91_Ln zQm@cNxLRj<`VdZ+IYM|L83{*YD<;&j78B(T|m>tVa+Go@R|7@qWZTk{O-)O|IfMAcy#=c z;GyuLuykjz;i2%0ga^8R4-!3il#s%>z9@Z^UVk=-(w~c0+!wrPmAh+SJ@V|zr-^ZV z!}<>fp9&rbo>gt$9qjmc@Y$do>`V^qd*e0l4Z^YKPu_alWp4}K)H&-X-W7~CHlEvB z_EW*V!MdL&w()bp%kK}Cek^#!)XOG55qvUOb5C&SU~PP6c6!N2f|WNC9r=Oa-NEMN z7vKWj^qR|m__eQk!R@<#^1Sy1?+ng)A2E}wcV9{@=X`{uU?XP>`q`z1eq z{mn;$!_Rp~@IzPLam$as@-07h!-X%t_;oLQ-rN=YUvkr{_gs6`buWEL(_73z8owUE z{m7ZET-aotN|s(Bb3KLg3Yo1)79HIyF4AsmkDe9!DZ4&j;l;c?N4y8K=>@;APbPrw=Z)r_YEgl1u0iL4*YzI=a9PCFfHWk$qSr{2-2wIzcpB4IDk}((3Z(eWlMI zoZERfo7{64zm&=dFDn4>frSG2xBw&Q3PXw?ggCKU&JO~Lia?}Yc zBqn(_SK?2Y^7%ou2Mgx>AhrVgi62BV6g9~4@(Y6+`;FQ@SX|r37hKynR2xhEtO)Xh z)%4^K^@HVcyt({fHJnv)ez5q>2KCW~mbwR7;Ufzj+Y6~mE8v4w-Mhf5oTTNeXR4(A zZ7_Ek-DQbBc`jELSp&0GdN})-}1_Qpft`%Ch%h)of*0 z*o<@XRj_;sG;gTmrr`SeIx7}jf4t5jCD)tltoU->U&k-Nb*`Rl=kjB9ToGJZ!5)O* z_J#F<019gQ(K<_+TwhyHp2g)gb-X-WUtMPrp6jdXtU_{qWu3)rt~Yv};!U*w&%ksc zFoI6KqD~M7*Bk1r_j0|yj^}~v%j>LsbA4Hzg>J4dt>Z1=%6fIdEcN;Y%Fu!l^i|An z!}49KSbRdz{BV6nJ_DCtjGgCW(JnNO8s-!ShCXB)LU%V0E5vGd^DA~M`=8y=|AxJ_ zY!-F))tL6f%Qrv}Rj2;2zCQ5qU2&DHQ2dscBGv-csN37ZEiYmCVc zUjcuKw(=G5d2${=eiPyHUE%n}bzCuAudcHo&hy>p}nOuLUj(3#n z6?I%tTwhox5P<9D_2l>T`~`KwF1YTi6V}6ZZ=DDNu6yc4!EoJOXI-7^Y#py2*XP#> zo8kJrIw1&LXX-5ab4}{_jJWQqHW89jy;<@hf=9m4ry~d5(XR~qR5c<#M$BkW)*|<^Px&w#e z+CfI2wNLH7E9b@xKhs`~nTx}dNlim{*_iRSmK=89^L4U?9{y`4MzbGYL{I-Y@cJKX z+_u+oP;z}vJ^7~YFQ_Lwxjeg`T)>5Fau;zqzn(mY%eFecSFT&@_%6AgS0^lr>y|ok zQ(Q?0_BK5~r%t>J*R$)y)^OciC-{czbUoR@WmBDaAFgNBahh_KhhKKtE{E4=pjr0D zI*x51Wo2QI$S+$MktY{ZQM;(3OBYztp9`dQbpp+}YTZFrAE^W`c6dCEMqeps)_Kb> z>{@<8k@Fsk6T8y+9|Y&>Ibkg23?f$+8wzHx^BoAsZMR@wQy1C0e@j;-r~nI@*@mBb zPjl-6d-eOOi8M!lpeu_HgEekhSdAxNL-N~#h1H7`V_(88FddpzdM-`?n=>`$vO~)U zJAt{GqlwAN4^(@5M!D=EPu?jMXo^uvflLI>&GwYPE;`qs+2{1UC zQvBqs_Ol%{$6pn>oa(Ydz#cJ8UH3D2JK|9-Bjm6+9j?|ghw$Fpfz1nSmDzAi%FRe} z+m+4NAyb%OZ;GWC;T1>sF~75>*kl_$C5)KiAJX*nLYw~oLsid5o2Y|1f}@9bchf>K zm!{5j>jGLSU^!(I^zi-DQ&>v36{FL#q5`UfxCszPD7e3CaYy{Ozgxl`LEpoXx?!P6 zJ%v?~(pU>-W^-H*Q?b@~gE7^)Fcp@B#G@APP7CGUQtp?%`tM~Ia_`xJFY)<{r{J$`lm4)U`b7k%Iloee5nm^ zZne%CCbP|L2=t}L7U&{)($(SWn1`s_r*2ReTvfi$*SbExWLTfkRF2u_Jd?b{G0AoF zGs%|undAb`B)gwK>zO13pRbd}*JVeI7VPLoYbZOOcYH1F-Mz=R6w%U;&Np(T43e62 z-0HwQM6lqh%BT=F$KQTsQw86We<+O+r(YBY#Dd#w((^vxMPcrziV^H zz8Zhm;f~ETF0OK0qWU%iTJ}@3Q_Whh4BeHiUzC zlD61}<6B;nHgLz*8eg`VJNDD~yR*65o82wtZclbM#og}g zZWVX4+1+~X*cjt$S;HN>Vf@`j?q;&PwcI7y-Ae9u5vC-;wp0CYfwb^YM<-g54e>(K zDzaPESPgb!d#%grXs!T|)qnJ4ityQ(hfB+1pB69RuP)jvz_{2n?t_xmQ*O;BBiJDoM;u#3-s zwz;uxE?+#9L3^wY2IQqA$F@V}2LD(XBrH&m^%Kvvy)6vlmeXVXTwBMJJfcj5BD&Uo z6a=k41as~YKjwSNH+K{rCOv_uLoMpTat7^*?sk*DT3)91*}x zBp;)I;2`!*ry4K>C^5uS1{EZXM?A^{F)iae6!nsg@AvmBA0z1jvS7<&J19kA?pz`w zS;=lHvN7+bIa|zyRg*{4!dnO-1sA@5^{-STC4IDGu9WtX@J3iiyRTS)l6^-uY71!% zcg^>Y@YYC+5F`_o4UhcNrK${$%IS=4NTyPqWHcI&DY3L-0?F|#8$AHIM}h-d?#T3toR3zTD3Xkfn@rXv2)RjcC;VaH#MLgF>^snjrjin+ zNA93>>L6N4)QtG15$2zt4TfEIyJU(T5Q4)1Gm4I)Fw+NL3iRq^uV$^H)BInz3s6(fv-1~-Ra_wL2~^IO{c7=RCr>QKYnp&rG#c}+S_o~AXFsJH$pk`Cd*v}=!RG-+ zB#Y)4I(orD4geiFA2L8oMoi0fMNf`?R{Y%Q&ZW`MYOd0zhCZp(Z<&KJC>>msEcd8po#gmOs#Ba;r zZ1$B(M#5bbA8rD%l0HL)v^44E)<;5@v|r~Xh=|AFH<-JvwEr#>O+zxMn#4FUF-@6? zMqSeS>2PvU8MzCGyAP_Hqqxlm8Rk%FK5)<4vCOJcRDRNr@w$V+#sFghR*L=XgR;WocAPR#Qce=~A^ew9| zY3Z%bn44V3l8GyrW2^q`qNcJ9H{$x8Go=?bgXI2SD+I%L;y8g}IzCZgLWQ?9XO?m% zPDCuosetBqQ6u^QHEf$nQNyT%bU+CN)wm$TNFl86B5t+* z45fYs6%yUC!{I=D@zze0vhi!<=2ZtfV^f$_(4aP?C;#}pM@sD=>0ptt@@R)h5FbM5 z22JE>H^|X0Q?kewyMdQH+4>WK?0g?bwgMZvF`AV%Xa_B1H0$1J3OKsfOS6DB9*?}0 zUJBs2@>bnm^YB~gOY>TF@|vzQ(~WD!NKXsiY(i4vcn<mEQJ z2;T1ma(@Kzgpzgz{*)8rX(8H6bVbr>G=jo`NzZtcxb_2s9X>cLS_6aq{9w5)eJ0o! zFf1rpF#a=RP^v_tXc)T#qhUJL1H);Qy#v$i8JKLUg-1m9IUX?*?kJ^5ZY0WlBeCaJdZK|ro#$vjdE6D#~sJSZ%zsead=6*Lrz%F`*h%m zGtqR0lB~0(56?Vax}(!H^Q;^>hva$^SNvXq;&NxhBZm8+;(#=Q- zf&u+uF3UK~1=9BKvC~#C#7l)R)#A?K5{x1!Ui4MFnmBaE1StmzNK{d1{w8~P(~eS` z2RIWJNrsnHAIE^!vKyTNn%!)kix+1%=g-AUvYQL%;>qlWQ{m!@8`%+^KRQatk%;SO zgVfhG%H{w)dB7b8p=J?ZrTc^Jr34dIh<066i0VT%YO<=?x+?xQEs3A z_9NvnJRHmTANBH{$ka>PaH8TWn|i`)c<^XAmwf(-M>tZwbz@$MJKo<(z;Ib28cx8F zeTei4=Pck10@v+>wD1IHu<7>~Lpr)Ocsg{qi?)aNA@k%3`GjQO6NU$2%mCx>ec@c| zqaid`-BLP`jA%|lvfrfngzIbM;BP<@zCAMks1AyRmQgXm6nHa+5H@;o3d?gPn5 zf?*)Nn^So_Oh=520qXWHP`}azY7k9y4OSh%lpP^DfT<;YVBKT0$}q4#(*^6k6s&uL zE?mDUxT=P%(Jrzu??a})k~=r^R4Pk_3ePBI4 zFIa!o1?!0vtZ(JO`ZIww-nx2{KZ0n0N=6z}yozitthKh9YA{A2RS6A?St(g?$-#ySz}ixJ&2%Q^2)` zA!218BA%9T8rsmiIp98Jb*3kiKi>;oTX)l=4}9CTH6J28%Mak9pDZ5r@^MukCJ@#c zgtX~!naRh0-yN#QOyfov{jP`5e0J_zrwf~Up_%Y19W`2wA(E#hg1H`n?=`=CPjZ)J z5IXG)_wI8`Pf5cRMVZc6O&;q0#A$gkh0bXy4%0g()1BM$eu;U?<*&e|=jTp-J*XF5 zr$9|>PlK#0IKCr-QGw5tgAy?g$&s)9-rp#n0?^!kAYmz8fP7y7Vl@aon(${s1*dHZ z6%YzYv~#%g(_{>+oPU{G9rVb(+xjEAIgQ+rHyzl~J8C%CC%EE|-ctHR*bEhl9MVu* z2oRZ!95gTdgugv^uFa8t$yYE-mT>)5uJWz?BG;u{zr=MJS4O10oa=*JS8!#p+AFyt z#oMcr>9!pFS~0+Z(k|i6*Dw%VgSpkJz z`V|Z@x=MOKb_MIR$r1)UfU=7J#Y6f`Z}&8t>fNTKw3~k6pxczNA)~GyZb~?)tERqf zN;oP_&H#SFGFA0wQ$h+A3%}l!gnQ@{nNBt-Rmq5;-;|K}uPnGXC3T%D2*jI|B_^yV zlW5X;IBj@v!8KWl%|Ca)DHB1`D1{!w)CTQLQ`22=rI|Z$ z)sU}EN13LzVY6HF*IDyMp;TEjB&_a3f;;;=?Jt1kpNyMU1x80ovm4#nf0o8gKCXuSpjWhx07dbW5FMcqh z=;ygS>5udd9q%)ErFfnG#2U-hI@5Fw7)N|i6vQ#-2Q!xVd>xO#03BOF%W;bx5^M+k zsxyZil_*ZcD(_H-FtCnFRx>lL?!;nV&f$$?9V;!xQokK{In3zP;#43UZ;NWri45ya zS5~Z!*TMD_x7DGJ^D$)POVh;lkk$z~%L25%&C22lhNlJLfsR2@s3${2c@nfs$Z^fZ zT4x>MLi9?FOI1PQB?vkxb78Tw%4I|(Knim zbkjK&_s)xgN2SiSVx8m2Zb@7nvmTx~_m0jY^VGEBMMq&a zJT)!r2Eka!SJZqEpaZxk_@Q|@f!E*_PKbq`}OjyT=_j#>+A zV&?0w2_?iRG-mi)&tr`arFa7?eQfPxUdDyEXc+sLO#lQs5WA#Pze8cT1w9#^b{I@% zQ%WR%Vkk->IMNXq1);lBqj!N%$yP-LfNHOsYrRYmAj>#7mbDAAF;?ZmI_*}DTK(M+ zD&hKQXpuOs8{T+^R*ZNwI$e4RL@%t#ATLNgME`R{<4gt?NYVu=@8^>N7FSrbyVQ9- z_*uHtSzWR**r|d7*SZcIHSF)G{hi=%HMu*2A*Oj*jFj3uanIt`ec_G>qml8DJ%$~J zaE=!#u&)|VY!4r!^%_R;S&>7(#`momgs5gJscg(D93t4J7A){h@ZlPOWTc)U+mq+8t#50{t)QB zox@+L&c)LM9jg$n(wgb%m-PSxj2=jQ(&10YC`Yn;Xk1q%Co#M;5FCu1VRY`9&S)JX zAE0%#dzejRE{sY{-)O&NalpeUVc4PZ*c3M1m@U2QH&RG~G3BLWwSj$M4Bhhl^gMO0 zMPppB7qXVJ2AJestEkj=;`wwqjWx;Z=e7w`6Du&NvCi-f;#eusnd-#3PRFOcRbbOn z>y?sk6E7f#jQfT6>DysbcDnxY$qJdX9sJq{q%87UdSWq(FA^+3H}8-(0DGLNv>vbH ziJd;rC+HzbDP|wSsHlVw z2JwciL8Y@;D$4rgu#=M3J@kgaU_8ruqCeG6hZfLYnL@uEcF;i7EoLTSE|MT_GXqa` zIzVbBs6BTje6nv!AMU2y@>W_nUl6ZH!NU6P*x}jrcq8B9TUp#L#T#dvq_EvcFb4o{ zpqY@~KIs^514AYi`+c|s3En`H2b7g@drPSmuia82_>LQGYFHny1!{j=Zg0?Ssoh}+ z=^7{ifGZioPAphyg^O^-g;iw6B`)!YQNgi-!o?zs8>{ke)tof#7SGe3-9kQ}mSQx0 z^e%p`_g9Kl!Aj|>-G3Ihg<^z5Ls}yox5lhWG!!0GJESaJ19Y(IYW>pYnZt2usN~ni&3DMnS3?2!;9mdKyt~vi@mfCroR4B~yEI zieTyVGu#OV6%Y$8c<=FPD+f3h;YSYmqQwO0c(BdtFCdUH%bX@-^}Lo<~gbQ}KrMksP?1 zg_&N#*k-O;wUoS!r}U29AfDG`H|Rd=vKut9)!7Y^3vIz@-<&-c$7vs8x?(O}W>SY= z{_dP>{XSFRmeSK964MTf@3=8Eg^LNtO+d0Ta3G1mCfx5p4yN=a1bsS^r)Ja=~5zt+?QG!F|pLRnzO!t#|W(OTk4 z*(GJA#C@p5Y~tjP{^5~Qa)E`f-TgE_x6ku4wSVy{%MJz*XAh_MezMZkwc4gtlwO

YOEoJPa;t@kLD}!5fXH#w8s_&(Ldx$IgFG= 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 U(!JU?f8%}r%6*0x<=*Z815s>V$^ZZW literal 612872 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 z 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 dPG#E zf_GTI)}NUTXcUD=K?G@X@nmP&0WdxEMUF=r60V=W&cByEt5e1@9R6Vn`VQ94$t2X2 z80HSnL_^2|Q53JAJqg1uEdFvgw9u^nSm0nt#&OCXDL_b)DHLz;k2=Fgt=nByr+xQT zO6Nd5bchnt94RUZKq;#f8H2f&n(&Q&TeZ_^&CRFW z`}-}vO_SX!?JbYBC7n)GK?w$`SE+fRD|MXc>|07zkz<13WQyI97O8owOL&=Ql$xEl zOVw*2xe;JN^3^m)g3Gu0y;KVe^wiP!0?I6NQBgaanoLv-efz9oyGmcnQk;??69#R8 zhoFY`2~Zy<@9-Tq-9p3OB;O?}y)p4QDO5Tn`7?Z_x*@(XE8e;12H`7g4yfX>wQM-4 z1lns-s^%vY8N9!DxwAOO@Z7Z|M5x02rzTOvtrH~myIo$#oW`8RAkP|^#31h?3L;7( zzQ=bGz6@urV;@i4guA+ykjRw)dsQH?2y&?2>zWyhwdwRQBU2-Wc9ZEMmjpk(Z{l|D zdg$&KlU$VzZT)gilMzHT#hpfQFNHIT?EStCcQglYGvN%@czRTZ39TdGNs=^QLnLoDVBq$F{X@JdR64Wj-owu}nmh z5TpDd|5?8!-UQvxHaA%u1`YM?>xdNh8A+r+?4Fv@Tu$8Q&IXbMyDKtqLa$6^l2;#b zH_)h=eQzLLpA;6nu4jweL#U7X51Tue=a%`c=S&}L8(&F4AhoGgg$_#Im!kNX|KRh` zpLPw&IwUE36$E)sHMcDN_<5O}(Z*NgpygYFt|3x{6%gG>On|$C zy64|onCjLo3;luaNO1(prlTEF8bf{C73FgK~%>f zLV^HNuI~_JZ3=d+qIl@<>s^V>T~f=N8hfOxj>=#7e=+U(t(Db=W=1V+t(d57Q3fnN x!Ftrz%EI86i?y($`>?g5z56J8NIm{UAvL1Q>{ohdC;1)Y`L+H`P>CMf{{g0H?ZW^7 diff --git a/substrate/srml/balances/src/lib.rs b/substrate/srml/balances/src/lib.rs index 83eb408132..224d02c0d1 100644 --- a/substrate/srml/balances/src/lib.rs +++ b/substrate/srml/balances/src/lib.rs @@ -423,6 +423,23 @@ impl Module { Self::set_free_balance_creating(who, Self::free_balance(who) + value) } + /// Substrates `value` from the free balance of `who`. If the whole amount cannot be + /// deducted, an error is returned. + /// + /// NOTE: This assumes that the total stake remains unchanged after this operation. If + /// you mean to actually burn value out of existence, then use `slash` instead. + pub fn decrease_free_balance( + who: &T::AccountId, + value: T::Balance + ) -> result::Result { + T::EnsureAccountLiquid::ensure_account_liquid(who)?; + let b = Self::free_balance(who); + if b < value { + return Err("account has too few funds") + } + Ok(Self::set_free_balance(who, b - value)) + } + /// Deducts up to `value` from the combined balance of `who`, preferring to deduct from the /// free balance. This function cannot fail. /// diff --git a/substrate/srml/balances/src/tests.rs b/substrate/srml/balances/src/tests.rs index b9c5b85902..9ad100fe61 100644 --- a/substrate/srml/balances/src/tests.rs +++ b/substrate/srml/balances/src/tests.rs @@ -280,6 +280,17 @@ fn balance_transfer_works() { }); } +#[test] +fn balance_reduction_works() { + with_externalities(&mut ExtBuilder::default().build(), || { + Balances::set_free_balance(&1, 111); + Balances::increase_total_stake_by(111); + assert_ok!(Balances::decrease_free_balance(&1, 69).map(|_| ())); + assert_eq!(Balances::total_balance(&1), 42); + assert_noop!(Balances::decrease_free_balance(&1, 69).map(|_| ()), "account has too few funds"); + }); +} + #[test] fn reserving_balance_should_work() { with_externalities(&mut ExtBuilder::default().build(), || { diff --git a/substrate/srml/consensus/src/lib.rs b/substrate/srml/consensus/src/lib.rs index 6975fe792c..1c46e38541 100644 --- a/substrate/srml/consensus/src/lib.rs +++ b/substrate/srml/consensus/src/lib.rs @@ -29,6 +29,7 @@ extern crate srml_support as runtime_support; #[macro_use] extern crate serde_derive; +extern crate parity_codec; #[macro_use] extern crate parity_codec_derive; @@ -42,6 +43,7 @@ extern crate sr_io as runtime_io; use rstd::prelude::*; use rstd::result; +use parity_codec::Encode; use runtime_support::{storage, Parameter}; use runtime_support::dispatch::Result; use runtime_support::storage::StorageValue; @@ -174,8 +176,14 @@ decl_module! { Ok(()) } + /// Set the number of pages in the WebAssembly environment's heap. + fn set_heap_pages(pages: u64) -> Result { + storage::unhashed::put_raw(well_known_keys::HEAP_PAGES, &pages.encode()); + Ok(()) + } + /// Set the new code. - fn set_code(new: Vec) -> Result { + pub fn set_code(new: Vec) -> Result { storage::unhashed::put_raw(well_known_keys::CODE, &new); Ok(()) } diff --git a/substrate/srml/contract/src/lib.rs b/substrate/srml/contract/src/lib.rs index 30e82f4923..5e3722bb04 100644 --- a/substrate/srml/contract/src/lib.rs +++ b/substrate/srml/contract/src/lib.rs @@ -154,6 +154,7 @@ decl_module! { fn deposit_event() = default; // TODO: Change AccountId to staking::Address /// Make a call to a specified account, optionally transferring some balance. + /// Make a call to a specified account, optionally transferring some balance. fn call( origin, dest: T::AccountId, @@ -232,12 +233,14 @@ decl_module! { }; let result = ctx.create(origin.clone(), endowment, &mut gas_meter, &ctor_code, &data); - if let Ok(_) = result { + if let Ok(ref r) = result { // Commit all changes that made it thus far into the persistant storage. account_db::DirectAccountDb.commit(ctx.overlay.into_change_set()); // Then deposit all events produced. ctx.events.into_iter().for_each(Self::deposit_event); + + Self::deposit_event(RawEvent::Created(origin.clone(), r.address.clone())); } // Refund cost of the unused gas. @@ -263,6 +266,9 @@ decl_event! { { /// Transfer happened `from` -> `to` with given `value` as part of a `message-call` or `create`. Transfer(AccountId, AccountId, Balance), + + /// Contract deployed by address at the specified address. + Created(AccountId, AccountId), } } diff --git a/substrate/srml/contract/src/tests.rs b/substrate/srml/contract/src/tests.rs index f48769c978..9e2d2f1f68 100644 --- a/substrate/srml/contract/src/tests.rs +++ b/substrate/srml/contract/src/tests.rs @@ -617,6 +617,10 @@ fn top_level_create() { phase: Phase::ApplyExtrinsic(0), event: MetaEvent::contract(RawEvent::Transfer(0, derived_address, 11)), }, + EventRecord { + phase: Phase::ApplyExtrinsic(0), + event: MetaEvent::contract(RawEvent::Created(0, 1)), + }, ]); }); } diff --git a/substrate/srml/support/src/dispatch.rs b/substrate/srml/support/src/dispatch.rs index 8a131336ae..dd52e35b3c 100644 --- a/substrate/srml/support/src/dispatch.rs +++ b/substrate/srml/support/src/dispatch.rs @@ -208,7 +208,7 @@ macro_rules! decl_module { [ $($t)* $(#[doc = $doc_attr])* - fn $fn_name(root $( , $param_name : $param )* ) -> $result { $( $impl )* } + $fn_vis fn $fn_name(root $( , $param_name : $param )* ) -> $result { $( $impl )* } ] $($rest)* ); diff --git a/substrate/srml/upgrade-key/Cargo.toml b/substrate/srml/upgrade-key/Cargo.toml new file mode 100644 index 0000000000..980a7240a9 --- /dev/null +++ b/substrate/srml/upgrade-key/Cargo.toml @@ -0,0 +1,34 @@ +[package] +name = "srml-upgrade-key" +version = "0.1.0" +authors = ["Parity Technologies "] + +[dependencies] +hex-literal = "0.1.0" +serde = { version = "1.0", default-features = false } +serde_derive = { version = "1.0", optional = true } +parity-codec = { version = "2.1", default-features = false } +parity-codec-derive = { version = "2.1", default-features = false } +substrate-primitives = { path = "../../core/primitives", default-features = false } +sr-std = { path = "../../core/sr-std", default-features = false } +sr-io = { path = "../../core/sr-io", default-features = false } +sr-primitives = { path = "../../core/sr-primitives", default-features = false } +srml-support = { path = "../support", default-features = false } +srml-system = { path = "../system", default-features = false } +srml-consensus = { path = "../consensus", default-features = false } + +[features] +default = ["std"] +std = [ + "serde/std", + "serde_derive", + "parity-codec/std", + "parity-codec-derive/std", + "sr-std/std", + "sr-io/std", + "sr-primitives/std", + "substrate-primitives/std", + "srml-support/std", + "srml-system/std", + "srml-consensus/std", +] diff --git a/substrate/srml/upgrade-key/src/lib.rs b/substrate/srml/upgrade-key/src/lib.rs new file mode 100644 index 0000000000..28433d8fbd --- /dev/null +++ b/substrate/srml/upgrade-key/src/lib.rs @@ -0,0 +1,90 @@ +// Copyright 2017-2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! The Example: A simple example of a runtime module demonstrating +//! concepts, APIs and structures common to most runtime modules. + +#![cfg_attr(not(feature = "std"), no_std)] + +extern crate sr_std; +#[cfg(test)] +extern crate sr_io; +#[cfg(test)] +extern crate substrate_primitives; +extern crate sr_primitives; +#[cfg(feature = "std")] +#[macro_use] +extern crate serde_derive; +#[macro_use] +extern crate parity_codec_derive; +extern crate parity_codec as codec; +#[macro_use] +extern crate srml_support as support; +extern crate srml_system as system; +extern crate srml_consensus as consensus; + +use sr_std::prelude::*; +use support::{StorageValue, dispatch::Result}; +use system::ensure_signed; + +pub trait Trait: consensus::Trait + system::Trait { + /// The overarching event type. + type Event: From> + Into<::Event>; +} + +decl_module! { + // Simple declaration of the `Module` type. Lets the macro know what its working on. + pub struct Module for enum Call where origin: T::Origin { + fn deposit_event() = default; + fn upgrade(origin, new: Vec) -> Result { + // This is a public call, so we ensure that the origin is some signed account. + let _sender = ensure_signed(origin)?; + ensure!(_sender == Self::key(), "only the current upgrade key can use the upgrade_key module"); + + >::set_code(new)?; + Self::deposit_event(RawEvent::Upgraded); + + Ok(()) + } + + fn set_key(origin, new: T::AccountId) -> Result { + // This is a public call, so we ensure that the origin is some signed account. + let _sender = ensure_signed(origin)?; + ensure!(_sender == Self::key(), "only the current upgrade key can use the upgrade_key module"); + + Self::deposit_event(RawEvent::KeyChanged(Self::key())); + >::put(new); + + Ok(()) + } + } +} + +/// An event in this module. +decl_event!( + pub enum Event where AccountId = ::AccountId { + /// An upgrade just happened. + Upgraded, + /// An upgrade just happened; old key is supplied as an argument. + KeyChanged(AccountId), + } +); + +decl_storage! { + trait Store for Module as UpgradeKey { + Key get(key) config(): T::AccountId; + } +}

D`%j6nKP6PMRLJVc0Jnsa41luUfwxO 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 diff --git a/substrate/srml/support/src/lib.rs b/substrate/srml/support/src/lib.rs index a8b1fa88a4..e9cd35afa5 100644 --- a/substrate/srml/support/src/lib.rs +++ b/substrate/srml/support/src/lib.rs @@ -24,7 +24,8 @@ #[cfg(feature = "std")] extern crate serde; -extern crate sr_std as rstd; +#[doc(hidden)] +pub extern crate sr_std as rstd; extern crate sr_io as runtime_io; #[doc(hidden)] pub extern crate sr_primitives as runtime_primitives; diff --git a/substrate/srml/support/src/storage/generator.rs b/substrate/srml/support/src/storage/generator.rs index 5b01a686c6..f3e2f0e8c0 100644 --- a/substrate/srml/support/src/storage/generator.rs +++ b/substrate/srml/support/src/storage/generator.rs @@ -379,7 +379,7 @@ macro_rules! __storage_items_internal { } /// Get the storage key used to fetch a value corresponding to a specific key. - fn key_for(x: &$kty) -> Vec { + fn key_for(x: &$kty) -> $crate::rstd::vec::Vec { let mut key = $prefix.to_vec(); $crate::codec::Encode::encode_to(x, &mut key); key @@ -441,21 +441,21 @@ macro_rules! __storage_items_internal { /// Get the key used to put the length field. // TODO: concat macro should accept byte literals. - fn len_key() -> Vec { + fn len_key() -> $crate::rstd::vec::Vec { let mut key = $prefix.to_vec(); key.extend(b"len"); key } /// Get the storage key used to fetch a value at a given index. - fn key_for(index: u32) -> Vec { + fn key_for(index: u32) -> $crate::rstd::vec::Vec { let mut key = $prefix.to_vec(); $crate::codec::Encode::encode_to(&index, &mut key); key } /// Read out all the items. - fn items(storage: &S) -> Vec<$ty> { + fn items(storage: &S) -> $crate::rstd::vec::Vec<$ty> { (0..<$name as $crate::storage::generator::StorageList<$ty>>::len(storage)) .map(|i| <$name as $crate::storage::generator::StorageList<$ty>>::get(i, storage).expect("all items within length are set; qed")) .collect() @@ -1867,7 +1867,7 @@ macro_rules! __decl_storage_item { } /// Get the storage key used to fetch a value corresponding to a specific key. - fn key_for(x: &$kty) -> Vec { + fn key_for(x: &$kty) -> $crate::rstd::vec::Vec { let mut key = <$name<$traitinstance> as $crate::storage::generator::StorageMap<$kty, $ty>>::prefix().to_vec(); $crate::codec::Encode::encode_to(x, &mut key); key From c207ecfbfcd80044b821aeed5717557d390e7a98 Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Thu, 25 Oct 2018 10:13:20 +0200 Subject: [PATCH 05/16] docs: Relates to #578. Add instructions for rustdoc viewing and contributing (#957) * doc: Relates to #578. Add rustdoc documentation guide to readme * fix: Fix testing of dot points. Show packages over multiple lines so all visible * fix: Fix indentation and change from authorting to contributing --- substrate/README.adoc | 95 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/substrate/README.adoc b/substrate/README.adoc index f0aa15c4f9..ad17955d0b 100644 --- a/substrate/README.adoc +++ b/substrate/README.adoc @@ -225,6 +225,101 @@ include::CONTRIBUTING.adoc[leveloffset=+1] include::CODE_OF_CONDUCT.adoc[leveloffset=+1] +== Documentation + +=== Viewing documentation for Substrate packages + +You can generate documentation for a Substrate Rust package and have it automatically open in your web browser using https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html#using-rustdoc-with-cargo[rustdoc with Cargo], +(of the The Rustdoc Book), by running the the following command: + +``` +cargo doc --package --open +``` + +Replacing `` with one of the following (i.e. `cargo doc --package node-cli --open`): + +* Node +[source, shell] +node-cli, node-consensus, node-executor, node-network, node-primitives, node-runtime, node-service +* Substrate Runtime +[source, shell] +sr-api, sr-io, sr-primitives, sr-sandbox, sr-std, sr-version +* Substrate Runtime Module Library +[source, shell] +srml-balances, srml-consensus, srml-contract, srml-council, srml-democracy, srml-example, +srml-executive, srml-session, srml-staking, srml-support, srml-system, srml-timestamp, +srml-treasury +* Subkey +[source, shell] +subkey +* Substrate +[source, shell] +substrate, substrate-bft, substrate-cli, substrate-client, substrate-client-db, +substrate-executor, substrate-finality-grandpa, substrate-keyring, substrate-keystore, +substrate-metadata, substrate-misbehavior-check, substrate-network, +substrate-network-libp2p, substrate-primitives, substrate-rpc, substrate-rpc-servers, +substrate-serializer, substrate-service, substrate-service-test, substrate-state-db, +substrate-state-machine, substrate-telemetry, substrate-test-client, +substrate-test-runtime, substrate-transaction-graph, substrate-transaction-pool, +substrate-trie + +=== Contributing to documentation for Substrate packages + +https://doc.rust-lang.org/1.9.0/book/documentation.html[Document source code] for Substrate packages by annotating the source code with documentation comments. + +Example (generic): +```markdown +/// Summary +/// +/// Description +/// +/// # Panics +/// +/// # Errors +/// +/// # Safety +/// +/// # Examples +/// +/// Summary of Example 1 +/// +/// ```rust +/// // insert example 1 code here +/// ``` +/// +``` + +* Important notes: +** Documentation comments must use annotations with a triple slash `///` +** Modules are documented using `//!` +``` +/// Summary (of module) +/// +/// Description (of module) +``` +* Special section header is indicated with a hash `#`. +** `Panics` section requires an explanation if the function triggers a panic +** `Errors` section is for describing conditions under which a function of method returns `Err(E)` if it returns a `Result` +** `Safety` section requires an explanation if the function is `unsafe` +** `Examples` section includes examples of using the function or method +* Code block annotations for examples are included between triple graves, as shown above. +Instead of including the programming language to use for syntax highlighting as the annotation +after the triple graves, alternative annotations include the `ignore`, `text`, `should_panic`, or `no_run`. +* Summary sentence is a short high level sinngle sentence of its functionality +* Description paragraph is for details additional to the summary sentence +* Missing documentation annotations may be used to identify where to generate warnings with `#![warn(missing_docs)]` +or errors `#![deny(missing_docs)]` +* Hide documentation for items with `#[doc(hidden)]` + +=== Contributing to documentation (as tests, for extended examples, and for macros) for Substrate packages + +The code block annotations in the `# Example` section may be used as https://doc.rust-lang.org/1.9.0/book/documentation.html#documentation-as-tests[documentation as tests and for extended examples]. + +* Important notes: +** Rustdoc will automatically add a `main()` wrapper around the code block to test it +** https://doc.rust-lang.org/1.9.0/book/documentation.html#documenting-macros[Documentating macros]. +** Documentation as tests examples are included when running `cargo test` + == License ---- include::LICENSE[] From a6596582bf13f826fb15d9ad460c858f70c4f928 Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Thu, 25 Oct 2018 18:34:49 +0200 Subject: [PATCH 06/16] docs: Relates to #578 Minor fixes to documentation section in Readme (#992) * docs: Fix syntax for module comment. Rename to substrate Core * docs: Reorder package layers in order of level of abstraction * docs: Make text more concise * docs: Add SRML abbreviation --- substrate/README.adoc | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/substrate/README.adoc b/substrate/README.adoc index ad17955d0b..fe96499317 100644 --- a/substrate/README.adoc +++ b/substrate/README.adoc @@ -238,21 +238,7 @@ cargo doc --package --open Replacing `` with one of the following (i.e. `cargo doc --package node-cli --open`): -* Node -[source, shell] -node-cli, node-consensus, node-executor, node-network, node-primitives, node-runtime, node-service -* Substrate Runtime -[source, shell] -sr-api, sr-io, sr-primitives, sr-sandbox, sr-std, sr-version -* Substrate Runtime Module Library -[source, shell] -srml-balances, srml-consensus, srml-contract, srml-council, srml-democracy, srml-example, -srml-executive, srml-session, srml-staking, srml-support, srml-system, srml-timestamp, -srml-treasury -* Subkey -[source, shell] -subkey -* Substrate +* Substrate Core [source, shell] substrate, substrate-bft, substrate-cli, substrate-client, substrate-client-db, substrate-executor, substrate-finality-grandpa, substrate-keyring, substrate-keystore, @@ -262,6 +248,21 @@ substrate-serializer, substrate-service, substrate-service-test, substrate-state substrate-state-machine, substrate-telemetry, substrate-test-client, substrate-test-runtime, substrate-transaction-graph, substrate-transaction-pool, substrate-trie +* Substrate Runtime +[source, shell] +sr-api, sr-io, sr-primitives, sr-sandbox, sr-std, sr-version +* Substrate Runtime Module Library (SRML) +[source, shell] +srml-balances, srml-consensus, srml-contract, srml-council, srml-democracy, srml-example, +srml-executive, srml-session, srml-staking, srml-support, srml-system, srml-timestamp, +srml-treasury +* Node +[source, shell] +node-cli, node-consensus, node-executor, node-network, node-primitives, node-runtime, node-service +* Subkey +[source, shell] +subkey + === Contributing to documentation for Substrate packages @@ -293,9 +294,9 @@ Example (generic): ** Documentation comments must use annotations with a triple slash `///` ** Modules are documented using `//!` ``` -/// Summary (of module) -/// -/// Description (of module) +//! Summary (of module) +//! +//! Description (of module) ``` * Special section header is indicated with a hash `#`. ** `Panics` section requires an explanation if the function triggers a panic @@ -311,7 +312,7 @@ after the triple graves, alternative annotations include the `ignore`, `text`, ` or errors `#![deny(missing_docs)]` * Hide documentation for items with `#[doc(hidden)]` -=== Contributing to documentation (as tests, for extended examples, and for macros) for Substrate packages +=== Contributing to documentation (tests, extended examples, macros) for Substrate packages The code block annotations in the `# Example` section may be used as https://doc.rust-lang.org/1.9.0/book/documentation.html#documentation-as-tests[documentation as tests and for extended examples]. From 190f167251390a7a712f8e30194b976629e7a6e9 Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Thu, 25 Oct 2018 18:35:13 +0200 Subject: [PATCH 07/16] docs: Fix broken link to License in Readme (#993) * docs: Fix link to LICENSE * fix: Remove surrounding text --- substrate/README.adoc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/substrate/README.adoc b/substrate/README.adoc index fe96499317..e38e73e41b 100644 --- a/substrate/README.adoc +++ b/substrate/README.adoc @@ -322,6 +322,5 @@ The code block annotations in the `# Example` section may be used as https://doc ** Documentation as tests examples are included when running `cargo test` == License ----- -include::LICENSE[] ----- + +https://github.com/paritytech/substrate/blob/master/LICENSE[LICENSE] From 7b4b98abef6a947ea6610d59902c3651fe72960e Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Thu, 25 Oct 2018 18:35:42 +0200 Subject: [PATCH 08/16] docs: Move contribution links to Contribution section (#994) --- substrate/README.adoc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/substrate/README.adoc b/substrate/README.adoc index e38e73e41b..11fdd616b2 100644 --- a/substrate/README.adoc +++ b/substrate/README.adoc @@ -221,10 +221,6 @@ cargo run include::doc/packages/packages.adoc[] -include::CONTRIBUTING.adoc[leveloffset=+1] - -include::CODE_OF_CONDUCT.adoc[leveloffset=+1] - == Documentation === Viewing documentation for Substrate packages @@ -321,6 +317,16 @@ The code block annotations in the `# Example` section may be used as https://doc ** https://doc.rust-lang.org/1.9.0/book/documentation.html#documenting-macros[Documentating macros]. ** Documentation as tests examples are included when running `cargo test` +== Contributing + +=== Contributing Guidelines + +include::CONTRIBUTING.adoc[] + +=== Contributor Code of Conduct + +include::CODE_OF_CONDUCT.adoc[] + == License https://github.com/paritytech/substrate/blob/master/LICENSE[LICENSE] From f923e38cc7fddef6193ffad93e29167645d24041 Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Fri, 26 Oct 2018 11:09:48 +0200 Subject: [PATCH 09/16] docs: Relates to Issue #995. Fix links in existing documentation (#999) * docs: Remove safe-mix since is no longer local dependency * docs: Fix existing packages link. Still only includes Substrate Core --- substrate/core/client/db/README.adoc | 13 ++++++ substrate/core/client/src/lib.rs | 2 + substrate/core/consensus/common/README.adoc | 12 +++++ substrate/core/consensus/common/src/lib.rs | 3 ++ substrate/core/consensus/rhd/README.adoc | 12 +++++ substrate/core/consensus/rhd/src/lib.rs | 2 + substrate/core/executor/src/lib.rs | 2 +- substrate/core/finality-grandpa/README.adoc | 12 +++++ substrate/core/finality-grandpa/src/lib.rs | 2 + substrate/core/keyring/src/lib.rs | 2 +- substrate/core/service/src/lib.rs | 2 +- substrate/core/sr-api/README.adoc | 12 +++++ substrate/core/sr-api/src/lib.rs | 2 + substrate/core/sr-primitives/README.adoc | 12 +++++ substrate/core/sr-primitives/src/lib.rs | 2 + substrate/core/sr-sandbox/src/lib.rs | 26 +++++------ substrate/core/sr-version/README.adoc | 13 ++++++ substrate/core/sr-version/src/lib.rs | 4 +- substrate/core/telemetry/src/lib.rs | 2 +- substrate/core/transaction-pool/README.adoc | 13 ++++++ substrate/core/trie/README.adoc | 12 +++++ substrate/core/trie/README.md | 1 - substrate/core/trie/src/lib.rs | 4 +- substrate/doc/packages/misc.adoc | 2 - substrate/doc/packages/substrate.adoc | 52 +++++++++++---------- 25 files changed, 175 insertions(+), 46 deletions(-) create mode 100644 substrate/core/client/db/README.adoc create mode 100644 substrate/core/consensus/common/README.adoc create mode 100644 substrate/core/consensus/rhd/README.adoc create mode 100644 substrate/core/finality-grandpa/README.adoc create mode 100644 substrate/core/sr-api/README.adoc create mode 100644 substrate/core/sr-primitives/README.adoc create mode 100644 substrate/core/sr-version/README.adoc create mode 100644 substrate/core/transaction-pool/README.adoc create mode 100644 substrate/core/trie/README.adoc delete mode 100644 substrate/core/trie/README.md diff --git a/substrate/core/client/db/README.adoc b/substrate/core/client/db/README.adoc new file mode 100644 index 0000000000..c0b123392c --- /dev/null +++ b/substrate/core/client/db/README.adoc @@ -0,0 +1,13 @@ + += Client DB + +.Summary +[source, toml] +---- +include::Cargo.toml[lines=2..5] +---- + +.Description +---- +include::src/lib.rs[tag=description] +---- diff --git a/substrate/core/client/src/lib.rs b/substrate/core/client/src/lib.rs index 9526091dad..43a4be7a80 100644 --- a/substrate/core/client/src/lib.rs +++ b/substrate/core/client/src/lib.rs @@ -14,7 +14,9 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . +// tag::description[] //! Substrate Client and associated logic. +// end::description[] #![warn(missing_docs)] #![recursion_limit="128"] diff --git a/substrate/core/consensus/common/README.adoc b/substrate/core/consensus/common/README.adoc new file mode 100644 index 0000000000..d8f9e1daf2 --- /dev/null +++ b/substrate/core/consensus/common/README.adoc @@ -0,0 +1,12 @@ += Consensus Common + +.Summary +[source, toml] +---- +include::Cargo.toml[lines=2..5] +---- + +.Description +---- +include::src/lib.rs[tag=description] +---- diff --git a/substrate/core/consensus/common/src/lib.rs b/substrate/core/consensus/common/src/lib.rs index a5bf6d218a..fde9d20ec9 100644 --- a/substrate/core/consensus/common/src/lib.rs +++ b/substrate/core/consensus/common/src/lib.rs @@ -14,7 +14,10 @@ // You should have received a copy of the GNU General Public License // along with Substrate Consensus Common. If not, see . +// tag::description[] //! Tracks offline validators. +// end::description[] + #![allow(dead_code)] #![cfg(feature="rhd")] diff --git a/substrate/core/consensus/rhd/README.adoc b/substrate/core/consensus/rhd/README.adoc new file mode 100644 index 0000000000..ff7bde1714 --- /dev/null +++ b/substrate/core/consensus/rhd/README.adoc @@ -0,0 +1,12 @@ += Consensus Rhododendron (RHD) + +.Summary +[source, toml] +---- +include::Cargo.toml[lines=2..5] +---- + +.Description +---- +include::src/lib.rs[tag=description] +---- diff --git a/substrate/core/consensus/rhd/src/lib.rs b/substrate/core/consensus/rhd/src/lib.rs index 4edc8fc893..0bb0cbc3c6 100644 --- a/substrate/core/consensus/rhd/src/lib.rs +++ b/substrate/core/consensus/rhd/src/lib.rs @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . +// tag::description[] //! BFT Agreement based on a rotating proposer in different rounds. //! //! Where this crate refers to input stream, should never logically conclude. @@ -29,6 +30,7 @@ //! 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. +// end::description[] #![cfg(feature = "rhd")] diff --git a/substrate/core/executor/src/lib.rs b/substrate/core/executor/src/lib.rs index df67db587f..64442b7f8e 100644 --- a/substrate/core/executor/src/lib.rs +++ b/substrate/core/executor/src/lib.rs @@ -24,7 +24,7 @@ //! - execute_block(bytes) //! - init_block(PrevBlock?) -> InProgressBlock //! - add_transaction(InProgressBlock) -> InProgressBlock -//! I leave it as is for now as it might be removed before this is ever done. +//! It is left as is for now as it might be removed before this is ever done. // end::description[] #![warn(missing_docs)] diff --git a/substrate/core/finality-grandpa/README.adoc b/substrate/core/finality-grandpa/README.adoc new file mode 100644 index 0000000000..5338cf9e8c --- /dev/null +++ b/substrate/core/finality-grandpa/README.adoc @@ -0,0 +1,12 @@ += Finality GRANDPA (aka SHAFT) + +.Summary +[source, toml] +---- +include::Cargo.toml[lines=2..5] +---- + +.Description +---- +include::src/lib.rs[tag=description] +---- diff --git a/substrate/core/finality-grandpa/src/lib.rs b/substrate/core/finality-grandpa/src/lib.rs index 969ebc197a..76fb1761bd 100644 --- a/substrate/core/finality-grandpa/src/lib.rs +++ b/substrate/core/finality-grandpa/src/lib.rs @@ -14,9 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . +// tag::description[] //! Integration of the GRANDPA finality gadget into substrate. //! //! This is a long-running future that produces finality notifications. +// end::description[] extern crate finality_grandpa as grandpa; extern crate futures; diff --git a/substrate/core/keyring/src/lib.rs b/substrate/core/keyring/src/lib.rs index 3fab7c5769..6ba79d146c 100644 --- a/substrate/core/keyring/src/lib.rs +++ b/substrate/core/keyring/src/lib.rs @@ -15,7 +15,7 @@ // along with Substrate. If not, see . // tag::description[] -//! Support code for the runtime. +//! Support code for the runtime. A set of test accounts. // end::description[] #[macro_use] extern crate hex_literal; diff --git a/substrate/core/service/src/lib.rs b/substrate/core/service/src/lib.rs index 848c96ae90..2acc8d7661 100644 --- a/substrate/core/service/src/lib.rs +++ b/substrate/core/service/src/lib.rs @@ -15,7 +15,7 @@ // along with Substrate. If not, see . // tag::description[] -//! Substrate service. Starts a thread that spins the network, the client and the extrinsic pool. +//! Substrate service. Starts a thread that spins up the network, client, and extrinsic pool. //! Manages communication between them. // end::description[] diff --git a/substrate/core/sr-api/README.adoc b/substrate/core/sr-api/README.adoc new file mode 100644 index 0000000000..debd87e8eb --- /dev/null +++ b/substrate/core/sr-api/README.adoc @@ -0,0 +1,12 @@ += Runtime API + +.Summary +[source, toml] +---- +include::Cargo.toml[lines=2..5] +---- + +.Description +---- +include::src/lib.rs[tag=description] +---- diff --git a/substrate/core/sr-api/src/lib.rs b/substrate/core/sr-api/src/lib.rs index b610606d02..0ddc89b14e 100644 --- a/substrate/core/sr-api/src/lib.rs +++ b/substrate/core/sr-api/src/lib.rs @@ -14,7 +14,9 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . +// tag::description[] //! API's for interfacing with the runtime via native/wasm. +// end::description[] #![cfg_attr(not(feature = "std"), no_std)] diff --git a/substrate/core/sr-primitives/README.adoc b/substrate/core/sr-primitives/README.adoc new file mode 100644 index 0000000000..0e9d636111 --- /dev/null +++ b/substrate/core/sr-primitives/README.adoc @@ -0,0 +1,12 @@ += Runtime Primitives + +.Summary +[source, toml] +---- +include::Cargo.toml[lines=2..5] +---- + +.Description +---- +include::src/lib.rs[tag=description] +---- diff --git a/substrate/core/sr-primitives/src/lib.rs b/substrate/core/sr-primitives/src/lib.rs index 15b86484a6..36f5cda207 100644 --- a/substrate/core/sr-primitives/src/lib.rs +++ b/substrate/core/sr-primitives/src/lib.rs @@ -14,8 +14,10 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . +// tag::description[] //! System manager: Handles all of the top-level stuff; executing block/transaction, setting code //! and depositing logs. +// end::description[] #![cfg_attr(not(feature = "std"), no_std)] diff --git a/substrate/core/sr-sandbox/src/lib.rs b/substrate/core/sr-sandbox/src/lib.rs index 7b6dc67feb..6ed3243dc8 100755 --- a/substrate/core/sr-sandbox/src/lib.rs +++ b/substrate/core/sr-sandbox/src/lib.rs @@ -15,25 +15,25 @@ // along with Substrate. If not, see . // tag::description[] -//! This crate provides means of instantiation and execution of wasm modules. +//! This crate provides means to instantiate and execute wasm modules. //! -//! It works even when the user of this library is itself executes -//! inside the wasm VM. In this case same VM is used for execution +//! It works even when the user of this library executes from +//! inside the wasm VM. In this case the same VM is used for execution //! of both the sandbox owner and the sandboxed module, without compromising security -//! and without performance penalty of full wasm emulation inside wasm. +//! and without the performance penalty of full wasm emulation inside wasm. //! -//! This is achieved by using bindings to wasm VM which are published by the host API. -//! This API is thin and consists of only handful functions. It contains functions for instantiating -//! modules and executing them and for example doesn't contain functions for inspecting the module -//! structure. The user of this library is supposed to read wasm module by it's own means. +//! This is achieved by using bindings to the wasm VM, which are published by the host API. +//! This API is thin and consists of only a handful functions. It contains functions for instantiating +//! modules and executing them, but doesn't contain functions for inspecting the module +//! structure. The user of this library is supposed to read the wasm module. //! -//! When this crate is used in `std` environment all these functions are implemented by directly -//! calling wasm VM. +//! When this crate is used in the `std` environment all these functions are implemented by directly +//! calling the wasm VM. //! -//! Example of possible use-cases for this library are following: +//! Example of possible use-cases for this library are the following: //! -//! - implementing smart-contract runtimes which uses wasm for contract code -//! - executing wasm substrate runtime inside of a wasm parachain +//! - implementing smart-contract runtimes that use wasm for contract code +//! - executing a wasm substrate runtime inside of a wasm parachain //! - etc // end::description[] diff --git a/substrate/core/sr-version/README.adoc b/substrate/core/sr-version/README.adoc new file mode 100644 index 0000000000..28db6c615d --- /dev/null +++ b/substrate/core/sr-version/README.adoc @@ -0,0 +1,13 @@ + += Runtime Version + +.Summary +[source, toml] +---- +include::Cargo.toml[lines=2..5] +---- + +.Description +---- +include::src/lib.rs[tag=description] +---- diff --git a/substrate/core/sr-version/src/lib.rs b/substrate/core/sr-version/src/lib.rs index 8af084da5e..6f91692b82 100644 --- a/substrate/core/sr-version/src/lib.rs +++ b/substrate/core/sr-version/src/lib.rs @@ -14,7 +14,9 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -//! Version module for runtime; Provide a function that returns runtime version. +// tag::description[] +//! Version module for the Substrate runtime; Provides a function that returns the runtime version. +// end::description[] #![cfg_attr(not(feature = "std"), no_std)] diff --git a/substrate/core/telemetry/src/lib.rs b/substrate/core/telemetry/src/lib.rs index 729f6f76d9..aa7479cc82 100644 --- a/substrate/core/telemetry/src/lib.rs +++ b/substrate/core/telemetry/src/lib.rs @@ -17,7 +17,7 @@ // tag::description[] //! Telemetry utils. //! -//! `telemetry` macro be used from whereever in the Substrate codebase +//! `telemetry` macro may be used anywhere in the Substrate codebase //! in order to send real-time logging information to the telemetry //! server (if there is one). We use the async drain adapter of `slog` //! so that the logging thread doesn't get held up at all. diff --git a/substrate/core/transaction-pool/README.adoc b/substrate/core/transaction-pool/README.adoc new file mode 100644 index 0000000000..336a67a841 --- /dev/null +++ b/substrate/core/transaction-pool/README.adoc @@ -0,0 +1,13 @@ + += Transaction Pool + +.Summary +[source, toml] +---- +include::Cargo.toml[lines=2..5] +---- + +.Description +---- +include::src/lib.rs[tag=description] +---- diff --git a/substrate/core/trie/README.adoc b/substrate/core/trie/README.adoc new file mode 100644 index 0000000000..953724ca12 --- /dev/null +++ b/substrate/core/trie/README.adoc @@ -0,0 +1,12 @@ += Substrate Trie + +.Summary +[source, toml] +---- +include::Cargo.toml[lines=2..5] +---- + +.Description +---- +include::src/lib.rs[tag=description] +---- diff --git a/substrate/core/trie/README.md b/substrate/core/trie/README.md deleted file mode 100644 index 57d392057b..0000000000 --- a/substrate/core/trie/README.md +++ /dev/null @@ -1 +0,0 @@ -This crate provides utility functions to interact with Substrate's Modified Merkle Patricia tree ("trie"). \ No newline at end of file diff --git a/substrate/core/trie/src/lib.rs b/substrate/core/trie/src/lib.rs index 87d955a357..68dacf2668 100644 --- a/substrate/core/trie/src/lib.rs +++ b/substrate/core/trie/src/lib.rs @@ -14,7 +14,9 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . -//! Substrate-format Base-16 Modified Merkle Patricia Tree (Trie). +// tag::description[] +//! Utility functions to interact with Substrate's Base-16 Modified Merkle Patricia tree ("trie"). +// end::description[] // TODO: no_std diff --git a/substrate/doc/packages/misc.adoc b/substrate/doc/packages/misc.adoc index 316cf44858..2081d34efc 100644 --- a/substrate/doc/packages/misc.adoc +++ b/substrate/doc/packages/misc.adoc @@ -3,8 +3,6 @@ :leveloffset: +3 -include::../../safe-mix/README.adoc[] - include::../../subkey/README.adoc[] :leveloffset: -3 diff --git a/substrate/doc/packages/substrate.adoc b/substrate/doc/packages/substrate.adoc index ee246d0909..3df3366def 100644 --- a/substrate/doc/packages/substrate.adoc +++ b/substrate/doc/packages/substrate.adoc @@ -1,62 +1,66 @@ == Substrate Packages +=== Substrate Core + :leveloffset: +3 -include::../../core/bft/README.adoc[] - -include::../../core/cli/README.adoc[] - include::../../core/client/README.adoc[] -include::../../codec/README.adoc[] +include::../../core/test-client/README.adoc[] -include::../../environmental/README.adoc[] +include::../../core/client/db/README.adoc[] + +include::../../core/state-db/README.adoc[] + +include::../../core/consensus/common/README.adoc[] + +include::../../core/consensus/rhd/README.adoc[] include::../../core/executor/README.adoc[] +include::../../core/finality-grandpa/README.adoc[] + include::../../core/transaction-pool/README.adoc[] include::../../core/keyring/README.adoc[] -include::../../core/keystore/README.adoc[] - -include::../../core/misbehavior-check/README.adoc[] - include::../../core/network/README.adoc[] include::../../core/network-libp2p/README.adoc[] -include::../../core/primitives/README.adoc[] - -include::../../pwasm-alloc/README.adoc[] - include::../../core/rpc/README.adoc[] include::../../core/rpc-servers/README.adoc[] include::../../srml/README.adoc[] +include::../../core/sr-api/README.adoc[] + include::../../core/sr-io/README.adoc[] +include::../../core/sr-primitives/README.adoc[] + include::../../core/sr-sandbox/README.adoc[] include::../../core/sr-std/README.adoc[] -include::../../core/runtime-support/README.adoc[] - -include::../../core/serializer/README.adoc[] - -include::../../core/service/README.adoc[] - -include::../../core/state-db/README.adoc[] - include::../../core/state-machine/README.adoc[] +include::../../core/test-runtime/README.adoc[] + include::../../core/telemetry/README.adoc[] -include::../../core/test-client/README.adoc[] +include::../../core/cli/README.adoc[] -include::../../core/test-srml/README.adoc[] +include::../../core/service/README.adoc[] + +include::../../core/trie/README.adoc[] + +include::../../core/keystore/README.adoc[] + +include::../../core/primitives/README.adoc[] + +include::../../core/serializer/README.adoc[] :leveloffset: -3 From 10210b9520bae638302c69e73296938b24825738 Mon Sep 17 00:00:00 2001 From: Luke Schoen Date: Fri, 26 Oct 2018 11:10:06 +0200 Subject: [PATCH 10/16] docs: Remove readme since should not be in src folder (#1004) --- substrate/core/transaction-pool/src/README.adoc | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 substrate/core/transaction-pool/src/README.adoc diff --git a/substrate/core/transaction-pool/src/README.adoc b/substrate/core/transaction-pool/src/README.adoc deleted file mode 100644 index 48052d0fde..0000000000 --- a/substrate/core/transaction-pool/src/README.adoc +++ /dev/null @@ -1,13 +0,0 @@ - -= transaction-pool - -.Summary -[source, toml] ----- -include::Cargo.toml[lines=2..5] ----- - -.Description ----- -include::src/lib.rs[tag=description] ----- From b1976c901496bcae5e2994b742309cef15593c04 Mon Sep 17 00:00:00 2001 From: guanqun Date: Fri, 26 Oct 2018 17:13:16 +0800 Subject: [PATCH 11/16] mutate returns a value (#945) * mutate returns a value * code comment fixes * fix the compile --- substrate/srml/example/src/lib.rs | 7 +++- .../srml/support/src/storage/generator.rs | 36 +++++++++++-------- substrate/srml/support/src/storage/mod.rs | 8 ++--- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/substrate/srml/example/src/lib.rs b/substrate/srml/example/src/lib.rs index 587c4af258..5f81e4336a 100644 --- a/substrate/srml/example/src/lib.rs +++ b/substrate/srml/example/src/lib.rs @@ -251,8 +251,13 @@ impl Module { fn accumulate_foo(origin: T::Origin, increase_by: T::Balance) -> Result { let _sender = ensure_signed(origin)?; + let prev = >::get(); // Because Foo has 'default', the type of 'foo' in closure is the raw type instead of an Option<> type. - >::mutate(|foo| *foo = *foo + increase_by); + let result = >::mutate(|foo| { + *foo = *foo + increase_by; + *foo + }); + assert!(prev + increase_by == result); Ok(()) } diff --git a/substrate/srml/support/src/storage/generator.rs b/substrate/srml/support/src/storage/generator.rs index f3e2f0e8c0..586ec5eb2b 100644 --- a/substrate/srml/support/src/storage/generator.rs +++ b/substrate/srml/support/src/storage/generator.rs @@ -119,7 +119,7 @@ pub trait StorageValue { } /// Mutate this value - fn mutate(f: F, storage: &S); + fn mutate R, S: Storage>(f: F, storage: &S) -> R; /// Clear the storage value. fn kill(storage: &S) { @@ -190,7 +190,7 @@ pub trait StorageMap { } /// Mutate the value under a key. - fn mutate(key: &K, f: F, storage: &S); + fn mutate R, S: Storage>(key: &K, f: F, storage: &S) -> R; } // TODO: Remove this in favour of `decl_storage` macro. @@ -342,10 +342,10 @@ macro_rules! __storage_items_internal { } /// Mutate this value. - fn mutate(f: F, storage: &S) { + fn mutate R, S: $crate::GenericStorage>(f: F, storage: &S) -> R { let mut val = >::get(storage); - f(&mut val); + let ret = f(&mut val); __handle_wrap_internal!($wraptype { // raw type case @@ -353,10 +353,12 @@ macro_rules! __storage_items_internal { } { // Option<> type case match val { - Some(val) => >::put(&val, storage), + Some(ref val) => >::put(&val, storage), None => >::kill(storage), } }); + + ret } } }; @@ -398,10 +400,10 @@ macro_rules! __storage_items_internal { } /// Mutate the value under a key. - fn mutate(key: &$kty, f: F, storage: &S) { + fn mutate R, S: $crate::GenericStorage>(key: &$kty, f: F, storage: &S) -> R { let mut val = >::take(key, storage); - f(&mut val); + let ret = f(&mut val); __handle_wrap_internal!($wraptype { // raw type case @@ -409,10 +411,12 @@ macro_rules! __storage_items_internal { } { // Option<> type case match val { - Some(val) => >::insert(key, &val, storage), + Some(ref val) => >::insert(key, &val, storage), None => >::remove(key, storage), } }); + + ret } } }; @@ -1900,10 +1904,10 @@ macro_rules! __decl_storage_item { } /// Mutate the value under a key - fn mutate(key: &$kty, f: F, storage: &S) { + fn mutate R, S: $crate::GenericStorage>(key: &$kty, f: F, storage: &S) -> R { let mut val = >::take(key, storage); - f(&mut val); + let ret = f(&mut val); __handle_wrap_internal!($wraptype { // raw type case @@ -1911,10 +1915,12 @@ macro_rules! __decl_storage_item { } { // Option<> type case match val { - Some(val) => >::insert(key, &val, storage), + Some(ref val) => >::insert(key, &val, storage), None => >::remove(key, storage), } }); + + ret } } }; @@ -1959,10 +1965,10 @@ macro_rules! __decl_storage_item { } /// Mutate the value under a key. - fn mutate(f: F, storage: &S) { + fn mutate R, S: $crate::GenericStorage>(f: F, storage: &S) -> R { let mut val = >::get(storage); - f(&mut val); + let ret = f(&mut val); __handle_wrap_internal!($wraptype { // raw type case @@ -1970,10 +1976,12 @@ macro_rules! __decl_storage_item { } { // Option<> type case match val { - Some(val) => >::put(&val, storage), + Some(ref val) => >::put(&val, storage), None => >::kill(storage), } }); + + ret } } }; diff --git a/substrate/srml/support/src/storage/mod.rs b/substrate/srml/support/src/storage/mod.rs index 637ecc688a..6e1302718a 100644 --- a/substrate/srml/support/src/storage/mod.rs +++ b/substrate/srml/support/src/storage/mod.rs @@ -169,7 +169,7 @@ pub trait StorageValue { fn put>(val: Arg); /// Mutate the value - fn mutate(f: F); + fn mutate R>(f: F) -> R; /// Clear the storage value. fn kill(); @@ -193,7 +193,7 @@ impl StorageValue for U where U: generator::StorageValue { fn put>(val: Arg) { U::put(val.borrow(), &RuntimeStorage) } - fn mutate(f: F) { + fn mutate R>(f: F) -> R { U::mutate(f, &RuntimeStorage) } fn kill() { @@ -296,7 +296,7 @@ pub trait StorageMap { fn remove>(key: KeyArg); /// Mutate the value under a key. - fn mutate, F: FnOnce(&mut Self::Query)>(key: KeyArg, f: F); + fn mutate, R, F: FnOnce(&mut Self::Query) -> R>(key: KeyArg, f: F) -> R; /// Take the value under a key. fn take>(key: KeyArg) -> Self::Query; @@ -329,7 +329,7 @@ impl StorageMap for U where U: generator::StorageMa U::remove(key.borrow(), &RuntimeStorage) } - fn mutate, F: FnOnce(&mut Self::Query)>(key: KeyArg, f: F) { + fn mutate, R, F: FnOnce(&mut Self::Query) -> R>(key: KeyArg, f: F) -> R { U::mutate(key.borrow(), f, &RuntimeStorage) } From f0eb5193185301f7991fc596b2d68da0fdf94819 Mon Sep 17 00:00:00 2001 From: gabriel klawitter Date: Fri, 26 Oct 2018 12:03:56 +0200 Subject: [PATCH 12/16] ci: change rust container tag from substrate to nightly (#1015) --- substrate/.gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/substrate/.gitlab-ci.yml b/substrate/.gitlab-ci.yml index b803ce3d57..c87cdae7c3 100644 --- a/substrate/.gitlab-ci.yml +++ b/substrate/.gitlab-ci.yml @@ -2,7 +2,7 @@ stages: - test - build -image: parity/rust:substrate +image: parity/rust:nightly variables: CI_SERVER_NAME: "GitLab CI" From d3f2a007931cd8225edb5187082c3295d5faa502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Fri, 26 Oct 2018 12:34:25 +0200 Subject: [PATCH 13/16] Multiple improvements to the `decl_module!` macro (#953) * General `decl_module` improvements * Make `deposit_event` implementable by `decl_module!` * Make `decl_module!` implement calls directly * Regenerate the wasm file after master rebase --- .../release/node_runtime.compact.wasm | Bin 607677 -> 612872 bytes substrate/srml/assets/src/lib.rs | 82 ++-- substrate/srml/balances/src/lib.rs | 119 +++-- substrate/srml/consensus/src/lib.rs | 95 ++-- substrate/srml/contract/src/lib.rs | 193 ++++---- substrate/srml/council/src/motions.rs | 189 ++++--- substrate/srml/council/src/seats.rs | 461 +++++++++--------- substrate/srml/council/src/voting.rs | 159 +++--- substrate/srml/democracy/src/lib.rs | 144 +++--- substrate/srml/example/src/lib.rs | 171 +++---- substrate/srml/session/src/lib.rs | 51 +- substrate/srml/staking/src/lib.rs | 292 ++++++----- substrate/srml/support/src/dispatch.rs | 229 ++++++--- substrate/srml/support/src/metadata.rs | 8 +- substrate/srml/system/src/lib.rs | 20 +- substrate/srml/timestamp/src/lib.rs | 55 +-- substrate/srml/treasury/src/lib.rs | 152 +++--- 17 files changed, 1201 insertions(+), 1219 deletions(-) diff --git a/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm b/substrate/node/runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm index 461eff1a39b998d3475828130dfaee6cacad27bb..3ffbf0d1b1afbc7e6ddf799faccd87cf2e2f81cb 100644 GIT binary patch delta 94159 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%0DSRKv@zm-vC05?TEjqBwbim^&)6(z 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 Um+j1{p9MrWqebQcJtiCae*rfL^Z)<= delta 88871 zcmce<34D}A@;^M?{Y=i8WJtmhNMI&h;l9Hu@C1=d6qFUj0}w%o+@Rt)Q9)4-qX8R5 z5ETRkHHbQ>pg~#0Yl(=8iV7;1AOzQ4SufsiRX;PC8G`HXZ{NRsoPM6}e!8oxtE#K2 zt2^^vXuM^9TZ~lEgE~q&7L)C)(ul?loB?L=zneo?1%o;+80O5c}t++M1$TkcA#pWt$-FXZQ?=c?8ssdT1l z(bAJDlPtG1|G5&RE8SNkiT`uCEX!pcYsjRe4CyM}r5dKV-EPaGY^(Gis(Gp3syEz9 zmsv?k$u3ut%<(3rxy*kSSHp8s5;r5=NlEx085aHEKThz2eq743a^wChU1Bv&UHtVM zuGFB*Mq2uob>W1MWa^mfW=)tnW8$od<7T=(mfmr*$Bn&i*0@nuO`1CPTGuBsY4W&P zW3C=EYm94;^i7KWr^&UEdQS=Xa^z%*{uEPOk2%-C5Ir%rM0m+4Oa z)ET3=3D?&$C6YDM75qjf&zd-S+{{^HCQoyHE0gC7;j%^QpcxljT6ELI>u(4?C~kgO zTy^6n@v_)0J`#JymtvpzT6`nE6$ivYaa7DM7E>orxm{fSzI;WzDxQ#Adq@cJ>lzwnqUg;MJw}}I#mnZha@2W&w7VqA8C=pN}D4m%+ z3%`exZxjbMUX}8?a37F${Ym=7I#IKHxux!ll zG(#wWtG~KiH7ea&FcKf-bRM2UBS`RD1H1{P^*h%tUECS1Z9LHVO@jZauA8%{T-ueQ z2*0~sMfQ6x-+|H_yA`5%bGK6b4(Z+jzjL}T$9H)>?omRQuJ6@EEZ_KHufL0W^trH8 z&+|5*RxE0zB*AHAznzzia$5$Jr+%s3t9$8XJ(Ej^6y}KKrIQOsqM;pyjq!WD@LBY* zyiYcMLw)kR2BbXzN%-`}gMGRQR0{NMA{KA#-?x_(i%aMA>xDLU^t)2%jZOQnq4J#r znxWud1Jc8L%07W55KGa@)Wwe;F8PG+|!qAMnl&O?+*-=4R0?{@Xd%D zk#)tT+r_fdMkB96rMpLtLjIwVdyrp#S!;B5;<7}Vte>tNCq>1^E5-!qEqL{E>Lhpk zG`uVt|2q-D!ihv6PrPz1!S?Fp55=L<`=-zgygB8snLBoGbrr}YAXyej50ZV`OP5V; zBKPbreRJv%u3E3O&9q<9PRr?=M4exRQXqR7Z0NH6*XF54F54BbWbe|XnN5SrpRgt` z(RTIsDu1HSm6z1lYx$*L4Dt$(OtnQI36$mJWMSg{! zW-eD}mkaMcdiPbmC((OSO$d~O(ebz0Lg4S&q**@2`d9sm*V(K z%ff`t@?4;-97O)*k#biMRr2xfF9M8t!Y}h>f9g{DWi!>gv+{Epek`h%FB=6EHB68G zJfI?9q67QXJ6nNM+vSsX@I2~`+pklU=Pq=0R^fMFQC>pyds0!ME6Bx^+uM)koG<;< z6xu~&0*uuFs7DE4M3aeCt&3*LX&yyrok)TPhDUdF5k{8m6yY%;Ttq_*@)(6b5t(@@ z1dQ9CM9-=8oZwHUXO9^JzD@Ky&)gf=kpxt-pTA|S`As{LvU+1k)I?RordjHa8|^?q z;IX$q*-yhU-zND9egi|Ip8z&60F#&%z4c|)AR~pyP5Qmmi~`Yml>Xsm1%mcUk4nWb z9E1_M@lg2P5GLLYra+vWZRnG-(Syqmc=6w^owaS^ECMma_bV(q9%% zlVu;2PF_@77Vp}4*P?}xTBTVJ3=;=8PJG};`uNJlm*Qp9;;SW+Ts=NPo_eQr?(#86 zHXdHSkc8OvE1$-1;IXCX<(0>3330IWgU8$9x7X@GX`?4T7Y80#HKW!68OZeK*&U1g z9(yssPqN*!0Q$UD_n>CR>Xuyp0{kwb=Z&wfE}-szc=9Uxva3ItzRct=J?6`zHFZ&8 z?wWo0X8hVF_+7Ym9De`4_ImslJ=GMy@2%@p`qoqJ@$~akZ=m*;rw`$I^*XBk-nt3s zr_=f+ZWO$`;e9~=(DOs-spgPE#gudPsa1Om3C|$QH8;fsV zs`L7{O*!=GrtGFPMG8bi(s89KvKI)RHD#Az*j&I_r7d3m3$M=cbxRk&+%={E-s8_}V?Hjjmp06;I7nL`W6}vXxRBk6CbMsp_)RbkrHg@`A9niON|Ca-$Jp5s4 ztNk71(%q$3?H`dj?;EqkD6_;UT4LVce|4v|obLl!LC9tyS-g`f)*-$DWfn*XNj&A_ z$&b`mWS4!jwRHT~=Mp8X|N2fh5k|YiSJSIL{G`a-@d16Gj}c=nYl&p>&e9>@ZOhyf z$yX+S-}a47kM7I@xIdlt0BUUsaY7sjf&QMuYiN}c%_-e!38INmLW01ud?3^{QFNtr zW|HVa>H1^=P2xc4P>PsM>1dD1f5>anU1_4X7>dbE^SAa1e;R12<)k9N7g`8SSqmdw z(gJP#iDwkiis^3$5=f*)G^RW>)+hEPVc4N_vc~t*@9j->+*D`RUY(pLKE}BB<%uT%_nd}e9LP|AmoKiPVKftW(r~_Q zE_zbhu%+mORA18y!#}7WYb7@0?aI~yEEg(iEhf>ozjY9c8!g?n)#bYgQZD=eIg~_8 zYdEzlKM1|pQG5z*Gjv~9@jJL*FFFU!9|-L_M?55C`L599USdCWccCqgqr0Ak0_>@; zErfK0CR`}G5r0}3N){3Kdk}L;wgPAC?tMge)V!e&f3T{LXoa_3=IwMJF$15^I9K#& zhtD(2=ZR6DleBQ#$Ix7&Jr9~*COe3 zo&e+PE6x+=Az5{vxC#9<=m$zVsCV|`5B}Lt3+x4Qy zv9ulj{0+Tmh`7|Vlz9uv7u1Q+--ie<x%MpD;ilc8z!>p~A{zYpYT!BZFxPAgA_R|hM6&y!?lxX@l*J$E zY2(E;vg9NE>3DIWEc-||zeenl^FG$r1hG+;f23cYATE`MKMG|{6ggIEWa#rg4t1Xl z%g(d*Yez0%oT0{3#obbteXO6IE}F<4d-TWCMLV^2-&UP6LtM~(6Y7H4_9ZeJcbK<# zT>Q4jycJ7+JM6q!{C4W=t)bEx;%CASOr^Td8BU;j4r;e1h(zB#f$j72hdp}0@X(_btU1;oAJ8L9xXx=OX!oAbt@n%i0&BKj{($HrH!Ti*@_?8}O^seGMu50qUMxD%>xm@* z`k?OhAguC(I!BAA#fs2d8dkYjpr3t6v`Ia-`VB+d$5!jZ4~Y%{VD!TxOFX38JuF%~ zZ*?9Lplc|gP*w1-!#oJzLwdo(qQ5!?LjUAp(MBxMiOWQnI(Rp2?!7DKK~GyL0($l` zF#(|MUnbV!gUS`6rarz>r0DgJ@CcEgrPr+y-Sm~qMPcgta1-nA((9Is8vzl2(rtwp z1t9tPIkXXO>a)o6dUUeEFiY~S9q0vBJ2uZ!zxJ1l8v4q$B3mDL9NvM2 z`k#+OX3x`|o`5i&r*}SqHXhOko)8o9cHt@r#wGd|lRUKwnfK_-)uNGHAqW@wddzA_ zP(~CZWT5_KwWw#U5PqdwtPnXVW(2~wMCicdB9I(;*F{f?o>>cCb--Nwe&j)Kep2*8 zKfgXHnkAqmmz}SFT`5}VosS5&zHCiQhe6N!?;OF02VJmM3{7Q1@Q~#`Pd~6$w39&F z1y7)X%C#aZjZ5<#gf7t;Pl;E=3LbYl7exqXi9Y$1=ws@4iPSHAS`6s$>w6BgmHXl! zB1Pe$btGz>^R0gEX_1q?hovm#WEI&kD_yCB=;g-#$Kos!G0I%4QK)@^8L%^#D@X7$M z2>6Ky0sMla47{#;1PV8q#XcD4Y$+!dR&EFu27SjuLl23Ok`#kyj)*VhGEq7vzb_?g z^6S@G2DXOt!Y9(ncCNz6jH#twXWn}EXTQ%2ro+qc85oT*oKk2M} zIeL0OImcPLDzJ39VIvzng#7*GNoX+a#MFnnsf^IL3#HeMb#>-2*$g-dE&q$$FTD4? zyVYgafEw4f$d{n!50|Y8;#Y@bLXYX+hs)f!8u=q+qm)F{hoi~mdrV(4Lbk2{I6N4} zwZa~kw)VC%v|20N>Z%by5nA0oLO$w^Et+wuY+f%B#+nWI$-5M7_`?UFLzl{)312;j z=CbtnZzlR7s?xS4*3#`q%0?nV4<9LWsp&;WrL99FWsahcJ{~ErNO_82sOMK0)`d_& z^zh51kE(uf4V?DR&USnByvyWpf0d)b59NdmCsml$SvJD#`-|+ap3|o3D`ovCxaNj3+)K#)Oy6Sb6Yz?>Zl&df~znAIY4U8YBts_?fx)?0vkClDXs^)=6K;Jx84iaza zx5mnjX*;OnTIdlpg4w)%0;ZsRytH)w)iN{E)R3#?z%+-PqpNxu_t1-?kdL|zb;3BA zDYogl<79`lAKpV3HO}b5>$KiUzcNmC%s(c1*pPOxI|^MsdM|WEy?~3b>OQ7xjh6-D zOFeizKnl}g9Q0L9Ti3`z^0P8M^ctZ2aed1*GB+(u0B8B=@oFlx1VuhOLH2GFi^;GT z?X0;vcOvF)t{yQ_HU>r9MsEqa_mA#6$-ta2SQ}F$o9h#krCTrh(e2aOMY5iE?*`xu zmN}>avtk#SX+_QMxr<*ehd&mqka$VGGkN;uBH1tPd8$$eUt_}ppZo5Y4Rot(Wdp)^ zV1{fS?@-m6k*Ztom$h_dv1ANRzeRRVB}eZ?USaQrRQ67ijnclNFR~+F zjF~QT_2rWcWzU=>FUp8iC{gI0D(bCsAs4=zB%5cS9aXI+qw!PJIE_0B^4liMUeS=( zO`H1)YGp-gG0>xnWoo2W(G=M*?V;FO0JM3e!cS9VJNcy0?*-uwiK_^7wQiQ=gFN&@ zz?3K=Np@mVQfb*|_TD&ytK0kF-FSw2&GxO)ho;Il)u6YrLS23SG?|wcndGR!E}JIP zBT(+8T5*$!!8T4t6RCc9e);v=64Y&-b)0zCm`8PYb>Cdg<4n-5{HwIWZfp9?|~U5Z&wa<+C9Lj_EsQ%g#i5 zJazZH8b7{VeR{URe#(t<3+nH1En~vwSWst`KC9tJ~Z!Ye4dOZjsIE#WD#Rsjzrs31V7rooQqX1jb)7 zLNp>GMpR(-FV_2S1{oc_Mb;pi`u!H!rO|MW+Gq5poPtey7T8Ke-hBjo`mE6Jn3CV-%a-(6iv@BlD&Dt1UQtyiYoR;`nKT8;!oqaZLU{r3 z`u0K@Ko>_B%7QAf>Wc`}1PD|D9vuFx?!8FPYymH}!h#9IbTOr{N3n47`%+~`gg9vg z&+0E1$==@Qgx}*$_N1^?qFdZ2Tat<%8hM|rBXX#)FKx=F)4rr2hnxM#7T`b2SEd)0 z$XtlU^(C?aWZiouvLLOD%3_2?TUx()%lKU?tBLQ1+%N0lyGi%U9DH}r{a6>{);?gN zDdgRe`>}FIU^aXMj)+}&^t}(rTg5(|RLZkpm$G(#YbmzR;f7vQDz6g;*#X^iiF`(E z2pwA@rKlApYBJ2`E9>NzmR~17MOq)rH4s#$d!?|S+MpAcLW6%ftPidfq|u%DTGnIB z$7qp`Fa%v>>MMpN)YmU9m49K2C+#75pzt`>#a6DBB9IQ0+|PTDC(KT2x}9S7;oFh( z14Xt|AZ&Dmtac_xcY0WkhYj+`!x-#=&_@qTMW+9!%YcFddiW!*qiJaGN_iP=yOcaB>*yh?V3?qnRUp&@ z53ZJDDZGYgz*AHAUL|w%yw$Q7D(pZJl9o?$f={a|Hq;fXQL)Y%su&uv2I2uVZ(S?l zQq~*(Dzo*kYvuWP9`F=rJ@*tsvJU8?r@5)=&jHGBo(2mX(Cyc8$@lBzwg?yxYX38U zbJu#=mqVwL_3dl%MZ0IX$=jZh<2W9PAbwEjeIZ#}ThGeAXl>xL@(m>3=feHa06uz7 zK7wRMnfxn~E*m7dS4ua?tw{dzynGKy-bQ&flDjuDwBMWL;urYs?>*jD)j-I_G@*HaO z8Vo~fDAjIcI+*r4cTo1a98R9!l-*D~{C~ql^(yCr-dlm;#pM!#Pa4m|A=s8~m1}6A zDR!W0pclL$XQRqnZ^+9~rQw@$5(uE=O%Nk;Pi~X1BLM*r9n{`VN$A$?5F~g-*EMz7 zTe1+}{rxTZC9+Y&)(^t|7owQ*H%KfWXXg|g%CO4{al<~=z)k+HVJWk%KE zeaO`Vq3Q2SH+6Bt-?(1EPWb}fj_%}P^r?`m%vbL@U)B16zS8)rrv7S|Ow`jpkloMd zd&(|ZU+*zh(Q}S&zYD@=g+~5m2ACXukh4O0A0i8I+_u|rEa1)2D?XCr_BV2lV!5^ApzI3qNzSFPoQw1E)I1cf z(TBfSa)^CMyAR1GwAlT6NZLZ{o`>ZCF247$>?V(I)*G-)xuM8|GvMn2k(~eyBS>-8sOYyIdEnZ%zzeMAn5bCuVd>1*RD`_A!{ z?f-{6OMmyBY)F2Z^rMhOD|E-B>;ag1G~!yjg4;iSR9*}Prtp~TO5UYgkFken?J@4c z@+a#r56K+rg1uCAzL$gfvkBkJ=FJ}$(2G;xJ!#7dIeaGUAfqJWEu=!M8=Jp3*a^2% zPiGvLlf!;Pr_zGsvKiTzik8o?-%taA_4PN$0mTnnv^c?|`L`G>U?>lqkkd0>BL7aX z2%(Z#(V;x}LZJzj5-|;%LS6nLmwTXQeJoUSBtoj3^v!GDa8ckCZ->rV6KW~d^D>8X zp{8-}dQ`FTk6#{H6Z+XwEfmPCNs`)*DecwSo#Te%7)niAvI@u#Q*^sz)mDCaM2}5Y zjnDfWF>;7ZaAMyOieTd3u%dDV9AZkLUR4RGjrPpR4P71 zj02okP+8De0!rbOLh*H2N&1L04|mq~ev2pWJng9_q8uTbQ}M64h} z0S9;`no9J$DBO+$3;e#r@W-TL7n{NgDWeEsi%EG(Pft}pVgYmn63`fI zRO|?FkRT$+D98~SSzFi!2oj{71CR>E2*!j6Dt$af1#-z)4j|r+A_BoEhz1OxXGCzI zp#=S5D|h#ymY+iwp<*eYpx$ZR975(I;D7^+1sHIXo$Mw%ISffk^^oY1Ue#EBenj7& zs@0@QDD|!Z!&?}Hjqs7U=ch3jh>VJ34>`?0!o>nNmpMl zj3hr#Vzv0lAS)j>f1c9|p7exV~{1$Oj`&vXWTFcsB7A84S7}5u2GsR=9l7VY`>F+-@|ECRXpnb zUhE{bPQ!VJ1bs!CVgY^sTq{#AO;f!*Rh92Z*59P59>k)7bTtt2E;Kn^CCX^4%IN|j zXf(ZgehrmV=dd)Ck1^Q5Hnz;jVt|N$y@qN)t?jE}$SW~Jv46a2hMJTf!8h&w*-84* z4AnTFP)@v?FFgT}2{<)CW*MlF0-wOF6m;ow`Aer2w{47Y20thsc*1UzAE8l(>d-wR zA0v_zqpy?ZV2U?v-}y$@$W%G%kz-qR+f0=u* z^@i%cTlrhmcQD1A?>2n{eK;XUmfWG+WvQC+-O0UohHlMLD=mtGX^^eXK^nR;TYYTR zS~cel0wgt)U;!Y&fPHw59#~&>N%+?%$Jeg(_BJ`e59}EE4dp^~*18Pjn=g;c7 z0W1~EbXh==U;X2NDnP&9JkMpqm8VQA|`SGppaBCF`vSaOY23%LB-Hex6)X{34sH0T$I zVQ7TKFHvu5r25h#db*Knlntd3L}o!|BEfRQzDg``&*~nHRR?|7ckVk8xRP?z-5E*Y zQTOFYhJ5dCuHQcD{u0k?kGUzz?Av2*M1O@)G7<5o`jzAEzaa6Qa4$jflSztP==V%{jmX@$i|B@?0=)`^OWvWX zt@A~;EE3yw|GIKgwdI@h;gdLC7fRrEy{Vq;rk|^a&Al_82YRd&q7G zvjeGUEK{pRa|j<5R$HPOvJace3^aGJDg3(Ib(?&7Q?*?K(YK(yYcqKVlFiNJMM%<{ z%b`fdG{>}Z(pB$m4u|er`gn8M4_O5*lO>YrMJ9uYU#hNlZjcipvv z^k{!uIT`s=+j0KclJ5FQdsG(f5E>~4(Y1Sa%{B)n5ZV9-#f!40_NM) z6`RL^@klp$P^j{6wuW}~fVJR!=r`=x$gpGGEs6P|w!L6GLBlPx6)067YO1D)L;8|@ zMLviP`RbLLMkFwLvw}O0@+N+qY78(WqW-t*#c2gzC3ZIfUEpZ55q8(x0|dHj;Yn z6`Vey3GEfaVGik63Q+5S{-i*)M6T6YHKn>OyQsNH=xiE?b!c~2MdmOvdg`CLDxBh? z=X#;7-Bh;Z!3RFZ%JR=1s!we=Kn3&zv_)$r2NP9bP@y5`s85A_^NUc6Ug~`zKGy&0 zt%jw1BB0J6hK{mF54Y7b;#2J|RD;B4dT61#V$hpkVDb4;@d=GT^IVLOa*of9JUHrx z?{odHLNx+#U(`np7KcMC`>3}hY^(|Asf)!kq0Q&1gE-irpBSJnLGtqeAPu2B162~? zR0%CA{RgXyu*NJKth&?dCl@H3lL)oEP$gM%tI!1(EAq`VOsj35c zF+QEDF0b*zyC}+Xijd6HftyvPes!u!PNi4ab?ghDJWY-Fe0sbb2D;raAUx3LZd0w5 z@-5ZA>1v*=cu+q)T|JJ-(sO2jM<3S5W~jAL4wuY?3GplTNoJ}ZDW}L=h$emi(oJWn zR=KfCo3nlAdjz_!U3NS)eU=(W1o_Ez>N6qshn~MdbtK|BG+RCS{}``)BoGpq&n=MA zqdhmN@l|-uCv7@-lfml?H>u0LUlLwxVYpnBd$VdrDDQu>xR&=X^czUX(A@Q}0zx#3TB_d(|A2R4h`Bbg%hXRQQX0ecyc5o;L=-tOLAL z_5F)gjy^OWCX7>|+X6ImNRL{;%hD|iNKEPn7pU<0Vz;NhJ~@wbx$)Cf@e!S~P+f-J zXD>wWOZB4*Vg5M1CjtaC*m9A|;Umm$I>Ov9vL>%gFh`j6*hMOQ9(f<6p#V=kut<>) z8vU$6GW$MtE0TZSr{GSf@#pLLCFp#qUR#1*=jxp$5MW#~nxzt=QX%l+rh-(u4|{>w zO(WT;?|A_0^IU!W0jv^_=+>p`O0==CRQu^A?}>7>V$52P+e|Liqot9yH;6fEomvY)@G?X7tPFC3f*U}{_9fpuvi)z z{gArdh}1CfIHjN~A68$Z&WFp?{4+qD{D>+=Gh(?~isa$tID{OJ?7TCPJ#>ZQL)d!S za@7pdW#tN}7x;eIN(>5n1S?g2BBGT%sXwe#o6-GqkE#BU`llXKIP>+0Zt(Uk{qD8#Q_em(-K2Unttaw)dTVWiDg)7-TJCBko0%@`!ZF8w-FnF&t$DP zsAlQO=47rYaFM&rt#@uv&suK#$Y1sC&#SvpIe8-~OZr$<)mD3mAUz{WJBfbYGGO=kss2(dd9_&RXkRz1b41PB` z8DQhVkwxxirzt$o!a+`IY9X3B4^1I#8BL)XYA&iNoIfTjc_@ry59hLDbU+!c_B6HP{qDiK$l0BXO>hf*K)&lJx~IsvZ})ueJRb0#NdI z(>MpfZOdauCH!*_sF&xZ!~Mu5C#8YK?=?6lz}-07NSN?C;JfwS7gfguK#MY6>m_w= z8)_RUUW#5NomKUvngAp6sxam1O${U1O7?BS1H8QbXY!dT&$2U)Cg4_hpqJk|V39 zuC$Ws>OQZi-tz4i_1stZyOY1VJL=QF<8TFnNnbTCP593yv9oRGt5~DKHlEF@4D0BY z%?ihpLld@;+4j8-y$0vg2mAH!uc=YA%#}V?;Mc{k0}j|Wh z++|RfNY^yz+b7Eop_Pvzrb!1EfMG8FMQsz6y3VfqV`t7TR0KYMJyS=K3M&SsEJm8`g{9DX1h3AWcm7 zvYYE?>L$6nU@&|=U8U50R)Omm%J&qwPE(rN*>xx7XB4>RQ<_rXx(}%hKu7{el7<)# zC6#Xb`=84xSeJ_-6cJvHP9Yc}4Ry+Cl@hFUcUCk!E+C1BvEd(fK5&UbSJTc8d`Rt; zha2#remPcoA63lbs*jUIOdsq;ijA9Qs5{J0Vc9zpNWkRz=*>5@USDrld+smgu7I?? z0n5`3f&pDC7NiuJn_AS$Mf{9`i8e0aqC)8tmeopseOm2o`6EeVxJoK1%_xwkC{0IH z5FrNhR>BBcljkjvOP73MO%0YA6sJZ|{5;jLx{ESOf#P>5tyAFINNMc?SBTOYon5a| zTC2eICZ#nCTyG(zA>$Wq;wJVDmDs^jV z6{b5h$&&{f(!LH>?T+mLdrCJKPg^l?97i6-%66ium5pL1k4kO-&C1LvR%lt;IQB*$ zVx0@mxWIdz%QjqFKNAM`+Zy88g%hgQpo8Y%juw0*J05h)!d>GfZ?qaAJhy zXljW$7`f8$5$Aa+FE@M_3zH@s;}sYwo=Kgd%4PbvWj!1G1_D9Zn=GClB4qn8=WIca zi+6VzQ6CcTrWd$Ap%gxZ3iv%L__>)X!|MGxKij*Mfo>PA^QXmhZz|*qQW_ME0x@qS zLr99{F$%H23GzmG98b$SN`d}TN`WFxDW+u^rH~v?P?}ueT0<%Bpy6qG052>K&~VkX z>>^G;(E08~C z(*yQ9nCY0o!`!1cBwF=bV}ZcA@xk6z7(dC201i4u>YsuPkNxJiM5{?KQa2lQffW2g z+WXp@G3KT8<<^*!l8Q(cd8hgbU?GwY>KTyA}57Ar9>4=|q={5=5t2S^B*s%iH-uie+c59)7b3!etD??IW*Y zVlz!~l&r}$Xr?g{rhFdn5{gVjFRY*UPPVeVU}BR)Q#v`5YG)I|$D?8Tc%fTY3R+YAK`@lx$S-8)lPUb^m_Vx`qKKoq)Y zi!wZHGDRqECisV)--kYFX$|0PKpb|RQySqBL$~MU0n|jF{NcDeM-4l8wsE6tOf7Zp zPrYTBw~OZ&Uet(VIUcZ_Ppvb9F&oo)DwKqQ;JkdwYa5#f6*+p1tHl*@H&)DYSgxmg ztjs~w8H?wL0ZHQ5u^bt3Br#a&_7fkl#9+2SgLK~#%V}b;Q+j`@mB|_yDMQqTG|~Zh zqbE|qY`CTHYZwSE`%VJ=`3Rg0pb!#CU_EgK(wHqoAjMf%2*|iWRX?VLB0bY%)%c%} zs;v>5XB|~V+^Bxg8D1+7;cT6}R`b@h1j59{#a&g)qERi8SCf}85~8fPc#Cw!N~?A{ zYa~$UOlhUw=(YL;A@RvNPDfqSW>~RfY(O5TIjuPJM~xEhyhV8#k@h1iCRWI@@Ztk1 zB&`(_Zk9x-|7@cIn)7 zYnAs~+?f;Z`CI+BbZY{cDn6?PG;}mtqo->=R!CY`|4#2vv3{ZyYxysfVgbIB%CX+w zO=);7{{e+z6)Vorz|h&yK+|k!py}!ijULoCTN-E^Dpp1q$^x`ZypdjI{lHL2cdVcO z#3JQ7w}v$$X&VlceJ4Ce^sP0l`a#x3&=%_=P$0s($fH0VX+*4(U|g(|WOj2sNBNG1 z#CnaFCz-Sqpuy<=S&r_X4aFbKNg%T(if&jFMK`R8VvKEHclu$K6#cMDihg!dzG<5j z({Pt%dSC`D2_i7)LsgapG%}+PQA+v{rLZJev4bVSiXAKoR^(twd_(21Bn}~EyfM+j zmlU-Y=dquGrHj#9p&S@X0vE`6aXrjex>u%ECwPX|$B_I#Q~H8uXnlXI^f@XHn~{PU zm!tw{2i_@XfJUMw7`+V(9QcKGTilTs*4y|UMp0T}(1>czfFQ|;TKjq=k+m4Ogg*rAaO=T5$0SOCJOnG*gWY{?~8 zHA`)jktOBELeF7?2znr`o#Y&rq)2C+fyPWvRjV84V}S}^1qfJ3_TlnFkVm#rq;d5J zE7HWvh1s2<_MsV)b!%UOzLm|2G!ZX`2c+i1w-HgKA(<3OKk5d*s1>D1qv~$AnU4y0 ztRCIX;GfW5{O1*E8lBXhT2{8_qxD|WijmUThlK7yK-3|w>-16J=I zR3MkkUP|GTDdCh|G7r$V<$7x^tmu_6qskM2ZWdGUu^C)oAtG^3c$blNjX1mRf2WBnF%kpQ0R}-pv%2_I$)eP-rMHfTlV}%L=IJdt>q5rNqd5*|tx*$s`;%JhN z42Mu)8J^(Ca0myM;SgRd!%g=j!Kr^*{;(8y!;nI2<9Um6KJ7?Ik9eOP`MbZiHKHfU z-*1KIn}{2N*Dy28s4=+A7(Dwq#8^iBTsPFQ&bLaXXE9AxO})2{HIOAxZHIzggf#FQ z$wyD5JvbhWKt{7 ztQ+MT`Sv@^cwL%t_8dTg&c7Cp6Wk(;j2#Ji@>*LB@-_#$;Ah14#{lmMqI+z=q`=u> z`BSi~kwUu~l-<|c$De`@u`WG~cp==_h>$4!OK~(q6e?W)`ku1}EGeQs6 zle_$?6Pzt`*xmeILQyB_qD)$8=H&T&|KL8#;GgPYA2HtPx}YZD=yd@k3D4^ekq~8& z7sQa9XD*1vK@NFE^yxec=cO80*9YGeZ;Gw_&qa^GV_$E%@Vr4Hn3VW8F}LJRqd8_} zy_@R|Y&epPqCGv8FWyM7aqqZ0ECxy)F~CFtF%a>WEm?)GSqv~yFh6e#CXnG3MHD!l z5g`ifRHPG8Br{PYgD8@TC@8xxw(*k6A>CT-BH#Zt;1w8IBT{e&&aBeECbZ+e{bIX8|yBgNU|=d$5S37UXb^i zp{6iTy%(^0)!niVb668MU;dM385>cgDq|Z$L91zJ)y;T}%5wlPyfcpLY-k?5@0Hll zCi9SWjIfK|M<-|eK4Tz9NnZH#SJ52}S&??)oJ7^OhLiL5JM@_sXK?hg7g;1^dh$|?NZ#FUB1tUGq;C`c_EB29 zKz>VUtpa(NQY`bwkTR5X%eiryaAD3{7{gL9b@U9fuIaWl&SR2WPty8O+ zy4q=NWh5UKL2Xl=uz+^qFk@<3`eHdAeOB4Kc z{8fFH>lKZy+*(vZa*EUx11^5c^#_fuY_g-V)MP-iczyd38W709nvQ*%3M;QBtLubq z)+K1zRf-WaIOjur1K|-R$8iM_NFYkbbGL~#T*w69Pv9u}qY5-fn6se0z&zKYZtcbV zLTey`Yq9Y@3Ag2%=@T<>N3OC@TSWn{zgECfy|Lj>ReT3I{1gf!hDcRN@_fQu_FPV< z=(q{rlLA&q8AM?QAEwaseze8?HL#h()495fMwEQiEd4i5Alfxq<>Xm!+dD4LGYw|-x8i3 z%(O;!!0%i#gRKt+DvbIFS{z_;|MmZc^Q&ciW}ggZ{LDds zhCl%46JZhO*97Nhfb+35$8$baiQ;@JFA56}-;?@ebF2ROm|#XMCIt*mQ?rk^h4FBh zAHd)whVtbLEP?P)W`P&a%Gdq>3%>Sv-w+6MZJK8CE{0T>0oUdAsv>db+m2islggV*bahr;)be(*r3E^{~XsIi#= znR$+m4xyp$Mx2tP`a#UlBbhl^XrRRf5XeNz1D0aJE5qZ z%Vok?FbN1_2|}Zb+hj?EuMc0*z70ol!H-3ID zmPS-WISh_r0`@r`rC@ujNh?;9s~?4Pw_3b_YZwbQ`X!u_W)<6ZgN`5%wjs}sDCZn< zd>8p=>jDw7fn-mum@(9cUnVP+NXm0izt+JT*7{pk<%n}>&ml@`BOcKS(l!Vrz$$d_ zj#kauCJeCn5$Nl2a+i@#NR!1kYDCYz z=`pG=2yXl{fsasv2ySD<+|PQQ2VCW|5p!#x>QhF%r-(1>`(IBsNo91}rw z&~i&#QUnVvw{aRwdov(fZZAU>CS~R#=!U%W*)Y|gZNm=@CzT)Jr8rQJ;Eh0Mt5I#z zzMxgthQz{-8Fu42F5#5Eyt7qLoYJ#9TY-FaCrv%qbKB zKyG%2$3bzlAC?kfY8YMQbA>A&=5j37Ad6{F6Pyf6I~%65sxU?IK6FXNKqfIp9>Ebe z-2)AF0$C*55w-<9kf~-W!qV{gVc0tZFV~NDu^P0eJ-w>UgCRhCb$bWVXwa2i;7W?@ z6#xcwP!Y9Pz`76i0?pWYFAy7M0+R`3{ikR^+u_j?N8=h09-5xh)ynEptn3Fr1?!Mu z@W-f(BDydt(_&GnPohOpt`oXh{Xq^FcC&H|(7tn--ygOwd&f=`387lNdmWYu;USdk zce_~u^zuED;K_KZu;Y}}Y6*jwX{jI`gN_Q2IfWB1iLs1TJzvpQ5WZr*!cfCDXE5198(o z>*5|(lNyG~km-90ODCz4p&nKnTvBzYhc&4F)3ls+0Ub6|qw%y4hqDSc$li zs^@(`MxGYHzyK5LBW{T#f^RLZu|sNO2C)9<20g7d5I4j-G^+L3VIidBQw%O4kb->P zNu$E2_4Pfib{Op1o}kTb`eaY58A22P6t#dZ>cz}M^a|q0+c>(Yjw}#}KfyrQl(Chd zAL?aYkp*;-7>kU9R7;)G+iILh^Ox@1q6>OkjR;ofBHllw8MMTV;!rR7rRlH^I*B8| zxG?myut`L4BmzF1eo55(dRyJV+x2W~rU{%x0lD33(q2bRe*<%q5p)*#-Ioi`3YMK~ zBiloX{u<8K&suE#WZLT@TR(I+sM+H3JdEYq*@~TRq$w?7w5UWPEociS7~X?H&@m>P z!f(wMOtCx9;(fU^xCa3iWW)ft+QM5fI5OssY{5`=UvCrMg29S-Gs>#lfoYnGohvuu zFh_dHu>bMyH(WlwpwMb~X^h2(SSpSc^Ez<`WP6ZBh`nnzilAk4oPp#hiXYsb7g$4K zG5@36`!Vm0`jdGVLnrmIhM)fo5D3XX$m=L#7=$^jgo(w0TVC67@`@3IGk?g9P?8UO zj>vy6#%0T=E<<0e1QXkEP z!zkx*fzy!ZsMB#Y7Pqh%(hR~07IBkN!_{iOSfp5M`>UZ3+-l{yk4TAphJVnbbEj{Z zMNE&e9S;429#^6Z+^m`$0J(+7Bx41491~Ixx?PHuRehW@?+XE$06DImIR1;<7cw{@ z)gORFRzAamWD%rz<^$9ez?lx~pf(=$s=ii6H=6q>0wD1I&#$6VE95keTE?k1{K0?J^Q0+N_Ay zv@a!qAh_{Ib!mf^w4FG-!NQ1xqT0^G-691-Na1lJErJL}#c)l4C{aFK5QVp6j|CcY zB=7=ABbPEqnSnjPs>D^48+IsjF8lr|7bx(MN=U5aPc#+`Yk*)3G6tc=5IGUswEC6s zUp;z%J_7WTCpdy$El#V<%l^=4!uCp(a}9_+!?}i#Q9>$d`_s_4<6GnKg>5>czcuBY zMG!&Qdbj7Z)57x(lYqm}aYP%ZTLD&f0M>|QVbTuw_s4AiIiKIuDzKO&;q*xdNfQMT z?AsE&F!3H^sEm^w_01eb6miPO-imGN04>4~u8{HciHI^SjNt)?_9j(;bjwnEj%unIfolTiDk1j;>(`SKXA0yvJ(v*57BkYyTmTz(5S-bwt~xQqhUpj_CO-$74oBaFD5^V`@;F*356+^gINN>gR+PbX@xF?Ldv_V#C#Ejl*Ln! zWgX$_R8^d2gzHG68udPW;0f9qtEkLFY?m@daLP#0eh_*iZvb&|JyO4&XNnoc-?DHU zP34qh+Euy(mcBI0suv_3FqQ_Y_Kwb+6ks%s%{UItBA+9XC%oq{Ry_;M8@5-;|8Wnj zJGej~RGrYHOJI!nu~7tFg&4$0qh54Aoy~blFa}hC>f``VOFT(!U_CA_Hhhv*j~Z+> zabvEbY2P~-J4^8B;v*v;X@($QS=>6ACg7Gc;qXOfi3#|p96DY~YrHd|kN`NN#1lF) zYC@eo1&06rqu?T+iOVw*IcQe3Kb+9N0bOJ;@I=DqNTC_Rgp#y2SV7=(98!2aX5SX9 zpJ>X95Dc$wKE3J!Dd%sW8!HWaLmF z5j0z(0R$4Ik$9r)zTQS43XU$Djxxkr2RXVdElM;sPPOm+wH)+d=Ru>o6`pGI))sHK zu*f|_R>WDVaSN`IP7>C8jC3*XA^NlS8b`l&atyoi-FvW*s_MwK6wRU=D4MV?-t{$i%u} zoetvw5+?psH#(2@%DK<<%Hd#Rc%6nG6keyz3aGaYwF>apu6`M6<+jCXZ{Hd->v)8e z^Mq&pa*PC_@EDDp1)B#1N;9wfUj%j>hI#dapTmeS8eR+{=u%-emuML!@kLy3^ZiJUuJr4M%(_H}lkk?=^k_aAXl_1d+wMr640S90NE{QtHV1zGlXG+4V4{6uN zo&zpU4zteTT~gp8$&B78Q(;`tTQ#^aJJ!|V0=#4l z8agV9!W?}B!lk$uDyag25JyK;DlmogY>t|s8jS{Dc%u%d@aW+a(F-oI>a?sN(j&U0 z^#KU=R>95_=&xCop(`%2>W&XnbxLf^2%jK9L*Y3DDA8s&hzqycnSmSm#4@jnf5P8Y zk{$-*b--|V!W{64hzxuYV4P79&Ut04QqQQw!8w)0VHPC>g_)R0YlK+FxhV;w9D#aa zVL>>jk7997u5!X20Z*8OA&3A02pMI3*0TpG~*! zhV9KaVZ4KsOsg>>gwS6Wh5iz~ZiH1AhhTXA38w~@sv$FJu}CsN#gqU|#M4v~g}@4Y zgA!6U2!^;4huf(n8iDi?NRYXM0S|Y?gbJ`Lfj)XJ!E*(k*f@^xHii1&%pH z1)ljT2~W34+&$82Ib=CjRik2&VaF=gGli#Iw^300yftuY()#Nmt&3{*^?LmtXkAdh zu0Zt+@E)#sa!uj|*ux93y3D$OILwa-0^D&47>RXE1OeT7iR+L^Fd&o4oyVy1a@^qc zhZXk4R*-au7j2hC_0-Gj^7x=J2}W307q!juo+qOeqGE(Uo@tb7yW<%?E;LW38(k|O z*T9d|0NsRu_929-wJ%9|bM%L>Os; z`z7jfWCeq*QOvy+yl>7~24Qw|jK;Y{vA|Vaj7G7t<04S1WzML+qL~to z4U!b5<2H`-2UAsTWg?96myk*0aB(I1SqvIbp978%{cOSTC1@<7<=3?8K@W}*t= ztqdQW8f@YjGkr&b@vOm3oUZ*7tU6hCbr#uk=UcUgK@~D=4Bgssmq1FJlWcUR?Oq(W zfxF~h*pi+@Nu(C)daoC?9K7HJugWSxq20DGbn61px#6fSYkdYa~%vS?)mPw*Q54_rH$?jT2+L;v!{ve0u$=#LhK&x6y1C(ud!3Ya~WVhlQ5NmHrXQHTo-O{uarMY7Sf1 z@%xZ41dhK@=?ws@Yvv!kC~7^FYAL)Xtw%F7^1Cb`X< zsbCZ!eF$djn2QQ_D4JBWC-g1nlt<<4<(y4bIW*g_1m!SH9>8Gffphb$-Qw^fHlWQ^ zCovmw9= zf3r&U21ZC=Kz${R!LXZAUnvBO6nww=~4d9xi3R8OlLj75QPy@ zae4p?ZX=>lDOOZc;#B`K2rxKRtlpi*~P>u4Fids7#R9S4)DcOv09wCaQ9}b!tionTW z?|glDf|XluK5J`|v^6|J!eO)6tVb7V|3s+Wbo+iXRx12K-4h>|gR1Eo2delO+`h=i z=2+oj{P~@#1=o8i_}Mmhj5|Kz^Q&|FSMT)?JCoRdP(epqNC_m42%AgfNUMO`D`0}c zSTe+I6oDDZ<>~AJqQ)6plkG`@VQUg12x5<;y=gNE(}(_|Y?3U#^MX9uQFB|}$pc>! z$S&L`7!Y*CHXFRezBM2hg!2vY&>BzjyK29N7>0=6pXR-QifQ{l1$&Sz6Im}9M7T>c zQQ$P8C5i-@wDq1Mc=-)UIKqUhXW|TJWLK4hGOHC#ioAP6 zBJ3Kt!G8nabl|@qamHh?`fSd{-zkQ^10osXLP(7vh)8D zyvuo5K!Gk)=Ml8T533?M&R0Qu{rgU(GhjPAXqW^ntn`OSNNPiNg&*-(sZ1~n?xS;J zS9haJ$DD&C(~@MLE+F92_6A5HvVwh@+TFj1i4Od|dD06UvgeZ^!erDavIzYZy-w4_IU z0{|-^4p|vFrF%}XY7cY-SU8H8idh|{e8?{+ALNc8BXB#eQa>9J>K`Xt{^r#e`wXmS z_CM%9?LT@raj@u>Qy};OfPQm|mEWui5*#8ksH)1cGpn+6)>P-a&Qq;6mykX{`xO9| zfQyp)R06jfc{Clc9bw1>2WfTo_=0l1d8$Q!q&9Dw)u=v;L%L4a?N7tsHe`K-50{Ww zDc4s|vsw=|Di2J>T?6P8hGj<#giwGrw%R4lgk150hME=7Tq)|YWQNrl@!EhI+Dzm+ z7}91S9B?@ZSENOYm2&8k5Nb4|=_>N(hz2TE`(ubPBan+N^_YCEMbcd=H zwm2!Q8=ft2>Ev}*=DB|&niskRLFdF%@w_8&$>YJ^bxj0Q;V%gEzuxLk+(vpc99gK0 z7sstjmKNTib41*~cs&ny-&3Pi^)TUf*!^2=1=_m~yMLVuGRpm%=rpBk-C#A(!V3XI zR21n%54*u?B`WnDH^7AW#9)(R1G*D7E7%tYiATZJVUvP4EU4Wxqj9%xGut{>ROnf=E&m|Wed$jg5Ya-20PP7xXE0vKHYRhc zf<2Z1mHHusItCBjv4poM>H5`d90?^K2z%r(EHkDk|0Mv32-)Z}EdQPVvO4$WaPnWG z-!u99zhrM(k8o9!uDlUZL^LoGQLG~o>Z1%UmIIE6iZi&3LyspLwcUQ;*2jM5>YtXFcrqABfLREYOsfY)T@tHR z+zfq&E)R>7J2=c(?Nws94Jhh*O}^ZY#g6%V13&9_x4@KSTxLb#@~h|I3(Y!1+{fdR zzyK5A7c?1%%NTM0$28C}EUC^a=gfBuwpna8Y}FWie3a` zJ^LwVco1p%2J1wxeksw0Y1mm#G9}hs-s9h3C7I$AD7q>ZE0|4E%og2d)gBh5L?R@g zRB&>dr2^)&FFlXF2%>orKe)@;J!eQ>dOf}kC^80Khw4><9ai6Bfj`?(s3Acs+w069 zSf3!hK4`U*3*XjH1+Bt!UVM8iEswbn=&dl9ec`}~h#nb(T>Ggq07}<}#)4LTTzmM? zCYqyG{tasRuT?-88q~r_2b}m@6|~7~V9#qoZ!PF=RY-f6fthZq#A)6@6w;#}>w`p@ z&3vo$=fzfwD^8lPaA&%wIn9RQKqDOa&q+IZEpY(lae*nL!(WaNj>E(@!UP>+jm1Rm z=t-j1z?hK(vwvoS98%hQyH(JM*vJVE{|~{4n-BoPob5}bQ4@!?z;5{+d|?htR$Lm^ z%>{Lo&Z!dSvF7sY2N8d(S(7>Q(@18NXLf%ilUDq&6ZeQ|4z?kGd6Fv;zN4D^S0pp4 zx!d8ajW)3Oa~x%1X+a&DZGtAqXZXzoq2JXTURu-YSlO+ zK#+xXoLC~|2~frfYp8|9J5>xr0*9DAILE4$WUeyvmFeYktory1L7V4b=i~@+`aBMy zIHeEIu{ziLhjYupJleFf53gg%fWUuGlT_Vqrd6kxy$g9v_!yayuwkVt*7?U*pqbSN zoq*E}A5@+2;4Eht(b1k508LBW36E$U0tk$QA|=jDtM2|a3PDizqo9mnWNz(cc!hyO zL__F=>%$?NJ5liek@g<&Q50eS`0d@!?j9lGLP!A;xP%&NdZ8bv^lBFoLP+Qx6%`0b zmtF@1X;K9d6gcT9h%{*yP(Xr$21EtL1_=M}GkcTUgv0lJ|G(oCW_RY9nP;AP=9y=n zd1lt<{5%nlSc4GE6g*;CLXUIsh!b1%$nl6nTl7edFIK)4>`1;bW~9mCxP}Pt1%>_Lef?B*_MJFPUBP3oj)_3k#RdP)*5@AV_b$jPM4- zmMhWt7Bf%6{mm05sx3<6g19`pJBo_0v>7e1XsLXm27K&reLk zLh=Sa@)!s!T-X~MLYR?Z98)5`F(=j$0y7wD3A0kuI{Xv#>b+!xXiB1R%`SeG#;H>#1rt znMMmD3(EYXsqk44B~uD*FyVz7!+)NtmTeg*#U2Mw9yAl+q`;XAeqTFS2OEk8jcc0xE{W5OMb5g>)MaC!`k4;`zaln3#ldpap406wrT z2)R(w9Yy!}MZr1%D;>W+Lv0Hz>&;Ya;VOZiGu2gjzO8H62gK0&f7}Q+cfL=G2~=(a zdCZM(inQoM=EnEQJj9xPAgagk5{r1t3EaY+Z`$sLC?%qe$78rD3ur$aH|+Vvf=N@? zSijg1&Qy>yViu--S^$%sm>zhE*=lWZYzJ3mQXwZHfPA$;=+ecR6iZfLvlchL{2(^9 z%KNsuu^BI>GT3B%4h^UQmD99E%WHCIC_KPzacICNm`uazXjWfTA}2pG6Z>pXa#|8c zs8ANoFLd(M;?2Ns&W2B(uiJ{!-RHkhlcRmxxQQAT;~M5$zn|Ox+n2P;6>iZMwF8rFfJ~ctb5S)ahXgji z-$7Fd-egX`_ZeryT)wlFDFw3;x-r8)#M=$LuqrksP~tP>$77}NAaGZN|9C=kO@ z&Vp1YsS)XU4&i@9sV>^CwXD+$i#Mx9kNau_!wN4Ib7I6*&QKwRej%3I3L*A^!cNiXbz*8&paT?w_%Kv|{OMpZ2Bs?sK*sKHLS-vSdKf1Wi@ zy9pFb<}~jiHTm#C&UE~boGI2k4^k6^BX0slV!~7BtI<(H`l`4Tm9~Y=T}0Ew(|f)& zA{PHXoNu4w|IXCH#6x#;5#4dbgIGVHCW7gZ^or5diHa~fQ}*DjY;|yF5R)*!9Vl(k}BeGOt_lk1MM#KHx7r+C>R>!J}yc+9ETHI zq86H^Xlt71bG3CD$a>NcOurct{4~=yUZ9SWDH!_5AX82)P#X)|fG7f&PQ`|!NZkH~ za*2IlE`g>T+!tcf-)b6i8~LLP)fzGRCo!$UdqH&U4SFf*dx1{Kr!G`u%H42a9U!iN z6`DGpng_$63dbY9e<5zvxk2BgFKS;!F|f4?{|TTQi?98PjUKu;&T|nM6|T83U-+(B zFM5j{UB50ak;BJ<&XDZHHy^}m$27Rog>-_>hFdQM>x}PBb2HaCKIBdHY2~E%$eU_o zC2Eu2r?M?*zFl$VRl><*|#^PG!l?V|VNLekZubMpQ>2C_Z&DZb&TP zs}`$n1P2$Zb(8|{AB)ulL(li!4Yzrn>gH`$sqrBTM}sd&rNGC?TpCx7sxf@oDm7Hm zz3;D5E84AD;`r?~>PTyhn=e_b=HYYG71pU!tqBSCN$+v*d+H$m_&e%Z0MuHqPNldp z8}YH#AJ?m!LT=v2>_J<}MQb)9T=;N83D0=`5&334D%|*SA-0oV=sZg? za$sgU!uM`bdxz|yW|Jk)0AS$tPp4^~Px4)W~ee8P6MfwG5(9#<=bjGt$% z*yP5NJJeu8ulx>mNI(F>3yzNR%fkHlanR!S4z*7CS@x3YWU&^rk?{9`BO}(k_#y*u zwo}arK=fEX<7?H4`n+3rsxkC|`_Ff&qlyA<p1~KmD}AI!Dj`MqVk2+yv6@<(nWO*-Dog8L8YEE<5a`&)SfOoL%YXS;O&6@{ zw)=)g=l$5W7lXMD>OQ_-t!3x)_}%?#G7w8RfM6Q$aRB_H@#O~yKku;vSUB5Z<9Xo= zbsFz|P#xqdDp=eqU$zC@`|m*4xkMR%UGA=k7{i8=wd)%_|-yPAwix3QMD%mZ&A*`5;m3|aqzpX@0rC5MzUHV}&nU2C2K9VDpI<$S zz4QVec?@>gy*%xhTB9g`XdIkZ$5PNcrR3fO8U+<=2Os~LI_1BHeqoDqj;kk?e|g#o z^@T_n!AsDfE=@W@b<%smX}F1D{RuTqyGPp@QM}2gm<>vvl${&J>z-7rfoagg5ruM$ zBuYAe@1$C}#hC+wm~kLqD3u+G&eO;R)iR9#H;=shDVVV?zE_;PqWIENegrBURcT+} zQ^;lhG3`FB4#MI0S*O*q$~eCMw7S)a_PPWjy!Yqo?_hN=SY1(EMW+MF=HMcYPySM^ zQaIZ4zf^y+m;`GU!Q{!W)N>*GX)2-XYD5z zc)vQMmLutS^Q`((QR%4h7r$0%WcV5A7W`drbC%0r&YjCfsxV>K7#>Mt$k_{&AjD#wYB~30zUt| zT0P`vA^{!GEgXOGRyv_+PuOR@$)CCaO<^owdO^*`P^kN@8p+Fji)$gpb1fM)^jkG1 zywHG$V+lB)=)n2JcNX$h-{OY30-pb^+Klb6d$zpEt6x<6k+7M6QB8-iIet-10^=(A zmL7d3U(LXfo0YHT+0QNHr7x*VP{!s2TgwNOX99f0OsQqQ=l`DZEZzp<=WMQo$sj$=)0-+&`%oQr?CwF z?>#kGImmArd*xbQ%ntS)+94JOn%V(@wGSc3;Ks!Ri5-X7K%rOdm}4l(-b zxt%vMSSx-ZhSlYd+F3*Ufp>VfD3+j{;IpDwMZUfQi!>1t*?E|QgS?W?(uxr=S7+4MkpN(MO5nDBk1k4gXAd;0+HuA}l?8~AZod!7xiNy!^VqyGZ6pKI+e@3z1d6ppr zo3Id#<$d9UZsTsl9p!3_5%%Etgwdk-khBzi;4@Pnc58G{4W3ILTsKrQEXd8jEz4$5 z0|u58ZCz51rJ0S44h4)|s9X@Vrpje6&$=SDdwJGRcsZXc&kloLi=x>ADkC+9)dUf; zVgwOJ#IOrRiD2dSXnwH*3kMbcsKBzog-=&xRS}G;$OhXNoaQ$xvR-9qBhSD_9^8Kn zoP&VMv~45r?`Ewa!aj7f$BQu-bi2et274ivr4$=SOJiA_Oveb0=D)?V`XLr7;gQ#m zW0mdSFXmZsqC;oLv7gbx(UsUSlPpzO377+P{&Hoc&*N(=vtNPsf+{RYneRPXg>4{_ zHoO|UhFsaz*$!nsuMp2(CGxx(&qzl-9?yKDrwXrCgN=}bZb>|&MYA=zK}}W$!?|Nk z_9IcUUM-dhxiPGkDB#^%>?knEO`h~7WW2P6U$jW0=Lo9#2M@s3F% z%k$4^mHGK3mf(OTkDvO`QO1RNAlAHY2ph??7(R4FkL6D!v!jAN;!@aCq;b8P!YZR> zOH)`q6#GpIi=l4#CxvwpV9%zqI^p*|fiPh(4;ti0Q6biVIb|hZoXV<8#c@;$#Ml!4 zQ!1;6!Gzn*__ryntgj>wpOD6)MRBXrSdB8{>~8o_x$PryX@g^=TYGn;YX$#4jdcbB zjnh$(&by_vXK{n<-No8KWuv!7275_SUgyg*S>qCCU|#Y}g4N|Lzm~~rQypdNp@*07 zHuYG46tSZotArxHt;aejXL#NE>;>grKD|EZHSs9-G+<%MY5rsb_8KUCssZb4iEY|Y z#O`Ux+8{Bg5lc}tZ<9u>wSw}dHfAjm`&DC#<%oTr_iVz>w0ReHJM1)I15OAvA8v}f zf;;@tA=op)mlbNMQ=Hu$1dAp7LhPM<*%14W_YDvGO@WXa*^DhNgO)0u z0vlRN4_JrWTpPW$A7OC{bzH|sSq(IL#G`1t#@~AsECf=VeGGHinU2iGBOYUw1kD>f z##(5?ohg`SHD{5*KHnvk5P@$07!ztLaxQx?sT^P09L7GKZ)(nJV=3`%bM}ZRwMq+C zr^L}~w3C4Yh#K$Gg4HJk-fY1hQD*atEm&kjk`cI*saq_rcOVaBv_XhCxAF|U=xm(ZOLj!k@GW-8h0x!5cH(unS4`AR)vPwnU-Qe zG-}0$+b1h?ZoXfEf7OZ&LC>{p4PkbLuNQ$gxD5+YK)C3(EIx*g_61Wv1(|#7;@E@O zN-%&(_qHsd!fHZT;0EQ3kVcCX7#d5NYm7~8*&rH^aqVbyd#ANyh+jJBIaAHUJBZG|VI}!_s_c@>G=0?8nVZ#L9 z!vXoQ;o3*0dFQ;0xqHmJqbpladP8mPCYW_R{E=#oE-MMGu>fgCfk*Q#ujevP*jeD0W{*NL zHr}EU2EW`R4$%GqPp+3l4(>md>{` zD?aZw7{H<<{d2LKmLEP3$V*`#L;71EYBx94vCSvjUZj=?{_Y)++A)v~2#~#Y zY2mAgZ^l-}u=5SFJp)-v$a%6Xhof(?R�d2VpRx0f}$Gyw~Lkt&4ZKP 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 B26g}d diff --git a/substrate/srml/assets/src/lib.rs b/substrate/srml/assets/src/lib.rs index d92bf44495..bde551e886 100644 --- a/substrate/srml/assets/src/lib.rs +++ b/substrate/srml/assets/src/lib.rs @@ -69,16 +69,47 @@ type AssetId = u32; decl_module! { // Simple declaration of the `Module` type. Lets the macro know what its working on. pub struct Module for enum Call where origin: T::Origin { + fn deposit_event() = default; /// Issue a new class of fungible assets. There are, and will only ever be, `total` /// such assets and they'll all belong to the `origin` initially. It will have an /// identifier `AssetId` instance: this will be specified in the `Issued` event. - fn issue(origin, total: T::Balance) -> Result; + fn issue(origin, total: T::Balance) -> Result { + let origin = ensure_signed(origin)?; + + let id = Self::next_asset_id(); + >::mutate(|id| *id += 1); + + >::insert((id, origin.clone()), total); + + Self::deposit_event(RawEvent::Issued(id, origin, total)); + Ok(()) + } /// Move some assets from one holder to another. - fn transfer(origin, id: AssetId, target: T::AccountId, total: T::Balance) -> Result; + fn transfer(origin, id: AssetId, target: T::AccountId, amount: T::Balance) -> Result { + let origin = ensure_signed(origin)?; + let origin_account = (id, origin.clone()); + let origin_balance = >::get(&origin_account); + ensure!(origin_balance >= amount, "origin account balance must be greater than amount"); + + Self::deposit_event(RawEvent::Transfered(id, origin, target.clone(), amount)); + >::insert(origin_account, origin_balance - amount); + >::mutate((id, target), |balance| *balance += amount); + + Ok(()) + } /// Destroy any assets of `id` owned by `origin`. - fn destroy(origin, id: AssetId) -> Result; + fn destroy(origin, id: AssetId) -> Result { + let origin = ensure_signed(origin)?; + + let balance = >::take((id, origin.clone())); + ensure!(!balance.is_zero(), "origin balance should be non-zero"); + + Self::deposit_event(RawEvent::Destroyed(id, origin, balance)); + + Ok(()) + } } } @@ -107,57 +138,12 @@ decl_storage! { // The main implementation block for the module. impl Module { - /// Deposit one of this module's events. - // TODO: move into `decl_module` macro. - fn deposit_event(event: Event) { - >::deposit_event(::Event::from(event).into()); - } - // Public immutables /// Get the asset `id` balance of `who`. pub fn balance(id: AssetId, who: T::AccountId) -> T::Balance { >::get((id, who)) } - - // Implement Calls and add public immutables and private mutables. - - fn issue(origin: T::Origin, total: T::Balance) -> Result { - let origin = ensure_signed(origin)?; - - let id = Self::next_asset_id(); - >::mutate(|id| *id += 1); - - - >::insert((id, origin.clone()), total); - - Self::deposit_event(RawEvent::Issued(id, origin, total)); - Ok(()) - } - - fn transfer(origin: T::Origin, id: AssetId, target: T::AccountId, amount: T::Balance) -> Result { - let origin = ensure_signed(origin)?; - let origin_account = (id, origin.clone()); - let origin_balance = >::get(&origin_account); - ensure!(origin_balance >= amount, "origin account balance must be greater than amount"); - - Self::deposit_event(RawEvent::Transfered(id, origin, target.clone(), amount)); - >::insert(origin_account, origin_balance - amount); - >::mutate((id, target), |balance| *balance += amount); - - Ok(()) - } - - fn destroy(origin: T::Origin, id: AssetId) -> Result { - let origin = ensure_signed(origin)?; - - let balance = >::take((id, origin.clone())); - ensure!(!balance.is_zero(), "origin balance should be non-zero"); - - Self::deposit_event(RawEvent::Destroyed(id, origin, balance)); - - Ok(()) - } } #[cfg(test)] diff --git a/substrate/srml/balances/src/lib.rs b/substrate/srml/balances/src/lib.rs index f06990626e..83eb408132 100644 --- a/substrate/srml/balances/src/lib.rs +++ b/substrate/srml/balances/src/lib.rs @@ -125,8 +125,64 @@ pub trait Trait: system::Trait { decl_module! { pub struct Module for enum Call where origin: T::Origin { - fn transfer(origin, dest: RawAddress, value: ::Type) -> Result; - fn set_balance(who: RawAddress, free: ::Type, reserved: ::Type) -> Result; + fn deposit_event() = default; + + /// Transfer some liquid free balance to another staker. + pub fn transfer( + origin, + dest: RawAddress, + value: ::Type + ) -> Result { + let transactor = ensure_signed(origin)?; + + let dest = Self::lookup(dest)?; + let value = value.into(); + let from_balance = Self::free_balance(&transactor); + let to_balance = Self::free_balance(&dest); + let would_create = to_balance.is_zero(); + let fee = if would_create { Self::creation_fee() } else { Self::transfer_fee() }; + let liability = match value.checked_add(&fee) { + Some(l) => l, + None => return Err("got overflow after adding a fee to value"), + }; + + let new_from_balance = match from_balance.checked_sub(&liability) { + Some(b) => b, + None => return Err("balance too low to send value"), + }; + if would_create && value < Self::existential_deposit() { + return Err("value too low to create account"); + } + T::EnsureAccountLiquid::ensure_account_liquid(&transactor)?; + + // NOTE: total stake being stored in the same type means that this could never overflow + // but better to be safe than sorry. + let new_to_balance = match to_balance.checked_add(&value) { + Some(b) => b, + None => return Err("destination balance too high to receive value"), + }; + + if transactor != dest { + Self::set_free_balance(&transactor, new_from_balance); + Self::decrease_total_stake_by(fee); + Self::set_free_balance_creating(&dest, new_to_balance); + Self::deposit_event(RawEvent::Transfer(transactor, dest, value, fee)); + } + + Ok(()) + } + + /// Set the balances of a given account. + fn set_balance( + who: RawAddress, + free: ::Type, + reserved: ::Type + ) -> Result { + let who = Self::lookup(who)?; + Self::set_free_balance(&who, free.into()); + Self::set_reserved_balance(&who, reserved.into()); + Ok(()) + } } } @@ -232,12 +288,6 @@ pub enum UpdateBalanceOutcome { } impl Module { - - /// Deposit one of this module's events. - fn deposit_event(event: Event) { - >::deposit_event(::Event::from(event).into()); - } - // PUBLIC IMMUTABLES /// The combined balance of `who`. @@ -285,58 +335,7 @@ impl Module { } } - // PUBLIC DISPATCH - - /// Transfer some liquid free balance to another staker. - pub fn transfer(origin: T::Origin, dest: Address, value: ::Type) -> Result { - let transactor = ensure_signed(origin)?; - - let dest = Self::lookup(dest)?; - let value = value.into(); - let from_balance = Self::free_balance(&transactor); - let to_balance = Self::free_balance(&dest); - let would_create = to_balance.is_zero(); - let fee = if would_create { Self::creation_fee() } else { Self::transfer_fee() }; - let liability = match value.checked_add(&fee) { - Some(l) => l, - None => return Err("got overflow after adding a fee to value"), - }; - - let new_from_balance = match from_balance.checked_sub(&liability) { - Some(b) => b, - None => return Err("balance too low to send value"), - }; - if would_create && value < Self::existential_deposit() { - return Err("value too low to create account"); - } - T::EnsureAccountLiquid::ensure_account_liquid(&transactor)?; - - // NOTE: total stake being stored in the same type means that this could never overflow - // but better to be safe than sorry. - let new_to_balance = match to_balance.checked_add(&value) { - Some(b) => b, - None => return Err("destination balance too high to receive value"), - }; - - if transactor != dest { - Self::set_free_balance(&transactor, new_from_balance); - Self::decrease_total_stake_by(fee); - Self::set_free_balance_creating(&dest, new_to_balance); - Self::deposit_event(RawEvent::Transfer(transactor, dest, value, fee)); - } - - Ok(()) - } - - /// Set the balances of a given account. - fn set_balance(who: Address, free: ::Type, reserved: ::Type) -> Result { - let who = Self::lookup(who)?; - Self::set_free_balance(&who, free.into()); - Self::set_reserved_balance(&who, reserved.into()); - Ok(()) - } - - // PUBLIC MUTABLES (DANGEROUS) + //PUBLIC MUTABLES (DANGEROUS) /// Set the free balance of an account to some new value. /// diff --git a/substrate/srml/consensus/src/lib.rs b/substrate/srml/consensus/src/lib.rs index ba72df18f5..6975fe792c 100644 --- a/substrate/srml/consensus/src/lib.rs +++ b/substrate/srml/consensus/src/lib.rs @@ -143,11 +143,51 @@ decl_storage! { decl_module! { pub struct Module for enum Call where origin: T::Origin { - fn report_misbehavior(origin, report: Vec) -> Result; - fn note_offline(origin, offline_val_indices: Vec) -> Result; - fn remark(origin, remark: Vec) -> Result; - fn set_code(new: Vec) -> Result; - fn set_storage(items: Vec) -> Result; + /// Report some misbehaviour. + fn report_misbehavior(origin, _report: Vec) -> Result { + ensure_signed(origin)?; + // TODO. + Ok(()) + } + + /// Note the previous block's validator missed their opportunity to propose a block. + /// This only comes in if 2/3+1 of the validators agree that no proposal was submitted. + /// It's only relevant for the previous block. + fn note_offline(origin, offline_val_indices: Vec) -> Result { + ensure_inherent(origin)?; + assert!( + >::extrinsic_index() == Some(T::NOTE_OFFLINE_POSITION), + "note_offline extrinsic must be at position {} in the block", + T::NOTE_OFFLINE_POSITION + ); + + for validator_index in offline_val_indices.into_iter() { + T::OnOfflineValidator::on_offline_validator(validator_index as usize); + } + + Ok(()) + } + + /// Make some on-chain remark. + fn remark(origin, _remark: Vec) -> Result { + ensure_signed(origin)?; + Ok(()) + } + + /// Set the new code. + fn set_code(new: Vec) -> Result { + storage::unhashed::put_raw(well_known_keys::CODE, &new); + Ok(()) + } + + /// Set some items of storage. + fn set_storage(items: Vec) -> Result { + for i in &items { + storage::unhashed::put_raw(&i.0, &i.1); + } + Ok(()) + } + fn on_finalise() { if let Some(original_authorities) = >::take() { let current_authorities = AuthorityStorageVec::::items(); @@ -165,51 +205,6 @@ impl Module { AuthorityStorageVec::::items() } - /// Set the new code. - fn set_code(new: Vec) -> Result { - storage::unhashed::put_raw(well_known_keys::CODE, &new); - Ok(()) - } - - /// Set some items of storage. - fn set_storage(items: Vec) -> Result { - for i in &items { - storage::unhashed::put_raw(&i.0, &i.1); - } - Ok(()) - } - - /// Report some misbehaviour. - fn report_misbehavior(origin: T::Origin, _report: Vec) -> Result { - ensure_signed(origin)?; - // TODO. - Ok(()) - } - - /// Note the previous block's validator missed their opportunity to propose a block. This only comes in - /// if 2/3+1 of the validators agree that no proposal was submitted. It's only relevant - /// for the previous block. - fn note_offline(origin: T::Origin, offline_val_indices: Vec) -> Result { - ensure_inherent(origin)?; - assert!( - >::extrinsic_index() == Some(T::NOTE_OFFLINE_POSITION), - "note_offline extrinsic must be at position {} in the block", - T::NOTE_OFFLINE_POSITION - ); - - for validator_index in offline_val_indices.into_iter() { - T::OnOfflineValidator::on_offline_validator(validator_index as usize); - } - - Ok(()) - } - - /// Make some on-chain remark. - fn remark(origin: T::Origin, _remark: Vec) -> Result { - ensure_signed(origin)?; - Ok(()) - } - /// Set the current set of authorities' session keys. /// /// Called by `next_session` only. diff --git a/substrate/srml/contract/src/lib.rs b/substrate/srml/contract/src/lib.rs index d57a65bc1f..30e82f4923 100644 --- a/substrate/srml/contract/src/lib.rs +++ b/substrate/srml/contract/src/lib.rs @@ -151,22 +151,104 @@ where decl_module! { /// Contracts module. pub struct Module for enum Call where origin: T::Origin { + fn deposit_event() = default; // TODO: Change AccountId to staking::Address + /// Make a call to a specified account, optionally transferring some balance. fn call( origin, dest: T::AccountId, value: ::Type, gas_limit: ::Type, data: Vec - ) -> Result; + ) -> Result { + let origin = ensure_signed(origin)?; + let value = value.into(); + let gas_limit = gas_limit.into(); + // Pay for the gas upfront. + // + // NOTE: it is very important to avoid any state changes before + // paying for the gas. + let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; + + let mut ctx = ExecutionContext { + self_account: origin.clone(), + depth: 0, + overlay: OverlayAccountDb::::new(&account_db::DirectAccountDb), + events: Vec::new(), + }; + + let mut output_data = Vec::new(); + let result = ctx.call(origin.clone(), dest, value, &mut gas_meter, &data, &mut output_data); + + if let Ok(_) = result { + // Commit all changes that made it thus far into the persistant storage. + account_db::DirectAccountDb.commit(ctx.overlay.into_change_set()); + + // Then deposit all events produced. + ctx.events.into_iter().for_each(Self::deposit_event); + } + + // Refund cost of the unused gas. + // + // NOTE: this should go after the commit to the storage, since the storage changes + // can alter the balance of the caller. + gas::refund_unused_gas::(&origin, gas_meter); + + result.map(|_| ()) + } + + /// Create a new contract, optionally transfering some balance to the created account. + /// + /// Creation is executed as follows: + /// + /// - the destination address is computed based on the sender and hash of the code. + /// - account is created at the computed address. + /// - the `ctor_code` is executed in the context of the newly created account. Buffer returned + /// after the execution is saved as the `code` of the account. That code will be invoked + /// upon any message received by this account. fn create( origin, - value: ::Type, + endowment: ::Type, gas_limit: ::Type, - init_code: Vec, + ctor_code: Vec, data: Vec - ) -> Result; + ) -> Result { + let origin = ensure_signed(origin)?; + let endowment = endowment.into(); + let gas_limit = gas_limit.into(); + + // Pay for the gas upfront. + // + // NOTE: it is very important to avoid any state changes before + // paying for the gas. + let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; + + let mut ctx = ExecutionContext { + self_account: origin.clone(), + depth: 0, + overlay: OverlayAccountDb::::new(&account_db::DirectAccountDb), + events: Vec::new(), + }; + let result = ctx.create(origin.clone(), endowment, &mut gas_meter, &ctor_code, &data); + + if let Ok(_) = result { + // Commit all changes that made it thus far into the persistant storage. + account_db::DirectAccountDb.commit(ctx.overlay.into_change_set()); + + // Then deposit all events produced. + ctx.events.into_iter().for_each(Self::deposit_event); + } + + // Refund cost of the unused gas. + // + // NOTE: this should go after the commit to the storage, since the storage changes + // can alter the balance of the caller. + gas::refund_unused_gas::(&origin, gas_meter); + + result.map(|_| ()) + } + fn on_finalise() { >::kill(); } @@ -220,109 +302,6 @@ impl double_map::StorageDoubleMap for StorageOf { type Value = Vec; } -impl Module { - /// Deposit one of this module's events. - fn deposit_event(event: Event) { - >::deposit_event(::Event::from(event).into()); - } - - /// Make a call to a specified account, optionally transferring some balance. - fn call( - origin: ::Origin, - dest: T::AccountId, - value: ::Type, - gas_limit: ::Type, - data: Vec, - ) -> Result { - let origin = ensure_signed(origin)?; - let value = value.into(); - let gas_limit = gas_limit.into(); - - // Pay for the gas upfront. - // - // NOTE: it is very important to avoid any state changes before - // paying for the gas. - let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; - - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay: OverlayAccountDb::::new(&account_db::DirectAccountDb), - events: Vec::new(), - }; - - let mut output_data = Vec::new(); - let result = ctx.call(origin.clone(), dest, value, &mut gas_meter, &data, &mut output_data); - - if let Ok(_) = result { - // Commit all changes that made it thus far into the persistant storage. - account_db::DirectAccountDb.commit(ctx.overlay.into_change_set()); - - // Then deposit all events produced. - ctx.events.into_iter().for_each(Self::deposit_event); - } - - // Refund cost of the unused gas. - // - // NOTE: this should go after the commit to the storage, since the storage changes - // can alter the balance of the caller. - gas::refund_unused_gas::(&origin, gas_meter); - - result.map(|_| ()) - } - - /// Create a new contract, optionally transfering some balance to the created account. - /// - /// Creation is executed as follows: - /// - /// - the destination address is computed based on the sender and hash of the code. - /// - account is created at the computed address. - /// - the `ctor_code` is executed in the context of the newly created account. Buffer returned - /// after the execution is saved as the `code` of the account. That code will be invoked - /// upon any message received by this account. - fn create( - origin: ::Origin, - endowment: ::Type, - gas_limit: ::Type, - ctor_code: Vec, - data: Vec, - ) -> Result { - let origin = ensure_signed(origin)?; - let endowment = endowment.into(); - let gas_limit = gas_limit.into(); - - // Pay for the gas upfront. - // - // NOTE: it is very important to avoid any state changes before - // paying for the gas. - let mut gas_meter = gas::buy_gas::(&origin, gas_limit)?; - - let mut ctx = ExecutionContext { - self_account: origin.clone(), - depth: 0, - overlay: OverlayAccountDb::::new(&account_db::DirectAccountDb), - events: Vec::new(), - }; - let result = ctx.create(origin.clone(), endowment, &mut gas_meter, &ctor_code, &data); - - if let Ok(_) = result { - // Commit all changes that made it thus far into the persistant storage. - account_db::DirectAccountDb.commit(ctx.overlay.into_change_set()); - - // Then deposit all events produced. - ctx.events.into_iter().for_each(Self::deposit_event); - } - - // Refund cost of the unused gas. - // - // NOTE: this should go after the commit to the storage, since the storage changes - // can alter the balance of the caller. - gas::refund_unused_gas::(&origin, gas_meter); - - result.map(|_| ()) - } -} - impl balances::OnFreeBalanceZero for Module { fn on_free_balance_zero(who: &T::AccountId) { >::remove(who); diff --git a/substrate/srml/council/src/motions.rs b/substrate/srml/council/src/motions.rs index a260eec60e..a2c5115633 100644 --- a/substrate/srml/council/src/motions.rs +++ b/substrate/srml/council/src/motions.rs @@ -68,8 +68,96 @@ decl_event!( decl_module! { #[cfg_attr(feature = "std", serde(bound(deserialize = "::Proposal: ::serde::de::DeserializeOwned")))] pub struct Module for enum Call where origin: ::Origin { - fn propose(origin, threshold: Compact, proposal: Box<::Proposal>) -> Result; - fn vote(origin, proposal: T::Hash, index: Compact, approve: bool) -> Result; + fn deposit_event() = default; + fn propose(origin, threshold: Compact, proposal: Box<::Proposal>) -> Result { + let who = ensure_signed(origin)?; + let threshold = threshold.into(); + + ensure!(Self::is_councillor(&who), "proposer not on council"); + + let proposal_hash = T::Hashing::hash_of(&proposal); + + ensure!(!>::exists(proposal_hash), "duplicate proposals not allowed"); + + if threshold < 2 { + let ok = proposal.dispatch(Origin::Members(1).into()).is_ok(); + Self::deposit_event(RawEvent::Executed(proposal_hash, ok)); + } else { + let index = Self::proposal_count(); + >::mutate(|i| *i += 1); + >::mutate(|proposals| proposals.push(proposal_hash)); + >::insert(proposal_hash, *proposal); + >::insert(proposal_hash, (index, threshold, vec![who.clone()], vec![])); + + Self::deposit_event(RawEvent::Proposed(who, index, proposal_hash, threshold)); + } + Ok(()) + } + + fn vote(origin, proposal: T::Hash, index: Compact, approve: bool) -> Result { + let who = ensure_signed(origin)?; + let index = index.into(); + + ensure!(Self::is_councillor(&who), "voter not on council"); + + let mut voting = Self::voting(&proposal).ok_or("proposal must exist")?; + ensure!(voting.0 == index, "mismatched index"); + + let position_yes = voting.2.iter().position(|a| a == &who); + let position_no = voting.3.iter().position(|a| a == &who); + + if approve { + if position_yes.is_none() { + voting.2.push(who.clone()); + } else { + return Err("duplicate vote ignored") + } + if let Some(pos) = position_no { + voting.3.swap_remove(pos); + } + } else { + if position_no.is_none() { + voting.3.push(who.clone()); + } else { + return Err("duplicate vote ignored") + } + if let Some(pos) = position_yes { + voting.2.swap_remove(pos); + } + } + + let yes_votes = voting.2.len() as u32; + let no_votes = voting.3.len() as u32; + Self::deposit_event(RawEvent::Voted(who, proposal, approve, yes_votes, no_votes)); + + let threshold = voting.1; + let potential_votes = >::active_council().len() as u32; + let approved = yes_votes >= threshold; + let disapproved = potential_votes.saturating_sub(no_votes) < threshold; + if approved || disapproved { + if approved { + Self::deposit_event(RawEvent::Approved(proposal)); + + // execute motion, assuming it exists. + if let Some(p) = >::take(&proposal) { + let ok = p.dispatch(Origin::Members(threshold).into()).is_ok(); + Self::deposit_event(RawEvent::Executed(proposal, ok)); + } + } else { + // disapproved + Self::deposit_event(RawEvent::Disapproved(proposal)); + } + + // remove vote + >::remove(&proposal); + >::mutate(|proposals| proposals.retain(|h| h != &proposal)); + } else { + // update voting + >::insert(&proposal, voting); + } + + Ok(()) + } } } @@ -91,107 +179,10 @@ decl_storage! { } impl Module { - - /// Deposit one of this module's events. - fn deposit_event(event: Event) { - >::deposit_event(::Event::from(event).into()); - } - pub fn is_councillor(who: &T::AccountId) -> bool { >::active_council().iter() .any(|&(ref a, _)| a == who) } - - // Dispatch - fn propose(origin: ::Origin, threshold: Compact, proposal: Box<::Proposal>) -> Result { - let who = ensure_signed(origin)?; - let threshold = threshold.into(); - - ensure!(Self::is_councillor(&who), "proposer not on council"); - - let proposal_hash = T::Hashing::hash_of(&proposal); - - ensure!(!>::exists(proposal_hash), "duplicate proposals not allowed"); - - if threshold < 2 { - let ok = proposal.dispatch(Origin::Members(1).into()).is_ok(); - Self::deposit_event(RawEvent::Executed(proposal_hash, ok)); - } else { - let index = Self::proposal_count(); - >::mutate(|i| *i += 1); - >::mutate(|proposals| proposals.push(proposal_hash)); - >::insert(proposal_hash, *proposal); - >::insert(proposal_hash, (index, threshold, vec![who.clone()], vec![])); - - Self::deposit_event(RawEvent::Proposed(who, index, proposal_hash, threshold)); - } - Ok(()) - } - - fn vote(origin: ::Origin, proposal: T::Hash, index: Compact, approve: bool) -> Result { - let who = ensure_signed(origin)?; - let index = index.into(); - - ensure!(Self::is_councillor(&who), "voter not on council"); - - let mut voting = Self::voting(&proposal).ok_or("proposal must exist")?; - ensure!(voting.0 == index, "mismatched index"); - - let position_yes = voting.2.iter().position(|a| a == &who); - let position_no = voting.3.iter().position(|a| a == &who); - - if approve { - if position_yes.is_none() { - voting.2.push(who.clone()); - } else { - return Err("duplicate vote ignored") - } - if let Some(pos) = position_no { - voting.3.swap_remove(pos); - } - } else { - if position_no.is_none() { - voting.3.push(who.clone()); - } else { - return Err("duplicate vote ignored") - } - if let Some(pos) = position_yes { - voting.2.swap_remove(pos); - } - } - - let yes_votes = voting.2.len() as u32; - let no_votes = voting.3.len() as u32; - Self::deposit_event(RawEvent::Voted(who, proposal, approve, yes_votes, no_votes)); - - let threshold = voting.1; - let potential_votes = >::active_council().len() as u32; - let approved = yes_votes >= threshold; - let disapproved = potential_votes.saturating_sub(no_votes) < threshold; - if approved || disapproved { - if approved { - Self::deposit_event(RawEvent::Approved(proposal)); - - // execute motion, assuming it exists. - if let Some(p) = >::take(&proposal) { - let ok = p.dispatch(Origin::Members(threshold).into()).is_ok(); - Self::deposit_event(RawEvent::Executed(proposal, ok)); - } - } else { - // disapproved - Self::deposit_event(RawEvent::Disapproved(proposal)); - } - - // remove vote - >::remove(&proposal); - >::mutate(|proposals| proposals.retain(|h| h != &proposal)); - } else { - // update voting - >::insert(&proposal, voting); - } - - Ok(()) - } } /// Ensure that the origin `o` represents at least `n` council members. Returns diff --git a/substrate/srml/council/src/seats.rs b/substrate/srml/council/src/seats.rs index 24d06ecf6a..957b69bdfe 100644 --- a/substrate/srml/council/src/seats.rs +++ b/substrate/srml/council/src/seats.rs @@ -87,16 +87,228 @@ pub trait Trait: democracy::Trait { decl_module! { pub struct Module for enum Call where origin: T::Origin { - fn set_approvals(origin, votes: Vec, index: Compact) -> Result; - fn reap_inactive_voter(origin, reporter_index: Compact, who: Address, who_index: Compact, assumed_vote_index: Compact) -> Result; - fn retract_voter(origin, index: Compact) -> Result; - fn submit_candidacy(origin, slot: Compact) -> Result; - fn present_winner(origin, candidate: Address, total: ::Type, index: Compact) -> Result; + fn deposit_event() = default; + + /// Set candidate approvals. Approval slots stay valid as long as candidates in those slots + /// are registered. + fn set_approvals(origin, votes: Vec, index: Compact) -> Result { + let who = ensure_signed(origin)?; + let index: VoteIndex = index.into(); + + ensure!(!Self::presentation_active(), "no approval changes during presentation period"); + ensure!(index == Self::vote_index(), "incorrect vote index"); + if !>::exists(&who) { + // not yet a voter - deduct bond. + // NOTE: this must be the last potential bailer, since it changes state. + >::reserve(&who, Self::voting_bond())?; + + >::put({ + let mut v = Self::voters(); + v.push(who.clone()); + v + }); + } + >::insert(&who, index); + >::insert(&who, votes); + Ok(()) + } + + /// Remove a voter. For it not to be a bond-consuming no-op, all approved candidate indices + /// must now be either unregistered or registered to a candidate that registered the slot after + /// the voter gave their last approval set. + /// + /// May be called by anyone. Returns the voter deposit to `signed`. + fn reap_inactive_voter( + origin, + reporter_index: Compact, + who: Address, + who_index: Compact, + assumed_vote_index: Compact + ) -> Result { + let reporter = ensure_signed(origin)?; + let assumed_vote_index: VoteIndex = assumed_vote_index.into(); + + let who = >::lookup(who)?; + ensure!(!Self::presentation_active(), "cannot reap during presentation period"); + ensure!(Self::voter_last_active(&reporter).is_some(), "reporter must be a voter"); + let last_active = Self::voter_last_active(&who).ok_or("target for inactivity cleanup must be active")?; + ensure!(assumed_vote_index == Self::vote_index(), "vote index not current"); + ensure!(last_active < assumed_vote_index - Self::inactivity_grace_period(), "cannot reap during grace perid"); + let voters = Self::voters(); + let reporter_index: u32 = reporter_index.into(); + let reporter_index = reporter_index as usize; + let who_index: u32 = who_index.into(); + let who_index = who_index as usize; + ensure!(reporter_index < voters.len() && voters[reporter_index] == reporter, "bad reporter index"); + ensure!(who_index < voters.len() && voters[who_index] == who, "bad target index"); + + // will definitely kill one of signed or who now. + + let valid = !Self::approvals_of(&who).iter() + .zip(Self::candidates().iter()) + .any(|(&appr, addr)| + appr && + *addr != T::AccountId::default() && + Self::candidate_reg_info(addr).map_or(false, |x| x.0 <= last_active)/*defensive only: all items in candidates list are registered*/ + ); + + Self::remove_voter( + if valid { &who } else { &reporter }, + if valid { who_index } else { reporter_index }, + voters + ); + if valid { + // This only fails if `who` doesn't exist, which it clearly must do since its the origin. + // Still, it's no more harmful to propagate any error at this point. + >::repatriate_reserved(&who, &reporter, Self::voting_bond())?; + Self::deposit_event(RawEvent::VoterReaped(who, reporter)); + } else { + >::slash_reserved(&reporter, Self::voting_bond()); + Self::deposit_event(RawEvent::BadReaperSlashed(reporter)); + } + Ok(()) + } + + /// Remove a voter. All votes are cancelled and the voter deposit is returned. + fn retract_voter(origin, index: Compact) -> Result { + let who = ensure_signed(origin)?; + + ensure!(!Self::presentation_active(), "cannot retract when presenting"); + ensure!(>::exists(&who), "cannot retract non-voter"); + let voters = Self::voters(); + let index: u32 = index.into(); + let index = index as usize; + ensure!(index < voters.len(), "retraction index invalid"); + ensure!(voters[index] == who, "retraction index mismatch"); + + Self::remove_voter(&who, index, voters); + >::unreserve(&who, Self::voting_bond()); + Ok(()) + } + + /// Submit oneself for candidacy. + /// + /// Account must have enough transferrable funds in it to pay the bond. + fn submit_candidacy(origin, slot: Compact) -> Result { + let who = ensure_signed(origin)?; + + ensure!(!Self::is_a_candidate(&who), "duplicate candidate submission"); + let slot: u32 = slot.into(); + let slot = slot as usize; + let count = Self::candidate_count() as usize; + let candidates = Self::candidates(); + ensure!( + (slot == count && count == candidates.len()) || + (slot < candidates.len() && candidates[slot] == T::AccountId::default()), + "invalid candidate slot" + ); + // NOTE: This must be last as it has side-effects. + >::reserve(&who, Self::candidacy_bond()) + .map_err(|_| "candidate has not enough funds")?; + + >::insert(&who, (Self::vote_index(), slot as u32)); + let mut candidates = candidates; + if slot == candidates.len() { + candidates.push(who); + } else { + candidates[slot] = who; + } + >::put(candidates); + >::put(count as u32 + 1); + Ok(()) + } + + /// Claim that `signed` is one of the top Self::carry_count() + current_vote().1 candidates. + /// Only works if the `block_number >= current_vote().0` and `< current_vote().0 + presentation_duration()`` + /// `signed` should have at least + fn present_winner( + origin, + candidate: Address, + total: ::Type, + index: Compact + ) -> Result { + let who = ensure_signed(origin)?; + let total = total.into(); + let index: VoteIndex = index.into(); + + let candidate = >::lookup(candidate)?; + ensure!(index == Self::vote_index(), "index not current"); + let (_, _, expiring) = Self::next_finalise().ok_or("cannot present outside of presentation period")?; + let stakes = Self::snapshoted_stakes(); + let voters = Self::voters(); + let bad_presentation_punishment = Self::present_slash_per_voter() * T::Balance::sa(voters.len() as u64); + ensure!(>::can_slash(&who, bad_presentation_punishment), "presenter must have sufficient slashable funds"); + + let mut leaderboard = Self::leaderboard().ok_or("leaderboard must exist while present phase active")?; + ensure!(total > leaderboard[0].0, "candidate not worthy of leaderboard"); + + if let Some(p) = Self::active_council().iter().position(|&(ref c, _)| c == &candidate) { + ensure!(p < expiring.len(), "candidate must not form a duplicated member if elected"); + } + + let (registered_since, candidate_index): (VoteIndex, u32) = + Self::candidate_reg_info(&candidate).ok_or("presented candidate must be current")?; + let actual_total = voters.iter() + .zip(stakes.iter()) + .filter_map(|(voter, stake)| + match Self::voter_last_active(voter) { + Some(b) if b >= registered_since => + Self::approvals_of(voter).get(candidate_index as usize) + .and_then(|approved| if *approved { Some(*stake) } else { None }), + _ => None, + }) + .fold(Zero::zero(), |acc, n| acc + n); + let dupe = leaderboard.iter().find(|&&(_, ref c)| c == &candidate).is_some(); + if total == actual_total && !dupe { + // insert into leaderboard + leaderboard[0] = (total, candidate); + leaderboard.sort_by_key(|&(t, _)| t); + >::put(leaderboard); + Ok(()) + } else { + // we can rest assured it will be Ok since we checked `can_slash` earlier; still + // better safe than sorry. + let _ = >::slash(&who, bad_presentation_punishment); + Err(if dupe { "duplicate presentation" } else { "incorrect total" }) + } + } + + /// Set the desired member count; if lower than the current count, then seats will not be up + /// election when they expire. If more, then a new vote will be started if one is not already + /// in progress. + fn set_desired_seats(count: Compact) -> Result { + let count: u32 = count.into(); + >::put(count); + Ok(()) + } + + /// Remove a particular member. A tally will happen instantly (if not already in a presentation + /// period) to fill the seat if removal means that the desired members are not met. + /// This is effective immediately. + fn remove_member(who: Address) -> Result { + let who = >::lookup(who)?; + let new_council: Vec<(T::AccountId, T::BlockNumber)> = Self::active_council() + .into_iter() + .filter(|i| i.0 != who) + .collect(); + >::put(new_council); + Ok(()) + } + + /// Set the presentation duration. If there is currently a vote being presented for, will + /// invoke `finalise_vote`. + fn set_presentation_duration(count: ::Type) -> Result { + >::put(count.into()); + Ok(()) + } + + /// Set the presentation duration. If there is current a vote being presented for, will + /// invoke `finalise_vote`. + fn set_term_duration(count: ::Type) -> Result { + >::put(count.into()); + Ok(()) + } - fn set_desired_seats(count: Compact) -> Result; - fn remove_member(who: Address) -> Result; - fn set_presentation_duration(count: ::Type) -> Result; - fn set_term_duration(count: ::Type) -> Result; fn on_finalise(n: T::BlockNumber) { if let Err(e) = Self::end_block(n) { print("Guru meditation"); @@ -176,12 +388,6 @@ decl_event!( ); impl Module { - - /// Deposit one of this module's events. - fn deposit_event(event: Event) { - >::deposit_event(::Event::from(event).into()); - } - // exposed immutables. /// True if we're currently in a presentation period. @@ -230,230 +436,7 @@ impl Module { } } - // dispatch - - /// Set candidate approvals. Approval slots stay valid as long as candidates in those slots - /// are registered. - fn set_approvals(origin: T::Origin, votes: Vec, index: Compact) -> Result { - let who = ensure_signed(origin)?; - let index: VoteIndex = index.into(); - - ensure!(!Self::presentation_active(), "no approval changes during presentation period"); - ensure!(index == Self::vote_index(), "incorrect vote index"); - if !>::exists(&who) { - // not yet a voter - deduct bond. - // NOTE: this must be the last potential bailer, since it changes state. - >::reserve(&who, Self::voting_bond())?; - - >::put({ - let mut v = Self::voters(); - v.push(who.clone()); - v - }); - } - >::insert(&who, index); - >::insert(&who, votes); - Ok(()) - } - - /// Remove a voter. For it not to be a bond-consuming no-op, all approved candidate indices - /// must now be either unregistered or registered to a candidate that registered the slot after - /// the voter gave their last approval set. - /// - /// May be called by anyone. Returns the voter deposit to `signed`. - fn reap_inactive_voter( - origin: T::Origin, - reporter_index: Compact, - who: Address, - who_index: Compact, - assumed_vote_index: Compact - ) -> Result { - let reporter = ensure_signed(origin)?; - let assumed_vote_index: VoteIndex = assumed_vote_index.into(); - - let who = >::lookup(who)?; - ensure!(!Self::presentation_active(), "cannot reap during presentation period"); - ensure!(Self::voter_last_active(&reporter).is_some(), "reporter must be a voter"); - let last_active = Self::voter_last_active(&who).ok_or("target for inactivity cleanup must be active")?; - ensure!(assumed_vote_index == Self::vote_index(), "vote index not current"); - ensure!(last_active < assumed_vote_index - Self::inactivity_grace_period(), "cannot reap during grace perid"); - let voters = Self::voters(); - let reporter_index: u32 = reporter_index.into(); - let reporter_index = reporter_index as usize; - let who_index: u32 = who_index.into(); - let who_index = who_index as usize; - ensure!(reporter_index < voters.len() && voters[reporter_index] == reporter, "bad reporter index"); - ensure!(who_index < voters.len() && voters[who_index] == who, "bad target index"); - - // will definitely kill one of signed or who now. - - let valid = !Self::approvals_of(&who).iter() - .zip(Self::candidates().iter()) - .any(|(&appr, addr)| - appr && - *addr != T::AccountId::default() && - Self::candidate_reg_info(addr).map_or(false, |x| x.0 <= last_active)/*defensive only: all items in candidates list are registered*/ - ); - - Self::remove_voter( - if valid { &who } else { &reporter }, - if valid { who_index } else { reporter_index }, - voters - ); - if valid { - // This only fails if `who` doesn't exist, which it clearly must do since its the origin. - // Still, it's no more harmful to propagate any error at this point. - >::repatriate_reserved(&who, &reporter, Self::voting_bond())?; - Self::deposit_event(RawEvent::VoterReaped(who, reporter)); - } else { - >::slash_reserved(&reporter, Self::voting_bond()); - Self::deposit_event(RawEvent::BadReaperSlashed(reporter)); - } - Ok(()) - } - - /// Remove a voter. All votes are cancelled and the voter deposit is returned. - fn retract_voter(origin: T::Origin, index: Compact) -> Result { - let who = ensure_signed(origin)?; - - ensure!(!Self::presentation_active(), "cannot retract when presenting"); - ensure!(>::exists(&who), "cannot retract non-voter"); - let voters = Self::voters(); - let index: u32 = index.into(); - let index = index as usize; - ensure!(index < voters.len(), "retraction index invalid"); - ensure!(voters[index] == who, "retraction index mismatch"); - - Self::remove_voter(&who, index, voters); - >::unreserve(&who, Self::voting_bond()); - Ok(()) - } - - /// Submit oneself for candidacy. - /// - /// Account must have enough transferrable funds in it to pay the bond. - fn submit_candidacy(origin: T::Origin, slot: Compact) -> Result { - let who = ensure_signed(origin)?; - - ensure!(!Self::is_a_candidate(&who), "duplicate candidate submission"); - let slot: u32 = slot.into(); - let slot = slot as usize; - let count = Self::candidate_count() as usize; - let candidates = Self::candidates(); - ensure!( - (slot == count && count == candidates.len()) || - (slot < candidates.len() && candidates[slot] == T::AccountId::default()), - "invalid candidate slot" - ); - // NOTE: This must be last as it has side-effects. - >::reserve(&who, Self::candidacy_bond()) - .map_err(|_| "candidate has not enough funds")?; - - >::insert(&who, (Self::vote_index(), slot as u32)); - let mut candidates = candidates; - if slot == candidates.len() { - candidates.push(who); - } else { - candidates[slot] = who; - } - >::put(candidates); - >::put(count as u32 + 1); - Ok(()) - } - - /// Claim that `signed` is one of the top Self::carry_count() + current_vote().1 candidates. - /// Only works if the `block_number >= current_vote().0` and `< current_vote().0 + presentation_duration()`` - /// `signed` should have at least - fn present_winner( - origin: T::Origin, - candidate: Address, - total: ::Type, - index: Compact - ) -> Result { - let who = ensure_signed(origin)?; - let total = total.into(); - let index: VoteIndex = index.into(); - - let candidate = >::lookup(candidate)?; - ensure!(index == Self::vote_index(), "index not current"); - let (_, _, expiring) = Self::next_finalise().ok_or("cannot present outside of presentation period")?; - let stakes = Self::snapshoted_stakes(); - let voters = Self::voters(); - let bad_presentation_punishment = Self::present_slash_per_voter() * T::Balance::sa(voters.len() as u64); - ensure!(>::can_slash(&who, bad_presentation_punishment), "presenter must have sufficient slashable funds"); - - let mut leaderboard = Self::leaderboard().ok_or("leaderboard must exist while present phase active")?; - ensure!(total > leaderboard[0].0, "candidate not worthy of leaderboard"); - - if let Some(p) = Self::active_council().iter().position(|&(ref c, _)| c == &candidate) { - ensure!(p < expiring.len(), "candidate must not form a duplicated member if elected"); - } - - let (registered_since, candidate_index): (VoteIndex, u32) = - Self::candidate_reg_info(&candidate).ok_or("presented candidate must be current")?; - let actual_total = voters.iter() - .zip(stakes.iter()) - .filter_map(|(voter, stake)| - match Self::voter_last_active(voter) { - Some(b) if b >= registered_since => - Self::approvals_of(voter).get(candidate_index as usize) - .and_then(|approved| if *approved { Some(*stake) } else { None }), - _ => None, - }) - .fold(Zero::zero(), |acc, n| acc + n); - let dupe = leaderboard.iter().find(|&&(_, ref c)| c == &candidate).is_some(); - if total == actual_total && !dupe { - // insert into leaderboard - leaderboard[0] = (total, candidate); - leaderboard.sort_by_key(|&(t, _)| t); - >::put(leaderboard); - Ok(()) - } else { - // we can rest assured it will be Ok since we checked `can_slash` earlier; still - // better safe than sorry. - let _ = >::slash(&who, bad_presentation_punishment); - Err(if dupe { "duplicate presentation" } else { "incorrect total" }) - } - } - - /// Set the desired member count; if lower than the current count, then seats will not be up - /// election when they expire. If more, then a new vote will be started if one is not already - /// in progress. - fn set_desired_seats(count: Compact) -> Result { - let count: u32 = count.into(); - >::put(count); - Ok(()) - } - - /// Remove a particular member. A tally will happen instantly (if not already in a presentation - /// period) to fill the seat if removal means that the desired members are not met. - /// This is effective immediately. - fn remove_member(who: Address) -> Result { - let who = >::lookup(who)?; - let new_council: Vec<(T::AccountId, T::BlockNumber)> = Self::active_council() - .into_iter() - .filter(|i| i.0 != who) - .collect(); - >::put(new_council); - Ok(()) - } - - /// Set the presentation duration. If there is currently a vote being presented for, will - /// invoke `finalise_vote`. - fn set_presentation_duration(count: ::Type) -> Result { - >::put(count.into()); - Ok(()) - } - - /// Set the presentation duration. If there is current a vote being presented for, will - /// invoke `finalise_vote`. - fn set_term_duration(count: ::Type) -> Result { - >::put(count.into()); - Ok(()) - } - - // private - + // Private /// Check there's nothing to do this block fn end_block(block_number: T::BlockNumber) -> Result { if (block_number % Self::voting_period()).is_zero() { diff --git a/substrate/srml/council/src/voting.rs b/substrate/srml/council/src/voting.rs index 86c2c40c2a..b598e8ca05 100644 --- a/substrate/srml/council/src/voting.rs +++ b/substrate/srml/council/src/voting.rs @@ -33,12 +33,82 @@ pub trait Trait: CouncilTrait { decl_module! { pub struct Module for enum Call where origin: T::Origin { - fn propose(origin, proposal: Box) -> Result; - fn vote(origin, proposal: T::Hash, approve: bool) -> Result; - fn veto(origin, proposal_hash: T::Hash) -> Result; + fn deposit_event() = default; + + fn propose(origin, proposal: Box) -> Result { + let who = ensure_signed(origin)?; + + let expiry = >::block_number() + Self::voting_period(); + ensure!(Self::will_still_be_councillor_at(&who, expiry), "proposer would not be on council"); + + let proposal_hash = T::Hashing::hash_of(&proposal); + + ensure!(!>::exists(proposal_hash), "duplicate proposals not allowed"); + ensure!(!Self::is_vetoed(&proposal_hash), "proposal is vetoed"); + + let mut proposals = Self::proposals(); + proposals.push((expiry, proposal_hash)); + proposals.sort_by_key(|&(expiry, _)| expiry); + Self::set_proposals(&proposals); + + >::insert(proposal_hash, *proposal); + >::insert(proposal_hash, vec![who.clone()]); + >::insert((proposal_hash, who.clone()), true); + + Ok(()) + } + + fn vote(origin, proposal: T::Hash, approve: bool) -> Result { + let who = ensure_signed(origin)?; + + ensure!(Self::is_councillor(&who), "only councillors may vote on council proposals"); + + if Self::vote_of((proposal, who.clone())).is_none() { + >::mutate(proposal, |voters| voters.push(who.clone())); + } + >::insert((proposal, who), approve); + Ok(()) + } + + fn veto(origin, proposal_hash: T::Hash) -> Result { + let who = ensure_signed(origin)?; + + ensure!(Self::is_councillor(&who), "only councillors may veto council proposals"); + ensure!(>::exists(&proposal_hash), "proposal must exist to be vetoed"); + + let mut existing_vetoers = Self::veto_of(&proposal_hash) + .map(|pair| pair.1) + .unwrap_or_else(Vec::new); + let insert_position = existing_vetoers.binary_search(&who) + .err().ok_or("a councillor may not veto a proposal twice")?; + existing_vetoers.insert(insert_position, who); + Self::set_veto_of( + &proposal_hash, + >::block_number() + Self::cooloff_period(), + existing_vetoers + ); + + Self::set_proposals( + &Self::proposals().into_iter().filter(|&(_, h)| h != proposal_hash + ).collect::>()); + >::remove(proposal_hash); + >::remove(proposal_hash); + for (c, _) in >::active_council() { + >::remove((proposal_hash, c)); + } + Ok(()) + } + + fn set_cooloff_period(blocks: ::Type) -> Result { + >::put(blocks.into()); + Ok(()) + } + + fn set_voting_period(blocks: ::Type) -> Result { + >::put(blocks.into()); + Ok(()) + } - fn set_cooloff_period(blocks: ::Type) -> Result; - fn set_voting_period(blocks: ::Type) -> Result; fn on_finalise(n: T::BlockNumber) { if let Err(e) = Self::end_block(n) { print("Guru meditation"); @@ -73,12 +143,6 @@ decl_event!( ); impl Module { - - /// Deposit one of this module's events. - fn deposit_event(event: Event) { - >::deposit_event(::Event::from(event).into()); - } - pub fn is_vetoed>(proposal: B) -> bool { Self::veto_of(proposal.borrow()) .map(|(expiry, _): (T::BlockNumber, Vec)| >::block_number() < expiry) @@ -101,78 +165,7 @@ impl Module { Self::generic_tally(proposal_hash, |w: &T::AccountId, p: &T::Hash| Self::vote_of((*p, w.clone()))) } - // Dispatch - fn propose(origin: T::Origin, proposal: Box) -> Result { - let who = ensure_signed(origin)?; - - let expiry = >::block_number() + Self::voting_period(); - ensure!(Self::will_still_be_councillor_at(&who, expiry), "proposer would not be on council"); - - let proposal_hash = T::Hashing::hash_of(&proposal); - - ensure!(!>::exists(proposal_hash), "duplicate proposals not allowed"); - ensure!(!Self::is_vetoed(&proposal_hash), "proposal is vetoed"); - - let mut proposals = Self::proposals(); - proposals.push((expiry, proposal_hash)); - proposals.sort_by_key(|&(expiry, _)| expiry); - Self::set_proposals(&proposals); - - >::insert(proposal_hash, *proposal); - >::insert(proposal_hash, vec![who.clone()]); - >::insert((proposal_hash, who.clone()), true); - - Ok(()) - } - - fn vote(origin: T::Origin, proposal: T::Hash, approve: bool) -> Result { - let who = ensure_signed(origin)?; - - ensure!(Self::is_councillor(&who), "only councillors may vote on council proposals"); - - if Self::vote_of((proposal, who.clone())).is_none() { - >::mutate(proposal, |voters| voters.push(who.clone())); - } - >::insert((proposal, who), approve); - Ok(()) - } - - fn veto(origin: T::Origin, proposal_hash: T::Hash) -> Result { - let who = ensure_signed(origin)?; - - ensure!(Self::is_councillor(&who), "only councillors may veto council proposals"); - ensure!(>::exists(&proposal_hash), "proposal must exist to be vetoed"); - - let mut existing_vetoers = Self::veto_of(&proposal_hash) - .map(|pair| pair.1) - .unwrap_or_else(Vec::new); - let insert_position = existing_vetoers.binary_search(&who) - .err().ok_or("a councillor may not veto a proposal twice")?; - existing_vetoers.insert(insert_position, who); - Self::set_veto_of(&proposal_hash, >::block_number() + Self::cooloff_period(), existing_vetoers); - - Self::set_proposals(&Self::proposals().into_iter().filter(|&(_, h)| h != proposal_hash).collect::>()); - >::remove(proposal_hash); - >::remove(proposal_hash); - for (c, _) in >::active_council() { - >::remove((proposal_hash, c)); - } - Ok(()) - } - - fn set_cooloff_period(blocks: ::Type) -> Result { - >::put(blocks.into()); - Ok(()) - } - - fn set_voting_period(blocks: ::Type) -> Result { - >::put(blocks.into()); - Ok(()) - } - - // private - - + // Private fn set_veto_of(proposal: &T::Hash, expiry: T::BlockNumber, vetoers: Vec) { >::insert(proposal, (expiry, vetoers)); } diff --git a/substrate/srml/democracy/src/lib.rs b/substrate/srml/democracy/src/lib.rs index 0d54dbf441..9acacb2ea9 100644 --- a/substrate/srml/democracy/src/lib.rs +++ b/substrate/srml/democracy/src/lib.rs @@ -62,12 +62,74 @@ pub trait Trait: balances::Trait + Sized { decl_module! { pub struct Module for enum Call where origin: T::Origin { - fn propose(origin, proposal: Box, value: ::Type) -> Result; - fn second(origin, proposal: Compact) -> Result; - fn vote(origin, ref_index: Compact, approve_proposal: bool) -> Result; + fn deposit_event() = default; + + /// Propose a sensitive action to be taken. + fn propose( + origin, + proposal: Box, + value: ::Type + ) -> Result { + let who = ensure_signed(origin)?; + let value = value.into(); + + ensure!(value >= Self::minimum_deposit(), "value too low"); + >::reserve(&who, value) + .map_err(|_| "proposer's balance too low")?; + + let index = Self::public_prop_count(); + >::put(index + 1); + >::insert(index, (value, vec![who.clone()])); + + let mut props = Self::public_props(); + props.push((index, (*proposal).clone(), who)); + >::put(props); + Ok(()) + } + + /// Propose a sensitive action to be taken. + fn second(origin, proposal: Compact) -> Result { + let who = ensure_signed(origin)?; + let proposal: PropIndex = proposal.into(); + let mut deposit = Self::deposit_of(proposal) + .ok_or("can only second an existing proposal")?; + >::reserve(&who, deposit.0) + .map_err(|_| "seconder's balance too low")?; + deposit.1.push(who); + >::insert(proposal, deposit); + Ok(()) + } + + /// Vote in a referendum. If `approve_proposal` is true, the vote is to enact the proposal; + /// false would be a vote to keep the status quo. + fn vote(origin, ref_index: Compact, approve_proposal: bool) -> Result { + let who = ensure_signed(origin)?; + let ref_index = ref_index.into(); + ensure!(Self::is_active_referendum(ref_index), "vote given for invalid referendum."); + ensure!(!>::total_balance(&who).is_zero(), + "transactor must have balance to signal approval."); + if !>::exists(&(ref_index, who.clone())) { + >::mutate(ref_index, |voters| voters.push(who.clone())); + } + >::insert(&(ref_index, who), approve_proposal); + Ok(()) + } + + /// Start a referendum. + fn start_referendum(proposal: Box, vote_threshold: VoteThreshold) -> Result { + Self::inject_referendum( + >::block_number() + Self::voting_period(), + *proposal, + vote_threshold + ).map(|_| ()) + } + + /// Remove a referendum. + fn cancel_referendum(ref_index: Compact) -> Result { + Self::clear_referendum(ref_index.into()); + Ok(()) + } - fn start_referendum(proposal: Box, vote_threshold: VoteThreshold) -> Result; - fn cancel_referendum(ref_index: Compact) -> Result; fn on_finalise(n: T::BlockNumber) { if let Err(e) = Self::end_block(n) { runtime_io::print(e); @@ -121,12 +183,6 @@ decl_event!( ); impl Module { - - /// Deposit one of this module's events. - fn deposit_event(event: Event) { - >::deposit_event(::Event::from(event).into()); - } - // exposed immutables. /// Get the amount locked in support of `proposal`; `None` if proposal isn't a valid proposal @@ -167,71 +223,7 @@ impl Module { .fold((Zero::zero(), Zero::zero()), |(a, b), (c, d)| (a + c, b + d)) } - // dispatching. - - /// Propose a sensitive action to be taken. - fn propose(origin: T::Origin, proposal: Box, value: ::Type) -> Result { - let who = ensure_signed(origin)?; - let value = value.into(); - - ensure!(value >= Self::minimum_deposit(), "value too low"); - >::reserve(&who, value) - .map_err(|_| "proposer's balance too low")?; - - let index = Self::public_prop_count(); - >::put(index + 1); - >::insert(index, (value, vec![who.clone()])); - - let mut props = Self::public_props(); - props.push((index, (*proposal).clone(), who)); - >::put(props); - Ok(()) - } - - /// Propose a sensitive action to be taken. - fn second(origin: T::Origin, proposal: Compact) -> Result { - let who = ensure_signed(origin)?; - let proposal: PropIndex = proposal.into(); - let mut deposit = Self::deposit_of(proposal) - .ok_or("can only second an existing proposal")?; - >::reserve(&who, deposit.0) - .map_err(|_| "seconder's balance too low")?; - deposit.1.push(who); - >::insert(proposal, deposit); - Ok(()) - } - - /// Vote in a referendum. If `approve_proposal` is true, the vote is to enact the proposal; - /// false would be a vote to keep the status quo. - fn vote(origin: T::Origin, ref_index: Compact, approve_proposal: bool) -> Result { - let who = ensure_signed(origin)?; - let ref_index = ref_index.into(); - ensure!(Self::is_active_referendum(ref_index), "vote given for invalid referendum."); - ensure!(!>::total_balance(&who).is_zero(), - "transactor must have balance to signal approval."); - if !>::exists(&(ref_index, who.clone())) { - >::mutate(ref_index, |voters| voters.push(who.clone())); - } - >::insert(&(ref_index, who), approve_proposal); - Ok(()) - } - - /// Start a referendum. - fn start_referendum(proposal: Box, vote_threshold: VoteThreshold) -> Result { - Self::inject_referendum( - >::block_number() + Self::voting_period(), - *proposal, - vote_threshold - ).map(|_| ()) - } - - /// Remove a referendum. - fn cancel_referendum(ref_index: Compact) -> Result { - Self::clear_referendum(ref_index.into()); - Ok(()) - } - - // exposed mutables. + // Exposed mutables. /// Start a referendum. Can be called directly by the council. pub fn internal_start_referendum(proposal: T::Proposal, vote_threshold: VoteThreshold) -> result::Result { diff --git a/substrate/srml/example/src/lib.rs b/substrate/srml/example/src/lib.rs index 5f81e4336a..d6d7ea31fa 100644 --- a/substrate/srml/example/src/lib.rs +++ b/substrate/srml/example/src/lib.rs @@ -103,13 +103,90 @@ pub trait Trait: balances::Trait { decl_module! { // Simple declaration of the `Module` type. Lets the macro know what its working on. pub struct Module for enum Call where origin: T::Origin { + /// Deposit one of this module's events by using the default implementation. + /// It is also possible to provide a custom implementation. + fn deposit_event() = default; /// This is your public interface. Be extremely careful. /// This is just a simple example of how to interact with the module from the external /// world. - fn accumulate_dummy(origin, increase_by: T::Balance) -> Result; + // This just increases the value of `Dummy` by `increase_by`. + // + // Since this is a dispatched function there are two extremely important things to + // remember: + // + // - MUST NOT PANIC: Under no circumstances (save, perhaps, storage getting into an + // irreparably damaged state) must this function panic. + // - NO SIDE-EFFECTS ON ERROR: This function must either complete totally (and return + // `Ok(())` or it must have no side-effects on storage and return `Err('Some reason')`. + // + // The first is relatively easy to audit for - just ensure all panickers are removed from + // logic that executes in production (which you do anyway, right?!). To ensure the second + // is followed, you should do all tests for validity at the top of your function. This + // is stuff like checking the sender (`origin`) or that state is such that the operation + // makes sense. + // + // Once you've determined that it's all good, then enact the operation and change storage. + // If you can't be certain that the operation will succeed without substantial computation + // then you have a classic blockchain attack scenario. The normal way of managing this is + // to attach a bond to the operation. As the first major alteration of storage, reserve + // some value from the sender's account (`Balances` module has a `reserve` function for + // exactly this scenario). This amount should be enough to cover any costs of the + // substantial execution in case it turns out that you can't proceed with the operation. + // + // If it eventually transpires that the operation is fine and, therefore, that the + // expense of the checks should be borne by the network, then you can refund the reserved + // deposit. If, however, the operation turns out to be invalid and the computation is + // wasted, then you can burn it or repatriate elsewhere. + // + // Security bonds ensure that attackers can't game it by ensuring that anyone interacting + // with the system either progresses it or pays for the trouble of faffing around with + // no progress. + // + // If you don't respect these rules, it is likely that your chain will be attackable. + fn accumulate_dummy(origin, increase_by: T::Balance) -> Result { + // This is a public call, so we ensure that the origin is some signed account. + let _sender = ensure_signed(origin)?; + + // Read the value of dummy from storage. + // let dummy = Self::dummy(); + // Will also work using the `::get` on the storage item type itself: + // let dummy = >::get(); + + // Calculate the new value. + // let new_dummy = dummy.map_or(increase_by, |dummy| dummy + increase_by); + + // Put the new value into storage. + // >::put(new_dummy); + // Will also work with a reference: + // >::put(&new_dummy); + + // Here's the new one of read and then modify the value. + >::mutate(|dummy| { + let new_dummy = dummy.map_or(increase_by, |dummy| dummy + increase_by); + *dummy = Some(new_dummy); + }); + + // Let's deposit an event to let the outside world know this happened. + Self::deposit_event(RawEvent::Dummy(increase_by)); + + // All good. + Ok(()) + } /// A privileged call; in this case it resets our dummy value to something new. - fn set_dummy(new_dummy: T::Balance) -> Result; + // Implementation of a privileged call. This doesn't have an `origin` parameter because + // it's not (directly) from an extrinsic, but rather the system as a whole has decided + // to execute it. Different runtimes have different reasons for allow privileged + // calls to be executed - we don't need to care why. Because it's privileged, we can + // assume it's a one-off operation and substantial processing/storage/memory can be used + // without worrying about gameability or attack scenarios. + fn set_dummy(new_value: T::Balance) -> Result { + // Put the new value into storage. + >::put(new_value); + + // All good. + Ok(()) + } // The signature could also look like: `fn on_finalise()` fn on_finalise(_n: T::BlockNumber) { @@ -168,85 +245,11 @@ decl_storage! { // The main implementation block for the module. Functions here fall into three broad // categories: -// - Implementations of dispatch functions. The dispatch code generated by the module macro -// expects each of its functions to be implemented. // - Public interface. These are functions that are `pub` and generally fall into inspector // functions that do not write to storage and operation functions that do. // - Private functions. These are your usual private utilities unavailable to other modules. impl Module { - /// Deposit one of this module's events. - // TODO: move into `decl_module` macro. - fn deposit_event(event: Event) { - >::deposit_event(::Event::from(event).into()); - } - - // Implement Calls and add public immutables and private mutables. - - // Implement dispatched function `accumulate_dummy`. This just increases the value - // of `Dummy` by `increase_by`. - // - // Since this is a dispatched function there are two extremely important things to - // remember: - // - // - MUST NOT PANIC: Under no circumstances (save, perhaps, storage getting into an - // irreparably damaged state) must this function panic. - // - NO SIDE-EFFECTS ON ERROR: This function must either complete totally (and return - // `Ok(())` or it must have no side-effects on storage and return `Err('Some reason')`. - // - // The first is relatively easy to audit for - just ensure all panickers are removed from - // logic that executes in production (which you do anyway, right?!). To ensure the second - // is followed, you should do all tests for validity at the top of your function. This - // is stuff like checking the sender (`origin`) or that state is such that the operation - // makes sense. - // - // Once you've determined that it's all good, then enact the operation and change storage. - // If you can't be certain that the operation will succeed without substantial computation - // then you have a classic blockchain attack scenario. The normal way of managing this is - // to attach a bond to the operation. As the first major alteration of storage, reserve - // some value from the sender's account (`Balances` module has a `reserve` function for - // exactly this scenario). This amount should be enough to cover any costs of the - // substantial execution in case it turns out that you can't proceed with the operation. - // - // If it eventually transpires that the operation is fine and, therefore, that the - // expense of the checks should be borne by the network, then you can refund the reserved - // deposit. If, however, the operation turns out to be invalid and the computation is - // wasted, then you can burn it or repatriate elsewhere. - // - // Security bonds ensure that attackers can't game it by ensuring that anyone interacting - // with the system either progresses it or pays for the trouble of faffing around with - // no progress. - // - // If you don't respect these rules, it is likely that your chain will be attackable. - fn accumulate_dummy(origin: T::Origin, increase_by: T::Balance) -> Result { - // This is a public call, so we ensure that the origin is some signed account. - let _sender = ensure_signed(origin)?; - - // Read the value of dummy from storage. - // let dummy = Self::dummy(); - // Will also work using the `::get` on the storage item type itself: - // let dummy = >::get(); - - // Calculate the new value. - // let new_dummy = dummy.map_or(increase_by, |dummy| dummy + increase_by); - - // Put the new value into storage. - // >::put(new_dummy); - // Will also work with a reference: - // >::put(&new_dummy); - - // Here's the new one of read and then modify the value. - >::mutate(|dummy| { - let new_dummy = dummy.map_or(increase_by, |dummy| dummy + increase_by); - *dummy = Some(new_dummy); - }); - - // Let's deposit an event to let the outside world know this happened. - Self::deposit_event(RawEvent::Dummy(increase_by)); - - // All good. - Ok(()) - } - + // Add public immutables and private mutables. #[allow(dead_code)] fn accumulate_foo(origin: T::Origin, increase_by: T::Balance) -> Result { let _sender = ensure_signed(origin)?; @@ -261,20 +264,6 @@ impl Module { Ok(()) } - - // Implementation of a privileged call. This doesn't have an `origin` parameter because - // it's not (directly) from an extrinsic, but rather the system as a whole has decided - // to execute it. Different runtimes have different reasons for allow privileged - // calls to be executed - we don't need to care why. Because it's privileged, we can - // assume it's a one-off operation and substantial processing/storage/memory can be used - // without worrying about gameability or attack scenarios. - fn set_dummy(new_value: T::Balance) -> Result { - // Put the new value into storage. - >::put(new_value); - - // All good. - Ok(()) - } } #[cfg(test)] diff --git a/substrate/srml/session/src/lib.rs b/substrate/srml/session/src/lib.rs index 44d8922723..cc75c75bc5 100644 --- a/substrate/srml/session/src/lib.rs +++ b/substrate/srml/session/src/lib.rs @@ -67,10 +67,28 @@ pub trait Trait: timestamp::Trait { decl_module! { pub struct Module for enum Call where origin: T::Origin { - fn set_key(origin, key: T::SessionKey) -> Result; + fn deposit_event() = default; + + /// Sets the session key of `_validator` to `_key`. This doesn't take effect until the next + /// session. + fn set_key(origin, key: T::SessionKey) -> Result { + let who = ensure_signed(origin)?; + // set new value for next session + >::insert(who, key); + Ok(()) + } + + /// Set a new session length. Won't kick in until the next session change (at current length). + fn set_length(new: ::Type) -> Result { + >::put(new.into()); + Ok(()) + } + + /// Forces a new session. + fn force_new_session(apply_rewards: bool) -> Result { + Self::apply_force_new_session(apply_rewards) + } - fn set_length(new: ::Type) -> Result; - fn force_new_session(apply_rewards: bool) -> Result; fn on_finalise(n: T::BlockNumber) { Self::check_rotate_session(n); } @@ -111,12 +129,6 @@ decl_storage! { } impl Module { - - /// Deposit one of this module's events. - fn deposit_event(event: Event) { - >::deposit_event(::Event::from(event).into()); - } - /// The number of validators currently. pub fn validator_count() -> u32 { >::get().len() as u32 // TODO: can probably optimised @@ -127,28 +139,7 @@ impl Module { >::get().unwrap_or_else(T::BlockNumber::zero) } - /// Sets the session key of `_validator` to `_key`. This doesn't take effect until the next - /// session. - fn set_key(origin: T::Origin, key: T::SessionKey) -> Result { - let who = ensure_signed(origin)?; - // set new value for next session - >::insert(who, key); - Ok(()) - } - - /// Set a new session length. Won't kick in until the next session change (at current length). - fn set_length(new: ::Type) -> Result { - >::put(new.into()); - Ok(()) - } - - /// Forces a new session. - pub fn force_new_session(apply_rewards: bool) -> Result { - Self::apply_force_new_session(apply_rewards) - } - // INTERNAL API (available to other runtime modules) - /// Forces a new session, no origin. pub fn apply_force_new_session(apply_rewards: bool) -> Result { >::put(apply_rewards); diff --git a/substrate/srml/staking/src/lib.rs b/substrate/srml/staking/src/lib.rs index 370c17ddb5..680da340c5 100644 --- a/substrate/srml/staking/src/lib.rs +++ b/substrate/srml/staking/src/lib.rs @@ -105,17 +105,140 @@ pub trait Trait: balances::Trait + session::Trait { decl_module! { #[cfg_attr(feature = "std", serde(bound(deserialize = "T::Balance: ::serde::de::DeserializeOwned")))] pub struct Module for enum Call where origin: T::Origin { - fn stake(origin) -> Result; - fn unstake(origin, intentions_index: Compact) -> Result; - fn nominate(origin, target: Address) -> Result; - fn unnominate(origin, target_index: Compact) -> Result; - fn register_preferences(origin, intentions_index: Compact, prefs: ValidatorPrefs) -> Result; + fn deposit_event() = default; - fn set_sessions_per_era(new: ::Type) -> Result; - fn set_bonding_duration(new: ::Type) -> Result; - fn set_validator_count(new: Compact) -> Result; - fn force_new_era(apply_rewards: bool) -> Result; - fn set_offline_slash_grace(new: Compact) -> Result; + /// Declare the desire to stake for the transactor. + /// + /// Effects will be felt at the beginning of the next era. + fn stake(origin) -> Result { + let who = ensure_signed(origin)?; + ensure!(Self::nominating(&who).is_none(), "Cannot stake if already nominating."); + let mut intentions = >::get(); + // can't be in the list twice. + ensure!(intentions.iter().find(|&t| t == &who).is_none(), "Cannot stake if already staked."); + + >::insert(&who, T::BlockNumber::max_value()); + intentions.push(who); + >::put(intentions); + Ok(()) + } + + /// Retract the desire to stake for the transactor. + /// + /// Effects will be felt at the beginning of the next era. + fn unstake(origin, intentions_index: Compact) -> Result { + let who = ensure_signed(origin)?; + let intentions_index: u32 = intentions_index.into(); + // unstake fails in degenerate case of having too few existing staked parties + if Self::intentions().len() <= Self::minimum_validator_count() as usize { + return Err("cannot unstake when there are too few staked participants") + } + Self::apply_unstake(&who, intentions_index as usize) + } + + fn nominate(origin, target: Address) -> Result { + let who = ensure_signed(origin)?; + let target = >::lookup(target)?; + + ensure!(Self::nominating(&who).is_none(), "Cannot nominate if already nominating."); + ensure!(Self::intentions().iter().find(|&t| t == &who).is_none(), "Cannot nominate if already staked."); + + // update nominators_for + let mut t = Self::nominators_for(&target); + t.push(who.clone()); + >::insert(&target, t); + + // update nominating + >::insert(&who, &target); + + // Update bondage + >::insert(&who, T::BlockNumber::max_value()); + + Ok(()) + } + + /// Will panic if called when source isn't currently nominating target. + /// Updates Nominating, NominatorsFor and NominationBalance. + fn unnominate(origin, target_index: Compact) -> Result { + let source = ensure_signed(origin)?; + let target_index: u32 = target_index.into(); + let target_index = target_index as usize; + + let target = >::get(&source).ok_or("Account must be nominating")?; + + let mut t = Self::nominators_for(&target); + if t.get(target_index) != Some(&source) { + return Err("Invalid target index") + } + + // Ok - all valid. + + // update nominators_for + t.swap_remove(target_index); + >::insert(&target, t); + + // update nominating + >::remove(&source); + + // update bondage + >::insert( + source, + >::block_number() + Self::bonding_duration() + ); + Ok(()) + } + + /// Set the given account's preference for slashing behaviour should they be a validator. + /// + /// An error (no-op) if `Self::intentions()[intentions_index] != origin`. + fn register_preferences( + origin, + intentions_index: Compact, + prefs: ValidatorPrefs + ) -> Result { + let who = ensure_signed(origin)?; + let intentions_index: u32 = intentions_index.into(); + + if Self::intentions().get(intentions_index as usize) != Some(&who) { + return Err("Invalid index") + } + + >::insert(who, prefs); + + Ok(()) + } + + /// Set the number of sessions in an era. + fn set_sessions_per_era(new: ::Type) -> Result { + >::put(new.into()); + Ok(()) + } + + /// The length of the bonding duration in eras. + fn set_bonding_duration(new: ::Type) -> Result { + >::put(new.into()); + Ok(()) + } + + /// The length of a staking era in sessions. + fn set_validator_count(new: Compact) -> Result { + let new: u32 = new.into(); + >::put(new); + Ok(()) + } + + /// Force there to be a new era. This also forces a new session immediately after. + /// `apply_rewards` should be true for validators to get the session reward. + fn force_new_era(apply_rewards: bool) -> Result { + Self::apply_force_new_era(apply_rewards) + } + + /// Set the offline slash grace period. + fn set_offline_slash_grace(new: Compact) -> Result { + let new: u32 = new.into(); + >::put(new); + Ok(()) + } } } @@ -189,10 +312,10 @@ decl_storage! { } impl Module { - - /// Deposit one of this module's events. - fn deposit_event(event: Event) { - >::deposit_event(::Event::from(event).into()); + // Just force_new_era without origin check. + fn apply_force_new_era(apply_rewards: bool) -> Result { + >::put(()); + >::apply_force_new_session(apply_rewards) } // PUBLIC IMMUTABLES @@ -225,147 +348,6 @@ impl Module { } } - // PUBLIC DISPATCH - - /// Declare the desire to stake for the transactor. - /// - /// Effects will be felt at the beginning of the next era. - fn stake(origin: T::Origin) -> Result { - let who = ensure_signed(origin)?; - ensure!(Self::nominating(&who).is_none(), "Cannot stake if already nominating."); - let mut intentions = >::get(); - // can't be in the list twice. - ensure!(intentions.iter().find(|&t| t == &who).is_none(), "Cannot stake if already staked."); - - >::insert(&who, T::BlockNumber::max_value()); - intentions.push(who); - >::put(intentions); - Ok(()) - } - - /// Retract the desire to stake for the transactor. - /// - /// Effects will be felt at the beginning of the next era. - fn unstake(origin: T::Origin, intentions_index: Compact) -> Result { - let who = ensure_signed(origin)?; - let intentions_index: u32 = intentions_index.into(); - // unstake fails in degenerate case of having too few existing staked parties - if Self::intentions().len() <= Self::minimum_validator_count() as usize { - return Err("cannot unstake when there are too few staked participants") - } - Self::apply_unstake(&who, intentions_index as usize) - } - - fn nominate(origin: T::Origin, target: Address) -> Result { - let who = ensure_signed(origin)?; - let target = >::lookup(target)?; - - ensure!(Self::nominating(&who).is_none(), "Cannot nominate if already nominating."); - ensure!(Self::intentions().iter().find(|&t| t == &who).is_none(), "Cannot nominate if already staked."); - - // update nominators_for - let mut t = Self::nominators_for(&target); - t.push(who.clone()); - >::insert(&target, t); - - // update nominating - >::insert(&who, &target); - - // Update bondage - >::insert(&who, T::BlockNumber::max_value()); - - Ok(()) - } - - /// Will panic if called when source isn't currently nominating target. - /// Updates Nominating, NominatorsFor and NominationBalance. - fn unnominate(origin: T::Origin, target_index: Compact) -> Result { - let source = ensure_signed(origin)?; - let target_index: u32 = target_index.into(); - let target_index = target_index as usize; - - let target = >::get(&source).ok_or("Account must be nominating")?; - - let mut t = Self::nominators_for(&target); - if t.get(target_index) != Some(&source) { - return Err("Invalid target index") - } - - // Ok - all valid. - - // update nominators_for - t.swap_remove(target_index); - >::insert(&target, t); - - // update nominating - >::remove(&source); - - // update bondage - >::insert(source, >::block_number() + Self::bonding_duration()); - Ok(()) - } - - /// Set the given account's preference for slashing behaviour should they be a validator. - /// - /// An error (no-op) if `Self::intentions()[intentions_index] != origin`. - fn register_preferences( - origin: T::Origin, - intentions_index: Compact, - prefs: ValidatorPrefs - ) -> Result { - let who = ensure_signed(origin)?; - let intentions_index: u32 = intentions_index.into(); - - if Self::intentions().get(intentions_index as usize) != Some(&who) { - return Err("Invalid index") - } - - >::insert(who, prefs); - - Ok(()) - } - - // PRIV DISPATCH - - /// Set the number of sessions in an era. - fn set_sessions_per_era(new: ::Type) -> Result { - >::put(new.into()); - Ok(()) - } - - /// The length of the bonding duration in eras. - fn set_bonding_duration(new: ::Type) -> Result { - >::put(new.into()); - Ok(()) - } - - /// The length of a staking era in sessions. - fn set_validator_count(new: Compact) -> Result { - let new: u32 = new.into(); - >::put(new); - Ok(()) - } - - /// Force there to be a new era. This also forces a new session immediately after. - /// `apply_rewards` should be true for validators to get the session reward. - fn force_new_era(apply_rewards: bool) -> Result { - Self::apply_force_new_era(apply_rewards) - } - - // Just force_new_era without origin check. - fn apply_force_new_era(apply_rewards: bool) -> Result { - >::put(()); - >::apply_force_new_session(apply_rewards) - } - - - /// Set the offline slash grace period. - fn set_offline_slash_grace(new: Compact) -> Result { - let new: u32 = new.into(); - >::put(new); - Ok(()) - } - // PUBLIC MUTABLES (DANGEROUS) /// Slash a given validator by a specific amount. Removes the slash from their balance by preference, diff --git a/substrate/srml/support/src/dispatch.rs b/substrate/srml/support/src/dispatch.rs index 8bdfcc88b9..8a131336ae 100644 --- a/substrate/srml/support/src/dispatch.rs +++ b/substrate/srml/support/src/dispatch.rs @@ -75,7 +75,8 @@ macro_rules! decl_module { decl_module!(@normalize $(#[$attr])* pub struct $mod_type<$trait_instance: $trait_name> - for enum $call_type where origin: $origin_type where system = system + for enum $call_type where origin: $origin_type, system = system + {} {} [] $($t)* @@ -84,14 +85,15 @@ macro_rules! decl_module { ( $(#[$attr:meta])* pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> - for enum $call_type:ident where origin: $origin_type:ty where system = $system:ident { + for enum $call_type:ident where origin: $origin_type:ty, system = $system:ident { $($t:tt)* } ) => { decl_module!(@normalize $(#[$attr])* pub struct $mod_type<$trait_instance: $trait_name> - for enum $call_type where origin: $origin_type where system = $system + for enum $call_type where origin: $origin_type, system = $system + {} {} [] $($t)* @@ -101,17 +103,61 @@ macro_rules! decl_module { (@normalize $(#[$attr:meta])* pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> - for enum $call_type:ident where origin: $origin_type:ty where system = $system:ident + for enum $call_type:ident where origin: $origin_type:ty, system = $system:ident + {} { $( $on_finalise:tt )* } [ $($t:tt)* ] $(#[doc = $doc_attr:tt])* + $vis:vis fn deposit_event() = default; + $($rest:tt)* + ) => { + decl_module!(@normalize + $(#[$attr])* + pub struct $mod_type<$trait_instance: $trait_name> + for enum $call_type where origin: $origin_type, system = $system + { $vis fn deposit_event() = default; } + { $( $on_finalise )* } + [ $($t)* ] + $($rest)* + ); + }; + (@normalize + $(#[$attr:meta])* + pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> + for enum $call_type:ident where origin: $origin_type:ty, system = $system:ident + {} + { $( $on_finalise:tt )* } + [ $($t:tt)* ] + $(#[doc = $doc_attr:tt])* + $vis:vis fn deposit_event($($param_name:ident : $param:ty),* ) { $( $impl:tt )* } + $($rest:tt)* + ) => { + decl_module!(@normalize + $(#[$attr])* + pub struct $mod_type<$trait_instance: $trait_name> + for enum $call_type where origin: $origin_type, system = $system + { $vis fn deposit_event($( $param_name: $param ),* ) { $( $impl )* } } + { $( $on_finalise )* } + [ $($t)* ] + $($rest)* + ); + }; + (@normalize + $(#[$attr:meta])* + pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> + for enum $call_type:ident where origin: $origin_type:ty, system = $system:ident + { $( $deposit_event:tt )* } + {} + [ $($t:tt)* ] + $(#[doc = $doc_attr:tt])* fn on_finalise($($param_name:ident : $param:ty),* ) { $( $impl:tt )* } $($rest:tt)* ) => { decl_module!(@normalize $(#[$attr])* pub struct $mod_type<$trait_instance: $trait_name> - for enum $call_type where origin: $origin_type where system = $system + for enum $call_type where origin: $origin_type, system = $system + { $( $deposit_event )* } { fn on_finalise( $( $param_name : $param ),* ) { $( $impl )* } } [ $($t)* ] $($rest)* @@ -120,64 +166,72 @@ macro_rules! decl_module { (@normalize $(#[$attr:meta])* pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> - for enum $call_type:ident where origin: $origin_type:ty where system = $system:ident + for enum $call_type:ident where origin: $origin_type:ty, system = $system:ident + { $( $deposit_event:tt )* } { $( $on_finalise:tt )* } [ $($t:tt)* ] $(#[doc = $doc_attr:tt])* - fn $fn_name:ident(origin $(, $param_name:ident : $param:ty)* ) -> $result:ty ; + $fn_vis:vis fn $fn_name:ident($origin:ident $(, $param_name:ident : $param:ty)* ) -> $result:ty { $( $impl:tt )* } $($rest:tt)* ) => { decl_module!(@normalize $(#[$attr])* pub struct $mod_type<$trait_instance: $trait_name> - for enum $call_type where origin: $origin_type where system = $system + for enum $call_type where origin: $origin_type, system = $system + { $( $deposit_event )* } { $( $on_finalise )* } - [ $($t)* $(#[doc = $doc_attr])* fn $fn_name(origin $( , $param_name : $param )* ) -> $result; ] + [ + $($t)* + $(#[doc = $doc_attr])* + $fn_vis fn $fn_name($origin $( , $param_name : $param )* ) -> $result { $( $impl )* } + ] $($rest)* ); }; (@normalize $(#[$attr:meta])* pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> - for enum $call_type:ident where origin: $origin_type:ty where system = $system:ident + for enum $call_type:ident where origin: $origin_type:ty, system = $system:ident + { $( $deposit_event:tt )* } { $( $on_finalise:tt )* } [ $($t:tt)* ] $(#[doc = $doc_attr:tt])* - fn $fn_name:ident($( $param_name:ident : $param:ty),* ) -> $result:ty ; + $fn_vis:vis fn $fn_name:ident($( $param_name:ident : $param:ty),* ) -> $result:ty { $( $impl:tt )* } $($rest:tt)* ) => { decl_module!(@normalize $(#[$attr])* pub struct $mod_type<$trait_instance: $trait_name> - for enum $call_type where origin: $origin_type where system = $system + for enum $call_type where origin: $origin_type, system = $system + { $( $deposit_event )* } { $( $on_finalise )* } - [ $($t)* $(#[doc = $doc_attr])* fn $fn_name(root $( , $param_name : $param )* ) -> $result; ] + [ + $($t)* + $(#[doc = $doc_attr])* + fn $fn_name(root $( , $param_name : $param )* ) -> $result { $( $impl )* } + ] $($rest)* ); }; (@normalize $(#[$attr:meta])* pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> - for enum $call_type:ident where origin: $origin_type:ty where system = $system:ident + for enum $call_type:ident where origin: $origin_type:ty, system = $system:ident + { $( $deposit_event:tt )* } { $( $on_finalise:tt )* } [ $($t:tt)* ] ) => { decl_module!(@imp $(#[$attr])* pub struct $mod_type<$trait_instance: $trait_name> - for enum $call_type where origin: $origin_type where system = $system { + for enum $call_type where origin: $origin_type, system = $system { $($t)* } + { $( $deposit_event )* } { $( $on_finalise )* } ); }; - (@call - origin - $mod_type:ident $trait_instance:ident $fn_name:ident $origin:ident $system:ident [ $( $param_name:ident),* ] - ) => { - <$mod_type<$trait_instance>>::$fn_name( $origin $(, $param_name )* ) - }; (@call root $mod_type:ident $trait_instance:ident $fn_name:ident $origin:ident $system:ident [ $( $param_name:ident),* ] @@ -187,6 +241,44 @@ macro_rules! decl_module { <$mod_type<$trait_instance>>::$fn_name( $( $param_name ),* ) } }; + (@call + $ingore:ident + $mod_type:ident $trait_instance:ident $fn_name:ident $origin:ident $system:ident [ $( $param_name:ident),* ] + ) => { + <$mod_type<$trait_instance>>::$fn_name( $origin $(, $param_name )* ) + }; + + // no `deposit_event` function wanted + (@impl_deposit_event + $module:ident<$trait_instance:ident: $trait_name:ident>; + $system:ident; + ) => {}; + + (@impl_deposit_event + $module:ident<$trait_instance:ident: $trait_name:ident>; + $system:ident; + $vis:vis fn deposit_event() = default; + ) => { + impl<$trait_instance: $trait_name> $module<$trait_instance> { + $vis fn deposit_event(event: Event<$trait_instance>) { + <$system::Module<$trait_instance>>::deposit_event( + <$trait_instance as $trait_name>::Event::from(event).into() + ); + } + } + }; + + (@impl_deposit_event + $module:ident<$trait_instance:ident: $trait_name:ident>; + $system:ident; + $vis:vis fn deposit_event($param:ident : $param_ty:ty) { $( $impl:tt )* } + ) => { + impl<$trait_instance: $trait_name> $module<$trait_instance> { + $vis fn deposit_event($param: $param_ty) { + $( $impl )* + } + } + }; (@impl_on_finalise $module:ident<$trait_instance:ident: $trait_name:ident>; @@ -218,15 +310,43 @@ macro_rules! decl_module { for $module<$trait_instance> {} }; + (@impl_function + $module:ident<$trait_instance:ident: $trait_name:ident>; + $origin_ty:ty; + root; + $vis:vis fn $name:ident ( root $(, $param:ident : $param_ty:ty )* ) -> $result:ty { $( $impl:tt )* } + ) => { + impl<$trait_instance: $trait_name> $module<$trait_instance> { + $vis fn $name($( $param: $param_ty ),* ) -> $result { + $( $impl )* + } + } + }; + (@impl_function + $module:ident<$trait_instance:ident: $trait_name:ident>; + $origin_ty:ty; + $ignore:ident; + $vis:vis fn $name:ident ( $origin:ident $(, $param:ident : $param_ty:ty )* ) -> $result:ty { $( $impl:tt )* } + ) => { + impl<$trait_instance: $trait_name> $module<$trait_instance> { + $vis fn $name($origin: $origin_ty $(, $param: $param_ty )* ) -> $result { + $( $impl )* + } + } + }; + (@imp $(#[$attr:meta])* pub struct $mod_type:ident<$trait_instance:ident: $trait_name:ident> - for enum $call_type:ident where origin: $origin_type:ty where system = $system:ident { + for enum $call_type:ident where origin: $origin_type:ty, system = $system:ident { $( $(#[doc = $doc_attr:tt])* - fn $fn_name:ident($from:ident $( , $param_name:ident : $param:ty)*) -> $result:ty; + $fn_vis:vis fn $fn_name:ident( + $from:ident $( , $param_name:ident : $param:ty)* + ) -> $result:ty { $( $impl:tt )* } )* } + { $( $deposit_event:tt )* } { $( $on_finalise:tt )* } ) => { // Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. @@ -250,6 +370,23 @@ macro_rules! decl_module { $( $on_finalise )* } + decl_module! { + @impl_deposit_event + $mod_type<$trait_instance: $trait_name>; + $system; + $( $deposit_event )* + } + + $( + decl_module! { + @impl_function + $mod_type<$trait_instance: $trait_name>; + $origin_type; + $from; + $fn_vis fn $fn_name ($from $(, $param_name : $param )* ) -> $result { $( $impl )* } + } + )* + #[cfg(feature = "std")] $(#[$attr])* #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] @@ -357,7 +494,11 @@ macro_rules! decl_module { match self { $( $call_type::$fn_name( $( $param_name ),* ) => { - decl_module!(@call $from $mod_type $trait_instance $fn_name _origin $system [ $( $param_name ),* ]) + decl_module!( + @call + $from + $mod_type $trait_instance $fn_name _origin $system [ $( $param_name ),* ] + ) }, )* _ => { panic!("__PhantomItem should never be used.") }, @@ -694,11 +835,11 @@ mod tests { decl_module! { pub struct Module for enum Call where origin: T::Origin { /// Hi, this is a comment. - fn aux_0(origin) -> Result; - fn aux_1(origin, data: i32) -> Result; - fn aux_2(origin, data: i32, data2: String) -> Result; - fn aux_3() -> Result; - fn aux_4(data: i32) -> Result; + fn aux_0(_origin) -> Result { unreachable!() } + fn aux_1(_origin, _data: i32) -> Result { unreachable!() } + fn aux_2(_origin, _data: i32, _data2: String) -> Result { unreachable!() } + fn aux_3() -> Result { unreachable!() } + fn aux_4(_data: i32) -> Result { unreachable!() } } } @@ -720,7 +861,7 @@ mod tests { name: DecodeDifferent::Encode("aux_1"), arguments: DecodeDifferent::Encode(&[ FunctionArgumentMetadata { - name: DecodeDifferent::Encode("data"), + name: DecodeDifferent::Encode("_data"), ty: DecodeDifferent::Encode("i32"), } ]), @@ -731,11 +872,11 @@ mod tests { name: DecodeDifferent::Encode("aux_2"), arguments: DecodeDifferent::Encode(&[ FunctionArgumentMetadata { - name: DecodeDifferent::Encode("data"), + name: DecodeDifferent::Encode("_data"), ty: DecodeDifferent::Encode("i32"), }, FunctionArgumentMetadata { - name: DecodeDifferent::Encode("data2"), + name: DecodeDifferent::Encode("_data2"), ty: DecodeDifferent::Encode("String"), } ]), @@ -752,7 +893,7 @@ mod tests { name: DecodeDifferent::Encode("aux_4"), arguments: DecodeDifferent::Encode(&[ FunctionArgumentMetadata { - name: DecodeDifferent::Encode("data"), + name: DecodeDifferent::Encode("_data"), ty: DecodeDifferent::Encode("i32"), } ]), @@ -762,28 +903,6 @@ mod tests { }, }; - impl Module { - fn aux_0(_: T::Origin) -> Result { - unreachable!() - } - - fn aux_1(_: T::Origin, _: i32) -> Result { - unreachable!() - } - - fn aux_2(_: T::Origin, _: i32, _: String) -> Result { - unreachable!() - } - - fn aux_3() -> Result { - unreachable!() - } - - fn aux_4(_: i32) -> Result { - unreachable!() - } - } - struct TraitImpl {} impl Trait for TraitImpl { diff --git a/substrate/srml/support/src/metadata.rs b/substrate/srml/support/src/metadata.rs index 2a6b05bde2..c1c4966442 100644 --- a/substrate/srml/support/src/metadata.rs +++ b/substrate/srml/support/src/metadata.rs @@ -160,13 +160,7 @@ mod tests { decl_module! { pub struct Module for enum Call where origin: T::Origin { - fn aux_0(origin) -> Result; - } - } - - impl Module { - fn aux_0(_: T::Origin) -> Result { - unreachable!() + fn aux_0(_origin) -> Result { unreachable!() } } } } diff --git a/substrate/srml/system/src/lib.rs b/substrate/srml/system/src/lib.rs index ad8957c349..c34f11bf8d 100644 --- a/substrate/srml/system/src/lib.rs +++ b/substrate/srml/system/src/lib.rs @@ -86,7 +86,16 @@ pub trait Trait: Eq + Clone { pub type DigestItemOf = <::Digest as traits::Digest>::Item; decl_module! { - pub struct Module for enum Call where origin: T::Origin {} + pub struct Module for enum Call where origin: T::Origin { + /// Deposits an event onto this block's event record. + pub fn deposit_event(event: T::Event) { + let extrinsic_index = Self::extrinsic_index(); + let phase = extrinsic_index.map_or(Phase::Finalization, |c| Phase::ApplyExtrinsic(c)); + let mut events = Self::events(); + events.push(EventRecord { phase, event }); + >::put(events); + } + } } /// A phase of a block's execution. @@ -301,15 +310,6 @@ impl Module { >::put(l); } - /// Deposits an event onto this block's event record. - pub fn deposit_event(event: T::Event) { - let extrinsic_index = Self::extrinsic_index(); - let phase = extrinsic_index.map_or(Phase::Finalization, |c| Phase::ApplyExtrinsic(c)); - let mut events = Self::events(); - events.push(EventRecord { phase, event }); - >::put(events); - } - /// Calculate the current block's random seed. fn calculate_random() -> T::Hash { assert!(Self::block_number() > Zero::zero(), "Block number may never be zero"); diff --git a/substrate/srml/timestamp/src/lib.rs b/substrate/srml/timestamp/src/lib.rs index 6b42a8218a..1779807af1 100644 --- a/substrate/srml/timestamp/src/lib.rs +++ b/substrate/srml/timestamp/src/lib.rs @@ -74,7 +74,33 @@ pub trait Trait: consensus::Trait + system::Trait { decl_module! { pub struct Module for enum Call where origin: T::Origin { - fn set(origin, now: ::Type) -> Result; + /// Set the current time. + /// + /// Extrinsic with this call should be placed at the specific position in the each block + /// (specified by the Trait::TIMESTAMP_SET_POSITION) typically at the start of the each block. + /// This call should be invoked exactly once per block. It will panic at the finalization phase, + /// if this call hasn't been invoked by that time. + /// + /// The timestamp should be greater than the previous one by the amount specified by `block_period`. + fn set(origin, now: ::Type) -> Result { + ensure_inherent(origin)?; + let now = now.into(); + + assert!(!::DidUpdate::exists(), "Timestamp must be updated only once in the block"); + assert!( + >::extrinsic_index() == Some(T::TIMESTAMP_SET_POSITION), + "Timestamp extrinsic must be at position {} in the block", + T::TIMESTAMP_SET_POSITION + ); + assert!( + Self::now().is_zero() || now >= Self::now() + Self::block_period(), + "Timestamp must increment by at least between sequential blocks" + ); + ::Now::put(now); + ::DidUpdate::put(true); + Ok(()) + } + fn on_finalise() { assert!(::DidUpdate::take(), "Timestamp must be updated once in the block"); } @@ -103,33 +129,6 @@ impl Module { Self::now() } - /// Set the current time. - /// - /// Extrinsic with this call should be placed at the specific position in the each block - /// (specified by the Trait::TIMESTAMP_SET_POSITION) typically at the start of the each block. - /// This call should be invoked exactly once per block. It will panic at the finalization phase, - /// if this call hasn't been invoked by that time. - /// - /// The timestamp should be greater than the previous one by the amount specified by `block_period`. - fn set(origin: T::Origin, now: ::Type) -> Result { - ensure_inherent(origin)?; - let now = now.into(); - - assert!(!::DidUpdate::exists(), "Timestamp must be updated only once in the block"); - assert!( - >::extrinsic_index() == Some(T::TIMESTAMP_SET_POSITION), - "Timestamp extrinsic must be at position {} in the block", - T::TIMESTAMP_SET_POSITION - ); - assert!( - Self::now().is_zero() || now >= Self::now() + Self::block_period(), - "Timestamp must increment by at least between sequential blocks" - ); - ::Now::put(now); - ::DidUpdate::put(true); - Ok(()) - } - /// Set the timestamp to something in particular. Only used for tests. #[cfg(feature = "std")] pub fn set_timestamp(now: T::Moment) { diff --git a/substrate/srml/treasury/src/lib.rs b/substrate/srml/treasury/src/lib.rs index 4c7c9c9107..7d314674bc 100644 --- a/substrate/srml/treasury/src/lib.rs +++ b/substrate/srml/treasury/src/lib.rs @@ -73,23 +73,80 @@ type ProposalIndex = u32; decl_module! { // Simple declaration of the `Module` type. Lets the macro know what its working on. pub struct Module for enum Call where origin: T::Origin { - // Put forward a suggestion for spending. A deposit proportional to the value - // is reserved and slashed if the proposal is rejected. It is returned once the - // proposal is awarded. - fn propose_spend(origin, value: ::Type, beneficiary: Address) -> Result; + fn deposit_event() = default; + /// Put forward a suggestion for spending. A deposit proportional to the value + /// is reserved and slashed if the proposal is rejected. It is returned once the + /// proposal is awarded. + fn propose_spend( + origin, + value: ::Type, + beneficiary: Address + ) -> Result { + let proposer = ensure_signed(origin)?; + let beneficiary = >::lookup(beneficiary)?; + let value = value.into(); - // Set the balance of funds available to spend. - fn set_pot(new_pot: ::Type) -> Result; + let bond = Self::calculate_bond(value); + >::reserve(&proposer, bond) + .map_err(|_| "Proposer's balance too low")?; - // (Re-)configure this module. - fn configure(proposal_bond: Permill, proposal_bond_minimum: ::Type, spend_period: ::Type, burn: Permill) -> Result; + let c = Self::proposal_count(); + >::put(c + 1); + >::insert(c, Proposal { proposer, value, beneficiary, bond }); - // Reject a proposed spend. The original deposit will be slashed. - fn reject_proposal(origin, proposal_id: Compact) -> Result; + Self::deposit_event(RawEvent::Proposed(c)); - // Approve a proposal. At a later time, the proposal will be allocated to the beneficiary - // and the original deposit will be returned. - fn approve_proposal(origin, proposal_id: Compact) -> Result; + Ok(()) + } + + /// Set the balance of funds available to spend. + fn set_pot(new_pot: ::Type) -> Result { + // Put the new value into storage. + >::put(new_pot.into()); + + // All good. + Ok(()) + } + + /// (Re-)configure this module. + fn configure( + proposal_bond: Permill, + proposal_bond_minimum: ::Type, + spend_period: ::Type, + burn: Permill + ) -> Result { + >::put(proposal_bond); + >::put(proposal_bond_minimum.into()); + >::put(spend_period.into()); + >::put(burn); + Ok(()) + } + + /// Reject a proposed spend. The original deposit will be slashed. + fn reject_proposal(origin, proposal_id: Compact) -> Result { + T::RejectOrigin::ensure_origin(origin)?; + let proposal_id: ProposalIndex = proposal_id.into(); + + let proposal = >::take(proposal_id).ok_or("No proposal at that index")?; + + let value = proposal.bond; + let _ = >::slash_reserved(&proposal.proposer, value); + + Ok(()) + } + + /// Approve a proposal. At a later time, the proposal will be allocated to the beneficiary + /// and the original deposit will be returned. + fn approve_proposal(origin, proposal_id: Compact) -> Result { + T::ApproveOrigin::ensure_origin(origin)?; + let proposal_id = proposal_id.into(); + + ensure!(>::exists(proposal_id), "No proposal at that index"); + + >::mutate(|v| v.push(proposal_id)); + + Ok(()) + } fn on_finalise(n: T::BlockNumber) { // Check to see if we should spend some funds! @@ -160,74 +217,7 @@ decl_event!( ); impl Module { - /// Deposit one of this module's events. - fn deposit_event(event: Event) { - >::deposit_event(::Event::from(event).into()); - } - - // Implement Calls and add public immutables and private mutables. - - fn propose_spend(origin: T::Origin, value: ::Type, beneficiary: Address) -> Result { - let proposer = ensure_signed(origin)?; - let beneficiary = >::lookup(beneficiary)?; - let value = value.into(); - - let bond = Self::calculate_bond(value); - >::reserve(&proposer, bond) - .map_err(|_| "Proposer's balance too low")?; - - let c = Self::proposal_count(); - >::put(c + 1); - >::insert(c, Proposal { proposer, value, beneficiary, bond }); - - Self::deposit_event(RawEvent::Proposed(c)); - - Ok(()) - } - - fn reject_proposal(origin: T::Origin, proposal_id: Compact) -> Result { - T::RejectOrigin::ensure_origin(origin)?; - let proposal_id: ProposalIndex = proposal_id.into(); - - let proposal = >::take(proposal_id).ok_or("No proposal at that index")?; - - let value = proposal.bond; - let _ = >::slash_reserved(&proposal.proposer, value); - - Ok(()) - } - - fn approve_proposal(origin: T::Origin, proposal_id: Compact) -> Result { - T::ApproveOrigin::ensure_origin(origin)?; - let proposal_id = proposal_id.into(); - - ensure!(>::exists(proposal_id), "No proposal at that index"); - - >::mutate(|v| v.push(proposal_id)); - - Ok(()) - } - - fn set_pot(new_pot: ::Type) -> Result { - // Put the new value into storage. - >::put(new_pot.into()); - - // All good. - Ok(()) - } - - fn configure( - proposal_bond: Permill, - proposal_bond_minimum: ::Type, - spend_period: ::Type, - burn: Permill - ) -> Result { - >::put(proposal_bond); - >::put(proposal_bond_minimum.into()); - >::put(spend_period.into()); - >::put(burn); - Ok(()) - } + // Add public immutables and private mutables. /// The needed bond for a proposal whose spend is `value`. fn calculate_bond(value: T::Balance) -> T::Balance { From 55e53a989837f3477c6041de0ee94994ab477cb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Fri, 26 Oct 2018 19:19:20 +0200 Subject: [PATCH 14/16] Use local index for misbehaviour calculation (#934) * Compute next index for misbehaviour reporting correctly. * Merge branch 'master' into td-graph-improvements --- substrate/node/consensus/src/lib.rs | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/substrate/node/consensus/src/lib.rs b/substrate/node/consensus/src/lib.rs index 9638a39715..2b100c10a8 100644 --- a/substrate/node/consensus/src/lib.rs +++ b/substrate/node/consensus/src/lib.rs @@ -227,6 +227,7 @@ impl bft::Environment<::Block> for ProposerFactory { client: Arc, start: Instant, local_key: Arc, + next_index: Option, parent_hash: <::Block as BlockT>::Hash, parent_id: BlockId<::Block>, parent_number: <<::Block as BlockT>::Header as HeaderT>::Number, @@ -450,24 +452,25 @@ impl bft::Proposer<::Block> for Proposer where use node_runtime::{Call, UncheckedExtrinsic, ConsensusCall}; let mut next_index = { - let local_id = self.local_key.public().0; - // let cur_index = self.transaction_pool.cull_and_get_pending(&BlockId::hash(self.parent_hash), |pending| pending - // .filter(|tx| tx.verified.sender == local_id) - // .last() - // .map(|tx| Ok(tx.verified.index())) - // .unwrap_or_else(|| self.client.account_nonce(&self.parent_id, local_id)) - // .map_err(Error::from) - // ); - // TODO [ToDr] Use pool data - let cur_index: Result = self.client.account_nonce(&self.parent_id, &local_id).map_err(Error::from); + let cur_index: Result = self.client + .account_nonce(&self.parent_id, &self.local_key.public().0) + .map_err(Error::from); - match cur_index { + let cur_index = match cur_index { Ok(cur_index) => cur_index + 1, Err(e) => { warn!(target: "consensus", "Error computing next transaction index: {:?}", e); return; } - } + }; + + let index = match self.next_index { + // make sure there were no other transactions in the meantime + Some(idx) if idx > cur_index => idx, + _ => cur_index, + }; + + index }; for (target, misbehavior) in misbehavior { @@ -487,6 +490,7 @@ impl bft::Proposer<::Block> for Proposer where let payload = (next_index, Call::Consensus(ConsensusCall::report_misbehavior(report)), Era::immortal(), self.client.genesis_hash()); let signature = self.local_key.sign(&payload.encode()).into(); next_index += 1; + self.next_index = Some(next_index); let local_id = self.local_key.public().0.into(); let extrinsic = UncheckedExtrinsic { From c0f702142798f7e0cf044006e2f0ef32a9423add Mon Sep 17 00:00:00 2001 From: guanqun Date: Sat, 27 Oct 2018 18:15:15 +0800 Subject: [PATCH 15/16] Remove pub in macros (#1027) * use :vis in macro_rules! * use :vis in meta --- .../core/executor/src/native_executor.rs | 8 +- .../srml/support/src/storage/generator.rs | 1010 ++--------------- 2 files changed, 110 insertions(+), 908 deletions(-) diff --git a/substrate/core/executor/src/native_executor.rs b/substrate/core/executor/src/native_executor.rs index 685aa48572..b51b43e14d 100644 --- a/substrate/core/executor/src/native_executor.rs +++ b/substrate/core/executor/src/native_executor.rs @@ -196,13 +196,9 @@ impl CodeExecutor for NativeExecutor { - pub struct $name; - native_executor_instance!(IMPL $name, $dispatcher, $version, $code); - }; - ($name:ident, $dispatcher:path, $version:path, $code:expr) => { + ( $pub:vis $name:ident, $dispatcher:path, $version:path, $code:expr) => { /// A unit struct which implements `NativeExecutionDispatch` feeding in the hard-coded runtime. - struct $name; + $pub struct $name; native_executor_instance!(IMPL $name, $dispatcher, $version, $code); }; (IMPL $name:ident, $dispatcher:path, $version:path, $code:expr) => { diff --git a/substrate/srml/support/src/storage/generator.rs b/substrate/srml/support/src/storage/generator.rs index 586ec5eb2b..4604c5b3b0 100644 --- a/substrate/srml/support/src/storage/generator.rs +++ b/substrate/srml/support/src/storage/generator.rs @@ -681,7 +681,7 @@ macro_rules! __generate_genesis_config { #[macro_export] macro_rules! decl_storage { ( - trait $storetype:ident for $modulename:ident<$traitinstance:ident: $traittype:ident> as $cratename:ident { + $pub:vis trait $storetype:ident for $modulename:ident<$traitinstance:ident: $traittype:ident> as $cratename:ident { $($t:tt)* } add_extra_genesis { @@ -690,7 +690,7 @@ macro_rules! decl_storage { } ) => { __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - trait $storetype { + $pub trait $storetype { __decl_store_items!($($t)*); } impl<$traitinstance: $traittype> $storetype for $modulename<$traitinstance> { @@ -703,33 +703,12 @@ macro_rules! decl_storage { __decl_genesis_config_items!([$traittype $traitinstance] [] [] [] [$( $(#[$attr])* $extrafield : $extraty $(= $default)* ; )* ] [$call] $($t)*); }; ( - pub trait $storetype:ident for $modulename:ident<$traitinstance:ident: $traittype:ident> as $cratename:ident { - $($t:tt)* - } - add_extra_genesis { - $( $(#[$attr:meta])* config($extrafield:ident) : $extraty:ty $(= $default:expr)* ;)* - build($call:expr); - } - ) => { - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - pub trait $storetype { - __decl_store_items!($($t)*); - } - impl<$traitinstance: $traittype> $storetype for $modulename<$traitinstance> { - __impl_store_items!($traitinstance $($t)*); - } - impl<$traitinstance: $traittype> $modulename<$traitinstance> { - __impl_store_fns!($traitinstance $($t)*); - } - __decl_genesis_config_items!([$traittype $traitinstance] [] [] [] [$( $(#[$attr])* $extrafield : $extraty $(= $default)* ; )* ] [$call] $($t)*); - }; - ( - trait $storetype:ident for $modulename:ident<$traitinstance:ident: $traittype:ident> as $cratename:ident { + $pub:vis trait $storetype:ident for $modulename:ident<$traitinstance:ident: $traittype:ident> as $cratename:ident { $($t:tt)* } ) => { __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - trait $storetype { + $pub trait $storetype { __decl_store_items!($($t)*); } impl<$traitinstance: $traittype> $storetype for $modulename<$traitinstance> { @@ -741,26 +720,8 @@ macro_rules! decl_storage { } __decl_genesis_config_items!([$traittype $traitinstance] [] [] [] [] [|_, _|{}] $($t)*); }; - ( - pub trait $storetype:ident for $modulename:ident<$traitinstance:ident: $traittype:ident> as $cratename:ident { - $($t:tt)* - } - ) => { - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - pub trait $storetype { - __decl_store_items!($($t)*); - } - impl<$traitinstance: $traittype> $storetype for $modulename<$traitinstance> { - __impl_store_items!($traitinstance $($t)*); - } - impl<$traitinstance: $traittype> $modulename<$traitinstance> { - __impl_store_fns!($traitinstance $($t)*); - } - __decl_genesis_config_items!([$traittype $traitinstance] [] [] [] [] [|_, _|{}] $($t)*); - } } -// TODO: when 'vis' is stablized, we could save the lines by half. #[macro_export] #[doc(hidden)] macro_rules! __decl_genesis_config_items { @@ -769,25 +730,13 @@ macro_rules! __decl_genesis_config_items { // - $default // we don't allow any config() or build() on this pattern. ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident : map $kty:ty => $ty:ty; + $(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => $ty:ty; $($t:tt)* ) => { __decl_genesis_config_items!([$traittype $traitinstance] [$($cur)*] [$($nb)*] [$($mapcur)*] [$($extras)*] [$call] $($t)*); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident : map $kty:ty => $ty:ty = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!([$traittype $traitinstance] [$($cur)*] [$($nb)*] [$($mapcur)*] [$($extras)*] [$call] $($t)*); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident : map $kty:ty => $ty:ty; - $($t:tt)* - ) => { - __decl_genesis_config_items!([$traittype $traitinstance] [$($cur)*] [$($nb)*] [$($mapcur)*] [$($extras)*] [$call] $($t)*); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident : map $kty:ty => $ty:ty = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!([$traittype $traitinstance] [$($cur)*] [$($nb)*] [$($mapcur)*] [$($extras)*] [$call] $($t)*); @@ -797,9 +746,8 @@ macro_rules! __decl_genesis_config_items { // - pub // - build() // - $default - // so there are 8 cases here. ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) : map $kty:ty => $ty:ty; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) : map $kty:ty => $ty:ty; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -813,7 +761,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) : map $kty:ty => $ty:ty = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) : map $kty:ty => $ty:ty = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -827,7 +775,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) build($build:expr) : map $kty:ty => $ty:ty; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) build($build:expr) : map $kty:ty => $ty:ty; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -841,64 +789,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) build($build:expr) : map $kty:ty => $ty:ty = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)*] - [$($mapcur)* $name ($build);] - [$($extras)*] - [$call] - $($t)* - ); - }; - - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) : map $kty:ty => $ty:ty; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)*] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) : map $kty:ty => $ty:ty = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)*] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) build($build:expr) : map $kty:ty => $ty:ty; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)*] - [$($mapcur)* $name ($build);] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) build($build:expr) : map $kty:ty => $ty:ty = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) build($build:expr) : map $kty:ty => $ty:ty = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -915,9 +806,8 @@ macro_rules! __decl_genesis_config_items { // simple values without getters: // - pub // - $default - // so there are 4 cases here. ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident : $ty:ty; + $(#[$doc:meta])* $pub:vis $name:ident : $ty:ty; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -931,35 +821,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident : $ty:ty = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)*] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident : $ty:ty; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)*] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident : $ty:ty = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident : $ty:ty = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -978,10 +840,9 @@ macro_rules! __decl_genesis_config_items { // - (empty) / config() / config(myname) // - build() // - $default - // so there are 24 cases here. // Option<> types ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) : Option<$ty:ty>; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) : Option<$ty:ty>; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -995,7 +856,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) : Option<$ty:ty> = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) : Option<$ty:ty> = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1009,7 +870,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config() : Option<$ty:ty>; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config() : Option<$ty:ty>; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1023,7 +884,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config() : Option<$ty:ty> = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config() : Option<$ty:ty> = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1037,7 +898,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config($myname:ident) : Option<$ty:ty>; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config($myname:ident) : Option<$ty:ty>; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1051,7 +912,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config($myname:ident) : Option<$ty:ty> = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config($myname:ident) : Option<$ty:ty> = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1066,7 +927,7 @@ macro_rules! __decl_genesis_config_items { }; // build ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) build($build:expr) : Option<$ty:ty>; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) build($build:expr) : Option<$ty:ty>; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1080,7 +941,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) build($build:expr) : Option<$ty:ty> = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) build($build:expr) : Option<$ty:ty> = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1094,7 +955,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config() build($build:expr) : Option<$ty:ty>; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config() build($build:expr) : Option<$ty:ty>; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1108,7 +969,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config() build($build:expr) : Option<$ty:ty> = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config() build($build:expr) : Option<$ty:ty> = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1122,7 +983,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : Option<$ty:ty>; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : Option<$ty:ty>; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1136,7 +997,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : Option<$ty:ty> = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : Option<$ty:ty> = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1150,181 +1011,9 @@ macro_rules! __decl_genesis_config_items { ); }; - // pub - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) : Option<$ty:ty>; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)*] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) : Option<$ty:ty> = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)*] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config() : Option<$ty:ty>; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $getfn : $ty = Default::default();] - [$($nb)* $name (|config: &GenesisConfig<$traitinstance>| config.$getfn.clone());] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config() : Option<$ty:ty> = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $getfn : $ty = $default.unwrap_or_default();] - [$($nb)* $name (|config: &GenesisConfig<$traitinstance>| config.$getfn.clone());] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config($myname:ident) : Option<$ty:ty>; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $myname : $ty = Default::default();] - [$($nb)* $name (|config: &GenesisConfig<$traitinstance>| config.$myname.clone()); ] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config($myname:ident) : Option<$ty:ty> = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $myname : $ty = $default.unwrap_or_default();] - [$($nb)* $name (|config: &GenesisConfig<$traitinstance>| config.$myname.clone()); ] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - // build - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) build($build:expr) : Option<$ty:ty>; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) build($build:expr) : Option<$ty:ty> = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config() build($build:expr) : Option<$ty:ty>; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $getfn : $ty = Default::default();] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config() build($build:expr) : Option<$ty:ty> = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $getfn : $ty = $default.unwrap_or_default();] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : Option<$ty:ty>; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $myname : $ty = Default::default();] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : Option<$ty:ty> = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $myname : $ty = $default.unwrap_or_default();] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - - // raw types ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) : $ty:ty; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) : $ty:ty; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1338,7 +1027,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) : $ty:ty = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) : $ty:ty = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1352,7 +1041,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config() : $ty:ty; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config() : $ty:ty; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1366,7 +1055,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config() : $ty:ty = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config() : $ty:ty = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1380,7 +1069,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config($myname:ident) : $ty:ty; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config($myname:ident) : $ty:ty; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1394,7 +1083,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config($myname:ident) : $ty:ty = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config($myname:ident) : $ty:ty = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1409,7 +1098,7 @@ macro_rules! __decl_genesis_config_items { }; // build ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) build($build:expr) : $ty:ty; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) build($build:expr) : $ty:ty; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1423,7 +1112,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) build($build:expr) : $ty:ty = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) build($build:expr) : $ty:ty = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1437,7 +1126,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config() build($build:expr) : $ty:ty; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config() build($build:expr) : $ty:ty; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1451,7 +1140,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config() build($build:expr) : $ty:ty = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config() build($build:expr) : $ty:ty = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1465,7 +1154,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : $ty:ty; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : $ty:ty; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1479,178 +1168,7 @@ macro_rules! __decl_genesis_config_items { ); }; ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : $ty:ty = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $myname : $ty = $default;] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - - // pub - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) : $ty:ty; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)*] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) : $ty:ty = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)*] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config() : $ty:ty; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $getfn : $ty = Default::default();] - [$($nb)* $name (|config: &GenesisConfig<$traitinstance>| config.$getfn.clone());] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config() : $ty:ty = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $getfn : $ty = $default;] - [$($nb)* $name (|config: &GenesisConfig<$traitinstance>| config.$getfn.clone());] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config($myname:ident) : $ty:ty; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $myname : $ty = Default::default();] - [$($nb)* $name (|config: &GenesisConfig<$traitinstance>| config.$myname.clone()); ] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config($myname:ident) : $ty:ty = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $myname : $ty = $default;] - [$($nb)* $name (|config: &GenesisConfig<$traitinstance>| config.$myname.clone()); ] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - // build - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) build($build:expr) : $ty:ty; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) build($build:expr) : $ty:ty = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)*] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config() build($build:expr) : $ty:ty; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $getfn : $ty = Default::default();] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config() build($build:expr) : $ty:ty = $default:expr; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $getfn : $ty = $default;] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : $ty:ty; - $($t:tt)* - ) => { - __decl_genesis_config_items!( - [$traittype $traitinstance] - [$($cur)* $myname : $ty = Default::default();] - [$($nb)* $name ($build);] - [$($mapcur)*] - [$($extras)*] - [$call] - $($t)* - ); - }; - ([$traittype:ident $traitinstance:ident] [$($cur:tt)*] [$($nb:tt)*] [$($mapcur:tt)*] [$($extras:tt)*] [$call:expr] - $(#[$doc:meta])* pub $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : $ty:ty = $default:expr; + $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) config($myname:ident) build($build:expr) : $ty:ty = $default:expr; $($t:tt)* ) => { __decl_genesis_config_items!( @@ -1680,42 +1198,24 @@ macro_rules! __decl_storage_items { // maps: // - pub // - $default - // so there are 4 cases here. - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident : map $kty:ty => Option<$ty:ty>; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = Default::default()); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => Option<$ty:ty>; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = Default::default()); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident : map $kty:ty => Option<$ty:ty> = $default:expr; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = $default); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident : map $kty:ty => Option<$ty:ty>; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = Default::default()); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident : map $kty:ty => Option<$ty:ty> = $default:expr; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = $default); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => Option<$ty:ty> = $default:expr; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = $default); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; // maps with getters: // - pub // - $default - // so there are 4 cases here. - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => Option<$ty:ty>; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = Default::default()); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => Option<$ty:ty>; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = Default::default()); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => Option<$ty:ty> = $default:expr; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = $default); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => Option<$ty:ty>; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = Default::default()); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => Option<$ty:ty> = $default:expr; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = $default); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => Option<$ty:ty> = $default:expr; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: map $kty => $ty = $default); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; @@ -1723,42 +1223,24 @@ macro_rules! __decl_storage_items { // maps: // - pub // - $default - // so there are 4 cases here. - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = Default::default()); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = Default::default()); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = $default); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = Default::default()); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = $default); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = $default); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; // maps: // - pub // - $default - // so there are 4 cases here. - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = Default::default()); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = Default::default()); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = $default); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = Default::default()); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = $default); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($fn:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: map $kty => $ty = $default); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; @@ -1766,21 +1248,12 @@ macro_rules! __decl_storage_items { // simple values without getters: // - pub // - $default - // so there are 4 cases here. - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident : Option<$ty:ty>; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = Default::default()); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : Option<$ty:ty>; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = Default::default()); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident : Option<$ty:ty> = $default:expr; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = $default); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident : Option<$ty:ty>; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = Default::default()); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident : Option<$ty:ty> = $default:expr; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = $default); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : Option<$ty:ty> = $default:expr; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = $default); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; @@ -1789,42 +1262,24 @@ macro_rules! __decl_storage_items { // - config() // - build() // - $default - // config() and build() can be combined, so there are 4 cases here. - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : Option<$ty:ty>; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = Default::default()); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : Option<$ty:ty>; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = Default::default()); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : Option<$ty:ty> = $default:expr; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = $default); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : Option<$ty:ty>; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = Default::default()); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : Option<$ty:ty> = $default:expr; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = $default); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : Option<$ty:ty> = $default:expr; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (OPTION_TYPE Option<$ty>) $cratename $name: $ty = $default); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; // simple values without getters: // - pub // - $default - // so there are 4 cases here. - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident : $ty:ty; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = Default::default()); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : $ty:ty; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = Default::default()); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = $default); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident : $ty:ty; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = Default::default()); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = $default); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = $default); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; @@ -1833,21 +1288,12 @@ macro_rules! __decl_storage_items { // - config() // - build() // - $default - // config() and build() can be combined, so there are 4 cases here. - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : $ty:ty; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = Default::default()); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : $ty:ty; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = Default::default()); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { - __decl_storage_item!(() ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = $default); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : $ty:ty; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = Default::default()); - __decl_storage_items!($cratename $traittype $traitinstance $($t)*); - }; - ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { - __decl_storage_item!((pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = $default); + ($cratename:ident $traittype:ident $traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($rename:ident)*))* $(build($fn:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { + __decl_storage_item!(($pub) ($traittype as $traitinstance) (RAW_TYPE $ty) $cratename $name: $ty = $default); __decl_storage_items!($cratename $traittype $traitinstance $($t)*); }; @@ -1859,8 +1305,8 @@ macro_rules! __decl_storage_items { #[doc(hidden)] macro_rules! __decl_storage_item { // generator for maps. - (($($vis:tt)*) ($traittype:ident as $traitinstance:ident) ($wraptype:ident $gettype:ty) $cratename:ident $name:ident : map $kty:ty => $ty:ty = $default:expr) => { - $($vis)* struct $name<$traitinstance: $traittype>($crate::storage::generator::PhantomData<$traitinstance>); + (($pub:vis) ($traittype:ident as $traitinstance:ident) ($wraptype:ident $gettype:ty) $cratename:ident $name:ident : map $kty:ty => $ty:ty = $default:expr) => { + $pub struct $name<$traitinstance: $traittype>($crate::storage::generator::PhantomData<$traitinstance>); impl<$traitinstance: $traittype> $crate::storage::generator::StorageMap<$kty, $ty> for $name<$traitinstance> { type Query = $gettype; @@ -1925,8 +1371,8 @@ macro_rules! __decl_storage_item { } }; // generator for values. - (($($vis:tt)*) ($traittype:ident as $traitinstance:ident) ($wraptype:ident $gettype:ty) $cratename:ident $name:ident : $ty:ty = $default:expr) => { - $($vis)* struct $name<$traitinstance: $traittype>($crate::storage::generator::PhantomData<$traitinstance>); + (($pub:vis) ($traittype:ident as $traitinstance:ident) ($wraptype:ident $gettype:ty) $cratename:ident $name:ident : $ty:ty = $default:expr) => { + $pub struct $name<$traitinstance: $traittype>($crate::storage::generator::PhantomData<$traitinstance>); impl<$traitinstance: $traittype> $crate::storage::generator::StorageValue<$ty> for $name<$traitinstance> { type Query = $gettype; @@ -1993,68 +1439,40 @@ macro_rules! __decl_store_items { // maps: // - pub // - $default - // so there are 4 cases here. - ($(#[$doc:meta])* $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { + ($(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { __decl_store_item!($name); __decl_store_items!($($t)*); }; - ($(#[$doc:meta])* $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { - __decl_store_item!($name); __decl_store_items!($($t)*); - }; - ($(#[$doc:meta])* pub $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { - __decl_store_item!($name); __decl_store_items!($($t)*); - }; - ($(#[$doc:meta])* pub $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { + ($(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { __decl_store_item!($name); __decl_store_items!($($t)*); }; // maps: // - pub // - $default - // so there are 4 cases here. - ($(#[$doc:meta])* $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { + ($(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { __decl_store_item!($name); __decl_store_items!($($t)*); }; - ($(#[$doc:meta])* $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { - __decl_store_item!($name); __decl_store_items!($($t)*); - }; - ($(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { - __decl_store_item!($name); __decl_store_items!($($t)*); - }; - ($(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { + ($(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { __decl_store_item!($name); __decl_store_items!($($t)*); }; // simple values without getters: // - pub // - $default - // so there are 4 cases here. - ($(#[$doc:meta])* $name:ident : $ty:ty; $($t:tt)*) => { + ($(#[$doc:meta])* $pub:vis $name:ident : $ty:ty; $($t:tt)*) => { __decl_store_item!($name); __decl_store_items!($($t)*); }; - ($(#[$doc:meta])* $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { - __decl_store_item!($name); __decl_store_items!($($t)*); - }; - ($(#[$doc:meta])* pub $name:ident : $ty:ty; $($t:tt)*) => { - __decl_store_item!($name); __decl_store_items!($($t)*); - }; - ($(#[$doc:meta])* pub $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { + ($(#[$doc:meta])* $pub:vis $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { __decl_store_item!($name); __decl_store_items!($($t)*); }; // simple values with getters: // - pub // - $default - // so there are 4 cases here. - ($(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty; $($t:tt)*) => { + ($(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty; $($t:tt)*) => { __decl_store_item!($name); __decl_store_items!($($t)*); }; - ($(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { - __decl_store_item!($name); __decl_store_items!($($t)*); - }; - ($(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty; $($t:tt)*) => { - __decl_store_item!($name); __decl_store_items!($($t)*); - }; - ($(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { + ($(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { __decl_store_item!($name); __decl_store_items!($($t)*); }; @@ -2075,20 +1493,11 @@ macro_rules! __impl_store_fns { // maps: // - pub // - $default - // so there are 4 cases here. - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => Option<$ty:ty>; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => Option<$ty:ty>; $($t:tt)*) => { __impl_store_fn!($traitinstance $name $getfn (Option<$ty>) map $kty => $ty); __impl_store_fns!($traitinstance $($t)*); }; - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => Option<$ty:ty> = $default:expr; $($t:tt)*) => { - __impl_store_fn!($traitinstance $name $getfn (Option<$ty>) map $kty => $ty); - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => Option<$ty:ty>; $($t:tt)*) => { - __impl_store_fn!($traitinstance $name $getfn (Option<$ty>) map $kty => $ty); - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => Option<$ty:ty> = $default:expr; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => Option<$ty:ty> = $default:expr; $($t:tt)*) => { __impl_store_fn!($traitinstance $name $getfn (Option<$ty>) map $kty => $ty); __impl_store_fns!($traitinstance $($t)*); }; @@ -2097,37 +1506,21 @@ macro_rules! __impl_store_fns { // maps: // - pub // - $default - // so there are 4 cases here. - ($traitinstance:ident $(#[$doc:meta])* $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { __impl_store_fns!($traitinstance $($t)*); }; - ($traitinstance:ident $(#[$doc:meta])* $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { __impl_store_fns!($traitinstance $($t)*); }; // maps: // - pub // - $default - // so there are 4 cases here. - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { __impl_store_fn!($traitinstance $name $getfn ($ty) map $kty => $ty); __impl_store_fns!($traitinstance $($t)*); }; - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { - __impl_store_fn!($traitinstance $name $getfn ($ty) map $kty => $ty); - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { - __impl_store_fn!($traitinstance $name $getfn ($ty) map $kty => $ty); - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { __impl_store_fn!($traitinstance $name $getfn ($ty) map $kty => $ty); __impl_store_fns!($traitinstance $($t)*); }; @@ -2136,20 +1529,11 @@ macro_rules! __impl_store_fns { // simple values with getters: // - pub // - $default - // so there are 4 cases here. - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : Option<$ty:ty>; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : Option<$ty:ty>; $($t:tt)*) => { __impl_store_fn!($traitinstance $name $getfn (Option<$ty>) $ty); __impl_store_fns!($traitinstance $($t)*); }; - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : Option<$ty:ty> = $default:expr; $($t:tt)*) => { - __impl_store_fn!($traitinstance $name $getfn (Option<$ty>) $ty); - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : Option<$ty:ty>; $($t:tt)*) => { - __impl_store_fn!($traitinstance $name $getfn (Option<$ty>) $ty); - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : Option<$ty:ty> = $default:expr; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : Option<$ty:ty> = $default:expr; $($t:tt)*) => { __impl_store_fn!($traitinstance $name $getfn (Option<$ty>) $ty); __impl_store_fns!($traitinstance $($t)*); }; @@ -2158,37 +1542,21 @@ macro_rules! __impl_store_fns { // simple values without getters: // - pub // - $default - // so there are 4 cases here. - ($traitinstance:ident $(#[$doc:meta])* $name:ident : $ty:ty; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : $ty:ty; $($t:tt)*) => { __impl_store_fns!($traitinstance $($t)*); }; - ($traitinstance:ident $(#[$doc:meta])* $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident : $ty:ty; $($t:tt)*) => { - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { __impl_store_fns!($traitinstance $($t)*); }; // simple values with getters: // - pub // - $default - // so there are 4 cases here. - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty; $($t:tt)*) => { __impl_store_fn!($traitinstance $name $getfn ($ty) $ty); __impl_store_fns!($traitinstance $($t)*); }; - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { - __impl_store_fn!($traitinstance $name $getfn ($ty) $ty); - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty; $($t:tt)*) => { - __impl_store_fn!($traitinstance $name $getfn ($ty) $ty); - __impl_store_fns!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { __impl_store_fn!($traitinstance $name $getfn ($ty) $ty); __impl_store_fns!($traitinstance $($t)*); }; @@ -2218,20 +1586,11 @@ macro_rules! __impl_store_items { // maps: // - pub // - $default - // so there are 4 cases here. - ($traitinstance:ident $(#[$doc:meta])* $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { __impl_store_item!($name $traitinstance); __impl_store_items!($traitinstance $($t)*); }; - ($traitinstance:ident $(#[$doc:meta])* $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { - __impl_store_item!($name $traitinstance); - __impl_store_items!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident : map $kty:ty => $ty:ty; $($t:tt)*) => { - __impl_store_item!($name $traitinstance); - __impl_store_items!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { __impl_store_item!($name $traitinstance); __impl_store_items!($traitinstance $($t)*); }; @@ -2239,20 +1598,11 @@ macro_rules! __impl_store_items { // maps: // - pub // - $default - // so there are 4 cases here. - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { __impl_store_item!($name $traitinstance); __impl_store_items!($traitinstance $($t)*); }; - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { - __impl_store_item!($name $traitinstance); - __impl_store_items!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty; $($t:tt)*) => { - __impl_store_item!($name $traitinstance); - __impl_store_items!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty = $default:expr; $($t:tt)*) => { __impl_store_item!($name $traitinstance); __impl_store_items!($traitinstance $($t)*); }; @@ -2260,20 +1610,11 @@ macro_rules! __impl_store_items { // simple values without getters: // - pub // - $default - // so there are 4 cases here. - ($traitinstance:ident $(#[$doc:meta])* $name:ident : $ty:ty; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : $ty:ty; $($t:tt)*) => { __impl_store_item!($name $traitinstance); __impl_store_items!($traitinstance $($t)*); }; - ($traitinstance:ident $(#[$doc:meta])* $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { - __impl_store_item!($name $traitinstance); - __impl_store_items!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident : $ty:ty; $($t:tt)*) => { - __impl_store_item!($name $traitinstance); - __impl_store_items!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident : $ty:ty = $default:expr; $($t:tt)*) => { __impl_store_item!($name $traitinstance); __impl_store_items!($traitinstance $($t)*); }; @@ -2281,20 +1622,11 @@ macro_rules! __impl_store_items { // simple values with getters: // - pub // - $default - // so there are 4 cases here. - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty; $($t:tt)*) => { __impl_store_item!($name $traitinstance); __impl_store_items!($traitinstance $($t)*); }; - ($traitinstance:ident $(#[$doc:meta])* $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { - __impl_store_item!($name $traitinstance); - __impl_store_items!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty; $($t:tt)*) => { - __impl_store_item!($name $traitinstance); - __impl_store_items!($traitinstance $($t)*); - }; - ($traitinstance:ident $(#[$doc:meta])* pub $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { + ($traitinstance:ident $(#[$doc:meta])* $pub:vis $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty = $default:expr; $($t:tt)*) => { __impl_store_item!($name $traitinstance); __impl_store_items!($traitinstance $($t)*); }; @@ -2333,23 +1665,7 @@ macro_rules! __store_functions_to_metadata { ( $( $metadata:expr ),*; $(#[doc = $doc_attr:tt])* - $name:ident : - map $kty:ty => Option<$ty:ty> $(= $default:expr)*; - $( $t:tt )* - ) => { - __store_functions_to_metadata!( - $( $metadata, )* - __store_function_to_metadata!( - $( $doc_attr ),*; $name; __store_type_to_metadata!($kty, $ty); - $crate::storage::generator::StorageFunctionModifier::Optional - ); - $( $t )* - ) - }; - ( - $( $metadata:expr ),*; - $(#[doc = $doc_attr:tt])* - pub $name:ident : + $pub:vis $name:ident : map $kty:ty => Option<$ty:ty> $(= $default:expr)*; $($t:tt)* ) => { @@ -2367,23 +1683,7 @@ macro_rules! __store_functions_to_metadata { ( $( $metadata:expr ),*; $(#[doc = $doc_attr:tt])* - $name:ident : - map $kty:ty => $ty:ty $(= $default:expr)*; - $( $t:tt )* - ) => { - __store_functions_to_metadata!( - $( $metadata, )* - __store_function_to_metadata!( - $( $doc_attr ),*; $name; __store_type_to_metadata!($kty, $ty); - $crate::storage::generator::StorageFunctionModifier::Default - ); - $( $t )* - ) - }; - ( - $( $metadata:expr ),*; - $(#[doc = $doc_attr:tt])* - pub $name:ident : + $pub:vis $name:ident : map $kty:ty => $ty:ty $(= $default:expr)*; $($t:tt)* ) => { @@ -2402,23 +1702,7 @@ macro_rules! __store_functions_to_metadata { ( $( $metadata:expr ),*; $(#[doc = $doc_attr:tt])* - $name:ident get($getfn:ident) $(build($build:expr))* : - map $kty:ty => Option<$ty:ty> $(= $default:expr)*; - $($t:tt)* - ) => { - __store_functions_to_metadata!( - $( $metadata, )* - __store_function_to_metadata!( - $( $doc_attr ),*; $name; __store_type_to_metadata!($kty, $ty); - $crate::storage::generator::StorageFunctionModifier::Optional - ); - $( $t )* - ) - }; - ( - $( $metadata:expr ),*; - $(#[doc = $doc_attr:tt])* - pub $name:ident get($getfn:ident) $(build($build:expr))* : + $pub:vis $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => Option<$ty:ty> $(= $default:expr)*; $($t:tt)* ) => { @@ -2437,23 +1721,7 @@ macro_rules! __store_functions_to_metadata { ( $( $metadata:expr ),*; $(#[doc = $doc_attr:tt])* - $name:ident get($getfn:ident) $(build($build:expr))* : - map $kty:ty => $ty:ty $(= $default:expr)*; - $($t:tt)* - ) => { - __store_functions_to_metadata!( - $( $metadata, )* - __store_function_to_metadata!( - $( $doc_attr ),*; $name; __store_type_to_metadata!($kty, $ty); - $crate::storage::generator::StorageFunctionModifier::Default - ); - $( $t )* - ) - }; - ( - $( $metadata:expr ),*; - $(#[doc = $doc_attr:tt])* - pub $name:ident get($getfn:ident) $(build($build:expr))* : + $pub:vis $name:ident get($getfn:ident) $(build($build:expr))* : map $kty:ty => $ty:ty $(= $default:expr)*; $($t:tt)* ) => { @@ -2471,22 +1739,7 @@ macro_rules! __store_functions_to_metadata { ( $( $metadata:expr ),*; $(#[doc = $doc_attr:tt])* - $name:ident : Option<$ty:ty> $(= $default:expr)*; - $($t:tt)* - ) => { - __store_functions_to_metadata!( - $( $metadata, )* - __store_function_to_metadata!( - $( $doc_attr ),*; $name; __store_type_to_metadata!($ty); - $crate::storage::generator::StorageFunctionModifier::Optional - ); - $( $t )* - ) - }; - ( - $( $metadata:expr ),*; - $(#[doc = $doc_attr:tt])* - pub $name:ident : Option<$ty:ty> $(= $default:expr)*; + $pub:vis $name:ident : Option<$ty:ty> $(= $default:expr)*; $($t:tt)* ) => { __store_functions_to_metadata!( @@ -2502,22 +1755,7 @@ macro_rules! __store_functions_to_metadata { ( $( $metadata:expr ),*; $(#[doc = $doc_attr:tt])* - $name:ident : $ty:ty $(= $default:expr)*; - $($t:tt)* - ) => { - __store_functions_to_metadata!( - $( $metadata, )* - __store_function_to_metadata!( - $( $doc_attr ),*; $name; __store_type_to_metadata!($ty); - $crate::storage::generator::StorageFunctionModifier::Default - ); - $( $t )* - ) - }; - ( - $( $metadata:expr ),*; - $(#[doc = $doc_attr:tt])* - pub $name:ident : $ty:ty $(= $default:expr)*; + $pub:vis $name:ident : $ty:ty $(= $default:expr)*; $($t:tt)* ) => { __store_functions_to_metadata!( @@ -2535,23 +1773,7 @@ macro_rules! __store_functions_to_metadata { ( $( $metadata:expr ),*; $(#[doc = $doc_attr:tt])* - $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : - Option<$ty:ty> $(= $default:expr)*; - $($t:tt)* - ) => { - __store_functions_to_metadata!( - $( $metadata, )* - __store_function_to_metadata!( - $( $doc_attr ),*; $name; __store_type_to_metadata!($ty); - $crate::storage::generator::StorageFunctionModifier::Optional - ); - $( $t )* - ) - }; - ( - $( $metadata:expr ),*; - $(#[doc = $doc_attr:tt])* - pub $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : + $pub:vis $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : Option<$ty:ty> $(= $default:expr)*; $($t:tt)* ) => { @@ -2569,23 +1791,7 @@ macro_rules! __store_functions_to_metadata { ( $( $metadata:expr ),*; $(#[doc = $doc_attr:tt])* - $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : - $ty:ty $(= $default:expr)*; - $($t:tt)* - ) => { - __store_functions_to_metadata!( - $( $metadata, )* - __store_function_to_metadata!( - $( $doc_attr ),*; $name; __store_type_to_metadata!($ty); - $crate::storage::generator::StorageFunctionModifier::Default - ); - $( $t )* - ) - }; - ( - $( $metadata:expr ),*; - $(#[doc = $doc_attr:tt])* - pub $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : + $pub:vis $name:ident get($getfn:ident) $(config($($myname:ident)*))* $(build($build:expr))* : $ty:ty $(= $default:expr)*; $($t:tt)* ) => { From 50adea6220facac3cfe1d084ffefad0e09a2f94b Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Sat, 27 Oct 2018 15:59:18 +0200 Subject: [PATCH 16/16] Consensus Engines Implementation: Aura (#911) * Generalize BlockImport - move ImportBlock, BlockOrigin, ImportResult into shared sr-primitives - let Consensus provide and traits again - update consensus traits to latest development - implement traits on client::Client, test_client::TestClient - update RHD to use the new import_block API * Move ImportBlock into consensus-common * Send import notification in aura tests * Integrating aura into service * Make Signatures more generic * Aura Block Production with the given key * run aura on the thread pool * start at exact step start in aura * Add needed wasm blob, in leiu of better solutions. * Make API ids consistent with traits and bring upstream for sharing. * Add decrease_free_balance to Balances module * Encode `Metadata` once instead of two times * Bitops include xor * Upgrade key module. * Default pages to somewhat bigger. * Introduce upgrade key into node * Add `Created` event --- substrate/Cargo.lock | 346 +++--- substrate/Cargo.toml | 4 +- substrate/core/client/Cargo.toml | 2 +- substrate/core/client/db/src/lib.rs | 95 +- substrate/core/client/db/src/light.rs | 21 +- substrate/core/client/db/src/utils.rs | 1 + substrate/core/client/src/call_executor.rs | 2 +- substrate/core/client/src/client.rs | 304 ++--- substrate/core/client/src/error.rs | 6 + substrate/core/client/src/lib.rs | 5 +- substrate/core/client/src/light/fetcher.rs | 3 +- substrate/core/consensus/aura/Cargo.toml | 42 + substrate/core/consensus/aura/src/lib.rs | 560 +++++++++ substrate/core/consensus/common/Cargo.toml | 11 +- .../core/consensus/common/src/block_import.rs | 104 ++ substrate/core/consensus/common/src/error.rs | 88 ++ .../consensus/common}/src/evaluation.rs | 33 +- substrate/core/consensus/common/src/lib.rs | 114 +- .../consensus/common/src/offline_tracker.rs | 14 +- substrate/core/consensus/rhd/Cargo.toml | 17 +- substrate/core/consensus/rhd/src/error.rs | 95 +- substrate/core/consensus/rhd/src/lib.rs | 1046 ++++++++++++++--- .../consensus/rhd}/src/service.rs | 23 +- substrate/core/network/Cargo.toml | 1 + substrate/core/network/src/chain.rs | 13 +- substrate/core/network/src/import_queue.rs | 13 +- substrate/core/network/src/lib.rs | 1 + substrate/core/network/src/protocol.rs | 32 +- substrate/core/network/src/service.rs | 6 + substrate/core/network/src/specialization.rs | 3 - substrate/core/network/src/sync.rs | 14 +- substrate/core/network/src/test/mod.rs | 227 ++-- substrate/core/network/src/test/sync.rs | 16 + substrate/core/primitives/src/ed25519.rs | 7 +- substrate/core/rpc/Cargo.toml | 1 + substrate/core/rpc/src/chain/tests.rs | 2 +- substrate/core/rpc/src/lib.rs | 2 + substrate/core/rpc/src/state/tests.rs | 2 +- substrate/core/service/Cargo.toml | 1 + substrate/core/service/src/chain_ops.rs | 3 +- substrate/core/service/src/components.rs | 25 +- substrate/core/service/src/consensus.rs | 263 +++++ substrate/core/service/src/lib.rs | 40 +- substrate/core/service/test/Cargo.toml | 1 + substrate/core/service/test/src/lib.rs | 3 +- substrate/core/sr-api/src/lib.rs | 23 +- substrate/core/sr-primitives/Cargo.toml | 1 + .../core/sr-primitives/src/generic/digest.rs | 22 + .../core/sr-primitives/src/generic/header.rs | 1 + substrate/core/sr-primitives/src/testing.rs | 5 + substrate/core/sr-primitives/src/traits.rs | 10 + substrate/core/state-machine/src/lib.rs | 5 +- substrate/core/test-client/Cargo.toml | 1 + substrate/core/test-client/src/client_ext.rs | 20 +- substrate/core/test-client/src/lib.rs | 1 + substrate/core/test-client/src/trait_tests.rs | 2 +- .../substrate_test_runtime.compact.wasm | Bin 0 -> 47463 bytes substrate/node/cli/Cargo.toml | 7 +- substrate/node/cli/src/chain_spec.rs | 21 +- substrate/node/cli/src/lib.rs | 4 +- substrate/node/cli/src/service.rs | 76 +- substrate/node/consensus/Cargo.toml | 24 - substrate/node/consensus/README.adoc | 5 - substrate/node/consensus/src/error.rs | 52 - substrate/node/consensus/src/lib.rs | 533 --------- substrate/node/executor/src/lib.rs | 11 +- substrate/node/network/Cargo.toml | 16 - substrate/node/network/src/consensus.rs | 293 ----- substrate/node/network/src/lib.rs | 38 - substrate/node/runtime/Cargo.toml | 2 + substrate/node/runtime/src/lib.rs | 45 +- substrate/node/runtime/wasm/Cargo.lock | 19 + substrate/node/runtime/wasm/Cargo.toml | 2 + .../release/node_runtime.compact.wasm | Bin 612872 -> 624959 bytes substrate/srml/balances/src/lib.rs | 17 + substrate/srml/balances/src/tests.rs | 11 + substrate/srml/consensus/src/lib.rs | 10 +- substrate/srml/contract/src/lib.rs | 8 +- substrate/srml/contract/src/tests.rs | 4 + substrate/srml/support/src/dispatch.rs | 2 +- substrate/srml/upgrade-key/Cargo.toml | 34 + substrate/srml/upgrade-key/src/lib.rs | 90 ++ 82 files changed, 3125 insertions(+), 1902 deletions(-) create mode 100644 substrate/core/consensus/aura/Cargo.toml create mode 100644 substrate/core/consensus/aura/src/lib.rs create mode 100644 substrate/core/consensus/common/src/block_import.rs create mode 100644 substrate/core/consensus/common/src/error.rs rename substrate/{node/consensus => core/consensus/common}/src/evaluation.rs (73%) rename substrate/{node/consensus => core/consensus/rhd}/src/service.rs (89%) create mode 100644 substrate/core/service/src/consensus.rs create mode 100644 substrate/core/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm delete mode 100644 substrate/node/consensus/Cargo.toml delete mode 100644 substrate/node/consensus/README.adoc delete mode 100644 substrate/node/consensus/src/error.rs delete mode 100644 substrate/node/consensus/src/lib.rs delete mode 100644 substrate/node/network/Cargo.toml delete mode 100644 substrate/node/network/src/consensus.rs delete mode 100644 substrate/node/network/src/lib.rs create mode 100644 substrate/srml/upgrade-key/Cargo.toml create mode 100644 substrate/srml/upgrade-key/src/lib.rs diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index 48a6e8942a..a1b780849d 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -5,7 +5,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "aes-soft 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "aesni 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "ctr 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ctr 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "stream-cipher 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -329,8 +329,8 @@ dependencies = [ "isatty 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "itertools 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", "simplelog 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -427,7 +427,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "ctr" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "block-cipher-trait 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", @@ -451,7 +451,7 @@ dependencies = [ "base64 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "chashmap 2.2.1 (git+https://github.com/redox-os/tfs)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", "tempfile 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -703,7 +703,7 @@ dependencies = [ [[package]] name = "h2" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -804,13 +804,13 @@ dependencies = [ [[package]] name = "hyper" -version = "0.12.11" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", "http 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -893,21 +893,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "jsonrpc-core" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#8d41129955e9abf08399cd052b4a6df4e0743ad6" +source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" dependencies = [ "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "jsonrpc-http-server" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#8d41129955e9abf08399cd052b4a6df4e0743ad6" +source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" dependencies = [ - "hyper 0.12.11 (registry+https://github.com/rust-lang/crates.io-index)", + "hyper 0.12.12 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-server-utils 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -918,17 +918,17 @@ dependencies = [ [[package]] name = "jsonrpc-macros" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#8d41129955e9abf08399cd052b4a6df4e0743ad6" +source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" dependencies = [ "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-pubsub 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "jsonrpc-pubsub" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#8d41129955e9abf08399cd052b4a6df4e0743ad6" +source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" dependencies = [ "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -938,7 +938,7 @@ dependencies = [ [[package]] name = "jsonrpc-server-utils" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#8d41129955e9abf08399cd052b4a6df4e0743ad6" +source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" dependencies = [ "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "globset 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -954,7 +954,7 @@ dependencies = [ [[package]] name = "jsonrpc-ws-server" version = "9.0.0" -source = "git+https://github.com/paritytech/jsonrpc.git#8d41129955e9abf08399cd052b4a6df4e0743ad6" +source = "git+https://github.com/paritytech/jsonrpc.git#207a277b098943864ecaf22dbab7a5e309866d6b" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "jsonrpc-core 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", @@ -1215,8 +1215,8 @@ dependencies = [ "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", "multiaddr 0.3.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1275,7 +1275,7 @@ dependencies = [ "aes-ctr 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "asn1_der 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "ctr 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "ctr 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "eth-secp256k1 0.5.7 (git+https://github.com/paritytech/rust-secp256k1)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "libp2p-core 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", @@ -1513,7 +1513,7 @@ dependencies = [ "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", "multihash 0.8.1-pre (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "unsigned-varint 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1597,37 +1597,20 @@ dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "node-executor 0.1.0", - "node-network 0.1.0", - "node-primitives 0.1.0", - "node-runtime 0.1.0", - "sr-primitives 0.1.0", - "substrate-cli 0.3.0", - "substrate-network 0.1.0", - "substrate-primitives 0.1.0", - "substrate-service 0.3.0", - "substrate-service-test 0.3.0", - "substrate-transaction-pool 0.1.0", - "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "node-consensus" -version = "0.1.0" -dependencies = [ - "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "node-primitives 0.1.0", "node-runtime 0.1.0", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rhododendron 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-io 0.1.0", "sr-primitives 0.1.0", - "srml-system 0.1.0", + "substrate-cli 0.3.0", "substrate-client 0.1.0", - "substrate-keyring 0.1.0", + "substrate-consensus-aura 0.1.0", + "substrate-network 0.1.0", "substrate-primitives 0.1.0", + "substrate-service 0.3.0", + "substrate-service-test 0.3.0", "substrate-transaction-pool 0.1.0", "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1660,21 +1643,6 @@ dependencies = [ "wabt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "node-network" -version = "0.1.0" -dependencies = [ - "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "node-consensus 0.1.0", - "node-primitives 0.1.0", - "rhododendron 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "substrate-consensus-rhd 0.1.0", - "substrate-network 0.1.0", - "substrate-primitives 0.1.0", - "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "node-primitives" version = "0.1.0" @@ -1682,8 +1650,8 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "sr-std 0.1.0", "substrate-primitives 0.1.0", @@ -1700,8 +1668,8 @@ dependencies = [ "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-api 0.1.0", "sr-io 0.1.0", "sr-primitives 0.1.0", @@ -1719,6 +1687,7 @@ dependencies = [ "srml-system 0.1.0", "srml-timestamp 0.1.0", "srml-treasury 0.1.0", + "srml-upgrade-key 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", ] @@ -1793,12 +1762,12 @@ dependencies = [ "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.37 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "openssl" -version = "0.10.13" +version = "0.10.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1806,12 +1775,12 @@ dependencies = [ "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl-sys 0.9.37 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "openssl-sys" -version = "0.9.37" +version = "0.9.39" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1833,21 +1802,13 @@ name = "parity-bytes" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -[[package]] -name = "parity-codec" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "parity-codec" version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2200,20 +2161,10 @@ dependencies = [ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "rhododendron" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "rhododendron" version = "0.4.0" -source = "git+https://github.com/paritytech/rhododendron.git#64b46b577479a3b6c493fa6db5420a265a445ff9" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2356,20 +2307,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "serde" -version = "1.0.79" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", -] [[package]] name = "serde_derive" -version = "1.0.79" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", "quote 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.9 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.12 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2379,7 +2327,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2467,7 +2415,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2528,8 +2476,8 @@ dependencies = [ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-std 0.1.0", @@ -2562,8 +2510,8 @@ version = "0.1.0" dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "sr-std 0.1.0", ] @@ -2575,8 +2523,8 @@ dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2593,8 +2541,8 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2611,8 +2559,8 @@ dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2630,8 +2578,8 @@ dependencies = [ "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)", "pwasm-utils 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-sandbox 0.1.0", @@ -2651,8 +2599,8 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2671,8 +2619,8 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2689,8 +2637,8 @@ dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2707,8 +2655,8 @@ dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2726,8 +2674,8 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2746,8 +2694,8 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2770,8 +2718,8 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "pretty_assertions 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2786,8 +2734,8 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "safe-mix 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2802,8 +2750,8 @@ dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2820,8 +2768,8 @@ dependencies = [ "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-std 0.1.0", @@ -2831,6 +2779,24 @@ dependencies = [ "substrate-primitives 0.1.0", ] +[[package]] +name = "srml-upgrade-key" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-io 0.1.0", + "sr-primitives 0.1.0", + "sr-std 0.1.0", + "srml-consensus 0.1.0", + "srml-support 0.1.0", + "srml-system 0.1.0", + "substrate-primitives 0.1.0", +] + [[package]] name = "stable_deref_trait" version = "1.1.1" @@ -2876,7 +2842,7 @@ dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "node-cli 0.1.0", - "vergen 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "vergen 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2928,7 +2894,7 @@ dependencies = [ "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "sr-api 0.1.0", "sr-primitives 0.1.0", - "substrate-consensus-rhd 0.1.0", + "substrate-consensus-common 0.1.0", "substrate-executor 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -2961,11 +2927,44 @@ dependencies = [ "substrate-trie 0.4.0", ] +[[package]] +name = "substrate-consensus-aura" +version = "0.1.0" +dependencies = [ + "env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", + "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-io 0.1.0", + "sr-primitives 0.1.0", + "sr-version 0.1.0", + "srml-consensus 0.1.0", + "srml-support 0.1.0", + "substrate-client 0.1.0", + "substrate-consensus-common 0.1.0", + "substrate-executor 0.1.0", + "substrate-keyring 0.1.0", + "substrate-network 0.1.0", + "substrate-primitives 0.1.0", + "substrate-service 0.3.0", + "substrate-test-client 0.1.0", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "substrate-consensus-common" version = "0.1.0" dependencies = [ + "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sr-primitives 0.1.0", + "sr-version 0.1.0", "substrate-primitives 0.1.0", + "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -2973,21 +2972,25 @@ name = "substrate-consensus-rhd" version = "0.1.0" dependencies = [ "error-chain 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", + "exit-future 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-codec 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", + "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rhododendron 0.4.0 (git+https://github.com/paritytech/rhododendron.git)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "rhododendron 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "sr-version 0.1.0", "srml-consensus 0.1.0", "srml-support 0.1.0", + "srml-system 0.1.0", + "substrate-client 0.1.0", + "substrate-consensus-common 0.1.0", "substrate-executor 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", + "substrate-transaction-pool 0.1.0", "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3003,8 +3006,8 @@ dependencies = [ "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-version 0.1.0", "substrate-primitives 0.1.0", @@ -3049,8 +3052,8 @@ dependencies = [ "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "parity-crypto 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0", "subtle 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3063,8 +3066,8 @@ version = "0.1.0" dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -3084,6 +3087,7 @@ dependencies = [ "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "substrate-client 0.1.0", + "substrate-consensus-common 0.1.0", "substrate-keyring 0.1.0", "substrate-network-libp2p 0.1.0", "substrate-primitives 0.1.0", @@ -3106,8 +3110,8 @@ dependencies = [ "parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3133,8 +3137,8 @@ dependencies = [ "pretty_assertions 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-hex 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-std 0.1.0", "substrate-serializer 0.1.0", "twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3160,6 +3164,7 @@ dependencies = [ "sr-primitives 0.1.0", "sr-version 0.1.0", "substrate-client 0.1.0", + "substrate-consensus-common 0.1.0", "substrate-executor 0.1.0", "substrate-primitives 0.1.0", "substrate-test-client 0.1.0", @@ -3175,7 +3180,7 @@ dependencies = [ "jsonrpc-pubsub 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", "jsonrpc-ws-server 9.0.0 (git+https://github.com/paritytech/jsonrpc.git)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "substrate-rpc 0.1.0", ] @@ -3184,7 +3189,7 @@ dependencies = [ name = "substrate-serializer" version = "0.1.0" dependencies = [ - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -3199,14 +3204,15 @@ dependencies = [ "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", "slog 2.4.1 (registry+https://github.com/rust-lang/crates.io-index)", "sr-io 0.1.0", "sr-primitives 0.1.0", "substrate-client 0.1.0", "substrate-client-db 0.1.0", + "substrate-consensus-common 0.1.0", "substrate-executor 0.1.0", "substrate-keystore 0.1.0", "substrate-network 0.1.0", @@ -3229,6 +3235,7 @@ dependencies = [ "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "substrate-client 0.1.0", + "substrate-consensus-common 0.1.0", "substrate-network 0.1.0", "substrate-primitives 0.1.0", "substrate-service 0.3.0", @@ -3285,6 +3292,7 @@ dependencies = [ "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "substrate-client 0.1.0", + "substrate-consensus-common 0.1.0", "substrate-executor 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", @@ -3299,8 +3307,8 @@ dependencies = [ "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-api 0.1.0", "sr-io 0.1.0", "sr-primitives 0.1.0", @@ -3320,8 +3328,8 @@ dependencies = [ "futures 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "sr-primitives 0.1.0", "substrate-test-runtime 0.1.0", ] @@ -3387,7 +3395,7 @@ dependencies = [ [[package]] name = "syn" -version = "0.15.9" +version = "0.15.12" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 0.4.20 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3912,7 +3920,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "vergen" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3936,8 +3944,8 @@ name = "wabt" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)", "wabt-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -4066,7 +4074,7 @@ dependencies = [ "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)", "mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "openssl 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)", + "openssl 0.10.14 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -4159,7 +4167,7 @@ dependencies = [ "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" "checksum crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "677d453a17e8bd2b913fa38e8b9cf04bcdbb5be790aa294f2389661d72036015" "checksum crunchy 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a2f4a431c5c9f662e1200b7c7f02c34e91361150e382089a8f2dec3ba680cbda" -"checksum ctr 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50ac3add446ec1f8fe3dc007cd838f5b22bbf33186394feac505451ecc43c018" +"checksum ctr 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4b669fcb8e20124db86dbd9b01e74ec0e9e420e65381311ce5249864fc7ff0c0" "checksum ctrlc 3.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "630391922b1b893692c6334369ff528dcc3a9d8061ccf4c803aa8f83cb13db5e" "checksum datastore 0.1.0 (git+https://github.com/tomaka/libp2p-rs?rev=8111062f0177fd7423626f2db9560273644a4c4d)" = "" "checksum difference 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3304d19798a8e067e48d8e69b2c37f0b5e9b4e462504ad9e27e9f3fce02bba8" @@ -4193,7 +4201,7 @@ dependencies = [ "checksum getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7292d30132fb5424b354f5dc02512a86e4c516fe544bb7a25e7f266951b797" "checksum getset 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "54c7f36a235738bb25904d6a2b3dbb28f6f5736cd3918c4bf80d6bb236200782" "checksum globset 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4743617a7464bbda3c8aec8558ff2f9429047e025771037df561d383337ff865" -"checksum h2 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "a27e7ed946e8335bdf9a191bc1b9b14a03ba822d013d2f58437f4fabcbd7fc2c" +"checksum h2 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "7dd33bafe2e6370e6c8eb0cf1b8c5f93390b90acde7e9b03723f166b28b648ed" "checksum hash-db 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum hash256-std-hasher 0.9.0 (git+https://github.com/paritytech/trie)" = "" "checksum heapsize 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" @@ -4204,7 +4212,7 @@ dependencies = [ "checksum httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83" "checksum humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0484fda3e7007f2a4a0d9c3a703ca38c71c54c55602ce4660c419fd32e188c9e" "checksum hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)" = "368cb56b2740ebf4230520e2b90ebb0461e69034d85d1945febd9b3971426db2" -"checksum hyper 0.12.11 (registry+https://github.com/rust-lang/crates.io-index)" = "78d50abbd1790e0f4c74cb1d4a2211b439bac661d54107ad5564c55e77906762" +"checksum hyper 0.12.12 (registry+https://github.com/rust-lang/crates.io-index)" = "4aca412c241a2dd53af261efc7adf7736fdebd67dc0d1cc1ffdbcb9407e0e810" "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" "checksum indexmap 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08173ba1e906efb6538785a8844dd496f5d34f0a2d88038e95195172fc667220" "checksum integer-sqrt 0.1.0 (git+https://github.com/paritytech/integer-sqrt-rs.git)" = "" @@ -4282,12 +4290,11 @@ dependencies = [ "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" "checksum ole32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2c49021782e5233cd243168edfa8037574afed4eba4bbaf538b3d8d1789d8c" "checksum opaque-debug 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d620c9c26834b34f039489ac0dfdb12c7ac15ccaf818350a64c9b5334a452ad7" -"checksum openssl 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)" = "5af9e83eb3c51ee806387d26a43056f3246d865844caa6dd704d2ba7e831c264" +"checksum openssl 0.10.14 (registry+https://github.com/rust-lang/crates.io-index)" = "6285ab297861546af7a2753593b3160bfc09f0ab9d1f5bb009e39d81a169b499" "checksum openssl 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)" = "a3605c298474a3aa69de92d21139fb5e2a81688d308262359d85cdd0d12a7985" -"checksum openssl-sys 0.9.37 (registry+https://github.com/rust-lang/crates.io-index)" = "d4edbc8dfa63f557aee3a498179af2cc6a989e12ba1751840046c79afc9e615a" +"checksum openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)" = "278c1ad40a89aa1e741a1eed089a2f60b18fab8089c3139b542140fc7d674106" "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" "checksum parity-bytes 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa5168b4cf41f3835e4bc6ffb32f51bc9365dc50cb351904595b3931d917fd0c" -"checksum parity-codec 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bee4edfcfa19892f7178cb299a659866015dc131459865a1d808269cf7e7eb9e" "checksum parity-codec 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "dca389ea5e1632c89b2ce54f7e2b4a8a8c9d278042222a91e0bf95451218cb4c" "checksum parity-codec-derive 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffa42c2cb493b60b12c75b26e8c94cb734af4df4d7f2cc229dc04c1953dac189" "checksum parity-crypto 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c1117f6574377d21309bfa1f7d69ff734120685d92b02c3f362b122585758840" @@ -4330,8 +4337,7 @@ dependencies = [ "checksum regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7" "checksum regex-syntax 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "747ba3b235651f6e2f67dfa8bcdcd073ddb7c243cb21c442fc12395dfcac212d" "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5" -"checksum rhododendron 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e20523445e693f394c0e487113ae656071311c9ee4c1e914441bece8c929b21d" -"checksum rhododendron 0.4.0 (git+https://github.com/paritytech/rhododendron.git)" = "" +"checksum rhododendron 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a09bc21b21795c366c8bf0e87afb71175f5f736b3a5b279b6f4e81839d0a877b" "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" "checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" @@ -4350,8 +4356,8 @@ dependencies = [ "checksum security-framework-sys 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "5421621e836278a0b139268f36eee0dc7e389b784dc3f79d8f11aabadf41bead" "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "84257ccd054dc351472528c8587b4de2dbf0dc0fe2e634030c1a90bfdacebaa9" -"checksum serde_derive 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "31569d901045afbff7a9479f793177fe9259819aff10ab4f89ef69bbc5f567fe" +"checksum serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef" +"checksum serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "225de307c6302bec3898c51ca302fc94a7a1697ef0845fcee6448f33c032249c" "checksum serde_json 1.0.32 (registry+https://github.com/rust-lang/crates.io-index)" = "43344e7ce05d0d8280c5940cabb4964bea626aa58b1ec0e8c73fa2a8512a38ce" "checksum sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" "checksum sha1 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "171698ce4ec7cbb93babeb3190021b4d72e96ccb98e33d277ae4ea959d6f2d9e" @@ -4376,7 +4382,7 @@ dependencies = [ "checksum subtle 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc7f6353c2ee5407358d063a14cccc1630804527090a6fb5a9489ce4924280fb" "checksum syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)" = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b" "checksum syn 0.14.9 (registry+https://github.com/rust-lang/crates.io-index)" = "261ae9ecaa397c42b960649561949d69311f08eeaea86a65696e6e46517cf741" -"checksum syn 0.15.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b10ee269228fb723234fce98e9aac0eaed2bd5f1ad2f6930e8d5b93f04445a1a" +"checksum syn 0.15.12 (registry+https://github.com/rust-lang/crates.io-index)" = "34ab9797e47d24cb76b8dc4d24ff36807018c7cc549c4cba050b068be0c586b0" "checksum synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "85bb9b7550d063ea184027c9b8c20ac167cd36d3e06b3a40bceb9d746dc1a7b7" "checksum sysinfo 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "11c5f6e8a7a7146f26ffed9a5ff8bab2706f1ac8a413a415e1d211b819d5c24d" "checksum take_mut 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" @@ -4433,7 +4439,7 @@ dependencies = [ "checksum utf8-ranges 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd70f467df6810094968e2fce0ee1bd0e87157aceb026a8c083bcf5e25b9efe4" "checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d" "checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" -"checksum vergen 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4cae5a72131fdf47d4fbc9286393ec8622ec7a5502fbe77b291d9aba21d3f179" +"checksum vergen 2.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "93fb2d57fbc535fcd45548c99b141d2d960995daaf04b864c4d9fe1ea011c819" "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum wabt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "182ae543249ccf2705f324d233891c1176fca142e137b55ba43d9dbfe93f18a2" diff --git a/substrate/Cargo.toml b/substrate/Cargo.toml index f47fa42507..54ae7d9d82 100644 --- a/substrate/Cargo.toml +++ b/substrate/Cargo.toml @@ -23,6 +23,7 @@ members = [ "core/client", "core/client/db", "core/consensus/common", + "core/consensus/aura", "core/consensus/rhd", "core/executor", "core/finality-grandpa", @@ -54,6 +55,7 @@ members = [ "srml/system", "srml/timestamp", "srml/treasury", + "srml/upgrade-key", "core/serializer", "core/service", "core/service/test", @@ -64,9 +66,7 @@ members = [ "core/trie", "core/keystore", "node/cli", - "node/consensus", "node/executor", - "node/network", "node/primitives", "node/runtime", "subkey", diff --git a/substrate/core/client/Cargo.toml b/substrate/core/client/Cargo.toml index ba457fbb9c..5eeb75940d 100644 --- a/substrate/core/client/Cargo.toml +++ b/substrate/core/client/Cargo.toml @@ -12,7 +12,7 @@ hex-literal = "0.1" futures = "0.1.17" slog = "^2" heapsize = "0.4" -substrate-consensus-rhd = { path = "../consensus/rhd" } +substrate-consensus-common = { path = "../consensus/common" } parity-codec = "2.1" substrate-executor = { path = "../executor" } substrate-primitives = { path = "../primitives" } diff --git a/substrate/core/client/db/src/lib.rs b/substrate/core/client/db/src/lib.rs index f35dd8a05d..36ab5f4b2a 100644 --- a/substrate/core/client/db/src/lib.rs +++ b/substrate/core/client/db/src/lib.rs @@ -534,7 +534,9 @@ impl Backend { meta.finalized_hash, f_hash), ).into()) } - transaction.put(columns::META, meta_keys::FINALIZED_BLOCK, f_hash.as_ref()); + + let lookup_key = ::utils::number_to_lookup_key(f_num); + transaction.put(columns::META, meta_keys::FINALIZED_BLOCK, &lookup_key); let commit = self.storage.state_db.canonicalize_block(&f_hash); apply_state_commit(transaction, commit); @@ -586,11 +588,20 @@ impl client::backend::Backend for Backend whe -> Result<(), client::error::Error> { let mut transaction = DBTransaction::new(); + if let Some(pending_block) = operation.pending_block { let hash = pending_block.header.hash(); let parent_hash = *pending_block.header.parent_hash(); let number = pending_block.header.number().clone(); + // blocks in longest chain are keyed by number + let lookup_key = if pending_block.leaf_state.is_best() { + ::utils::number_to_lookup_key(number).to_vec() + } else { + // other blocks are keyed by number + hash + ::utils::number_and_hash_to_lookup_key(number, hash) + }; + if pending_block.leaf_state.is_best() { let meta = self.blockchain.meta.read(); @@ -678,17 +689,9 @@ impl client::backend::Backend for Backend whe } } - transaction.put(columns::META, meta_keys::BEST_BLOCK, hash.as_ref()); + transaction.put(columns::META, meta_keys::BEST_BLOCK, &lookup_key); } - // blocks in longest chain are keyed by number - let lookup_key = if pending_block.leaf_state.is_best() { - ::utils::number_to_lookup_key(number).to_vec() - } else { - // other blocks are keyed by number + hash - ::utils::number_and_hash_to_lookup_key(number, hash) - }; - transaction.put(columns::HEADER, &lookup_key, &pending_block.header.encode()); if let Some(body) = pending_block.body { transaction.put(columns::BODY, &lookup_key, &body.encode()); @@ -700,7 +703,7 @@ impl client::backend::Backend for Backend whe transaction.put(columns::HASH_LOOKUP, hash.as_ref(), &lookup_key); if number == Zero::zero() { - transaction.put(columns::META, meta_keys::FINALIZED_BLOCK, hash.as_ref()); + transaction.put(columns::META, meta_keys::FINALIZED_BLOCK, &lookup_key); transaction.put(columns::META, meta_keys::GENESIS_HASH, hash.as_ref()); } @@ -797,7 +800,8 @@ impl client::backend::Backend for Backend whe || client::error::ErrorKind::UnknownBlock( format!("Error reverting to {}. Block header not found.", best)))?; - transaction.put(columns::META, meta_keys::BEST_BLOCK, header.hash().as_ref()); + let lookup_key = ::utils::number_to_lookup_key(header.number().clone()); + transaction.put(columns::META, meta_keys::BEST_BLOCK, &lookup_key); transaction.delete(columns::HASH_LOOKUP, header.hash().as_ref()); self.storage.db.write(transaction).map_err(db_err)?; self.blockchain.update_meta(header.hash().clone(), best.clone(), true, false); @@ -927,40 +931,49 @@ mod tests { #[test] fn block_hash_inserted_correctly() { - let db = Backend::::new_test(1, 0); - for i in 0..10 { - assert!(db.blockchain().hash(i).unwrap().is_none()); + let backing = { + let db = Backend::::new_test(1, 0); + for i in 0..10 { + assert!(db.blockchain().hash(i).unwrap().is_none()); - { - let id = if i == 0 { - BlockId::Hash(Default::default()) - } else { - BlockId::Number(i - 1) - }; - - let mut op = db.begin_operation(id).unwrap(); - let header = Header { - number: i, - parent_hash: if i == 0 { - Default::default() + { + let id = if i == 0 { + BlockId::Hash(Default::default()) } else { - db.blockchain.hash(i - 1).unwrap().unwrap() - }, - state_root: Default::default(), - digest: Default::default(), - extrinsics_root: Default::default(), - }; + BlockId::Number(i - 1) + }; - op.set_block_data( - header, - Some(vec![]), - None, - NewBlockState::Best, - ).unwrap(); - db.commit_operation(op).unwrap(); + let mut op = db.begin_operation(id).unwrap(); + let header = Header { + number: i, + parent_hash: if i == 0 { + Default::default() + } else { + db.blockchain.hash(i - 1).unwrap().unwrap() + }, + state_root: Default::default(), + digest: Default::default(), + extrinsics_root: Default::default(), + }; + + op.set_block_data( + header, + Some(vec![]), + None, + NewBlockState::Best, + ).unwrap(); + db.commit_operation(op).unwrap(); + } + + assert!(db.blockchain().hash(i).unwrap().is_some()) } + db.storage.db.clone() + }; - assert!(db.blockchain().hash(i).unwrap().is_some()) + let backend = Backend::::from_kvdb(backing, PruningMode::keep_blocks(1), 0).unwrap(); + assert_eq!(backend.blockchain().info().unwrap().best_number, 9); + for i in 0..10 { + assert!(backend.blockchain().hash(i).unwrap().is_some()) } } diff --git a/substrate/core/client/db/src/light.rs b/substrate/core/client/db/src/light.rs index 49e5e85be1..f336df4d28 100644 --- a/substrate/core/client/db/src/light.rs +++ b/substrate/core/client/db/src/light.rs @@ -196,7 +196,8 @@ impl LightStorage { ).into()) } - transaction.put(columns::META, meta_keys::FINALIZED_BLOCK, hash.as_ref()); + let lookup_key = ::utils::number_to_lookup_key(header.number().clone()); + transaction.put(columns::META, meta_keys::FINALIZED_BLOCK, &lookup_key); // build new CHT if required if let Some(new_cht_number) = cht::is_build_required(cht::SIZE, *header.number()) { @@ -244,6 +245,14 @@ impl LightBlockchainStorage for LightStorage let number = *header.number(); let parent_hash = *header.parent_hash(); + // blocks in longest chain are keyed by number + let lookup_key = if leaf_state.is_best() { + ::utils::number_to_lookup_key(number).to_vec() + } else { + // other blocks are keyed by number + hash + ::utils::number_and_hash_to_lookup_key(number, hash) + }; + if leaf_state.is_best() { // handle reorg. { @@ -298,17 +307,9 @@ impl LightBlockchainStorage for LightStorage } } - transaction.put(columns::META, meta_keys::BEST_BLOCK, hash.as_ref()); + transaction.put(columns::META, meta_keys::BEST_BLOCK, &lookup_key); } - // blocks in longest chain are keyed by number - let lookup_key = if leaf_state.is_best() { - ::utils::number_to_lookup_key(number).to_vec() - } else { - // other blocks are keyed by number + hash - ::utils::number_and_hash_to_lookup_key(number, hash) - }; - transaction.put(columns::HEADER, &lookup_key, &header.encode()); transaction.put(columns::HASH_LOOKUP, hash.as_ref(), &lookup_key); diff --git a/substrate/core/client/db/src/utils.rs b/substrate/core/client/db/src/utils.rs index b32b56bccc..f7b81845e8 100644 --- a/substrate/core/client/db/src/utils.rs +++ b/substrate/core/client/db/src/utils.rs @@ -53,6 +53,7 @@ pub mod meta_keys { } /// Database metadata. +#[derive(Debug)] pub struct Meta { /// Hash of the best known block. pub best_hash: H, diff --git a/substrate/core/client/src/call_executor.rs b/substrate/core/client/src/call_executor.rs index 2b442a3569..168d0a26c5 100644 --- a/substrate/core/client/src/call_executor.rs +++ b/substrate/core/client/src/call_executor.rs @@ -150,7 +150,7 @@ where let heap_pages = state.storage(well_known_keys::HEAP_PAGES) .map_err(|e| error::ErrorKind::Execution(Box::new(e)))? .and_then(|v| u64::decode(&mut &v[..])) - .unwrap_or(8) as usize; + .unwrap_or(1024) as usize; let mut ext = Ext::new(&mut overlay, &state, self.backend.changes_trie_storage()); self.executor.runtime_version(&mut ext, heap_pages, &code) diff --git a/substrate/core/client/src/client.rs b/substrate/core/client/src/client.rs index fcf917584e..8ef2d7e1eb 100644 --- a/substrate/core/client/src/client.rs +++ b/substrate/core/client/src/client.rs @@ -26,6 +26,7 @@ use runtime_primitives::{ generic::{BlockId, SignedBlock, Block as RuntimeBlock}, transaction_validity::{TransactionValidity, TransactionTag}, }; +use consensus::{ImportBlock, ImportResult, BlockOrigin}; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, Zero, As, NumberFor, CurrentHeight, BlockNumberToHash}; use runtime_primitives::{ApplyResult, BuildStorage}; use runtime_api as api; @@ -44,7 +45,7 @@ use blockchain::{self, Info as ChainInfo, Backend as ChainBackend, HeaderBackend use call_executor::{CallExecutor, LocalCallExecutor}; use executor::{RuntimeVersion, RuntimeInfo}; use notifications::{StorageNotifications, StorageEventStream}; -use {cht, error, in_mem, block_builder, genesis}; +use {cht, error, in_mem, block_builder, genesis, consensus}; /// Type that implements `futures::Stream` of block import events. pub type ImportNotifications = mpsc::UnboundedReceiver>; @@ -106,21 +107,6 @@ pub struct ClientInfo { pub best_queued_hash: Option, } -/// Block import result. -#[derive(Debug)] -pub enum ImportResult { - /// Added to the import queue. - Queued, - /// Already in the import queue. - AlreadyQueued, - /// Already in the blockchain. - AlreadyInChain, - /// Block or parent is known to be bad. - KnownBad, - /// Block parent is not in the chain. - UnknownParent, -} - /// Block status. #[derive(Debug, PartialEq, Eq)] pub enum BlockStatus { @@ -134,70 +120,6 @@ pub enum BlockStatus { Unknown, } -/// Block data origin. -#[derive(Debug, PartialEq, Eq, Clone, Copy)] -pub enum BlockOrigin { - /// Genesis block built into the client. - Genesis, - /// Block is part of the initial sync with the network. - NetworkInitialSync, - /// Block was broadcasted on the network. - NetworkBroadcast, - /// Block that was received from the network and validated in the consensus process. - ConsensusBroadcast, - /// Block that was collated by this node. - Own, - /// Block was imported from a file. - File, -} - -/// Data required to import a Block -pub struct ImportBlock { - /// Origin of the Block - pub origin: BlockOrigin, - /// Header - pub header: Block::Header, - /// Justification provided for this block from the outside - pub external_justification: Justification, - /// Internal Justification for the block - pub internal_justification: Vec, // Block::Digest::DigestItem? - /// Block's body - pub body: Option>, - /// Is this block finalized already? - /// `true` implies instant finality. - pub finalized: bool, - /// Auxiliary consensus data produced by the block. - /// Contains a list of key-value pairs. If values are `None`, the keys - /// will be deleted. - pub auxiliary: Vec<(Vec, Option>)>, -} - -impl ImportBlock { - /// Deconstruct the justified header into parts. - pub fn into_inner(self) - -> ( - BlockOrigin, - ::Header, - Justification, - Justification, - Option::Extrinsic>>, - bool, - Vec<(Vec, Option>)>, - ) { - ( - self.origin, - self.header, - self.external_justification, - self.internal_justification, - self.body, - self.finalized, - self.auxiliary, - ) - } -} - - - /// Summary of an imported block #[derive(Clone, Debug)] pub struct BlockImportNotification { @@ -222,6 +144,41 @@ pub struct FinalityNotification { pub header: Block::Header, } +// used in importing a block, where additional changes are made after the runtime +// executed. +enum PrePostHeader { + // they are the same: no post-runtime digest items. + Same(H), + // different headers (pre, post). + Different(H, H), +} + +impl PrePostHeader { + // get a reference to the "pre-header" -- the header as it should be just after the runtime. + fn pre(&self) -> &H { + match *self { + PrePostHeader::Same(ref h) => h, + PrePostHeader::Different(ref h, _) => h, + } + } + + // get a reference to the "post-header" -- the header as it should be after all changes are applied. + fn post(&self) -> &H { + match *self { + PrePostHeader::Same(ref h) => h, + PrePostHeader::Different(_, ref h) => h, + } + } + + // convert to the "post-header" -- the header as it should be after all changes are applied. + fn into_post(self) -> H { + match self { + PrePostHeader::Same(h) => h, + PrePostHeader::Different(_, h) => h, + } + } +} + /// Create an instance of in-memory client. pub fn new_in_mem( executor: E, @@ -513,52 +470,6 @@ impl Client where ) } - /// Import a checked and validated block - pub fn import_block( - &self, - import_block: ImportBlock, - new_authorities: Option>, - ) -> error::Result { - - let ( - origin, - header, - _, - justification, - body, - finalized, - _aux, // TODO: write this to DB also - ) = import_block.into_inner(); - let parent_hash = header.parent_hash().clone(); - - match self.backend.blockchain().status(BlockId::Hash(parent_hash))? { - blockchain::BlockStatus::InChain => {}, - blockchain::BlockStatus::Unknown => return Ok(ImportResult::UnknownParent), - } - let hash = header.hash(); - let _import_lock = self.import_lock.lock(); - let height: u64 = header.number().as_(); - *self.importing_block.write() = Some(hash); - - let result = self.execute_and_import_block( - origin, - hash, - header, - justification, - body, - new_authorities, - finalized, - ); - - *self.importing_block.write() = None; - telemetry!("block.import"; - "height" => height, - "best" => ?hash, - "origin" => ?origin - ); - result - } - // TODO [ToDr] Optimize and re-use tags from the pool. fn transaction_tags(&self, at: Block::Hash, body: &Option>) -> error::Result> { let id = BlockId::Hash(at); @@ -587,13 +498,13 @@ impl Client where &self, origin: BlockOrigin, hash: Block::Hash, - header: Block::Header, + import_headers: PrePostHeader, justification: Justification, body: Option>, authorities: Option>, finalized: bool, ) -> error::Result { - let parent_hash = header.parent_hash().clone(); + let parent_hash = import_headers.post().parent_hash().clone(); match self.backend.blockchain().status(BlockId::Hash(hash))? { blockchain::BlockStatus::InChain => return Ok(ImportResult::AlreadyInChain), blockchain::BlockStatus::Unknown => {}, @@ -627,12 +538,13 @@ impl Client where transaction_state, &mut overlay, "execute_block", - &::new(header.clone(), body.clone().unwrap_or_default()).encode(), + &::new(import_headers.pre().clone(), body.clone().unwrap_or_default()).encode(), match (origin, self.block_execution_strategy) { (BlockOrigin::NetworkInitialSync, _) | (_, ExecutionStrategy::NativeWhenPossible) => ExecutionManager::NativeWhenPossible, (_, ExecutionStrategy::AlwaysWasm) => ExecutionManager::AlwaysWasm, _ => ExecutionManager::Both(|wasm_result, native_result| { + let header = import_headers.post(); warn!("Consensus error between wasm and native block execution at block {}", hash); warn!(" Header {:?}", header); warn!(" Native result {:?}", native_result); @@ -654,7 +566,7 @@ impl Client where }; // TODO: non longest-chain rule. - let is_new_best = finalized || header.number() > &last_best_number; + let is_new_best = finalized || import_headers.post().number() > &last_best_number; let leaf_state = if finalized { ::backend::NewBlockState::Final } else if is_new_best { @@ -663,10 +575,10 @@ impl Client where ::backend::NewBlockState::Normal }; - trace!("Imported {}, (#{}), best={}, origin={:?}", hash, header.number(), is_new_best, origin); + trace!("Imported {}, (#{}), best={}, origin={:?}", hash, import_headers.post().number(), is_new_best, origin); transaction.set_block_data( - header.clone(), + import_headers.post().clone(), body, Some(justification), leaf_state, @@ -693,7 +605,7 @@ impl Client where if finalized { let notification = FinalityNotification:: { hash, - header: header.clone(), + header: import_headers.post().clone(), }; self.finality_notification_sinks.lock() @@ -703,7 +615,7 @@ impl Client where let notification = BlockImportNotification:: { hash, origin, - header, + header: import_headers.into_post(), is_new_best, tags, }; @@ -979,6 +891,84 @@ impl Client where } } + +impl consensus::BlockImport for Client where + B: backend::Backend, + E: CallExecutor + Clone, + Block: BlockT, +{ + type Error = Error; + + /// Import a checked and validated block + fn import_block( + &self, + import_block: ImportBlock, + new_authorities: Option>, + ) -> Result { + use runtime_primitives::traits::Digest; + + let ImportBlock { + origin, + header, + external_justification, + post_runtime_digests, + body, + finalized, + .. + } = import_block; + let parent_hash = header.parent_hash().clone(); + + match self.backend.blockchain().status(BlockId::Hash(parent_hash))? { + blockchain::BlockStatus::InChain => {}, + blockchain::BlockStatus::Unknown => return Ok(ImportResult::UnknownParent), + } + + let import_headers = if post_runtime_digests.is_empty() { + PrePostHeader::Same(header) + } else { + let mut post_header = header.clone(); + for item in post_runtime_digests { + post_header.digest_mut().push(item); + } + PrePostHeader::Different(header, post_header) + }; + + let hash = import_headers.post().hash(); + let _import_lock = self.import_lock.lock(); + let height: u64 = import_headers.post().number().as_(); + *self.importing_block.write() = Some(hash); + + let result = self.execute_and_import_block( + origin, + hash, + import_headers, + external_justification, + body, + new_authorities, + finalized, + ); + + *self.importing_block.write() = None; + telemetry!("block.import"; + "height" => height, + "best" => ?hash, + "origin" => ?origin + ); + result.map_err(|e| e.into()) + } +} + +impl consensus::Authorities for Client where + B: backend::Backend, + E: CallExecutor + Clone, + Block: BlockT, +{ + type Error = Error; + fn authorities(&self, at: &BlockId) -> Result, Self::Error> { + self.authorities_at(at).map_err(|e| e.into()) + } +} + impl CurrentHeight for Client where B: backend::Backend, E: CallExecutor + Clone, @@ -1135,26 +1125,6 @@ impl api::BlockBuilder for Client where } } -impl api::OldTxQueue for Client where - B: backend::Backend, - E: CallExecutor, - Block: BlockT, -{ - type Error = Error; - - fn account_nonce( - &self, at: &BlockId, account: &AccountId - ) -> Result { - self.call_api_at(at, "account_nonce", &(account)) - } - - fn lookup_address( - &self, at: &BlockId, address: &Address - ) -> Result, Self::Error> { - self.call_api_at(at, "lookup_address", &(address)) - } -} - impl api::TaggedTransactionQueue for Client where B: backend::Backend, E: CallExecutor, @@ -1169,30 +1139,6 @@ impl api::TaggedTransactionQueue for Client whe } } -impl api::Miscellaneous for Client where - B: backend::Backend, - E: CallExecutor, - Block: BlockT, -{ - type Error = Error; - - fn validator_count(&self, at: &BlockId) -> Result { - self.call_api_at(at, "validator_count", &()) - } - - fn validators( - &self, at: &BlockId - ) -> Result, Self::Error> { - self.call_api_at(at, "validators", &()) - } - - fn timestamp( - &self, at: &BlockId - ) -> Result { - self.call_api_at(at, "timestamp", &()) - } -} - #[cfg(test)] pub(crate) mod tests { use std::collections::HashMap; @@ -1202,7 +1148,7 @@ pub(crate) mod tests { use runtime_primitives::traits::{Digest as DigestT, DigestItem as DigestItemT}; use runtime_primitives::generic::DigestItem; use test_client::{self, TestClient}; - use test_client::client::BlockOrigin; + use consensus::BlockOrigin; use test_client::client::backend::Backend as TestBackend; use test_client::BlockBuilderExt; use test_client::runtime::{self, Block, Transfer}; diff --git a/substrate/core/client/src/error.rs b/substrate/core/client/src/error.rs index 5abc2617b2..139cef13da 100644 --- a/substrate/core/client/src/error.rs +++ b/substrate/core/client/src/error.rs @@ -16,11 +16,17 @@ //! Substrate client possible errors. +#![allow(missing_docs)] + use std; use state_machine; use runtime_primitives::ApplyError; +use consensus; error_chain! { + links { + Consensus(consensus::Error, consensus::ErrorKind); + } errors { /// Backend error. Backend(s: String) { diff --git a/substrate/core/client/src/lib.rs b/substrate/core/client/src/lib.rs index 43a4be7a80..a033277905 100644 --- a/substrate/core/client/src/lib.rs +++ b/substrate/core/client/src/lib.rs @@ -26,6 +26,7 @@ extern crate parity_codec as codec; extern crate substrate_primitives as primitives; extern crate sr_primitives as runtime_primitives; extern crate substrate_state_machine as state_machine; +extern crate substrate_consensus_common as consensus; #[cfg(test)] extern crate substrate_keyring as keyring; #[cfg(test)] extern crate substrate_test_client as test_client; #[macro_use] extern crate substrate_telemetry; @@ -63,8 +64,8 @@ pub use call_executor::{CallResult, CallExecutor, LocalCallExecutor}; pub use client::{ new_with_backend, new_in_mem, - BlockBody, BlockStatus, BlockOrigin, ImportNotifications, FinalityNotifications, BlockchainEvents, - Client, ClientInfo, ChainHead, ImportResult, ImportBlock, + BlockBody, BlockStatus, ImportNotifications, FinalityNotifications, BlockchainEvents, + Client, ClientInfo, ChainHead, }; pub use notifications::{StorageEventStream, StorageChangeSet}; pub use state_machine::ExecutionStrategy; diff --git a/substrate/core/client/src/light/fetcher.rs b/substrate/core/client/src/light/fetcher.rs index 702c9b7034..38a46c7d68 100644 --- a/substrate/core/client/src/light/fetcher.rs +++ b/substrate/core/client/src/light/fetcher.rs @@ -270,7 +270,8 @@ pub mod tests { use error::Error as ClientError; use test_client::{self, TestClient}; use test_client::runtime::{self, Hash, Block, Header}; - use test_client::client::BlockOrigin; + use consensus::BlockOrigin; + use in_mem::{Blockchain as InMemoryBlockchain}; use light::fetcher::{Fetcher, FetchChecker, LightDataChecker, RemoteCallRequest, RemoteHeaderRequest}; diff --git a/substrate/core/consensus/aura/Cargo.toml b/substrate/core/consensus/aura/Cargo.toml new file mode 100644 index 0000000000..0f403ab2ff --- /dev/null +++ b/substrate/core/consensus/aura/Cargo.toml @@ -0,0 +1,42 @@ +[package] +name = "substrate-consensus-aura" +version = "0.1.0" +authors = ["Parity Technologies "] +description = "Rhododendron Round-Based consensus-algorithm for substrate" + +[dependencies] +futures = "0.1.17" +parity-codec = { version = "2.1" } +substrate-consensus-common = { path = "../common" } +substrate-client = { path = "../../client" } +substrate-primitives = { path = "../../primitives" } +substrate-network = { path = "../../network" } +srml-support = { path = "../../../srml/support" } +sr-primitives = { path = "../../sr-primitives" } +sr-version = { path = "../../sr-version" } +sr-io = { path = "../../sr-io" } +srml-consensus = { path = "../../../srml/consensus" } +tokio = "0.1.7" +parking_lot = "0.4" +error-chain = "0.12" +log = "0.3" + +[dev-dependencies] +substrate-keyring = { path = "../../keyring" } +substrate-executor = { path = "../../executor" } +substrate-service = { path = "../../service" } +substrate-test-client = { path = "../../test-client" } +env_logger = { version = "0.4" } + +[target.'cfg(test)'.dependencies] +substrate-network = { path = "../../network", features = ["test-helpers"] } + +[features] +default = ["std"] +std = [ + "substrate-primitives/std", + "srml-support/std", + "sr-primitives/std", + "sr-version/std", +] + diff --git a/substrate/core/consensus/aura/src/lib.rs b/substrate/core/consensus/aura/src/lib.rs new file mode 100644 index 0000000000..7355119074 --- /dev/null +++ b/substrate/core/consensus/aura/src/lib.rs @@ -0,0 +1,560 @@ +// Copyright 2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Aura (Authority-round) consensus in substrate. +//! +//! Aura works by having a list of authorities A who are expected to roughly +//! agree on the current time. Time is divided up into discrete slots of t +//! seconds each. For each slot s, the author of that slot is A[s % |A|]. +//! +//! The author is allowed to issue one block but not more during that slot, +//! and it will be built upon the longest valid chain that has been seen. +//! +//! Blocks from future steps will be either deferred or rejected depending on how +//! far in the future they are. + +extern crate parity_codec as codec; +extern crate substrate_consensus_common as consensus_common; +extern crate substrate_client as client; +extern crate substrate_primitives as primitives; +extern crate substrate_network as network; +extern crate srml_support as runtime_support; +extern crate sr_primitives as runtime_primitives; +extern crate sr_version as runtime_version; +extern crate sr_io as runtime_io; +extern crate tokio; + +#[cfg(test)] +extern crate substrate_keyring as keyring; +#[cfg(test)] +extern crate substrate_service as service; +#[cfg(test)] +extern crate substrate_test_client as test_client; +#[cfg(test)] +extern crate env_logger; + +extern crate parking_lot; + +#[macro_use] +extern crate log; + +extern crate futures; + +use std::sync::Arc; +use std::time::{Duration, Instant}; + +use codec::Encode; +use consensus_common::{Authorities, BlockImport, Environment, Proposer}; +use client::ChainHead; +use consensus_common::{ImportBlock, BlockOrigin}; +use runtime_primitives::{generic, generic::BlockId}; +use runtime_primitives::traits::{Block, Header, Digest, DigestItemFor}; +use network::import_queue::{Verifier, BasicQueue}; +use primitives::{AuthorityId, ed25519}; + +use futures::{Stream, Future, IntoFuture, future::{self, Either}}; +use tokio::timer::Interval; + +pub use consensus_common::SyncOracle; + +/// A handle to the network. This is generally implemented by providing some +/// handle to a gossip service or similar. +/// +/// Intended to be a lightweight handle such as an `Arc`. +pub trait Network: Clone { + /// A stream of input messages for a topic. + type In: Stream,Error=()>; + + /// Send a message at a specific round out. + fn send_message(&self, slot: u64, message: Vec); +} + +/// Configuration for Aura consensus. +#[derive(Clone)] +pub struct Config { + /// The local authority keypair. Can be none if this is just an observer. + pub local_key: Option>, + /// The slot duration in seconds. + pub slot_duration: u64 +} + +/// Get slot author for given block along with authorities. +fn slot_author(slot_num: u64, authorities: &[AuthorityId]) -> Option { + if authorities.is_empty() { return None } + + let idx = slot_num % (authorities.len() as u64); + assert!(idx <= usize::max_value() as u64, + "It is impossible to have a vector with length beyond the address space; qed"); + + let current_author = *authorities.get(idx as usize) + .expect("authorities not empty; index constrained to list length;\ + this is a valid index; qed"); + + Some(current_author) +} + +fn duration_now() -> Option { + use std::time::SystemTime; + + let now = SystemTime::now(); + now.duration_since(SystemTime::UNIX_EPOCH).map_err(|e| { + warn!("Current time {:?} is before unix epoch. Something is wrong: {:?}", now, e); + }).ok() +} + +/// Get the slot for now. +fn slot_now(slot_duration: u64) -> Option { + duration_now().map(|s| s.as_secs() / slot_duration) +} + +/// A digest item which is usable with aura consensus. +pub trait CompatibleDigestItem: Sized { + /// Construct a digest item which is a slot number and a signature on the + /// hash. + fn aura_seal(slot_number: u64, signature: ed25519::Signature) -> Self; + + /// If this item is an Aura seal, return the slot number and signature. + fn as_aura_seal(&self) -> Option<(u64, &ed25519::Signature)>; +} + +impl CompatibleDigestItem for generic::DigestItem { + /// Construct a digest item which is a slot number and a signature on the + /// hash. + fn aura_seal(slot_number: u64, signature: ed25519::Signature) -> Self { + generic::DigestItem::Seal(slot_number, signature) + } + /// If this item is an Aura seal, return the slot number and signature. + fn as_aura_seal(&self) -> Option<(u64, &ed25519::Signature)> { + match self { + generic::DigestItem::Seal(slot, ref sign) => Some((*slot, sign)), + _ => None + } + } +} + +impl CompatibleDigestItem for generic::DigestItem { + /// Construct a digest item which is a slot number and a signature on the + /// hash. + fn aura_seal(slot_number: u64, signature: ed25519::Signature) -> Self { + generic::DigestItem::Seal(slot_number, signature) + } + /// If this item is an Aura seal, return the slot number and signature. + fn as_aura_seal(&self) -> Option<(u64, &ed25519::Signature)> { + match self { + generic::DigestItem::Seal(slot, ref sign) => Some((*slot, sign)), + _ => None + } + } +} + +/// Start the aura worker. This should be run in a tokio runtime. +pub fn start_aura( + config: Config, + client: Arc, + env: Arc, + sync_oracle: SO, +) + -> impl Future where + B: Block, + C: Authorities + BlockImport + ChainHead, + E: Environment, + E::Proposer: Proposer, + SO: SyncOracle + Send + Clone, + DigestItemFor: CompatibleDigestItem, + Error: ::std::error::Error + Send + 'static + From<::consensus_common::Error>, +{ + let make_authorship = move || { + let config = config.clone(); + let client = client.clone(); + let env = env.clone(); + let sync_oracle = sync_oracle.clone(); + + let local_keys = config.local_key.map(|pair| (pair.public(), pair)); + let slot_duration = config.slot_duration; + let mut last_authored_slot = 0; + let next_slot_start = duration_now().map(|now| { + let remaining_full_secs = slot_duration - (now.as_secs() % slot_duration) - 1; + let remaining_nanos = 1_000_000_000 - now.subsec_nanos(); + Instant::now() + Duration::new(remaining_full_secs, remaining_nanos) + }).unwrap_or_else(|| Instant::now()); + + Interval::new(next_slot_start, Duration::from_secs(slot_duration)) + .filter(move |_| !sync_oracle.is_major_syncing()) // only propose when we are not syncing. + .filter_map(move |_| local_keys.clone()) // skip if not authoring. + .map_err(|e| debug!(target: "aura", "Faulty timer: {:?}", e)) + .for_each(move |(public_key, key)| { + use futures::future; + + let slot_num = match slot_now(slot_duration) { + Some(n) => n, + None => return Either::B(future::err(())), + }; + + if last_authored_slot >= slot_num { return Either::B(future::ok(())) } + last_authored_slot = slot_num; + + let chain_head = match client.best_block_header() { + Ok(x) => x, + Err(e) => { + warn!(target:"aura", "Unable to author block in slot {}. no best block header: {:?}", slot_num, e); + return Either::B(future::ok(())) + } + }; + + let authorities = match client.authorities(&BlockId::Hash(chain_head.hash())){ + Ok(authorities) => authorities, + Err(e) => { + warn!("Unable to fetch authorities at block {:?}: {:?}", chain_head.hash(), e); + return Either::B(future::ok(())); + } + }; + + let proposal_work = match slot_author(slot_num, &authorities) { + None => return Either::B(future::ok(())), + Some(author) => if author.0 == public_key.0 { + // we are the slot author. make a block and sign it. + let proposer = match env.init(&chain_head, &authorities, key.clone()) { + Ok(p) => p, + Err(e) => { + warn!("Unable to author block in slot {:?}: {:?}", slot_num, e); + return Either::B(future::ok(())) + } + }; + + proposer.propose().into_future() + } else { + return Either::B(future::ok(())); + } + }; + + let block_import = client.clone(); + Either::A(proposal_work + .map(move |b| { + let (header, body) = b.deconstruct(); + let pre_hash = header.hash(); + let parent_hash = header.parent_hash().clone(); + + // sign the pre-sealed hash of the block and then + // add it to a digest item. + let to_sign = (slot_num, pre_hash).encode(); + let signature = key.sign(&to_sign[..]); + let item = as CompatibleDigestItem>::aura_seal(slot_num, signature); + let import_block = ImportBlock { + origin: BlockOrigin::Own, + header, + external_justification: Vec::new(), + post_runtime_digests: vec![item], + body: Some(body), + finalized: false, + auxiliary: Vec::new(), + }; + + if let Err(e) = block_import.import_block(import_block, None) { + warn!(target: "aura", "Error with block built on {:?}: {:?}", parent_hash, e); + } + }) + .map_err(|e| warn!("Failed to construct block: {:?}", e)) + ) + }) + }; + + future::loop_fn((), move |()| { + let authorship_task = ::std::panic::AssertUnwindSafe(make_authorship()); + authorship_task.catch_unwind().then(|res| { + match res { + Ok(Ok(())) => (), + Ok(Err(())) => warn!("Aura authorship task terminated unexpectedly. Restarting"), + Err(e) => { + if let Some(s) = e.downcast_ref::<&'static str>() { + warn!("Aura authorship task panicked at {:?}", s); + } + + warn!("Restarting Aura authorship task"); + } + } + + Ok(future::Loop::Continue(())) + }) + }) +} + +// a header which has been checked +enum CheckedHeader { + // a header which has slot in the future. this is the full header (not stripped) + // and the slot in which it should be processed. + Deferred(H, u64), + // a header which is fully checked, including signature. This is the pre-header + // accompanied by the seal components. + Checked(H, u64, ed25519::Signature), +} + + +/// check a header has been signed by the right key. If the slot is too far in the future, an error will be returned. +/// if it's successful, returns the pre-header, the slot number, and the signat. +// +// FIXME: needs misbehavior types - https://github.com/paritytech/substrate/issues/1018 +fn check_header(slot_now: u64, mut header: B::Header, hash: B::Hash, authorities: &[AuthorityId]) + -> Result, String> + where DigestItemFor: CompatibleDigestItem +{ + let digest_item = match header.digest_mut().pop() { + Some(x) => x, + None => return Err(format!("Header {:?} is unsealed", hash)), + }; + let (slot_num, &sig) = match digest_item.as_aura_seal() { + Some(x) => x, + None => return Err(format!("Header {:?} is unsealed", hash)), + }; + + if slot_num > slot_now { + header.digest_mut().push(digest_item); + Ok(CheckedHeader::Deferred(header, slot_num)) + } else { + // check the signature is valid under the expected authority and + // chain state. + + let expected_author = match slot_author(slot_num, &authorities) { + None => return Err("Slot Author not found".to_string()), + Some(author) => author + }; + + let pre_hash = header.hash(); + let to_sign = (slot_num, pre_hash).encode(); + let public = ed25519::Public(expected_author.0); + + if ed25519::verify_strong(&sig, &to_sign[..], public) { + Ok(CheckedHeader::Checked(header, slot_num, sig)) + } else { + Err(format!("Bad signature on {:?}", hash)) + } + } +} + +/// A verifier for Aura blocks. +pub struct AuraVerifier { + config: Config, + client: Arc, +} + +impl Verifier for AuraVerifier where + C: Authorities + BlockImport + Send + Sync, + DigestItemFor: CompatibleDigestItem, +{ + fn verify( + &self, + origin: BlockOrigin, + header: B::Header, + _justification: Vec, + body: Option> + ) -> Result<(ImportBlock, Option>), String> { + let slot_now = slot_now(self.config.slot_duration) + .ok_or("System time is before UnixTime?".to_owned())?; + let hash = header.hash(); + let parent_hash = *header.parent_hash(); + let authorities = self.client.authorities(&BlockId::Hash(parent_hash)) + .map_err(|e| format!("Could not fetch authorities at {:?}: {:?}", parent_hash, e))?; + + // we add one to allow for some small drift. + // FIXME: in the future, alter this queue to allow deferring of headers + // https://github.com/paritytech/substrate/issues/1019 + let checked_header = check_header::(slot_now + 1, header, hash, &authorities[..])?; + match checked_header { + CheckedHeader::Checked(pre_header, slot_num, sig) => { + let item = >::aura_seal(slot_num, sig); + + debug!(target: "aura", "Checked {:?}; importing.", pre_header); + + let import_block = ImportBlock { + origin, + header: pre_header, + external_justification: Vec::new(), + post_runtime_digests: vec![item], + body, + finalized: false, + auxiliary: Vec::new(), + }; + + // FIXME: extract authorities - https://github.com/paritytech/substrate/issues/1019 + Ok((import_block, None)) + } + CheckedHeader::Deferred(a, b) => { + debug!(target: "aura", "Checking {:?} failed; {:?}, {:?}.", hash, a, b); + Err(format!("Header {:?} rejected: too far in the future", hash)) + } + } + } +} + +/// The Aura import queue type. +pub type AuraImportQueue = BasicQueue>; + +/// Start an import queue for the Aura consensus algorithm. +pub fn import_queue(config: Config, client: Arc) -> AuraImportQueue where + B: Block, + C: Authorities + BlockImport + Send + Sync, + DigestItemFor: CompatibleDigestItem, +{ + let verifier = Arc::new(AuraVerifier { config, client }); + BasicQueue::new(verifier) +} + + + +#[cfg(test)] +mod tests { + use super::*; + use consensus_common::NoNetwork as DummyOracle; + use network::test::*; + use network::test::{Block as TestBlock, PeersClient}; + use runtime_primitives::traits::Block as BlockT; + use network::ProtocolConfig; + use parking_lot::Mutex; + use tokio::runtime::current_thread; + use keyring::Keyring; + use client::BlockchainEvents; + use test_client; + + type Error = client::error::Error; + + type TestClient = client::Client; + + struct DummyFactory(Arc); + struct DummyProposer(u64, Arc); + + impl Environment for DummyFactory { + type Proposer = DummyProposer; + type Error = Error; + + fn init(&self, parent_header: &::Header, _authorities: &[AuthorityId], _sign_with: Arc) + -> Result + { + Ok(DummyProposer(parent_header.number + 1, self.0.clone())) + } + } + + impl Proposer for DummyProposer { + type Error = Error; + type Create = Result; + + fn propose(&self) -> Result { + self.1.new_block().unwrap().bake().map_err(|e| e.into()) + } + } + + const SLOT_DURATION: u64 = 1; + const TEST_ROUTING_INTERVAL: Duration = Duration::from_millis(50); + + pub struct AuraTestNet { + peers: Vec>>>, + started: bool + } + + impl TestNetFactory for AuraTestNet { + type Verifier = AuraVerifier; + + /// Create new test network with peers and given config. + fn from_config(_config: &ProtocolConfig) -> Self { + AuraTestNet { + peers: Vec::new(), + started: false + } + } + + fn make_verifier(&self, client: Arc, _cfg: &ProtocolConfig) + -> Arc + { + let config = Config { local_key: None, slot_duration: SLOT_DURATION }; + Arc::new(AuraVerifier { client, config }) + } + + fn peer(&self, i: usize) -> &Peer { + &self.peers[i] + } + + fn peers(&self) -> &Vec>> { + &self.peers + } + + fn mut_peers>>)>(&mut self, closure: F ) { + closure(&mut self.peers); + } + + fn started(&self) -> bool { + self.started + } + + fn set_started(&mut self, new: bool) { + self.started = new; + } + } + + #[test] + fn authoring_blocks() { + ::env_logger::init().ok(); + let mut net = AuraTestNet::new(3); + + net.start(); + + let peers = &[ + (0, Keyring::Alice), + (1, Keyring::Bob), + (2, Keyring::Charlie), + ]; + + let net = Arc::new(Mutex::new(net)); + let mut import_notifications = Vec::new(); + + let mut runtime = current_thread::Runtime::new().unwrap(); + for (peer_id, key) in peers { + let mut client = net.lock().peer(*peer_id).client().clone(); + let environ = Arc::new(DummyFactory(client.clone())); + import_notifications.push( + client.import_notification_stream() + .take_while(|n| { + Ok(!(n.origin != BlockOrigin::Own && n.header.number() < &5)) + }) + .for_each(move |_| Ok(())) + ); + let aura = start_aura( + Config { + local_key: Some(Arc::new(key.clone().into())), + slot_duration: SLOT_DURATION + }, + client, + environ.clone(), + DummyOracle, + ); + + runtime.spawn(aura); + } + + // wait for all finalized on each. + let wait_for = ::futures::future::join_all(import_notifications) + .map(|_| ()) + .map_err(|_| ()); + + let drive_to_completion = ::tokio::timer::Interval::new_interval(TEST_ROUTING_INTERVAL) + .for_each(move |_| { + net.lock().send_import_notifications(); + net.lock().sync(); + Ok(()) + }) + .map(|_| ()) + .map_err(|_| ()); + + runtime.block_on(wait_for.select(drive_to_completion).map_err(|_| ())).unwrap(); + } +} diff --git a/substrate/core/consensus/common/Cargo.toml b/substrate/core/consensus/common/Cargo.toml index ff5ebae0f8..08689721a0 100644 --- a/substrate/core/consensus/common/Cargo.toml +++ b/substrate/core/consensus/common/Cargo.toml @@ -4,5 +4,12 @@ version = "0.1.0" authors = ["Parity Technologies "] description = "Common utilities for substrate consensus" -[dev-dependencies] -substrate-primitives = { path= "../../primitives"} \ No newline at end of file +[dependencies] +substrate-primitives = { path= "../../primitives" } +error-chain = "0.12" +futures = "0.1" +sr-version = { path = "../../sr-version" } +sr-primitives = { path = "../../sr-primitives" } +tokio = "0.1.7" +parity-codec = "2.1" +parity-codec-derive = "2.0" diff --git a/substrate/core/consensus/common/src/block_import.rs b/substrate/core/consensus/common/src/block_import.rs new file mode 100644 index 0000000000..582886d827 --- /dev/null +++ b/substrate/core/consensus/common/src/block_import.rs @@ -0,0 +1,104 @@ + +use primitives::AuthorityId; +use runtime_primitives::traits::{Block as BlockT, DigestItemFor}; +use runtime_primitives::Justification; + +/// Block import result. +#[derive(Debug)] +pub enum ImportResult { + /// Added to the import queue. + Queued, + /// Already in the import queue. + AlreadyQueued, + /// Already in the blockchain. + AlreadyInChain, + /// Block or parent is known to be bad. + KnownBad, + /// Block parent is not in the chain. + UnknownParent, +} + +/// Block data origin. +#[derive(Debug, PartialEq, Eq, Clone, Copy)] +pub enum BlockOrigin { + /// Genesis block built into the client. + Genesis, + /// Block is part of the initial sync with the network. + NetworkInitialSync, + /// Block was broadcasted on the network. + NetworkBroadcast, + /// Block that was received from the network and validated in the consensus process. + ConsensusBroadcast, + /// Block that was collated by this node. + Own, + /// Block was imported from a file. + File, +} + +/// Data required to import a Block +pub struct ImportBlock { + /// Origin of the Block + pub origin: BlockOrigin, + /// The header, without consensus post-digests applied. This should be in the same + /// state as it comes out of the runtime. + /// + /// Consensus engines which alter the header (by adding post-runtime digests) + /// should strip those off in the initial verification process and pass them + /// via the `post_runtime_digests` field. During block authorship, they should + /// not be pushed to the header directly. + /// + /// The reason for this distinction is so the header can be directly + /// re-executed in a runtime that checks digest equivalence -- the + /// post-runtime digests are pushed back on after. + pub header: Block::Header, + /// Justification provided for this block from the outside:. + pub external_justification: Justification, + /// Digest items that have been added after the runtime for external + /// work, like a consensus signature. + pub post_runtime_digests: Vec>, + /// Block's body + pub body: Option>, + /// Is this block finalized already? + /// `true` implies instant finality. + pub finalized: bool, + /// Auxiliary consensus data produced by the block. + /// Contains a list of key-value pairs. If values are `None`, the keys + /// will be deleted. + pub auxiliary: Vec<(Vec, Option>)>, +} + +impl ImportBlock { + /// Deconstruct the justified header into parts. + pub fn into_inner(self) + -> ( + BlockOrigin, + ::Header, + Justification, + Vec>, + Option::Extrinsic>>, + bool, + Vec<(Vec, Option>)>, + ) { + ( + self.origin, + self.header, + self.external_justification, + self.post_runtime_digests, + self.body, + self.finalized, + self.auxiliary, + ) + } +} + + + +/// Block import trait. +pub trait BlockImport { + type Error: ::std::error::Error + Send + 'static; + /// Import a Block alongside the new authorities valid form this block forward + fn import_block(&self, + block: ImportBlock, + new_authorities: Option> + ) -> Result; +} \ No newline at end of file diff --git a/substrate/core/consensus/common/src/error.rs b/substrate/core/consensus/common/src/error.rs new file mode 100644 index 0000000000..ccf57adb9f --- /dev/null +++ b/substrate/core/consensus/common/src/error.rs @@ -0,0 +1,88 @@ +// Copyright 2017-2018 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Error types in Consensus +use runtime_version::RuntimeVersion; + +error_chain! { + errors { + /// Missing state at block with given descriptor. + StateUnavailable(b: String) { + description("State missing at given block."), + display("State unavailable at block {}", b), + } + + /// I/O terminated unexpectedly + IoTerminated { + description("I/O terminated unexpectedly."), + display("I/O terminated unexpectedly."), + } + + /// Unable to schedule wakeup. + FaultyTimer(e: ::tokio::timer::Error) { + description("Timer error"), + display("Timer error: {}", e), + } + + /// Unable to propose a block. + CannotPropose { + description("Unable to create block proposal."), + display("Unable to create block proposal."), + } + + /// Error checking signature + InvalidSignature(s: ::primitives::ed25519::Signature, a: ::primitives::AuthorityId) { + description("Message signature is invalid"), + display("Message signature {:?} by {:?} is invalid.", s, a), + } + + /// Account is not an authority. + InvalidAuthority(a: ::primitives::AuthorityId) { + description("Message sender is not a valid authority"), + display("Message sender {:?} is not a valid authority.", a), + } + + /// Authoring interface does not match the runtime. + IncompatibleAuthoringRuntime(native: RuntimeVersion, on_chain: RuntimeVersion) { + description("Authoring for current runtime is not supported"), + display("Authoring for current runtime is not supported. Native ({}) cannot author for on-chain ({}).", native, on_chain), + } + + /// Authoring interface does not match the runtime. + RuntimeVersionMissing { + description("Current runtime has no version"), + display("Authoring for current runtime is not supported since it has no version."), + } + + /// Authoring interface does not match the runtime. + NativeRuntimeMissing { + description("This build has no native runtime"), + display("Authoring in current build is not supported since it has no runtime."), + } + + /// Justification requirements not met. + InvalidJustification { + description("Invalid justification"), + display("Invalid justification."), + } + + /// Some other error. + Other(e: Box<::std::error::Error + Send>) { + description("Other error") + display("Other error: {}", e.description()) + } + } +} diff --git a/substrate/node/consensus/src/evaluation.rs b/substrate/core/consensus/common/src/evaluation.rs similarity index 73% rename from substrate/node/consensus/src/evaluation.rs rename to substrate/core/consensus/common/src/evaluation.rs index c21c202e96..db35e2f411 100644 --- a/substrate/node/consensus/src/evaluation.rs +++ b/substrate/core/consensus/common/src/evaluation.rs @@ -18,11 +18,10 @@ use super::MAX_TRANSACTIONS_SIZE; -use codec::{Decode, Encode}; -use node_runtime::{Block as GenericBlock}; -use node_primitives::{Hash, BlockNumber}; +use codec::Encode; use runtime_primitives::traits::{Block as BlockT, Header as HeaderT, As}; +type BlockNumber = u64; error_chain! { errors { @@ -30,13 +29,13 @@ error_chain! { description("Proposal provided not a block."), display("Proposal provided not a block."), } - WrongParentHash(expected: Hash, got: Hash) { + WrongParentHash(expected: String, got: String) { description("Proposal had wrong parent hash."), display("Proposal had wrong parent hash. Expected {:?}, got {:?}", expected, got), } WrongNumber(expected: BlockNumber, got: BlockNumber) { description("Proposal had wrong number."), - display("Proposal had wrong number. Expected {:?}, got {:?}", expected, got), + display("Proposal had wrong number. Expected {}, got {}", expected, got), } ProposalTooLarge(size: usize) { description("Proposal exceeded the maximum size."), @@ -50,20 +49,17 @@ error_chain! { /// Attempt to evaluate a substrate block as a node block, returning error /// upon any initial validity checks failing. -pub fn evaluate_initial( +pub fn evaluate_initial( proposal: &Block, - parent_hash: &Hash, + parent_hash: &::Hash, parent_number: <::Header as HeaderT>::Number, -) -> Result<()> -where - Hash: PartialEq<<::Header as HeaderT>::Hash>, - Hash: Into + Clone, -{ +) -> Result<()> { + let encoded = Encode::encode(proposal); - let proposal = GenericBlock::decode(&mut &encoded[..]) + let proposal = Block::decode(&mut &encoded[..]) .ok_or_else(|| ErrorKind::BadProposalFormat)?; - let transactions_size = proposal.extrinsics.iter().fold(0, |a, tx| { + let transactions_size = proposal.extrinsics().iter().fold(0, |a, tx| { a + Encode::encode(tx).len() }); @@ -72,11 +68,14 @@ where } if *parent_hash != *proposal.header().parent_hash() { - bail!(ErrorKind::WrongParentHash((*parent_hash).clone().into(), proposal.header.parent_hash)); + bail!(ErrorKind::WrongParentHash( + format!("{:?}", *parent_hash), + format!("{:?}", proposal.header().parent_hash()) + )); } - if parent_number.as_() + 1 != *proposal.header().number() { - bail!(ErrorKind::WrongNumber(parent_number.as_() + 1, proposal.header.number)); + if parent_number.as_() + 1 != proposal.header().number().as_() { + bail!(ErrorKind::WrongNumber(parent_number.as_() + 1, proposal.header().number().as_())); } Ok(()) diff --git a/substrate/core/consensus/common/src/lib.rs b/substrate/core/consensus/common/src/lib.rs index fde9d20ec9..12d5cfa70d 100644 --- a/substrate/core/consensus/common/src/lib.rs +++ b/substrate/core/consensus/common/src/lib.rs @@ -15,22 +15,118 @@ // along with Substrate Consensus Common. If not, see . // tag::description[] -//! Tracks offline validators. +//! Consensus basics and common features // end::description[] +// This provides "unused" building blocks to other crates #![allow(dead_code)] -#![cfg(feature="rhd")] +// our error-chain could potentially blow up otherwise +#![recursion_limit="128"] extern crate substrate_primitives as primitives; +extern crate futures; +extern crate sr_version as runtime_version; +extern crate sr_primitives as runtime_primitives; +extern crate tokio; -use primitives::{generic::BlockId, Justification}; -use primitives::traits::{Block, Header}; +extern crate parity_codec as codec; +#[macro_use] +extern crate parity_codec_derive; -/// Block import trait. -pub trait BlockImport { - /// Import a block alongside its corresponding justification. - fn import_block(&self, block: B, justification: Justification, authorities: &[AuthorityId]) -> bool; +#[macro_use] +extern crate error_chain; + +use std::sync::Arc; + +use primitives::{ed25519, AuthorityId}; +use runtime_primitives::generic::BlockId; +use runtime_primitives::traits::Block; +use futures::prelude::*; + +pub mod offline_tracker; +pub mod error; +mod block_import; +pub mod evaluation; + +// block size limit. +const MAX_TRANSACTIONS_SIZE: usize = 4 * 1024 * 1024; + +pub use self::error::{Error, ErrorKind}; +pub use block_import::{BlockImport, ImportBlock, BlockOrigin, ImportResult}; + +/// Trait for getting the authorities at a given block. +pub trait Authorities { + type Error: ::std::error::Error + Send + 'static; /// Get the authorities at the given block. + fn authorities(&self, at: &BlockId) -> Result, Self::Error>; } -pub mod offline_tracker; \ No newline at end of file +/// Environment producer for a Consensus instance. Creates proposer instance and communication streams. +pub trait Environment { + /// 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. Provide + /// the authorities at that header, and a local key to sign any additional + /// consensus messages with as well. + fn init(&self, parent_header: &B::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 { + /// Error type which can occur when proposing or evaluating. + type Error: From + ::std::fmt::Debug + 'static; + /// Future that resolves to a committed proposal. + type Create: IntoFuture; + /// Create a proposal. + fn propose(&self) -> Self::Create; +} + +/// Inherent data to include in a block. +#[derive(Encode, Decode)] +pub struct InherentData { + /// Current timestamp. + pub timestamp: u64, + /// Indices of offline validators. + pub offline_indices: Vec, +} + +impl InherentData { + /// Create a new `InherentData` instance. + pub fn new(timestamp: u64, offline_indices: Vec) -> Self { + Self { + timestamp, + offline_indices + } + } +} + +/// An oracle for when major synchronization work is being undertaken. +/// +/// Generally, consensus authoring work isn't undertaken while well behind +/// the head of the chain. +pub trait SyncOracle { + /// Whether the synchronization service is undergoing major sync. + /// Returns true if so. + fn is_major_syncing(&self) -> bool; +} + +/// A synchronization oracle for when there is no network. +#[derive(Clone, Copy, Debug)] +pub struct NoNetwork; + +impl SyncOracle for NoNetwork { + fn is_major_syncing(&self) -> bool { false } +} + +impl SyncOracle for Arc { + fn is_major_syncing(&self) -> bool { + T::is_major_syncing(&*self) + } +} diff --git a/substrate/core/consensus/common/src/offline_tracker.rs b/substrate/core/consensus/common/src/offline_tracker.rs index 18845dd68b..bd8eab8b1b 100644 --- a/substrate/core/consensus/common/src/offline_tracker.rs +++ b/substrate/core/consensus/common/src/offline_tracker.rs @@ -16,7 +16,7 @@ //! Tracks offline validators. -use node_primitives::AccountId; +use primitives::AuthorityId; use std::collections::HashMap; use std::time::{Instant, Duration}; @@ -56,7 +56,7 @@ impl Observed { /// Tracks offline validators and can issue a report for those offline. pub struct OfflineTracker { - observed: HashMap, + observed: HashMap, } impl OfflineTracker { @@ -66,7 +66,7 @@ impl OfflineTracker { } /// Note new consensus is starting with the given set of validators. - pub fn note_new_block(&mut self, validators: &[AccountId]) { + pub fn note_new_block(&mut self, validators: &[AuthorityId]) { use std::collections::HashSet; let set: HashSet<_> = validators.iter().cloned().collect(); @@ -74,14 +74,14 @@ impl OfflineTracker { } /// Note that a round has ended. - pub fn note_round_end(&mut self, validator: AccountId, was_online: bool) { + pub fn note_round_end(&mut self, validator: AuthorityId, was_online: bool) { self.observed.entry(validator) .or_insert_with(Observed::new) .note_round_end(was_online); } /// Generate a vector of indices for offline account IDs. - pub fn reports(&self, validators: &[AccountId]) -> Vec { + pub fn reports(&self, validators: &[AuthorityId]) -> Vec { validators.iter() .enumerate() .filter_map(|(i, v)| if self.is_online(v) { @@ -93,7 +93,7 @@ impl OfflineTracker { } /// Whether reports on a validator set are consistent with our view of things. - pub fn check_consistency(&self, validators: &[AccountId], reports: &[u32]) -> bool { + pub fn check_consistency(&self, validators: &[AuthorityId], reports: &[u32]) -> bool { reports.iter().cloned().all(|r| { let v = match validators.get(r as usize) { Some(v) => v, @@ -106,7 +106,7 @@ impl OfflineTracker { }) } - fn is_online(&self, v: &AccountId) -> bool { + fn is_online(&self, v: &AuthorityId) -> bool { self.observed.get(v).map(Observed::is_active).unwrap_or(true) } } diff --git a/substrate/core/consensus/rhd/Cargo.toml b/substrate/core/consensus/rhd/Cargo.toml index f5b928c429..dce6a6d7f4 100644 --- a/substrate/core/consensus/rhd/Cargo.toml +++ b/substrate/core/consensus/rhd/Cargo.toml @@ -6,30 +6,33 @@ description = "Rhododendron Round-Based consensus-algorithm for substrate" [dependencies] futures = "0.1.17" -parity-codec = { version = "1.1" } +parity-codec = { version = "2.1" } parity-codec-derive = { version = "2.0" } substrate-primitives = { path = "../../primitives" } +substrate-consensus-common = { path = "../common" } +substrate-client = { path = "../../client" } +substrate-transaction-pool = { path = "../../transaction-pool" } srml-support = { path = "../../../srml/support" } +srml-system = { path = "../../../srml/system" } +srml-consensus = { path = "../../../srml/consensus" } sr-primitives = { path = "../../sr-primitives" } sr-version = { path = "../../sr-version" } sr-io = { path = "../../sr-io" } -srml-consensus = { path = "../../../srml/consensus" } tokio = "0.1.7" parking_lot = "0.4" error-chain = "0.12" -log = "0.3" -rhododendron = { git = "https://github.com/paritytech/rhododendron.git", features = ["codec"] } -serde = { version = "1.0", features = ["derive"] } +log = "0.4" +rhododendron = { version = "0.4.0", features = ["codec"] } +exit-future = "0.1" + [dev-dependencies] substrate-keyring = { path = "../../keyring" } substrate-executor = { path = "../../executor" } - [features] default = ["std"] std = [ - "serde/std", "substrate-primitives/std", "srml-support/std", "sr-primitives/std", diff --git a/substrate/core/consensus/rhd/src/error.rs b/substrate/core/consensus/rhd/src/error.rs index 806ba5624a..c18c36f679 100644 --- a/substrate/core/consensus/rhd/src/error.rs +++ b/substrate/core/consensus/rhd/src/error.rs @@ -1,4 +1,4 @@ -// Copyright 2017-2018 Parity Technologies (UK) Ltd. +// Copyright 2018 Parity Technologies (UK) Ltd. // This file is part of Substrate. // Substrate is free software: you can redistribute it and/or modify @@ -14,81 +14,44 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -//! Error types in the BFT service. -use runtime_version::RuntimeVersion; +//! Error types in the rhododendron Consensus service. +use consensus::error::{Error as CommonError, ErrorKind as CommonErrorKind}; +use primitives::AuthorityId; +use client; error_chain! { + links { + Client(client::error::Error, client::error::ErrorKind); + Common(CommonError, CommonErrorKind); + } errors { - /// Missing state at block with given descriptor. - StateUnavailable(b: String) { - description("State missing at given block."), - display("State unavailable at block {}", b), + NotValidator(id: AuthorityId) { + description("Local account ID not a validator at this block."), + display("Local account ID ({:?}) not a validator at this block.", id), } - - /// I/O terminated unexpectedly - IoTerminated { - description("I/O terminated unexpectedly."), - display("I/O terminated unexpectedly."), + PrematureDestruction { + description("Proposer destroyed before finishing proposing or evaluating"), + display("Proposer destroyed before finishing proposing or evaluating"), } - - /// Unable to schedule wakeup. - FaultyTimer(e: ::tokio::timer::Error) { - description("Timer error"), - display("Timer error: {}", e), + Timer(e: ::tokio::timer::Error) { + description("Failed to register or resolve async timer."), + display("Timer failed: {}", e), } - - /// Unable to propose a block. - CannotPropose { - description("Unable to create block proposal."), - display("Unable to create block proposal."), - } - - /// Error checking signature - InvalidSignature(s: ::primitives::ed25519::Signature, a: ::primitives::AuthorityId) { - description("Message signature is invalid"), - display("Message signature {:?} by {:?} is invalid.", s, a), - } - - /// Account is not an authority. - InvalidAuthority(a: ::primitives::AuthorityId) { - description("Message sender is not a valid authority"), - display("Message sender {:?} is not a valid authority.", a), - } - - /// Authoring interface does not match the runtime. - IncompatibleAuthoringRuntime(native: RuntimeVersion, on_chain: RuntimeVersion) { - description("Authoring for current runtime is not supported"), - display("Authoring for current runtime is not supported. Native ({}) cannot author for on-chain ({}).", native, on_chain), - } - - /// Authoring interface does not match the runtime. - RuntimeVersionMissing { - description("Current runtime has no version"), - display("Authoring for current runtime is not supported since it has no version."), - } - - /// Authoring interface does not match the runtime. - NativeRuntimeMissing { - description("This build has no native runtime"), - display("Authoring in current build is not supported since it has no runtime."), - } - - /// Justification requirements not met. - InvalidJustification { - description("Invalid justification"), - display("Invalid justification."), - } - - /// Some other error. - Other(e: Box<::std::error::Error + Send>) { - description("Other error") - display("Other error: {}", e.description()) + Executor(e: ::futures::future::ExecuteErrorKind) { + description("Unable to dispatch agreement future"), + display("Unable to dispatch agreement future: {:?}", e), } } } impl From<::rhododendron::InputStreamConcluded> for Error { - fn from(_: ::rhododendron::InputStreamConcluded) -> Error { - ErrorKind::IoTerminated.into() + fn from(_: ::rhododendron::InputStreamConcluded) -> Self { + CommonErrorKind::IoTerminated.into() } } + +impl From for Error { + fn from(e: CommonErrorKind) -> Self { + CommonError::from(e).into() + } +} \ No newline at end of file diff --git a/substrate/core/consensus/rhd/src/lib.rs b/substrate/core/consensus/rhd/src/lib.rs index 0bb0cbc3c6..b99ea4a24c 100644 --- a/substrate/core/consensus/rhd/src/lib.rs +++ b/substrate/core/consensus/rhd/src/lib.rs @@ -32,60 +32,74 @@ //! set for this block height. // end::description[] -#![cfg(feature = "rhd")] - -#![recursion_limit="128"] +#![cfg(feature="rhd")] +// FIXME: doesn't compile - https://github.com/paritytech/substrate/issues/1020 extern crate parity_codec as codec; extern crate substrate_primitives as primitives; +extern crate substrate_client as client; +extern crate substrate_consensus_common as consensus; +extern crate substrate_transaction_pool as transaction_pool; +extern crate srml_system; extern crate srml_support as runtime_support; extern crate sr_primitives as runtime_primitives; extern crate sr_version as runtime_version; extern crate sr_io as runtime_io; -extern crate tokio; -#[cfg(test)] -extern crate substrate_keyring as keyring; extern crate parking_lot; extern crate rhododendron; +extern crate futures; +extern crate exit_future; +extern crate tokio; #[macro_use] extern crate log; - -extern crate futures; - #[macro_use] extern crate error_chain; -#[macro_use] -extern crate serde; - #[macro_use] extern crate parity_codec_derive; - -pub mod error; +#[cfg(test)] +extern crate substrate_keyring; use std::sync::Arc; use std::sync::atomic::{AtomicUsize, Ordering}; -use std::time::{Instant, Duration}; +use std::time::{self, Instant, Duration}; -use codec::Encode; -use runtime_primitives::{generic::BlockId, Justification}; +use codec::{Decode, Encode}; +use consensus::offline_tracker::OfflineTracker; +use consensus::error::{ErrorKind as CommonErrorKind}; +use consensus::{Authorities, BlockImport, Environment, Proposer as BaseProposer}; +use client::{Client as SubstrateClient, CallExecutor}; +use client::runtime_api::{Core, BlockBuilder as BlockBuilderAPI, OldTxQueue, BlockBuilderError}; +use runtime_primitives::generic::{BlockId, Era, ImportResult, ImportBlock, BlockOrigin}; use runtime_primitives::traits::{Block, Header}; -use primitives::{AuthorityId, ed25519, ed25519::LocalizedSignature}; +use runtime_primitives::traits::{Block as BlockT, Hash as HashT, Header as HeaderT, As, BlockNumberToHash}; +use runtime_primitives::Justification; +use primitives::{AuthorityId, ed25519, Blake2Hasher, ed25519::LocalizedSignature}; +use srml_system::Trait as SystemT; -use futures::{Async, Stream, Sink, Future, IntoFuture}; +use node_runtime::Runtime; +use transaction_pool::txpool::{self, Pool as TransactionPool}; + +use futures::prelude::*; +use futures::future; use futures::sync::oneshot; +use tokio::runtime::TaskExecutor; use tokio::timer::Delay; -use parking_lot::Mutex; +use parking_lot::{RwLock, Mutex}; -pub use rhododendron::{InputStreamConcluded, AdvanceRoundReason, - Message as RhdMessage, Vote as RhdMessageVote}; -pub use error::{Error, ErrorKind}; +pub use rhododendron::{ + self, InputStreamConcluded, AdvanceRoundReason, Message as RhdMessage, + Vote as RhdMessageVote, Communication as RhdCommunication, +}; +pub use self::error::{Error, ErrorKind}; // pub mod misbehaviour_check; +mod error; +mod service; // statuses for an agreement mod status { @@ -94,6 +108,10 @@ mod status { pub const GOOD: usize = 2; } +pub type Timestamp = u64; + +pub type AccountId = ::primitives::H256; + /// Localized message type. pub type LocalizedMessage = rhododendron::LocalizedMessage< B, @@ -102,8 +120,6 @@ pub type LocalizedMessage = rhododendron::LocalizedMessage< LocalizedSignature >; - - /// Justification of some hash. pub struct RhdJustification(rhododendron::Justification); @@ -111,11 +127,12 @@ pub struct RhdJustification(rhododendron::Justification(rhododendron::PrepareJustification); /// Unchecked justification. +#[derive(Encode, Decode)] pub struct UncheckedJustification(rhododendron::UncheckedJustification); impl UncheckedJustification { /// Create a new, unchecked justification. - pub fn new(digest: H, signatures: Vec, round_number: usize) -> Self { + pub fn new(digest: H, signatures: Vec, round_number: u32) -> Self { UncheckedJustification(rhododendron::UncheckedJustification { digest, signatures, @@ -124,13 +141,20 @@ impl UncheckedJustification { } } -impl Into for RhdJustification { - fn into(self) -> Justification { - let p : Justification = UncheckedJustification(self.0.uncheck()).into(); - p +impl UncheckedJustification { + /// Decode a justification. + pub fn decode_justification(justification: Justification) -> Option { + let inner: rhododendron::UncheckedJustification<_, _> = Decode::decode(&mut &justification[..])?; + + Some(UncheckedJustification(inner)) } } +impl Into for UncheckedJustification { + fn into(self) -> Justification { + self.0.encode() + } +} impl From> for UncheckedJustification { fn from(inner: rhododendron::UncheckedJustification) -> Self { @@ -138,29 +162,6 @@ impl From> for Un } } -impl From for UncheckedJustification { - fn from(just: Justification) -> Self { - UncheckedJustification(rhododendron::UncheckedJustification { - round_number: just.round_number as usize, - digest: just.hash, - signatures: just.signatures.into_iter().map(|(from, sig)| LocalizedSignature { - signer: from.into(), - signature: sig, - }).collect(), - }) - } -} - -impl Into for UncheckedJustification { - fn into(self) -> Justification { - Justification { - round_number: self.0.round_number as u32, - hash: self.0.digest, - signatures: self.0.signatures.into_iter().map(|s| (s.signer.into(), s.signature)).collect(), - } - } -} - /// Result of a committed round of BFT pub type Committed = rhododendron::Committed::Hash, LocalizedSignature>; @@ -170,59 +171,72 @@ pub type Communication = rhododendron::Communication::Hash, A /// Misbehavior observed from BFT participants. pub type Misbehavior = rhododendron::Misbehavior; -/// Environment producer for a BFT instance. Creates proposer instance and communication streams. -pub trait Environment { - /// The proposer type this creates. - type Proposer: Proposer; - /// The input stream type. - type Input: Stream, Error=>::Error>; - /// The output stream type. - type Output: Sink, SinkError=>::Error>; - /// Error which can occur upon creation. - type Error: From; +/// Shared offline validator tracker. +pub type SharedOfflineTracker = Arc>; - /// Initialize the proposal logic on top of a specific header. - /// Produces the proposer and message streams for this instance of BFT agreement. - // TODO: provide state context explicitly? - fn init(&self, parent_header: &B::Header, authorities: &[AuthorityId], sign_with: Arc) - -> Result<(Self::Proposer, Self::Input, Self::Output), Self::Error>; -} - -/// Logic for a proposer. -/// -/// This will encapsulate creation and evaluation of proposals at a specific -/// block. -pub trait Proposer { - /// Error type which can occur when proposing or evaluating. - type Error: From + From + ::std::fmt::Debug + 'static; - /// Future that resolves to a committed 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. - fn evaluate(&self, proposal: &B) -> Self::Evaluate; - - /// Import witnessed misbehavior. +/// A proposer for a rhododendron instance. This must implement the base proposer logic. +pub trait LocalProposer: BaseProposer { + /// Import witnessed rhododendron misbehavior. fn import_misbehavior(&self, misbehavior: Vec<(AuthorityId, Misbehavior)>); /// Determine the proposer for a given round. This should be a deterministic function /// with consistent results across all authorities. - fn round_proposer(&self, round_number: usize, authorities: &[AuthorityId]) -> AuthorityId; + fn round_proposer(&self, round_number: u32, authorities: &[AuthorityId]) -> AuthorityId; /// Hook called when a BFT round advances without a proposal. - fn on_round_end(&self, _round_number: usize, _proposed: bool) { } + fn on_round_end(&self, _round_number: u32, _proposed: bool) { } } -/// Trait for getting the authorities at a given block. -pub trait Authorities { - /// Get the authorities at the given block. - fn authorities(&self, at: &BlockId) -> Result, Error>; + +/// Build new blocks. +pub trait BlockBuilder { + /// Push an extrinsic onto the block. Fails if the extrinsic is invalid. + fn push_extrinsic(&mut self, extrinsic: ::Extrinsic) -> Result<(), Error>; } +/// Local client abstraction for the consensus. +pub trait AuthoringApi: + Send + + Sync + + BlockBuilderAPI<::Block, Error=::Error> + + Core<::Block, AuthorityId, Error=::Error> + + OldTxQueue<::Block, Error=::Error> +{ + /// The block used for this API type. + type Block: BlockT; + /// The error used by this API type. + type Error: std::error::Error; + + /// Build a block on top of the given, with inherent extrinsics pre-pushed. + fn build_block) -> ()>( + &self, + at: &BlockId, + inherent_data: InherentData, + build_ctx: F, + ) -> Result; +} + +/// A long-lived network which can create BFT message routing processes on demand. +pub trait Network { + /// The block used for this API type. + type Block: BlockT; + /// The input stream of BFT messages. Should never logically conclude. + type Input: Stream,Error=Error>; + /// The output sink of BFT messages. Messages sent here should eventually pass to all + /// current authorities. + type Output: Sink,SinkError=Error>; + + /// Instantiate input and output streams. + fn communication_for( + &self, + validators: &[AuthorityId], + local_id: AuthorityId, + parent_hash: ::Hash, + task_executor: TaskExecutor + ) -> (Self::Input, Self::Output); +} + + // caches the round number to start at if we end up with BFT consensus on the same // parent hash more than once (happens if block is bad). // @@ -231,7 +245,7 @@ pub trait Authorities { #[derive(Debug)] struct RoundCache { hash: Option, - start_round: usize, + start_round: u32, } /// Instance of BFT agreement. @@ -244,19 +258,19 @@ struct BftInstance { proposer: P, } -impl> BftInstance +impl> BftInstance where B: Clone + Eq, B::Hash: ::std::hash::Hash { - fn round_timeout_duration(&self, round: usize) -> Duration { + fn round_timeout_duration(&self, round: u32) -> Duration { // 2^(min(6, x/8)) * 10 // Grows exponentially starting from 10 seconds, capped at 640 seconds. - const ROUND_INCREMENT_STEP: usize = 8; + const ROUND_INCREMENT_STEP: u32 = 8; let round = round / ROUND_INCREMENT_STEP; - let round = ::std::cmp::min(6, round) as u32; + let round = ::std::cmp::min(6, round); let timeout = 1u64.checked_shl(round) .unwrap_or_else(u64::max_value) @@ -265,7 +279,7 @@ impl> BftInstance Duration::from_secs(timeout) } - fn update_round_cache(&self, current_round: usize) { + fn update_round_cache(&self, current_round: u32) { let mut cache = self.cache.lock(); if cache.hash.as_ref() == Some(&self.parent_hash) { cache.start_round = current_round + 1; @@ -273,7 +287,7 @@ impl> BftInstance } } -impl> rhododendron::Context for BftInstance +impl> rhododendron::Context for BftInstance where B: Clone + Eq, B::Hash: ::std::hash::Hash, @@ -303,7 +317,7 @@ impl> rhododendron::Context for BftInstance sign_message(message, &*self.key, self.parent_hash.clone()) } - fn round_proposer(&self, round: usize) -> AuthorityId { + fn round_proposer(&self, round: u32) -> AuthorityId { self.proposer.round_proposer(round, &self.authorities[..]) } @@ -311,10 +325,10 @@ impl> rhododendron::Context for BftInstance self.proposer.evaluate(proposal).into_future() } - fn begin_round_timeout(&self, round: usize) -> Self::RoundTimeout { + fn begin_round_timeout(&self, round: u32) -> Self::RoundTimeout { let timeout = self.round_timeout_duration(round); let fut = Delay::new(Instant::now() + timeout) - .map_err(|e| Error::from(ErrorKind::FaultyTimer(e))) + .map_err(|e| Error::from(CommonErrorKind::FaultyTimer(e))) .map_err(Into::into); Box::new(fut) @@ -322,9 +336,9 @@ impl> rhododendron::Context for BftInstance fn on_advance_round( &self, - accumulator: &::rhododendron::Accumulator, - round: usize, - next_round: usize, + accumulator: &rhododendron::Accumulator, + round: u32, + next_round: u32, reason: AdvanceRoundReason, ) { use std::collections::HashSet; @@ -334,12 +348,12 @@ impl> rhododendron::Context for BftInstance .collect::>(); let round_timeout = self.round_timeout_duration(next_round); - debug!(target: "bft", "Advancing to round {} from {}", next_round, round); - debug!(target: "bft", "Participating authorities: {:?}", + debug!(target: "rhd", "Advancing to round {} from {}", next_round, round); + debug!(target: "rhd", "Participating authorities: {:?}", collect_pubkeys(accumulator.participants())); - debug!(target: "bft", "Voting authorities: {:?}", + debug!(target: "rhd", "Voting authorities: {:?}", collect_pubkeys(accumulator.voters())); - debug!(target: "bft", "Round {} should end in at most {} seconds from now", next_round, round_timeout.as_secs()); + debug!(target: "rhd", "Round {} should end in at most {} seconds from now", next_round, round_timeout.as_secs()); self.update_round_cache(next_round); @@ -354,9 +368,10 @@ impl> rhododendron::Context for BftInstance pub struct BftFuture where B: Block + Clone + Eq, B::Hash: ::std::hash::Hash, - P: Proposer, - InStream: Stream, Error=P::Error>, - OutSink: Sink, SinkError=P::Error>, + P: LocalProposer, + P: BaseProposer, + InStream: Stream, Error=Error>, + OutSink: Sink, SinkError=Error>, { inner: rhododendron::Agreement, InStream, OutSink>, status: Arc, @@ -367,11 +382,11 @@ pub struct BftFuture where impl Future for BftFuture where B: Block + Clone + Eq, B::Hash: ::std::hash::Hash, - P: Proposer, - P::Error: ::std::fmt::Display, + P: LocalProposer, + P: BaseProposer, I: BlockImport, - InStream: Stream, Error=P::Error>, - OutSink: Sink, SinkError=P::Error>, + InStream: Stream, Error=Error>, + OutSink: Sink, SinkError=Error>, { type Item = (); type Error = (); @@ -383,7 +398,6 @@ impl Future for BftFuture false, }; - // TODO: handle and log this error in a way which isn't noisy on exit. let committed = match self.inner.poll().map_err(|_| ()) { Ok(Async::Ready(x)) => x, Ok(Async::NotReady) => @@ -398,23 +412,36 @@ impl Future for BftFuture { + warn!(target: "rhd", "Error importing block {:?} in round #{}: {:?}", + hash, committed.round_number, e); + status::BAD + } + Ok(ImportResult::KnownBad) => { + warn!(target: "rhd", "{:?} was bad block agreed on in round #{}", + hash, committed.round_number); + status::BAD + } + _ => status::GOOD + }; + + self.status.store(new_status, Ordering::Release); - if !import_ok { - warn!(target: "bft", "{:?} was bad block agreed on in round #{}", - hash, committed.round_number); - self.status.store(status::BAD, Ordering::Release); - } else { - self.status.store(status::GOOD, Ordering::Release); - } } else { // assume good unless we received the proposal. self.status.store(status::GOOD, Ordering::Release); @@ -429,9 +456,10 @@ impl Future for BftFuture Drop for BftFuture where B: Block + Clone + Eq, B::Hash: ::std::hash::Hash, - P: Proposer, - InStream: Stream, Error=P::Error>, - OutSink: Sink, SinkError=P::Error>, + P: LocalProposer, + P: BaseProposer, + InStream: Stream, Error=Error>, + OutSink: Sink, SinkError=Error>, { fn drop(&mut self) { // TODO: have a trait member to pass misbehavior reports into. @@ -476,10 +504,10 @@ impl BftService where B: Block + Clone + Eq, P: Environment, - >::Error: ::std::fmt::Display, + P::Proposer: LocalProposer, + P::Proposer: BaseProposer, I: BlockImport + Authorities, { - /// Create a new service instance. pub fn new(client: Arc, key: Arc, factory: P) -> BftService { BftService { @@ -502,20 +530,29 @@ impl BftService } /// Signal that a valid block with the given header has been imported. + /// Provide communication streams that are localized to this block. + /// It's recommended to use the communication primitives provided by this + /// module for signature checking and decoding. See `CheckedStream` and + /// `SigningSink` for more details. + /// + /// Messages received on the stream that don't match the expected format + /// will be dropped. /// /// 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. /// Returns `None` if the agreement on the block with given parent is already in progress. - pub fn build_upon(&self, header: &B::Header) + pub fn build_upon(&self, header: &B::Header, input: In, output: Out) -> Result>::Proposer, I, -