From 8281618e50694a11e63fea5b4254889b53ab8eef Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Thu, 30 Aug 2018 18:43:38 +0200 Subject: [PATCH] Separate out staking module into balances and payment (#629) * Initial commit. * Split out balances module * Minimise Balances trait requirements * Fix up balances, remove balances stuff from staking * Split off and fix up staking module * Fix executive tests * Fix up democracy module * make council work again * Remove unneeded cruft from democracy * Fix up contract module * Fix up rest of tests * Fix minor TODOs * Fix tests * Remove superfluous code * Move offline inherents to consensus module. Fixes #630 * Version needs Decode. * Move Decode back * Fix nits * Refactor to allow custom message --- substrate/Cargo.lock | 36 +- substrate/Cargo.toml | 1 + substrate/demo/cli/src/lib.rs | 22 +- substrate/demo/executor/Cargo.toml | 1 + substrate/demo/executor/src/lib.rs | 151 ++-- substrate/demo/runtime/Cargo.toml | 2 + substrate/demo/runtime/src/lib.rs | 45 +- substrate/demo/runtime/wasm/Cargo.lock | 31 +- substrate/demo/runtime/wasm/Cargo.toml | 2 + .../release/demo_runtime.compact.wasm | Bin 280201 -> 296539 bytes .../release/demo_runtime.wasm | Bin 280288 -> 296624 bytes .../release/runtime_test.compact.wasm | Bin 48146 -> 48096 bytes .../release/runtime_test.wasm | Bin 48356 -> 48306 bytes .../substrate/runtime-support/src/dispatch.rs | 8 +- .../substrate/runtime/balances/Cargo.toml | 36 + .../{staking => balances}/src/address.rs | 8 +- .../runtime/balances/src/genesis_config.rs | 84 +++ .../substrate/runtime/balances/src/lib.rs | 651 ++++++++++++++++ .../substrate/runtime/balances/src/mock.rs | 77 ++ .../substrate/runtime/balances/src/tests.rs | 324 ++++++++ .../substrate/runtime/consensus/src/lib.rs | 44 +- .../substrate/runtime/contract/Cargo.toml | 10 +- .../runtime/contract/src/account_db.rs | 9 +- .../runtime/contract/src/double_map.rs | 8 +- .../substrate/runtime/contract/src/exec.rs | 13 +- .../substrate/runtime/contract/src/gas.rs | 16 +- .../substrate/runtime/contract/src/lib.rs | 16 +- .../substrate/runtime/contract/src/tests.rs | 166 ++--- .../substrate/runtime/contract/src/vm/mod.rs | 6 +- .../substrate/runtime/council/Cargo.toml | 10 +- .../substrate/runtime/council/src/lib.rs | 106 +-- .../substrate/runtime/council/src/voting.rs | 44 +- .../substrate/runtime/democracy/Cargo.toml | 10 +- .../substrate/runtime/democracy/src/lib.rs | 186 ++--- .../runtime/democracy/src/vote_threshold.rs | 8 +- .../substrate/runtime/executive/Cargo.toml | 1 + .../substrate/runtime/executive/src/lib.rs | 57 +- .../runtime/primitives/src/generic.rs | 8 +- .../substrate/runtime/primitives/src/lib.rs | 8 +- .../runtime/primitives/src/testing.rs | 8 +- .../runtime/primitives/src/traits.rs | 8 +- .../substrate/runtime/session/src/lib.rs | 13 +- .../substrate/runtime/staking/Cargo.toml | 2 + .../runtime/staking/src/genesis_config.rs | 108 +-- .../substrate/runtime/staking/src/lib.rs | 696 +++--------------- .../substrate/runtime/staking/src/mock.rs | 34 +- .../substrate/runtime/staking/src/tests.rs | 498 +++---------- substrate/substrate/runtime/system/src/lib.rs | 14 +- .../substrate/runtime/timestamp/src/lib.rs | 14 +- .../substrate/runtime/version/src/lib.rs | 8 +- .../substrate_test_runtime.compact.wasm | Bin 51163 -> 51113 bytes .../release/substrate_test_runtime.wasm | Bin 51295 -> 51245 bytes 52 files changed, 1920 insertions(+), 1688 deletions(-) create mode 100644 substrate/substrate/runtime/balances/Cargo.toml rename substrate/substrate/runtime/{staking => balances}/src/address.rs (92%) create mode 100644 substrate/substrate/runtime/balances/src/genesis_config.rs create mode 100644 substrate/substrate/runtime/balances/src/lib.rs create mode 100644 substrate/substrate/runtime/balances/src/mock.rs create mode 100644 substrate/substrate/runtime/balances/src/tests.rs diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock index c8ef9e2a8c..3e7386758f 100644 --- a/substrate/Cargo.lock +++ b/substrate/Cargo.lock @@ -451,6 +451,7 @@ dependencies = [ "substrate-executor 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", + "substrate-runtime-balances 0.1.0", "substrate-runtime-consensus 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-primitives 0.1.0", @@ -491,6 +492,7 @@ dependencies = [ "substrate-codec-derive 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", + "substrate-runtime-balances 0.1.0", "substrate-runtime-consensus 0.1.0", "substrate-runtime-council 0.1.0", "substrate-runtime-democracy 0.1.0", @@ -2655,6 +2657,25 @@ dependencies = [ "substrate-runtime-primitives 0.1.0", ] +[[package]] +name = "substrate-runtime-balances" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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.70 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-codec 0.1.0", + "substrate-codec-derive 0.1.0", + "substrate-keyring 0.1.0", + "substrate-primitives 0.1.0", + "substrate-runtime-io 0.1.0", + "substrate-runtime-primitives 0.1.0", + "substrate-runtime-std 0.1.0", + "substrate-runtime-support 0.1.0", + "substrate-runtime-system 0.1.0", +] + [[package]] name = "substrate-runtime-consensus" version = "0.1.0" @@ -2682,16 +2703,13 @@ dependencies = [ "serde_derive 1.0.70 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", "substrate-primitives 0.1.0", - "substrate-runtime-consensus 0.1.0", + "substrate-runtime-balances 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-primitives 0.1.0", "substrate-runtime-sandbox 0.1.0", - "substrate-runtime-session 0.1.0", - "substrate-runtime-staking 0.1.0", "substrate-runtime-std 0.1.0", "substrate-runtime-support 0.1.0", "substrate-runtime-system 0.1.0", - "substrate-runtime-timestamp 0.1.0", "wabt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2707,16 +2725,14 @@ dependencies = [ "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", + "substrate-runtime-balances 0.1.0", "substrate-runtime-consensus 0.1.0", "substrate-runtime-democracy 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-primitives 0.1.0", - "substrate-runtime-session 0.1.0", - "substrate-runtime-staking 0.1.0", "substrate-runtime-std 0.1.0", "substrate-runtime-support 0.1.0", "substrate-runtime-system 0.1.0", - "substrate-runtime-timestamp 0.1.0", ] [[package]] @@ -2730,15 +2746,13 @@ dependencies = [ "substrate-codec 0.1.0", "substrate-codec-derive 0.1.0", "substrate-primitives 0.1.0", + "substrate-runtime-balances 0.1.0", "substrate-runtime-consensus 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-primitives 0.1.0", - "substrate-runtime-session 0.1.0", - "substrate-runtime-staking 0.1.0", "substrate-runtime-std 0.1.0", "substrate-runtime-support 0.1.0", "substrate-runtime-system 0.1.0", - "substrate-runtime-timestamp 0.1.0", ] [[package]] @@ -2751,6 +2765,7 @@ dependencies = [ "substrate-codec 0.1.0", "substrate-codec-derive 0.1.0", "substrate-primitives 0.1.0", + "substrate-runtime-balances 0.1.0", "substrate-runtime-consensus 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-primitives 0.1.0", @@ -2841,6 +2856,7 @@ dependencies = [ "substrate-codec-derive 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", + "substrate-runtime-balances 0.1.0", "substrate-runtime-consensus 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-primitives 0.1.0", diff --git a/substrate/Cargo.toml b/substrate/Cargo.toml index e01d45d2d0..d853608a8f 100644 --- a/substrate/Cargo.toml +++ b/substrate/Cargo.toml @@ -19,6 +19,7 @@ members = [ "substrate/runtime-sandbox", "substrate/runtime-std", "substrate/runtime-support", + "substrate/runtime/balances", "substrate/runtime/consensus", "substrate/runtime/contract", "substrate/runtime/council", diff --git a/substrate/demo/cli/src/lib.rs b/substrate/demo/cli/src/lib.rs index 8346e9aaa6..4260f7d1cd 100644 --- a/substrate/demo/cli/src/lib.rs +++ b/substrate/demo/cli/src/lib.rs @@ -50,8 +50,8 @@ pub mod error; use std::sync::Arc; use demo_primitives::{AccountId, Hash}; use demo_runtime::{Block, BlockId, GenesisConfig, - ConsensusConfig, CouncilConfig, DemocracyConfig, SessionConfig, StakingConfig, - TimestampConfig}; + BalancesConfig, ConsensusConfig, CouncilConfig, DemocracyConfig, SessionConfig, + StakingConfig, TimestampConfig}; use futures::{Future, Sink, Stream}; use tokio::runtime::Runtime; use demo_executor::NativeExecutor; @@ -164,13 +164,7 @@ pub fn run(args: I) -> error::Result<()> where authorities: vec![god_key.clone().into()], }), system: None, - session: Some(SessionConfig { - validators: vec![god_key.clone().into()], - session_length: 720, // that's 1 hour per session. - }), - staking: Some(StakingConfig { - current_era: 0, - intentions: vec![], + balances: Some(BalancesConfig { transaction_base_fee: 100, transaction_byte_fee: 1, transfer_fee: 0, @@ -178,10 +172,18 @@ pub fn run(args: I) -> error::Result<()> where reclaim_rebate: 0, existential_deposit: 500, balances: vec![(god_key.clone().into(), 1u64 << 63)].into_iter().collect(), + }), + session: Some(SessionConfig { + validators: vec![god_key.clone().into()], + session_length: 720, // that's 1 hour per session. + }), + staking: Some(StakingConfig { + current_era: 0, + intentions: vec![], validator_count: 12, minimum_validator_count: 4, sessions_per_era: 24, // 24 hours per era. - bonding_duration: 90, // 90 days per bond. + bonding_duration: 90 * 24 * 720, // 90 days per bond. early_era_slash: 10000, session_reward: 100, offline_slash_grace: 0, diff --git a/substrate/demo/executor/Cargo.toml b/substrate/demo/executor/Cargo.toml index 96b547af13..c07fb38878 100644 --- a/substrate/demo/executor/Cargo.toml +++ b/substrate/demo/executor/Cargo.toml @@ -20,6 +20,7 @@ demo-runtime = { path = "../runtime" } [dev-dependencies] substrate-keyring = { path = "../../substrate/keyring" } substrate-runtime-primitives = { path = "../../substrate/runtime/primitives" } +substrate-runtime-balances = { path = "../../substrate/runtime/balances" } substrate-runtime-session = { path = "../../substrate/runtime/session" } substrate-runtime-staking = { path = "../../substrate/runtime/staking" } substrate-runtime-system = { path = "../../substrate/runtime/system" } diff --git a/substrate/demo/executor/src/lib.rs b/substrate/demo/executor/src/lib.rs index 89ab8de559..64289234b8 100644 --- a/substrate/demo/executor/src/lib.rs +++ b/substrate/demo/executor/src/lib.rs @@ -30,6 +30,7 @@ extern crate triehash; #[cfg(test)] extern crate substrate_keyring as keyring; #[cfg(test)] extern crate substrate_runtime_primitives as runtime_primitives; #[cfg(test)] extern crate substrate_runtime_support as runtime_support; +#[cfg(test)] extern crate substrate_runtime_balances as balances; #[cfg(test)] extern crate substrate_runtime_session as session; #[cfg(test)] extern crate substrate_runtime_staking as staking; #[cfg(test)] extern crate substrate_runtime_system as system; @@ -52,10 +53,10 @@ mod tests { use demo_primitives::{Hash, BlockNumber, AccountId}; use runtime_primitives::traits::Header as HeaderT; use runtime_primitives::{ApplyOutcome, ApplyError, ApplyResult, MaybeUnsigned}; - use {staking, session, system, consensus}; + use {balances, staking, session, system, consensus}; use system::{EventRecord, Phase}; - use demo_runtime::{Header, Block, UncheckedExtrinsic, Extrinsic, Call, Concrete, Staking, - BuildStorage, GenesisConfig, SessionConfig, StakingConfig, BareExtrinsic, System, Event}; + use demo_runtime::{Header, Block, UncheckedExtrinsic, Extrinsic, Call, Concrete, Balances, + BuildStorage, GenesisConfig, BalancesConfig, SessionConfig, StakingConfig, BareExtrinsic, System, Event}; use ed25519::{Public, Pair}; const BLOATY_CODE: &[u8] = include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.wasm"); @@ -80,7 +81,7 @@ mod tests { let extrinsic = BareExtrinsic { signed: alice(), index: 0, - function: Call::Staking(staking::Call::transfer::(bob().into(), 69)), + function: Call::Balances(balances::Call::transfer::(bob().into(), 69)), }; let signature = MaybeUnsigned(Keyring::from_raw_public(extrinsic.signed.0.clone()).unwrap() .sign(&extrinsic.encode()).into()); @@ -103,13 +104,13 @@ mod tests { #[test] fn panic_execution_with_foreign_code_gives_error() { let mut t: TestExternalities = map![ - twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![70u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![70u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(&>::key_for(0)).to_vec() => vec![0u8; 32] ]; @@ -123,13 +124,13 @@ mod tests { #[test] fn bad_extrinsic_with_native_equivalent_code_gives_error() { let mut t: TestExternalities = map![ - twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![70u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![70u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(&>::key_for(0)).to_vec() => vec![0u8; 32] ]; @@ -143,13 +144,13 @@ mod tests { #[test] fn successful_execution_with_native_equivalent_code_gives_ok() { let mut t: TestExternalities = map![ - twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(&>::key_for(0)).to_vec() => vec![0u8; 32] ]; @@ -159,21 +160,21 @@ mod tests { assert!(r.is_ok()); runtime_io::with_externalities(&mut t, || { - assert_eq!(Staking::voting_balance(&alice()), 42); - assert_eq!(Staking::voting_balance(&bob()), 69); + assert_eq!(Balances::total_balance(&alice()), 42); + assert_eq!(Balances::total_balance(&bob()), 69); }); } #[test] fn successful_execution_with_foreign_code_gives_ok() { let mut t: TestExternalities = map![ - twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(&>::key_for(0)).to_vec() => vec![0u8; 32] ]; @@ -183,8 +184,8 @@ mod tests { assert!(r.is_ok()); runtime_io::with_externalities(&mut t, || { - assert_eq!(Staking::voting_balance(&alice()), 42); - assert_eq!(Staking::voting_balance(&bob()), 69); + assert_eq!(Balances::total_balance(&alice()), 42); + assert_eq!(Balances::total_balance(&bob()), 69); }); } @@ -194,6 +195,15 @@ mod tests { GenesisConfig { consensus: Some(Default::default()), system: Some(Default::default()), + balances: Some(BalancesConfig { + balances: vec![(alice(), 111)], + transaction_base_fee: 1, + transaction_byte_fee: 0, + existential_deposit: 0, + transfer_fee: 0, + creation_fee: 0, + reclaim_rebate: 0, + }), session: Some(SessionConfig { session_length: 2, validators: vec![One.to_raw_public().into(), Two.to_raw_public().into(), three], @@ -201,17 +211,10 @@ mod tests { staking: Some(StakingConfig { sessions_per_era: 2, current_era: 0, - balances: vec![(alice(), 111)], intentions: vec![alice(), bob(), Charlie.to_raw_public().into()], validator_count: 3, minimum_validator_count: 0, bonding_duration: 0, - transaction_base_fee: 1, - transaction_byte_fee: 0, - existential_deposit: 0, - transfer_fee: 0, - creation_fee: 0, - reclaim_rebate: 0, early_era_slash: 0, session_reward: 0, offline_slash_grace: 0, @@ -257,11 +260,11 @@ mod tests { // Blake // hex!("3437bf4b182ab17bb322af5c67e55f6be487a77084ad2b4e27ddac7242e4ad21").into(), // Keccak - hex!("0b401681b95d04e91dbe53835867bdcb5d9e0590b54ae06bd7b347d49f9a737f").into(), + hex!("a3f5ce86e303f4001d14124ab690428d10cd9e60d21699b42096358c2422445f").into(), vec![BareExtrinsic { signed: alice(), index: 0, - function: Call::Staking(staking::Call::transfer(bob().into(), 69)), + function: Call::Balances(balances::Call::transfer(bob().into(), 69)), }] ) } @@ -273,17 +276,17 @@ mod tests { // Blake // hex!("741fcb660e6fa9f625fbcd993b49f6c1cc4040f5e0cc8727afdedf11fd3c464b").into(), // Keccak - hex!("03f051dc4f588fdc713145772486a129d33c7f178c133b5801fa79c3ecca2dc9").into(), + hex!("72dc147d2619a978adc38a38abc85bb77e25b0095ad38b15f97d56ccb66f36e8").into(), vec![ BareExtrinsic { signed: bob(), index: 0, - function: Call::Staking(staking::Call::transfer(alice().into(), 5)), + function: Call::Balances(balances::Call::transfer(alice().into(), 5)), }, BareExtrinsic { signed: alice(), index: 1, - function: Call::Staking(staking::Call::transfer(bob().into(), 15)), + function: Call::Balances(balances::Call::transfer(bob().into(), 15)), } ] ) @@ -296,7 +299,7 @@ mod tests { // Blake // hex!("2c7231a9c210a7aa4bea169d944bc4aaacd517862b244b8021236ffa7f697991").into(), // Keccak - hex!("6e3b6aaf0be927394b520e3ebc0c34a7c26519711bc836e116e371273c3aca44").into(), + hex!("7aa14ff631321ca5aa22e6fa53e3569faa732758993fa82e2dbde31a1b720391").into(), vec![BareExtrinsic { signed: alice(), index: 0, @@ -312,12 +315,12 @@ mod tests { executor().call(&mut t, COMPACT_CODE, "execute_block", &block1().0, true).0.unwrap(); runtime_io::with_externalities(&mut t, || { - assert_eq!(Staking::voting_balance(&alice()), 41); - assert_eq!(Staking::voting_balance(&bob()), 69); + assert_eq!(Balances::total_balance(&alice()), 41); + assert_eq!(Balances::total_balance(&bob()), 69); assert_eq!(System::events(), vec![ EventRecord { phase: Phase::ApplyExtrinsic(0), - event: Event::staking(staking::RawEvent::NewAccount(bob(), 1, staking::NewAccountOutcome::NoHint)) + event: Event::balances(balances::RawEvent::NewAccount(bob(), 1, balances::NewAccountOutcome::NoHint)) } ]); }); @@ -325,8 +328,8 @@ mod tests { executor().call(&mut t, COMPACT_CODE, "execute_block", &block2().0, true).0.unwrap(); runtime_io::with_externalities(&mut t, || { - assert_eq!(Staking::voting_balance(&alice()), 30); - assert_eq!(Staking::voting_balance(&bob()), 78); + assert_eq!(Balances::total_balance(&alice()), 30); + assert_eq!(Balances::total_balance(&bob()), 78); assert_eq!(System::events(), vec![ EventRecord { phase: Phase::Finalization, @@ -347,15 +350,15 @@ mod tests { WasmExecutor::new(8).call(&mut t, COMPACT_CODE, "execute_block", &block1().0).unwrap(); runtime_io::with_externalities(&mut t, || { - assert_eq!(Staking::voting_balance(&alice()), 41); - assert_eq!(Staking::voting_balance(&bob()), 69); + assert_eq!(Balances::total_balance(&alice()), 41); + assert_eq!(Balances::total_balance(&bob()), 69); }); WasmExecutor::new(8).call(&mut t, COMPACT_CODE, "execute_block", &block2().0).unwrap(); runtime_io::with_externalities(&mut t, || { - assert_eq!(Staking::voting_balance(&alice()), 30); - assert_eq!(Staking::voting_balance(&bob()), 78); + assert_eq!(Balances::total_balance(&alice()), 30); + assert_eq!(Balances::total_balance(&bob()), 78); }); } @@ -386,13 +389,13 @@ mod tests { #[test] fn panic_execution_gives_error() { let mut t: TestExternalities = map![ - twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![70u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(&>::key_for(alice())).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![69u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![70u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(&>::key_for(0)).to_vec() => vec![0u8; 32] ]; @@ -407,13 +410,13 @@ mod tests { #[test] fn successful_execution_gives_ok() { let mut t: TestExternalities = map![ - twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], - twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(&>::key_for(alice())).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], + twox_128(>::key()).to_vec() => vec![0u8; 8], twox_128(&>::key_for(0)).to_vec() => vec![0u8; 32] ]; @@ -425,8 +428,8 @@ mod tests { assert_eq!(r, Ok(ApplyOutcome::Success)); runtime_io::with_externalities(&mut t, || { - assert_eq!(Staking::voting_balance(&alice()), 42); - assert_eq!(Staking::voting_balance(&bob()), 69); + assert_eq!(Balances::total_balance(&alice()), 42); + assert_eq!(Balances::total_balance(&bob()), 69); }); } } diff --git a/substrate/demo/runtime/Cargo.toml b/substrate/demo/runtime/Cargo.toml index a13a87469c..105c505e8d 100644 --- a/substrate/demo/runtime/Cargo.toml +++ b/substrate/demo/runtime/Cargo.toml @@ -17,6 +17,7 @@ substrate-runtime-io = { path = "../../substrate/runtime-io" } substrate-runtime-support = { path = "../../substrate/runtime-support" } substrate-primitives = { path = "../../substrate/primitives" } substrate-keyring = { path = "../../substrate/keyring" } +substrate-runtime-balances = { path = "../../substrate/runtime/balances" } substrate-runtime-consensus = { path = "../../substrate/runtime/consensus" } substrate-runtime-council = { path = "../../substrate/runtime/council" } substrate-runtime-democracy = { path = "../../substrate/runtime/democracy" } @@ -37,6 +38,7 @@ std = [ "substrate-runtime-std/std", "substrate-runtime-io/std", "substrate-runtime-support/std", + "substrate-runtime-balances/std", "substrate-runtime-consensus/std", "substrate-runtime-council/std", "substrate-runtime-democracy/std", diff --git a/substrate/demo/runtime/src/lib.rs b/substrate/demo/runtime/src/lib.rs index 46101f8463..f0c39af85d 100644 --- a/substrate/demo/runtime/src/lib.rs +++ b/substrate/demo/runtime/src/lib.rs @@ -40,6 +40,7 @@ extern crate substrate_codec as codec; extern crate substrate_codec_derive; extern crate substrate_runtime_std as rstd; +extern crate substrate_runtime_balances as balances; extern crate substrate_runtime_consensus as consensus; extern crate substrate_runtime_council as council; extern crate substrate_runtime_democracy as democracy; @@ -88,6 +89,7 @@ impl HasPublicAux for Concrete { } impl system::Trait for Concrete { + type PublicAux = ::PublicAux; type Index = Index; type BlockNumber = BlockNumber; type Hash = Hash; @@ -101,9 +103,21 @@ impl system::Trait for Concrete { /// System module for this concrete runtime. pub type System = system::Module; +impl balances::Trait for Concrete { + type Balance = Balance; + type AccountIndex = AccountIndex; + type OnFreeBalanceZero = Staking; + type EnsureAccountLiquid = Staking; + type Event = Event; +} + +/// Staking module for this concrete runtime. +pub type Balances = balances::Module; + impl consensus::Trait for Concrete { - type PublicAux = ::PublicAux; + const NOTE_OFFLINE_POSITION: u32 = 1; type SessionKey = SessionKey; + type OnOfflineValidator = Staking; } /// Consensus module for this concrete runtime. @@ -136,10 +150,6 @@ impl session::Trait for Concrete { pub type Session = session::Module; impl staking::Trait for Concrete { - const NOTE_MISSED_PROPOSAL_POSITION: u32 = 1; - type Balance = Balance; - type AccountIndex = AccountIndex; - type OnFreeBalanceZero = (); type Event = Event; } @@ -162,7 +172,7 @@ pub type CouncilVoting = council::voting::Module; impl_outer_event! { pub enum Event for Concrete { - session, staking + balances, session, staking } } @@ -171,9 +181,10 @@ impl_outer_dispatch! { #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] pub enum Call where aux: ::PublicAux { Consensus = 0, - Session = 1, - Staking = 2, - Timestamp = 3, + Balances = 1, + Session = 2, + Staking = 3, + Timestamp = 4, Democracy = 5, Council = 6, CouncilVoting = 7, @@ -183,16 +194,17 @@ impl_outer_dispatch! { #[cfg_attr(feature = "std", derive(Debug, Serialize, Deserialize))] pub enum PrivCall { Consensus = 0, - Session = 1, - Staking = 2, - Democracy = 5, - Council = 6, - CouncilVoting = 7, + Balances = 1, + Session = 2, + Staking = 3, + Democracy = 4, + Council = 5, + CouncilVoting = 6, } } /// The address format for describing accounts. -pub type Address = staking::Address; +pub type Address = balances::Address; /// Block header type as expected by this runtime. pub type Header = generic::Header>; /// Block type as expected by this runtime. @@ -206,13 +218,14 @@ pub type Extrinsic = generic::Extrinsic; /// Extrinsic type that is signed. pub type BareExtrinsic = generic::Extrinsic; /// Executive: handles dispatch to the various modules. -pub type Executive = executive::Executive; impl_outer_config! { pub struct GenesisConfig for Concrete { ConsensusConfig => consensus, SystemConfig => system, + BalancesConfig => balances, SessionConfig => session, StakingConfig => staking, DemocracyConfig => democracy, diff --git a/substrate/demo/runtime/wasm/Cargo.lock b/substrate/demo/runtime/wasm/Cargo.lock index 8f831386d6..9bdb08220e 100644 --- a/substrate/demo/runtime/wasm/Cargo.lock +++ b/substrate/demo/runtime/wasm/Cargo.lock @@ -103,6 +103,7 @@ dependencies = [ "substrate-codec 0.1.0", "substrate-codec-derive 0.1.0", "substrate-primitives 0.1.0", + "substrate-runtime-balances 0.1.0", "substrate-runtime-consensus 0.1.0", "substrate-runtime-council 0.1.0", "substrate-runtime-democracy 0.1.0", @@ -639,6 +640,29 @@ dependencies = [ "wasmi 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "substrate-runtime-balances" +version = "0.1.0" +dependencies = [ + "hex-literal 0.1.1 (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.64 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_derive 1.0.64 (registry+https://github.com/rust-lang/crates.io-index)", + "substrate-codec 0.1.0", + "substrate-codec-derive 0.1.0", + "substrate-keyring 0.1.0", + "substrate-primitives 0.1.0", + "substrate-runtime-consensus 0.1.0", + "substrate-runtime-io 0.1.0", + "substrate-runtime-primitives 0.1.0", + "substrate-runtime-sandbox 0.1.0", + "substrate-runtime-session 0.1.0", + "substrate-runtime-std 0.1.0", + "substrate-runtime-support 0.1.0", + "substrate-runtime-system 0.1.0", + "substrate-runtime-timestamp 0.1.0", +] + [[package]] name = "substrate-runtime-consensus" version = "0.1.0" @@ -667,12 +691,11 @@ dependencies = [ "substrate-codec 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", + "substrate-runtime-balances 0.1.0", "substrate-runtime-consensus 0.1.0", "substrate-runtime-democracy 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-primitives 0.1.0", - "substrate-runtime-session 0.1.0", - "substrate-runtime-staking 0.1.0", "substrate-runtime-std 0.1.0", "substrate-runtime-support 0.1.0", "substrate-runtime-system 0.1.0", @@ -689,11 +712,10 @@ dependencies = [ "substrate-codec 0.1.0", "substrate-codec-derive 0.1.0", "substrate-primitives 0.1.0", + "substrate-runtime-balances 0.1.0", "substrate-runtime-consensus 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-primitives 0.1.0", - "substrate-runtime-session 0.1.0", - "substrate-runtime-staking 0.1.0", "substrate-runtime-std 0.1.0", "substrate-runtime-support 0.1.0", "substrate-runtime-system 0.1.0", @@ -791,6 +813,7 @@ dependencies = [ "substrate-codec-derive 0.1.0", "substrate-keyring 0.1.0", "substrate-primitives 0.1.0", + "substrate-runtime-balances 0.1.0", "substrate-runtime-consensus 0.1.0", "substrate-runtime-io 0.1.0", "substrate-runtime-primitives 0.1.0", diff --git a/substrate/demo/runtime/wasm/Cargo.toml b/substrate/demo/runtime/wasm/Cargo.toml index 965c818788..59cb7b4f72 100644 --- a/substrate/demo/runtime/wasm/Cargo.toml +++ b/substrate/demo/runtime/wasm/Cargo.toml @@ -15,6 +15,7 @@ substrate-primitives = { path = "../../../substrate/primitives", default-feature substrate-runtime-std = { path = "../../../substrate/runtime-std", default-features = false } substrate-runtime-io = { path = "../../../substrate/runtime-io", default-features = false } substrate-runtime-support = { path = "../../../substrate/runtime-support", default-features = false } +substrate-runtime-balances = { path = "../../../substrate/runtime/balances", default-features = false } substrate-runtime-consensus = { path = "../../../substrate/runtime/consensus", default-features = false } substrate-runtime-council = { path = "../../../substrate/runtime/council", default-features = false } substrate-runtime-democracy = { path = "../../../substrate/runtime/democracy", default-features = false } @@ -36,6 +37,7 @@ std = [ "substrate-runtime-std/std", "substrate-runtime-io/std", "substrate-runtime-support/std", + "substrate-runtime-balances/std", "substrate-runtime-consensus/std", "substrate-runtime-council/std", "substrate-runtime-democracy/std", diff --git a/substrate/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.compact.wasm b/substrate/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.compact.wasm index 02a7fed93297ca8be98e28a866f4cdc1e6f3b73a..675b08559e4927dcd503016dcf0670be299051f3 100644 GIT binary patch literal 296539 zcmeFa3z%KkRp)sg_f>W8t-4jJl1eXY-)ki<1v{2sk}Nr~jvUEW920kV4&C$FCK1>r z#}8Q%;Ty(Mh%shpro%u3NoPPjIu1>H2#;<81Q2w3Fc82!&_gDjuiMQqjhlwSJp;67 z2zY+~we~sp+^Q@25z`&M!S%`a?0xpxXYIAud#}Aua?d00PLm`_zjpEN{OsAY>Djw8 z`+us-^lWl>lUl23=r_^r4e#EB$VaY@CmJ#qT3M@~O@>YlGXao2qh zoPIEA=+=sEop|6q?>=$rp3^7Zb=T=r_no-w)PoP6PMW$sr`r#mqWxX(IsG*Ul9np_ z<4PV(+NyI9PQ3e_4}E=-OjNx4A+PA_sdt}v_q!iFb7Hc|BPULKMNdsmf8B%cz3ZB5 z4J#s}_J$j-x$&+u zCr;h>HD901=#4hyufG4DlP9jd>)IRkIT+shz4twG`jP65Y5q;=`_oP`+v2}&tJBIm zdET0BB`vO7oleeNq>YrD&6NL=ti%8Eyr<^+FQaw8lh4if(mdyhtT#w=JvzJ4Y|YKh z<()bG&Ccc&7CLFGqZf2|5C7+PzSUWnUud<`Ml*dV?RJ}ank=-o=4aF5+_?)$_iR%9 zz<;Rywtpv`Z!rN6p8EPM*?Jd5@UHt#op>jN@}39YdHTKwAGquEJzstQi8Sfnb=SQo z?s@30ufFGz6L~s&*In7+-t(T*_da;)zSH-e zcqCbCoj7yifzyv9CkOXEK-E3>-}lIgyS^IwJefQ&f6qe?-T(D>fq&@gk^A16JOn|V zc;|agmn}}sea(Fj)E_xBe}*DZJb3D^cRu)@2TmtnH(S*_lDv0jkS0aioxOJdfg2CL zdGCL7p~0O|Gc=C(8zC>! z)1y{s^4B`Pebg$F+f;kBpN52|hwacBB%{vJelv6eg^=^tx_$d#)3(qaq`jJTcPa$b{s(UG|WS1*f4O9_8Wq#Q9;!nLzSzt5t?fu z4H;vc?+%uLnD-Bs`EC2}EW@z|t?q16JPi#Fb|&3^QvCb}FC@ii&`6T*N8gyvuA7o_ zkbk{@LwZ$`6ld2)S<$+^Kc2a4uAMXy1g*ABaXQ!%(qcd}HP4Rq-@&{mRAwO=tZ=Kd zwkHRVgRS$Th^95~tkIZ`^M{M{SbrvDda%P!eycs7S*xC?nJ2gLoY6SHPT|?D{Uutb zBAo1a|BH29C!D4ThuWk4q0=km26;n0e}`EY8)W=7oqAeO&q%Q4_Evk7kGpw${~g)k zkj=G{mCak0x7vU;HVs%@liT=o#b_fRwkjx7I{=DIA^@@s$)#?a}^Q zOU8oQN6n*sIA(T-uCHpg&UEJaLjw>dKG zUzMaq>TT6eIXd{ioP(1^czYi_79mcr4WUP$1<2*N`1`aZW1NMK$c5UY z{aYN)nb7fBI01wdfVCYu4kxm?_ZGp~HaHs-qzqw+l!fRTDVIR4N1kZ7MBZ&vkw@*( z{$=Zs_Z8ETx2tR22??UeMz1F*FEx1rvwZ)tsqd%uXn%R#``3E{E>5QT*?+7{KwS**7fh1h|Tu>gK=DVD~};^Ze$Wpyq{$^m=bI>ZoDE2y%9tCXufNwPm-aNybAQZ7G=1_q1taL>thGJx{i`bq<3XsjAsGKFwA;= zO-*AB|IqM<)(`v1tVvSmdw%etQ5rWsuWsBQgd8$v z?EgvDu=&#BMo~vvY+XazMqV8v7Qw)<;i%#6ie#a*hFN^K_OaKbquVk;uhI4CQ52;x z?~It2+DbXhh8YMR6Z94YE(LJY2s6&Svj|;?5<7CT*S%AFrS@ol-ihX=dL4-H7%U1y zgXxIqCM%$2Y49->UfC_JiG!1~AzPOkBPTa7GcnwZ&~h+I=qR%Efyw7C#nR1J&(bam z_vu}FgUuUO_#}*&(-xXwz8UN#v-kJlpdYgHEg{z=5uEPC@Za2C6G@C~Ac?{+{iNMc|SR|-qwmU1PSrK>1cf;kPXlH#g)!7hvQav_l%PKygk zoS7YN=gDD&z?d1c^Qf&x=yo3V!nF|K6g$smhW^T_X_Zq$7gv8F3~}q!AyT_>h71V8AbclbbVLn9dnnf&c&Ef&6PfR3NpR$lB?;V#{RbCyJgUVrCh6-wG%BY~G zo{b7>>NzddbB#L@9~-z6eRaIQ8Tv5^G!avvwn7jZ$?dE+LM2j9E&ghOg_1ifvzm&C zpD+6BkDpCb@k8xK{9O6+@e?t+NBEf*e;FHTr4*>?9h?7}-m&?w>78_}cPc4>j+i0^ zi~}FaEe!2Nr5^E#35esg)qea)FD#4afqw0V2IIJdEMj?HySI< zVImojjb%V08IX--Kmz+yu4F(0`%|uDfcY=7)}stD*F|=ERYnuYPA|(L^Q*B-K zm@%R-6qshLm}acW)TkLToKSieD-{>I**2WX4_9WE3=!9Q1aqRfg*A2D0%-`labUv& zsD#%l&tukv9dt2^K}NyiU{Tn~#x~Cbo2&A;s1T*|M5hAWO(wI(r34J%+)Z5MI8PHf zR^+DDPjKs`7c9VBJpUc>;(N-A=f6GHe7d~&_;<#d zkAHW(c;>tOqU>+OFIceXb{XZ)V!4E4CYCSui=AuFm%rt6{mgHQYxA=suSd4Ykbl1(CHd`5p zxckXQ+CFFt6hC{9;_VbK`4P`$KzU@I*?cTu=l$YI4s;U|NO*J$D*8)0}GT+~V*O~N%Z9WGR^ zBn5!Cd9%B(;z08$1PkiGgs8c%=0_w1C!%&R3nD2N#$}o(_~GUKknBlPg~)2dW$maM zZj^d5f?oRdAvsj*$*85|i1_=<>AGb*2H>-+5R1=lezNGuf03c9B`__A8TpT;d0ezJ zX>M3_!v!%W_gaRF$bWLtPTe8Rt$DLtu;U3$sAJI3>Pp?vYCO@DBds9faV(_bdS7%Q^;c%riT-I4 z^QG!6m{KjwCH3aEMAu+ZvWbJrx|J;`tc=$rw^M1-4H#FD1lW=fojXBwzN9Z^lSt1iHtvK(3Shw zhDo&lN)DyXcCLLYvbc=tb(;Nd_Pw*B+TNigh&O z^x$1Lf92q{Jx{pxG%Y zU_sX#*2}3y-L9j6P17j=XP_j{4dWRLY zb8;tM$#Y|qy0VhTCUt3BSC({XKo_NvUAO$?L&*BQH%rgvk75GuJvmBuSeTei+q0`sL1x`t5zS@2G=Lu zU)f+Z#B~>Be93o>lb%C^sc^AOpO`~4&h)8FLSiPCQUONodGyXC9oiC>l49V_KsO6c4i#*W8;uGRD0x{Wm~9Y1KT`P7vF+Za?l0K z2p&}{7ndL#xj4-7!`6e@FZO!9DAi*!g()~p);0A;dqX{ZFH+LH^yhZM zYjrXWzajckTLKCN92C-%gWcOe&G=6tg)nM7b!7F?QS(T6;z^!pK1pvHubKs)Q+G&k zbeNr9qg!-X3vFOY7s;^Czd5`ljft(P8BC5-NbKH-!1M(I6Oy z4H!F3Z0y9&@&JF&=tW7G^`Ex?#J6Ak#bMoxDHnkk58{jGi(R*uC?5#rAq?Vc;Zz`= z!QRq)GqLs{%vMD>WFfT6qCrVJ#?lXS3UqZtUn&gHLYEiL*@P|HgymsT6UK^iuJ%Um zOxGs4Mg+5YqQ_sV#bjub)y0tF)ru2*QgQQIp{Kr^0xdPat?bADKmQ9xhu>$6GY+3V|}qhro}3G{ibOm-BekJGu;n2b7zkKvWx*& zYva-lkKA%o>vNs zqDLV=DZWDl5a4h@Nh5jBv7;uUq3kT!;+1q)jMsxiGg`|AChbx1lJ-BY=q8RzdUBK( zy$6PjcnF|Ff;Pjp4-6Xbfo71ApQaHr&**(nc-OFYrHAh5te&0!Ato4UnU6Zp}g z(+I$c{Ybwk+>X28X^@C8g;BATS!DOQbm$dJkmgmMGrbAs|FxGl&Nf`{KA)T%X5|D- z|5ZltDu8>|E-=VpN=;afq?eVfHYdpNfDOyV4jFO~v~qVC$UrUhfb@c6pV|)kouA&Q zDOJtGj|>|OJS(0~)*w}0!!l8+GE`SC7uV|`_MC1f+A&=c3}qe5#(Ls5UI9x2NgG1Z zy7Wj{E2g$Rs0ivzy2z2)2(;?zATxFU`9M}kbsETG1%nF$1eM3gk~eoMV|bd1xc*il zG7(~Jz0Hvr*WW4x%G%_9g*@2NkkyR=IFkG=MD2Pq z8@1dvnIyDPdt5sPebgD(jt4NB@mh2P2?c(Qr9*_)uK|jsBD=0gG7I*QO;cLzmdPH; z)@G`-k!+fp)g2&dl!c8GWOH`g{=A$srwCDxQ-sa1hB=;Pv6dsGMhQkKj*jwW^id(s z>qHQf6aYfJtEzj6&Gp?IWq3Ole@p79UOA>9jgP^=r|W4E;u5X9XNan=^$su@ z8>*^%e$oB;R=!yJbLUZrwp1qV(UW0L<~*7R?43_dXP3%Gl1tHdelQxOlTnWn)uz8h zJRoJ*$_^LXP?}^oCDIa7a)Xc^*|tAZIz5d(_&;ArXhJ{};a%$9jHavE5@~#vC^8eb zNX?*D;l`Qc$OlW~>zdUi_X4-W-~e`kNrloj8T z$~+iu5^LW%)a>;T^lPJKu6`Z4lGsd}M79~Hp zVhKN9^+*`>x;eMfxjS$ZnXARHP(cNLzmoSX?a%MzCEv%I{c`p4O$U*r-q5@*bdj}gF-RB+EH*U!gN=mWrXZ!pVmM@=fFK-^>xZQ$ta@c7T04J;Iid!7sk z>_~&tnuqsgEBp@jWjm}wG0OWx`7(^w_%uHTj~>V5EaNX7X#toAry+nI3f8mQdi;e3 z9t<$Zu*j)mY8x4tT@_x* ziz=uG@w_*^-J(@UJ4qTEJT&Czs$?$#H&%hQLfn3MlpqnfcX}jq8j7;rTzTxllb$xqt9X`b+%E(7`n4!6^5WA}D^jLWTsf|W-w|S7 zy?b0O*)kKWcZ{ngh-PE;(zqI-C4d-1`8qfwJH0>GJfTkUKzs42Rw;Ds2HK$?Z#34f zPLe~Z@yTlP(7uddy$F@)vSOQ9Sspv0!Jd5YeoORNTB}4+f-~f?E+kKaiC2lMgyB|F zEGe!>KSZIG6gRO1Topcv>X13><{KCYW)&yJZ*tj-;wq8o4E?K9%Sr&4)ogWNa$JLm z^8_KtZF7`1P7S^(Ek5+=3rTU^;4S7FmNU(>k-i4?7PZFDG)zv-mT_C;6f6+;gGk`S z2=P-#vNGzymaHdz_c56Yt|bZOvh5=6;xMyVfxfgSAza*KO){h|$(o-gXfac~mmr(* zS$o*Z597zvkT`HjUM=Zh;vzhNtTay;g-zCeeg&s)K(vNGkK9nkKp=7x=81!0 z8mL2z1a!Wh!Ki5JE^$Mp{q?aN6d)1oX_&z+=Rg#29-ldfwmEBwwkZiMMK{On&7laiF2L_?&#ModlDv!I&OoY1lOhnrz zI$dm9*+iy`OUn5~%rl0Pz^z3juHbq6SL=kS8E64$Y3&BCB=lDNDoMIkjI`5j@yH#gKUL_)ncDB&&YlHxdFdx(f|tEHn}gBG&W`YeDdH_W?G-JpW^7 z??+N$K0SaYOxI68AJo7d^?IZCg@Hf#C6F`gT zViQsn7_pk{UBkkX^QM)_0vT3ZL6B^44G?GC#PUeGA8LD`FPt1TsXzrNutZGFj8YC~ z_#`q32V2IuqZoWWEV^kHUu1X0doA&8hbq*>JPq4LBeuc8P=%J0tVyPHS8VL`s)Plh z^x@)MdQ355#VUvJg)%H=OfO-dB0EotH<;QEH$haPHIOB{l08GJw*q)8V=|~;sZ;n2 zOqlwE?OMvsYZsk|&H8Sg9MVE58hg=0ogzQBod6hHNr=sySQRws&4kj= z@~-%9Oo^UnPsDI9sb=i0<2m_qdLRKd(BErY#%_AXHvh>wIfHM5Y?ft{5~Ac0=6Z+E zGmDqSi^=Vp=Ky3o5L7dsD){2OQVJDyy;-w&>R__dO06@+u7{aYDs~i1vm_#F94rY! z2V(+7yoh(aNEVL0r0VXnvb)LtduNLIhl^*u|D68CQ}nQS2KA?xPQbLwN<1^!2|$(= zm!Xu%zA%h-CNMfHj6&}aYQ!l?khp?|Q^q7WGvX8xPHiNNgeDrVo~Ox3jUam_Yur;? zj$hSN?8Z6~tc59Wr9NnHi5R`{jQ=Xp?RAa5n# zBvrl%!WWH(^2TCOG7q*T*Bv>$_>+H6y^4!G!Gt;i%X>pEQ#2b~nRH*fQJs6=s~pt_ zcu=GI=QFNRSaldR7!?MJ(8B-#8ZiRTnled?_hEWTFQq534$omJisg_BXaife37xeo zlce~Cvv2JqOW;ws5@|(TKt7Vv@Ch2hj>tvw+DnVd8c1uf5+z-Ml$N4s;18oLwo8~c zTqFM2M=l_FsF|Waz%Je!DgAIXIn+Wrf+~}GF=ZA~Tg}mrbPD$k*25@&Y`G!u+JJ)^ z(?*tVYSLsl6Gus%kCL!RYdlW%uaSzb%seKda||1^gOrv%imX7+$jt(AW(GH;oxmP8 zi&t?-g+w&~0DOn>tukVKii()ML>`k7bVEKXbnf|CDsU$jAoaKL@OdK&?Z~G7dVc=! z8Bxgr-q9!&bY|s+E9D8?X;+FZe5GCS-hGV8Uh?rsBEXrACdLp?A&Nj6`>h9(P}d~9 zwn}FG0&grtc%QD|rC#uU{3By{WjHvzy$W7I?(hooyEj1oT!b9@O(8+%Flf%)-4Ttq zNbP?Zx!`k=a^GeNiH;pEFDD`9h5A#)RS@;f4@>#9P?^KTA4atu@2hicFoiZnT6$0_ z2vfuiCZ4i2(3zrj`V_s{TTy?+5_k}m1y9&R?f4GZfOO8&yms+4#@zGC!>2;)6gGnl zJ3^7&;{5wzTaG?LuO-%NCdDd1d%U8gDN3dBeAOnEDADBnT5PzS-&lzA`$9Fp)N6j9esVm&lC(a*ySZ|D6pi}) zYNmaDHPiP3ut8YS==pDSF*X46Wa;WhSp!{2 zrSY>%FSlB^*!y3Hw^v+-a8Yk_yOKth<=K?~=2SO_i}5GPF!7^bKARltOA-uj^2E3F z)Ylf-nWFv3Q%BD6-!sW$!zMDI_`meTOt<(y_3Q3;c9_@MMiq&*q&WANEc$lNAXHJr6BbSM;gxGh=Ov+Ry1gg#q*3`>bZ@x33$ zpHlLgLSINaNi^t(M=UdhPE34DW_K8ewl>ggmYXx&nX%`IWXOhGUuo;#vKxV~`1S7v z6m7FzNmb zW-s_SZNQ$g#-wqGjU4DAeMH=74@Q+^*lf!xu47X@1JkR;CK)2cs^1Q1?c&$y>Sbb6 zM*aqD>iG@W^vVfr{`(&QlL z5+#BX9Lf~W(wSVIWun28{|aSDKchSl8Ze326^KG!e73AJ`nR-2rPJaW6TgZ^h^Sn2 zKG#HS{^nU9y zkVRxTiQ|vsvL=Jc7Dh36+mge2MhYwI{{3{)#*c=)>5#182di0Dp=@Zy&Mj-(rTCEP zk&lhAA|_Q?Oc{Y(*G`#!c5wF`iqlPcxBCN~$-KAdG1IE&2ZyX9i?yWP&v3w|T#s|* zx~WfM{r`G73#G;2VNpBRz>^o@VGIKzTH*$Uw=xxwtq{w9_ShC@g2FO_EQf*RrWr{XTg12NAZXpfv~>9dqG49(10P{w=0q%u>)i?mw&pyGFmXN zD?1z(Tv#ticq`82Y59vXNd~-A`ON&t4;|1}e4l91xlv#dHEj7=NLVy$+8^eTrk-3> z3`hyBJg0S#@~M3MlvIJXXDB}R0R&B02#bR^88KT>A}rbrY4!-gE5&l-SOymziv#v* z1|sl3|51QlBRt|9Hja54f#$&^i$`tK;vtKo5dxh=nn;vLfDmgFL8zVvB8UOxYZD;} zvs)r3ql`{f&J1MN(GruVi5LJhHcz(Kg{vVZ3^DKeahxEuf+dj_0P2c8^xG!o^*i+nA@E0Lf zT=>zd$9=aOx6$E+pRf)w7FoJFg3!Qee(Le}A4%SUGWZy78V^3(7FQG(y!5Mym7ej^ zxy(w>#!|yd&wFXV3Xi9inUJGnh`cGzX5!4}TIxSaP~$qc0P-pnnCtFtVclYMnm)Ra z94kYCT9%W25$F~NSi(~CD7!%%fCERw>~9vf{tDu}&t)WSV{CZ_dr9@iE;6tb|8QH} zR&a(;q0ByMNpxG!WKkYhK+x_7lb%UrV-4zA1A!Bn!*Vr@R(HIN=r0Lds=iT1wA zQGbBket%%HhuSJf4-dqooEny^9I{-;ZzVB{Qf-x^0;BA8j#Um;=Ta;pjg9mw_HRV( zh`>O2G~i^#C^deS(bN(%x&wpN*SE~YQ!;+YF}anHhp0)qzc-uqBBsSgJUFN)3QP(f zL#(}p+&6^|8hGM3Vagt-PXmNls>w?~0$9#AuDARpkPL!E;F?}xrB6$+(iIRw%BW{(QM3<0*pNouD490rt#$MR#;z-kOsOPcX<)ZOCc@aFXDq@)G2u!fUg}qY3gtJrGm1Cmp(M%lB zsi(ojYz-6L5)*hF1ZGYK@;`_}$uw@uu*d$3;A6=d{ov3sX5i6rZ?KW!QE>JU(BIFs_9wgStd4Cz?`?A_FHdcjgh`N&a0eC93 zppuV8Bk$AhA73E`3YU*c^*S+) zu==rltapO<;Lnue&^xL1D*31wkc7Y1)f=S%fR(ha?hFVWXx2yUJJL$9veS^H9X*!R zR)R@rg0}P^^|t(LROuo_YrA@Zc`&iJ)?{zql@M*BRg1y#GU>h^TgBctQiwp(8c_LP zl-1fjI@p(VImWS<9QpP?c;dx>@W~(k=Ks2Tsxoo3!iXhY4}QpyG5aRNk}R*VV6H@} zK5Hh8a(QW?1m5$%9^)Ncdz3@*j#V>mqzj7YctYmPFKuq}C5uOw_*YwLbwrl`M?^2n zxI}FGaY^#o!E&x`VMGSB=GKIiFndW%DYQ@+kY&ZH(snQhDc~1UP(IzL^HtpDbe5Rn zL|w-Og!rcpq0D5dNpfQeX6-T7poC;6k~xLWFCnH ztpQaDsJ7`ttDQ=IX%-}VvQk2-S2i4|l93KbH)~q3oXve2iQoy0gp@L&0JrDueF+f8 z<-@LWfAt=4QN2t+P_7^mgp?~Vg#*eJB6{kY#4o&RtQx(lcO18-h3=Ze;fB}40)&fX zCzH)9klnuDg)}&aR@r6jfaw?@Rd$)3Hf$-{48~3wjyou!WY2ihl%E+b+6Lc_ZSW-@ z;z>>W+v4&nrU1{9LB|%~JZu^cB!oJ{P5k3T=Y)+uB$Ow`6Oha@+$#aKnSXq`VaP%* zs9hN@P+kGirg%!4oA!$b4zA~TWBo4FWpkn#k(0i9|ERrIeC({I+KFx1WHav~$xX6Y zQ-%@*8)`E1rJ%4OK*_|BvS#Qx$Xp;uL@Rq(`eB8CE)V7co7vGuQMDK;k7mA#8EL5- zPOzn$o|K+7=@Ad$1S1FC7JCB?bQULsrC>S>uIO9MX;*i;THLSr_XmQBadNqu*jcR^Y%IZkIU_;g0 zsTOARiRMp|8N)5TeLn3v5(nsnKn9X^&M3!PLYkUOO?S>Yq{F#y8yV_ zQSIN|9=63kNGmhKHEE&=iU@8Bn@v;akONw!SIi)q!~rXgSqp(1Hnn#dZ0ZTt9_9?U zE5dD*Q_j#)POTWfyb3ub$umVx>0DqCRSG1VGeft@sd5Jy`((!gKtijM4%6k-EQ7$| za5*)HoXTOJS;m@+!5?&mf+RZ^_UsYoB)utJxJ5MECB+UNnkV)d*WHoFP1 z`8e3%TBqQ#dh8!vdg@62_{ilMX(^Ita$busuGT{y>EQ{9UzvVS*r+bK=Ft;Y{%%f`1EZ(JO16o4WJ&uav z4)(tF#bl^l>tV=8O6bHKf_X_k>{N*mz}|ib{utMH;J`?v3ADam3diya4YnId#-w^H z<U`IOA1PN_xhJh$Gf#BPU%nkkkSxGV&xGHYbjkl-7=T~0T_H%^&n`niUn`${5_(2S zwlKH>dcvVRvtUk4gD#m(!7XsVbkyEn89Ea6yrqKMSVO?aaT#|A_^J%t0zQ_NJip4u zhV8r!tV*OJ|JHaTFTsk}Adp4`OmI{rP8%X};39k*)3kIS@ky_%51rJgb|SiGEu!8J z+Z5^E8ny~u^AN?^N61b(J-BL{IDlU1bEV&B8+!4?2QILxNJ6_pg5RS8!pRCRV48;Q zoNl5!R)G9e2xuu=!GXB6mTOzJ*xzr5yr4VnUMcD^)_GS|X%B>X438B-kws32le=M2 zOt;Cm|LrAAf+deORIhfh0QRkVE`e+sTn0Wwrou;CjU4;A4AxJb9}j`@f3$y^d23x;;A{U`r#mzxT#LhVMQ0u*n}}Q z83u&uPz9XCt{&LN!D3YihRV#5#EtUrE)*E^5-bXpj=H+?=Pof22|$ZxAxwI~cA~M5 zq8f^Z&?CN#O^Fvl+X_y0Wnf70##E4UTgi-EzhGNBJL5yFN{31beL z8TCb)>NRvFKsgcyxOtNH> z4YubE+s!clJZi~>P4H5w102J3C2tgk2-7mmG-!ur`3mT+r8Qs=Y6QUJ+Usn$; z*3Ff=;MoK{{0)Ypmxjl=rvuCo*5WjOV(<+v66Gz$^F!z`4cu2-ye+lOkP4#hYMhQ{ zAVXrchiQJ8J8{pAh9J*XJfZE9Lyl2F8I5Gr3O%}S`(+am$GC5CWITGwPnbde8+X#L zet*B;Xu%~d4!a=Qd%>61?M+C)tT@k%$X7FDUw>xg>#NKS$ zCLQE&^Q0C^;SE)yIBmvDx*z}2=PuDeRw4us!DO*Kbx}Uzzr|_?Lk%KkkXMW7vNsIqBjyFfC5_Aixq(b^cuA0x^tz+CCC z0+eI!a2zh$9Gtzp;fl<0g>c(XjyMsj8nY#xkmq>^zHH9MK!+4X9j{=!sn9>W9(q+w zK(C5v(BBR8uuyH@338#6Ii^QOh2{p4!=#U=Tvs_J7Gm>!I_f@!96}fkOc>3C!IRjH zh*CC{*cm+tq6Px285uFr+e9H3s$Gb$v;vjUK#F9CgG3!#BG1b?NC&TvV6ot;8OnYr z9S&$|q7oZ=-XyEgZg0 zeehUXPAolng1UNQ9jHCbH5?sbuc5dq)KHXH6Nf@n9H^xo?aV-Z6eWTlPo&>FF56I6 ztFnd?#^@93@ZN|1-DSahC*dVMXqjCM`pRGBjI?FzwBR*xbt52C2ICYemW+UPWW9&e zC(5@O$l8b##SsEdb8(_LJD@DvMD?n&CaN)>s5n7lA5GNnJf3#tkF_`>c!po?-TI=l z?MLmS5$BfT7A|8Ew>WWUpmVftLpG;jkkL0$yNwcAUx>eWaS7~{4sK`U=ULZ54@idi zCl<`0Rc+Kv{vn2{7Cj*CMeN1@Cv{N7!7hb$cb~Nx3K3t>*^{KU)4h zOZ_Z$3Xm6O)`}5JZe?4m2pDrZ4I$-Wt5C$H(s_CWDN{y7y@jMw*+K&S{9u3n0t(Id z)iZ3dnKB5(V7ewvhgsCYCslP^VhFeD% z+eE#L4a9mSWMhLHyJ@z_F+b+4XMHdP8FXvEz}}H{Wk+icj;g#TYp`~b(RMKG_im9= z;v9;PGBd@wC3E!zA~%3UN?{`;?HVL5HKcXo7=h$SXaj|Q4C6Lpq6MTuXa}~?Ojrw> z%f^GZ5{*>GY8=#&S8~MWl(ab{`qkr(|`@kr+hP9Iu)a=28m z-X?H`JnYO~@7Q$c+vE3=QOL#*=U66h41E!rg1)ffH;d;MpvWTVp8zlY%GOC{Ci<1$ zNGb`aE;=Z@gLzXX|>ReOjWgYt*KfNlRUQ|bE;{qTXP$| z0)8kN#4F&3(s9(&vOUl1vuZy*5L=4gi%^}Fq0@(KNJJ(T<$zk8A&T~wcYlAl^6IDB!!Sb-M@ zq@*-i(;>3S6~TC>OII*vSk~3(vSM(C)zO_L6%kTrhZJEwc|`EwPSI5cEfI#%%HuRn za3LbQ*j4}GjdwgvIBT5bL!vm z(H1lbWEz@2Jw0b+v_V9@p|an>nkQf&N!1m=N-{#?Ahqr=zyhe(J=K+`c}!V zV-Yx&&Kg#U+!A$D=~Qc#kdatJ$oYYR)yyG&tqcR~(Cdu>I!5??KKCX@nD6a)Nr~!H ztvS$@`NJknF=0(#fSaxpvreWbYFVSv^nNoKDWZ?GDCzO%~$$X+KLuQFAul}3D4hb9yByM2fpx`>D z;5wy(dvcvjLe2GhhhM#Fdy}a)oj$FVc$irzhMC_Kb)5+#IguTN5&xp5c2P9i45TdK zRC10}w@fgRIDZGDkvy`4^p#{|MuT+zvdkB$dy&KP23^0*C((_F*$s&L#)9E1JyS(( zl!qp2E47V0^w`@`1fcN(UeoRU8xXS%cFisLmwNz5yoA)L1~%I4M#%D5UzbuA2Qv1$ znNF8A_gfViyC!Ts+TR(rx}$Y%*!mQ6EczI31AUwG!y2nd8^VUnaiiqyB&Y^npWB#7Wm$PSk@vdNl9rqW{g*rwC80in7m zaWOFFN@Hc2%V?}@_SZ&ZWs6K-WbbY)T*=;D*t{}2UZ-DVFE(&AQs&Hv*`_i^%yxcd z#9W~=#?Gqx!Pwam=3EwFy}%{nl+N+dh>zhpZoxAKWCR`Yim9dIXwHaD4+XErIHLO_OY8dtTNRK22={|gYMwaK9gB+`x`=W3HX03%@vRZ# zBViQlnj;Vl<2R@b;qFrz!riYjgv&u4hVdJ{cMx&`naBUeqoTsr!*2HVu!&(+hS_L` zOR8#Q*8Y@k(ToSka7FyiUimA2$3tb+oz=CG&>}kXpjmZ?xWO>q zAw7YpO?8I}3-OM}6stRUO9$hf$`o`6@R$z8JC!j=Oq7K-VgMJ!3kSy00-ZZic}5N8 zGh80S1_~O6VO78&Ez{F1Q{rHC2h;OVSr8Xr*aZBj>C54dh#^B3i1Ltsi5)`}NUGO@ zB%uNX)oVeJ&``_W5Eem>Pyk};Z9$BN4^ry2Amt`%K}f6>r0xV>4!dzn9_9pMR55`Z zRe+!|PE-Ms#&}T$h#KQY6=;PDKhcj3H`T$=ygXM*z8$b3|HcFxoL-}!ZMZ{jj3wWY z91Y=$&uL0uX9T@en18%<|4!~SrcUA4o$aIIaf zgd4&&c6BIRANJbSFx(X0VplhXTf)tDwKp6IZ?>yzLJ{6%SJ#HaQEMTKN){K&gdDj2 zEfZ`Blj}4V-Q)7;#62h&@nrY7JT`F;I!0vKJuYvZxCb>O#_S%Kw@uuGrV(v+kIUl| z_n_=3?i9g%Yk5yISY!ARrglklg89wi`l<++H-{UlB9I*p`>Gl=gp90+!2f3U{;f<1pjur99;_Ld#NUM#7{!(2=3sSc+{#4on2#F1D) z6_q4{3#_6NLXf*vRPqP9w~9*izyMZJNgX)BDkcSv#jH?|J9@8|qr+RF>q{Dp-l%Rc z;=GFA>jt9-R>ki)UXg;ldkII^C!bgNpcEXqKc(Q<65r&4gB)dJ{H-1hApB)f1T0JH z5fE3XjDT3x{q@lSMFkWcz{Da-U;+k@(86S8z+p5evm9I5!eAYJdWvuvUjwsn8TPw{ z%Q}H*8sRcRO5Pk#K;{<05@#LHtCA`cv4z!Whqfwvm3UmVS23zEv1P-yv3j=Y3OD%N zxzDv9#*WqLJg125jWE;XyQ|Mg@N(MOKkog?_!x!sJ!J zwz)3iYwEgp4PSkNfy@ol;?0y`kezJ03Tt^VNQSWogJdRqFbL0OLokRCPz(kUJ-sHm zcrZvIAP)v91mwY>EnImpNQvtn3{rAXJs7m&L^ax63kKm9Rly(&&l2mI2nLPAJ+e4O zf5eiiU=TI&@og~}v~?T|dWj&=&KLyRISvBtB=GA&ps>Y*NfW^!wvH+oWC4LO>4?1) z*np`jxn!2JIkHARt6{T|4+t=ig)lCxDfX1dq7^5LjBH5O;S7X3`m1=6M2RjZPQ5}{ zdP!kv0#9;Y0uhzXS0_Ks+6dvL%`w)*#ZOsu-59q;i}c3_RQ}|+vZ=>@RFywAuEf*7 zAtM5|x%lW{?K*-~n~Q%mSi2@k%D5RzEt`uU;edJ~7CVY2k(#|0=`jO^A&p~3zKCWH z1w0iwiU|})*&>xijIQucd9WaKX1FZ&^)L-l;(18t<@U#G!P4vNeRX?Rm7T5YNO33< z929~cixv5v8iRGT+xmV~7Nfob@4)`adyhiJK8z;%cFg2dJ9xj6# zEmVl93*yeJ;R>Tfw(!)Wu%af;1t-WPA~sp77^x8hGH$+irAh`weRah7B`zJpb&18CoQwiTrBo3JtP8?VkP8=O4j*b&YCz6D8qzhV%jz|cY9WoqZ)SYF@NHU#B zJeVWe+ho$yg>T0q@ul$Xgsmn$32B@3?2wIbiy-PXhR{2clQ&v4>8a3R4551z(WEC~ zas~0L$i5CjmYn_=t0VAZDd#1|6;#u$pU`E)0{0pV#*&FNNL`Yz$?=6RayA+T7FHzi zWJvw2FT2<}&OfClDp?sLvRG^>NBv&K5rC<)YRutiH`CBw8`Q_Q(ulso=@s z7A;owSVg}m-LzaCXdQ!80h9JAv|OeN80D~WL#)bnCZ}YDXUF`w3_GEU;m74j#)Qj_ zjExuh(2a%+hpG=Y*#i)V*P#Eqz00rws#zxnrqATEbZJ#nR}y@Yvs~fS%4VCKcpZJW zEOZR+AhvtNO&oSglSqW1aF~gZi<{zbB_1%G>JkCk(y-zXCM1HW!q(`WufrCNWJk4P z&oCtIyBUk3M=d2(QS>TWKNdZsWfwla9%FASqxE{93$SIDChY~w^jC$`n+m71aLHz= zK$4P{y$Pppg(J2Q(jeIn5N`84!{VoJ z>e^x{`J|>2WS25TfvG8m@1|OieW%6P=N%p%<-0_ZoV6HxjIZl_Lnf8S>C)$2V{mHZ zySbRsaehD19W84S2|k;$W)zpRw_u*bGth)BV{2Qo_KRx$aglVyL63A+U68t}yhI}$ z59(v2FFx7tiS|FQ2y5<|^fiyL(r@XJT`Ht%AsU5D<$)2CFb|CQgL!Ji8Z1O(AyYiE ziO?$^8T!^dGE};GWQxiuaiNSSjc$~S)d)lL$QlSxd1MXNAeF$-h#naho;T7^WsmSB-kP{l>O7Q|@yRdA%l z#7JuclM#|CBr6)fuxPP2)L(@fRS~|zk(;O@gw?LaVb#iF#^Xq=s(|ibEf%XPo3jd6 z_C}kmy=C_bAz2&^qPB<*G2(HE+~Yh%@5B zWn}nK^r-vR0?h2pgc?i;D)r$p$WI1hYOyoq{O#8p4KLqBhhcWQm<4zIj9-l>$C z_hzK-y;aK3?=ZF^K2sZ?dIJ|n;++~kbO+qs67P)h=O4Y#pCvt6m(t$nxh_7;1DtL4 z7A}#PT;jjU3ZvE4EcP5qKde^B@-RfCjc&7hvJ}H1m5+Owl|Kc%&y3#cWp#zhvPB$( zsQ0~h%@=v93e=u00$IhgbYUw*R(g(-EgxCwc}ljnWTh7(`2a{j00%oRuNpbr@{kp$Cz|2%$9Zsfs&|K{S zZTqteTovEQ^2$x>H3(PgBzBmY1HPr1dQ?eVUS1xU3XzI+UJU zU^LeqO21RT*B(l~Tff&FNJWwI?9}Um>S}(VL?+&sIXd-r5_Zx`^*Vepb8=#xtY%-xBIfXg37Pb|z0z@Jm6HBmiPB?eRw)JHm5w#56xNspuSctvja9$5tat2H?U@a4kDFMwmmGGD zTdR~f_R3lhlFD9Ld!2-{SJq&YjP}afC?u-AvNm2xY_A++M&wMtrj&qelSb9BaaAdxhs})VSGE~RpE_B>MP+&4v7)bZ|4*rUun>W zceZp;w>5O*n!^>w$MEo>^w0Xh@fn1)F_p8E&V(gLmc=5iRC@SJ2k*=&74*-1VTEfw zW)G0x4`Xpm6d|3ytvE|ez|)7)Pjh-t@rkYtR-2RJQZYd^>+I7#)A#C(M&8++PF6Zb z1kPH-#pF3l0H2HOzTnZ*1;uN9cT+DOOxxA&%?LJ2s)%Uvt1TSJcX`+&#fMF8j}#f} zr-@;67VIek+@5ewBw5kGF8>AgYT}@hlzx7oYd!1G<(%Bnxs`9SF*mu5)tU;-Khx2e zpMkaW_>#Q%7-!P3bB_-W+ZMh!(_WAK@cQ7p7PK)~?U5l~4|!q(;7WNt+~f7oa=qSO zsQw}RSRe8|Z0zGZ>K&5#JCBE@r;fas@_ms_q5qT)J>f{f(_mSnC)s&{1NNA4Ho7sp zGly6)(X~cm<6yt4m~ofyeHVngjP1|{eh0HyJLnzu2!h|il;)IXyHf$}cQC(si`}Wf z)*eVeRzgm8n6W}p+8CK1OrGd$+>FQ5f81o3I<}ZJW>)->O43nT@&1-(y1el|mHfuz zT$ZcjS@D=kqLHll7A}1`Mx}37$)EVUT$ZctS@GYg=Zucr31;=kvTX|TMI*bXU(wW6oKlbb`oR0oJn zGa<6jJD5DDo$Isv^JjHrg6>|xmLNW)=RVAHW_M)8N7a8M&#d^>wsr`WczRkTAI87t za<#hgS(W_8zvYrt?TGS!qmtw4_qZ%q&a&cnRq`i(pGy+H;}idfO8&$ja4DC=vGtrv z{={E$$=YbV@i~?J#`_@kt<{Yexxo%N4e&8;AnoE4->8y5@y%Q!5aW$+QpunABoCXl zlNGF_&-f%m16po!<7(x!mJz zKg!$e$P?@2`zhJk3s(9drFpT6mA;*l9nNQ^Z=nPu5MNX=l7CiwAlJ-kW}nF4TwO~W8^y`3#`CrFfRG)oKC3%;%Ms|Y{p7tNO0l3{nb^1t z-s)%&+sI@C)kMh?Pta=|677)Vz6)9WD8I!K;`lLCfw3(U^$}70ROf{n1|pjHDGzHb zF=MCzSMl7&_+C&XMDU{nM#t|3LCe(hb46J%xM^X6mR(Pxa)rbI8KNp1SryRo;f9GS z0ObUoi7H^^VBLu-z+>OrL=}*Y#<;WY0qSzgBCF7;StCpaJrIcppkZwuR0Tk-uv+!2 zDga`4%0v|aafsza6#(_Bd{^%tfOdq@L@NLqRk3{2Naqw?TLd7S4gqv|mF(?R091!j ztpKPFqpAR?4x_37s1Bp50H_Y5ssN}4qY)fp9UZ;dz#N&3-(oP0b_$E^A7MlzI~aDW zVQPe4;K)cr(a1E=cEiocbkh}v6wk_C_JC!_wH8|e^&sa%>W4%X{p5%`e$uF11kek8 zL4l=|Rh1G~CaAC;oFsfo?gi69QZt?F%>;WX-q)RQql%Oy`0YtQ&RGwl>~#x z=9w($-Um#oLD9ZzA4HXN7p23NSm6dd{ps7p!gVF5w#JIez0)CSK4-Cy?XjW~Mpwj& zNg4D)Ul1nMNdiJkXKnDsG&b8uS)JD9l<_QfN0V&u?~dr^SnNjqwIq5AJYCYzTri>((UDG z&}< zrJpMU=CkR42Ate^DCIbL$TRth{WXg0EDOYC7>wAcPaFdQ>l32M@p$n2THNTdyC@6Gx6J-Glw}U5Z1DIatII=n;6t%N_ z#Tp5B|Kmzahw13}#+-i~-}o#NAl(flk^l$z!EDjdNF4X1Zyk(sWvv@2NCaL)u&SF729QR}Hu`^d_p z@%ZW8I(|CWuH@aKxvdzuq-FKDVfp$|502HryQGi~jM`7yCvu23><%2`#fkppUA2@9 zRG);GKRk@5I6NhSF+635jb~HCtLAX}xH28trB1YS018G_aCB+Cla~(-8EOWNc77}O zOFO?82MhC>J!Np$kS@D19`kcilxIr$r%w>aVYY~L9fJLmkd28TlEBcQ>hog+PQIu? zNyLj(Jt}`Ikti9?a!FKQCo||RzwEUfGF$v}ujRbjtCB-H{pafBMp6mWf@A9TWQm=n z0n4cq4y@-TF0|NroED$-diJO9$!;RzT*rg)TFVG-^7Nz8rbvtN_#-3cB%t!pm>Sh4 z0WP#GO?0Reu*&n3>^$$5rzlv0k#BaZfx z^f48>T@gB+xM_Su#Z-!YX)(c*hP5MnSKe4@YCkVEJmx5k9WgS3Wt6T?SJ`!u!bJ)q zt?&b;-m>4gkDCaD9H8^aqbh_77?aN(k%WRWN|sCPjUnW$oYofcV%1nqi? zqC!VjL;-@JkaS>?hzwSJGAQNaB?L_EyYQ#@UNX7!E#-ki+^>#R5b>}I@?9sZ>Nvkw z-VwN$riAZ6lyxQ}sLpOt+h|iTlOSWzG^yuDNt1eh6dDINB5E8nOkXu!loE>B^5mSDJ*c@s+7kEH9b0fTn5ZY7vu4LYtRDcl+~|uxKZ+$5Wu`+FHevFx6;f zgcZBW1N+W$Aj8Q~vKtaCbbgi{01lB!l_y79 z`}ty`Xu9}ce)d8_gUjs29>uVOhIsiN1%?FCr`0A`8|ZKdxeim!v9a<9s(`+bP@noe zTJbl?_!Nn;42;0$PG-U0#4b;6ahN+FRf5g*5nhwDCVk=o<3XYwu~mHN({y&-;4O?Y z=2ZO2S7+P&6B_3-z6POzy}Un3%tRlYYUm(K9>d3OC3&;a@*|l|R$zLS0?%#V`gt}jzU#Lb z1lf!b;z60^$g-^(!Q?|O|y#8oW91gK3=Cc|rQ$d8cmc)btdJ3qlpEJEOd zpgiT=9v|`9F$4CbpBUaKSR=v^JWkk(BNa}MmM{x9g(Xl+mdkCb)jO7W8K(oXITBh} z!gyT_OJ*)oMmsN&Pq#eeBi>3R3v0toG9L8|0OqwB1qlNyAf?DV zj0FTnxlCP=T4RFL=xvjxCS9x1nTDZ0CMiv5n@Ve%DW^5ZnaUdoZi&+&MQ}^d75{`4 zt!vunkJyr_+A*~ei2+$n8BU3=$@$~*)BnQ-F;K(4I0cF&>FCRU&DJxjW8ODALX1El zdFW${V}%+vBi6@uZ^fl06_)hCFhmdMp$iej4~eDD!$)}! zQpcjG0}?n+s9;&tp##@Ad;~m@3vioiMIGCiX-++Cu+cnY#c!FvZ8hqMl%dW@2U{NM zD^T`~tUgi3A`X%$W3Px|QIuh8*j9itY~k7pP)3=~09he>ZJ--yg9vP-jj1G2n`mLC zF_3+{&CEX;bd%i`9}zFTM2}Hi8u_dfX)lY+rpPs+#K?>-i({d-EbluOdov%sF*&4fghBPl&=$6nXIk?D#qd z5Nz^&D+CRKK~l@klqga=oKt%+mtg?}HD`J9p>&vIg1d{~)=+lRqcix_No2}iYrf`) zASt`;Q}{Z2ich3U0E(jznh&U9mFa5gLs`eyJ|xmk?-`kY7R> zRziMq_UUA7L%iatf5nu_q~=bk##`5OU{oo@Q@(bLAm<--KGi#-+@3Pk66MVC5_057 z0uwHw^+!=LVmf4lFAF=rf%;6iL*^BC!{WHyVdtI9JTj6-X1^m0XnWbCVdpuhBQ{@B z^Ck1pO;Rn}+niDgor23G)Tm@@MJ3<%b5P0FS4JfacM6plVm1i-zm`<;SEBg!Rp=r& z#jg(+7iFGwq!sZH1mb@v(IuS6vIwUyZ#umSKbu% zcn&E?PT%_fb56(HF-z?tobK{_@MXiDk>`!y-3-1Iw|B#?BkALk@osU5kEI~^3jGGl ztv`EDMn=czROTTY=B~1QRQAU`!UG5M()OfbPwhJTngl{U}FesB^Gt?#mYc zfH-4xyF6gHqF18DAU6o7Qm)3WYakEdnU)f7SrTuVbFMRG#>=S+i-Rv8W%^_kv`cE4 zP&cVNil6y;aSF{ZVL5QOZm6*)m20`2-Q<&2$bb4(NzRwo7p<_^QymN9mUQXem@zLa zvs8XmtZcC5&!?{jRFfZqmuLi04m9-2eVPx=?EFQJltN1Q_bXeI+_jwQ?DJpR⪻Yq3P$~d(Euoi}MC{C|`2gmRTcX9s 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 zÐ8T=B|(P=xErG6}^^2jAIOdK< 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 EA0UcE*8l(j literal 280201 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 diff --git a/substrate/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.wasm b/substrate/demo/runtime/wasm/target/wasm32-unknown-unknown/release/demo_runtime.wasm index b3376fd74f7cd380e73b365a0720d858878c4408..3cbfe39b46b4829759fd2a47be945270656ac8c8 100755 GIT binary patch literal 296624 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%0D+??S%4A4u)IR?k5Jr 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 ^m2i9`qrhnWbu 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 G3H~4SFrwK2 diff --git a/substrate/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm b/substrate/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm index dc23e6a75f3dd9383d293b2f173e345885ce7c58..ed66e54638bdbcafd4e804e894115f7de481b020 100644 GIT binary patch delta 2500 zcmZuyYm8M_6+ZXQ3@MbyzLa60JRIl%1M=AK2d^^J(Y6pjYHhskRnm=h--WWNu zT7Kv+1OGbl=F9uO)ST4bQ|tby-qN$~b+-2WdEe_*PYaoemlHO2 z);jBCW^>o%W3^g0JTd-<_$0aW@lA>*a=IXe0lgtyshwd1$_AAS8E5G>%Ms3s5%pHe#2Z`n!ni~@8~^&uf2+K z9phIRzsL9h?h4t+YXZ2dHCZuR@C}o!QSPy z0ob-zk26%Wz>QIzoH9F)+IieIZ|*(XLR6&M%fO41IqB@c?^{Q-Fq&J&GvL}mVe!^;W@xGJU*4{al7a`LQer`J)>}RL_(RaxKWDPVi-#Y2 zoKa@hCrn#;MRio!8(-k`{v{-4Lo?0VW*umd4E~A_l~oZl*F_uUnJwTBEFm_#ph9Fk z2O2|h@T~*O2)EfYs&tT%GZhT{5+91>Md2xGk9#xen==nS&_bxTN(kjjFxp#TVb5Vb zN#tmC(k?0)m36eY+P-1kmNk7(?br^74o`sh5050yORJ48CMqqZwa^N?hzUt*ixqh( zTwn?g!A7DZrXjUXG34xghC7dZdbBLbddnm$#TXBtIr4d8g%a9XshCL_{|sl3^buK# z)gkLlF>5RkrXRhJ1e-aRGTEdHqLyLD(Io`arC5r!CY!`#f*&2dcMR9rWX6QmjAb5x zJinGuJcv7=7?WJnoZ#!vf0LBVV~8<1R(O$0LHn^)q*xvieusx;M3=+PV{1vq8%`C= z4r`T3!u!WoHMmDqk!+D7Dm2Gl#Hpi0^x-LHJ+jJTRwX%}Z4LsS{?6itO3FFRvpA|S zBijp82WiLlt(!Bxp+iW*Bf=;#X@iE*gZGa~M&y#2O%g#*9P%J*uw+rN90B%JpaOc~ zmG5`M+k;;w)YvR?#{YZVh#6RNd=tTXjWof9Kr_CT;Og<%z;?lnxe_cIR8j7Q_s&m+ z2Tv?$cPirUB4H}bzU z!;}|i5IR&1+6G5Bl28#IdGTgL=qQBeNe7FP9Ac;Q!gx?;<`5rEDpaY+EO**O*m{N% z8KW%0ikt*P4O)2h%%U+lFyl1E-zXAP;2&r1ZNyYG&qbg!C1IHSkJ@1ESvp3VEE0+{ z*=Ur>aQbX73DGC%F*WL)a>~Hp&SC-%HCM0$9UdBmhxzB`bWyLe)FLU5{g=7utZ20I;+A=5Uyl82ir?^5PF3~u=E0YCjI2EYZ5J4StF8J!$1a5zF1$PZ>|L!} z{N`Lc-rW7#W3@556x^FCBUmUU!ylRpZU=GNMM;>lSelpI<)MCShh0}D!tRUX2$}*b zDOn*iLjy=~_M#)sM)VtOZLc{`XtW<(Tzq?V<`PZ}Nx60i4d&b_%=rj($y*#PoR{A=- z=L;rh!>}v*cE(m-=_I$317Eu`zk?T?Xby$!Jx)kzXKY&2wery}xQUSMy|$!5i^)oc z7<>vj8afl+xwg0=y)$Tu0-ZTy59C>J;|gz>p?%QH0<{zeTIz;RuB>fH>=7KW%qO7} zdcthjdUgHSLS@bt@eXLpx`a7TL*La$V9~V+#0X(1(yR;GvlkJjTz{q^ipCM{oJIkg zfKv);EgkUs^+SXY?T+a?V{tZN>-rm%2uHmz%9(`Ij|B>6ZYZJ|XD%2Mvvx*s27kIS F_usnU_BsFn delta 2498 zcmZuzdyJJw6~EuzT~eyc&RrH*D9G|&Ufp?qGqb?brCzl{3Q`-bErD-duz)-kHZ(yb z5i2d0683cE4FXLnF^$l>gZIi8CzMCEJlNQnje;p<+wjM78$4Bhq^;6Fuw&<17uWY~Sv#<0SKpRU znov7do|HAsnl}BxAJ(omEUPp(mzEv=;Ly82z4iOw9Nk+RHLf><(d|FZX2UPq7iM#6 ze{X+3%Q|a!CXH+8yjyN)+M9i|ymv;amu{NgIJ4Bz*!!pbKP&Y%ka_sozOf_gD3f`$ zt>cem<=LfL_L&`{D|0)VdLP)>d$)e>Q@xF3Ztb}_{f${C+?#(hn*%o%e3;FyU0v8W zC2OipU*47Bw0cF+gwybs(&#Y*l~UuOx-^o@yZ_FH~W;s(t(U=8Py& z7#|(8n)+Z8ubq9Nr%b#qBBv=7K}KO@0q=eHW)?`yG%s{?oaRCb?xm}iR;~OBqhDT` zOUMq+nqvRAWO{>_$`~s-!$1qFIc$IF5u%mh!t!JThG23BKgZ47=E3o(RWOk|9cz_C zk2MfeP|ku)M)2sASFmv~C)&oMNK#ngCG{@C#lbGZa}!y@u%&j2Q3dY}?jb@MbY!A% zPFREPzX2Nw+TzkNswK0=DFgq2`D09SA{B;7&9pSo_44C{Y2{r?OeBdTNjUiOHsW!Q zd6{!>qtI4B^U$N{CKg;pO`{hyqMLO?ODY8wB2U&?#k^H9Re`-W0p1##(}HhOUUJ3q zsFKd%!=ZIV2IW|hC!RE;&g8J^d(V+*y)oWdNtLn5`oSYl5UH(l($EyqFd_;5$hs-2 zNVyD_2H|uFDX*4x@AjLw?ilEgd-lMzp>|kt?qNa|wJ8Llx$wyc3wO^<9*ZDx9evKI z2uU#`iU{%O;<_IUJt|t{h@gmY>8K%`b8VQwO%d@O96mVug%(U%GG0?IXu(*7RmT{y zl;%9-E{0(041mMO_LHcYvcYg3^T252(0P0lQ8LzzAngBmJ!3ajg6*bJE$6N~vADwuN z2re*!U|D1q>7wAPCqGY&DQuyPqts($GQf{co+gFJxh@h0DJ7bZTa24Q}rz0^4 zTq>B*#s?Y;4LxU`A}UggCv(L$)-uxJ)iai8bWbT`8uKS4X8-P)C4{@EBe(ckrIch8 zmVEz4tK<>cs9l{nN#>zig4>tcVCvcVBuSp<&IN|zQFyfcwX>8cq#bIKNWmIjL<`5y zE~=ntDS^DhXUM`^T7{kqd&o8PJ_%jxZM8n)z9;WIUTXIz=g>lKD>f_ty4?m3Ti!`W+Io6b+ zTteTlB}!>5CPkTNUYMN1>%)uh5AEN>t6DLGsIR$BIohSvOjhu>4Q)U!lgfsXIKj{x zvs*^M3U9yB(K-^1sZV@tgx-hf%FDe=MgTy3v-IO<_~Ny36{)d`R8%H-t&=M{VcWG$m3l$2 zLQ?FVR7x4=!V6cPX-!l)hy4ky#Dp?GZ#hQL4lP$_kRVY?ghKr*xG^%qU#{)0sDSdK z6ve5?DYX>tlqbMTZyv4(Y>dFO^{$kQ1YOrDiAgX+y^M*`0$st@>xwY^6A+xD=ucXz JDGXm<@E`i%`RD)u diff --git a/substrate/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.wasm b/substrate/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.wasm index c1ef690b3fa2c28cd6cf6d5a7c4b880994bfef91..971048d5470b129abab11b07d2dd8e43b6964005 100755 GIT binary patch delta 2501 zcmZuyYm8M_6~5=r&~}h^&K(O=tl|g*8Cqs$zaKn1kf~A{T1$x*YKQ&gRUUysQKS4o zENuz|R(X%S24kAo@VGptQ&Kh6AKJtit+CNR));MU0wgsWQbS!g>Yu@zth>+I=bW|I z`o3?i_2*mFi?^!hpQzqd+|@e1xfzyMZPVYY?XbVPxPHB=ig7(%Gspk3KC?O3CQPU- z-2b=TA0Pket1o<|J~Xkf=(<^L8n>hPc6G(cJgf7k*snYbv|(@_}_7 zMMt&luHXLj;iBk;KTP@&{vU7eE=c|7?f)zaTK~!9iB0t*Q?|6!W_66~yJubB&Bo`S z=xZ)#)gSEI(p*s3JL|22z*F5H6}|PPJ!?NxRO=&4dJA0Mf8343<*}!7%YB2jO68?W zrE;yKQn}FqZ?1f`Wdhz-@OBAoe)em{zWV#mF1oi$Idrd^g-dV8cW^-OEo!3Z_o#B?)LpZA@EO{EM(IpJBhB1M%f{ON_&rQ%vKL#bj`3+os>vwL&z?gR?=A2b_^-sNcZ&6aAIpN9#&#B5x*7ZyCt7Xh45g(mR zQ6#N2?0WgF1`3bu(T!#2o`t2HsQLsVI5>8Qytikl``FMXgac@liKaQD7PN@kLyL@F-=qta{m5^nP7 zcxEvuhrX$B^&jk8+*A@}B1}TCxmcXOXTUsZK(kkm9l@P|j zF8J1D?W0fzGjM`iPi22)W7msFsDUu=-hj*1ZvEW09 zmS&cPlyK^u5})~I>PiJB;ohREPAM`?{lg9>E`up=Bb&<{Q5y5PxU&y_@*#8ble9Xg^K-aNLx z#C)~T-g-|GeigwU4>ha|bj&2DL8FdRKMcG!1>Qc6tlPj1YbeV_=0bq+L$gbd5VI_E zBGLxq4Lm(WOUnrnRC2(csYLLdHW^hwjE#!JJ13th1$D+|6QgrH zaYJF=DO(Fh3nvH`0hYKH|6vzSoSI&eMmE?U7{U>`4Dg#%*J@k^&K--&8&qP0l+za` z!Ijewl`iO*iIjmFW|a;8BNeqC+HaNFMV)PI1G(AE3MS9Z5RWvD7B1*XYtU$ z9h@6}sFOIEgyK;;EW5;be!t( zfx>$i=C^l_tNfp1=fjkX@3wsS$>xo2Ln=O~e|&LI(W-Jr-$ZIoea;DvU+TRR#NS^M zC6xwKbAs8_D6`4%#K>g0eQCl21ODrSY4+?j*b``u(QuI{)_;VRmu+cHz;=U`?G$4X zJMG!a%kRvx<;s(7Oc16*jx<{BNe|~~@W;!O;QE!j z+r|P`ZujC7P^xq_u5 zJ?$*xAhW1z=WrwnGi&`o=i^Uz!d^sh`RKeF$vR2lgLl!Vph-6jkIt_t=_M_7p~6 zUtem@H9^8v#{TShfE%OVtnsXHTwAM9%Gw*N;kl-EIPk{)Hr8;Aky~wWTp7AxJ`~qJ z_t~`Zs{?N9*0g01sppnBuBFux=OOjvkwuMn;Lx?UQc*^&*E%F+HOEOka&6YX0T8GF AfB*mh delta 2492 zcmZuzX^fUv75?5~21_ZO`vHSPpzS~rr)8GAzW3gt0~y+n7BQtMB{l&a?#fb}P6v>- z+PI*CL?GpqeP^%{e<<*=mr9c+Mw_~YA9aZ}7}97Yu^JOYjLR8+)D-&TG}E!|3Ka8ykz!u%y9`+B~WiUT#=0u{yMV?Ye%SR;(K6Uq7&6)j+IF zssE;-ESfsnAGq`9^_Iq59XGBr@8z4@uU~oR+VA#!xxT5TuYfJBuNR&0*yPTltNw+_ z|0s&?`oNTyQSjqQQ}1GJjeV`F+lsaZ!s_o&+FdksR_b57ckP%eZENbgV|CyAo8GAO zjqPhBv_86hsIlmV7dqZ7x}dl7pG9ZgcCEUnXsQn{>@M)Q`f1mMhk7!PxqE%JQrS|e zRDRZ0sT9-T#L^RE#^K|5eEcjdUACb(TEDvN;c*RILhI@dJnHjT%R5>Q;AbaMUPJj6 z${$c}!1kg0s%!DrlEzBqEtC=C|EXUY+D?i~uxR7LVm<8NIIq|T?`|w7M#(Z~nXxub zndzja6OFfjedj3Ryb!_%&NHQw`T#%Ow1NaLZJBH;l~p370FP|$sYVg04OwebTH``l zgOlI=IJ~-f5pgmEs)dx?DQCE{LF$T6^W9tqhK8r4V?4H@40ui5guxC4>`RvQWac~%B*<^ z0iMQ7&7Dr3(^5#mgY@v7ZM{>2RK{4z87AbY=C#Tbi$25XQ;QfkaB|xxW-H_qvuJhXcG52)pu-PFp3yQIg2(M!IM`(!Jl`O zMBC(Cmcoi4Y48acbQ4~h#4;8|YOfeoFbFRZp$x`glJH(wqdEKwRuiK&mYC2hj}xX<@HsP)B}$fX_s&5Q@Qwvp@?ewDR=~EM52KspxJsI) zAZS82*LL<2M};V}^;WT9Rm#w{Yi=`!qk`m$l}Tk?!k2a}Co(F}T$y>+jCxbTja}a$ z$p&MBw~{Jjvkmao-HVCTR(WY?PG}S{hU>eR6XkL#qoq-J9b+!xsXdDcRn+Dfh2|pU z5G_1+Wacg#MO}#yi&TT(AMSwuy<-XITpK3vjY#O5 z!;5<#YsL~~6Ex+5I>r+Gaxbe|N=qI~pJFs4JgLFQe$WoH_kE5e&6JIX^HfGg6NeM~ zo*_!65sL_|3z)iu8T$jF0=p(igCDm_?o_`1OHDi80PPWjv(; zQLg0I_t5hs32QmkK^w`U4-{TKG>2#< z7z@D#DiF`i;qQm$lf(l@Y%`}S3$7x3>Ts$WL@hfev8MTq8KloJ2H@$bxF8VEOQagrTAm z+H0IeXv@I9;RmNNgB`^!GL&g=XsT7>(6fX6xRwUjxR4&232sdb{Bd}8)!}Pw7m0?s zu^jo@d%6ZM9G^m{N&jmE;Y-ScuyFkN{nG{Bs;E;gy+pKWt&*M}OkrJrcB|H;SgBmE z|LOSpyNWf?e~L|*(Ny^;$Hg4jerhhfcj}!nHzqU=xX-8Jdi_VIw-(JfV@u?jr!in# zYVc>eZ?EXlGm?~Qgc!zWj|)NA$#Bnw$?)$p6Oo3AMwPJ6nlc=-F#W70N@;8_MOk1$ zn3BRXXP4Zb-!INSL9mQCmrI>XG)}1jdhR1YT5)b>^DUUdfpcx+Z^dHfVwkpLBFsNW z;BV*JZo_oi`M$ZgV%k0{JUf(ndIr}G_4IrQw4R=ox5E0sBk-5u8SwUbf}8WhIKqwd zZRA$8VCsdg@zzqSsNfMdQ!re1^nt_Tbzf|)1|*ix$Q+!?nF`$rPhVVK<-*5=>lAxP zkJP*iesXc;c&V{@R8l4et+RLCFTz_FpM;&4TB{??z?`JGQ>m0PQCNCm+4xMA_qdtR zO3FCk*+LAy6|P;lpG1kXL@1nujvFHryngA6%_`!2QHtW>N=o6;*S. +// along with Substrate. If not, see . //! Dispatch system. Just dispatches calls. diff --git a/substrate/substrate/runtime/balances/Cargo.toml b/substrate/substrate/runtime/balances/Cargo.toml new file mode 100644 index 0000000000..5a86a99c11 --- /dev/null +++ b/substrate/substrate/runtime/balances/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "substrate-runtime-balances" +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 } +safe-mix = { version = "1.0", default_features = false} +substrate-keyring = { path = "../../keyring", optional = true } +substrate-codec = { path = "../../codec", default_features = false } +substrate-codec-derive = { path = "../../codec/derive", default_features = false } +substrate-primitives = { path = "../../primitives", default_features = false } +substrate-runtime-std = { path = "../../runtime-std", default_features = false } +substrate-runtime-io = { path = "../../runtime-io", default_features = false } +substrate-runtime-support = { path = "../../runtime-support", default_features = false } +substrate-runtime-primitives = { path = "../primitives", default_features = false } +substrate-runtime-system = { path = "../system", default_features = false } + +[features] +default = ["std"] +std = [ + "serde/std", + "serde_derive", + "safe-mix/std", + "substrate-keyring", + "substrate-codec/std", + "substrate-codec-derive/std", + "substrate-primitives/std", + "substrate-runtime-std/std", + "substrate-runtime-io/std", + "substrate-runtime-support/std", + "substrate-runtime-primitives/std", + "substrate-runtime-system/std", +] diff --git a/substrate/substrate/runtime/staking/src/address.rs b/substrate/substrate/runtime/balances/src/address.rs similarity index 92% rename from substrate/substrate/runtime/staking/src/address.rs rename to substrate/substrate/runtime/balances/src/address.rs index 249e0b20db..01fb254395 100644 --- a/substrate/substrate/runtime/staking/src/address.rs +++ b/substrate/substrate/runtime/balances/src/address.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Address type that is union of index and id for an account. diff --git a/substrate/substrate/runtime/balances/src/genesis_config.rs b/substrate/substrate/runtime/balances/src/genesis_config.rs new file mode 100644 index 0000000000..677db1aaec --- /dev/null +++ b/substrate/substrate/runtime/balances/src/genesis_config.rs @@ -0,0 +1,84 @@ +// Copyright 2017 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Build a balances genesis block. + +#![cfg(feature = "std")] + +use std::collections::HashMap; +use rstd::prelude::*; +use codec::Encode; +use runtime_support::{StorageValue, StorageMap}; +use primitives::traits::{Zero, As}; +use substrate_primitives::KeccakHasher; +use {runtime_io, primitives}; +use super::{Trait, ENUM_SET_SIZE, EnumSet, NextEnumSet, CreationFee, TransferFee, + ReclaimRebate, ExistentialDeposit, TransactionByteFee, TransactionBaseFee, TotalIssuance, + FreeBalance}; + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +#[serde(deny_unknown_fields)] +pub struct GenesisConfig { + pub balances: Vec<(T::AccountId, T::Balance)>, + pub transaction_base_fee: T::Balance, + pub transaction_byte_fee: T::Balance, + pub transfer_fee: T::Balance, + pub creation_fee: T::Balance, + pub reclaim_rebate: T::Balance, + pub existential_deposit: T::Balance, +} + +impl Default for GenesisConfig { + fn default() -> Self { + GenesisConfig { + balances: vec![], + transaction_base_fee: T::Balance::sa(0), + transaction_byte_fee: T::Balance::sa(0), + transfer_fee: T::Balance::sa(0), + creation_fee: T::Balance::sa(0), + existential_deposit: T::Balance::sa(0), + reclaim_rebate: T::Balance::sa(0), + } + } +} + +impl primitives::BuildStorage for GenesisConfig { + fn build_storage(self) -> ::std::result::Result, Vec>, String> { + let total_stake: T::Balance = self.balances.iter().fold(Zero::zero(), |acc, &(_, n)| acc + n); + + let mut r: runtime_io::TestExternalities = map![ + Self::hash(>::key()).to_vec() => T::AccountIndex::sa(self.balances.len() / ENUM_SET_SIZE).encode(), + Self::hash(>::key()).to_vec() => self.transaction_base_fee.encode(), + Self::hash(>::key()).to_vec() => self.transaction_byte_fee.encode(), + Self::hash(>::key()).to_vec() => self.transfer_fee.encode(), + Self::hash(>::key()).to_vec() => self.creation_fee.encode(), + Self::hash(>::key()).to_vec() => self.existential_deposit.encode(), + Self::hash(>::key()).to_vec() => self.reclaim_rebate.encode(), + Self::hash(>::key()).to_vec() => total_stake.encode() + ]; + + let ids: Vec<_> = self.balances.iter().map(|x| x.0.clone()).collect(); + for i in 0..(ids.len() + ENUM_SET_SIZE - 1) / ENUM_SET_SIZE { + r.insert(Self::hash(&>::key_for(T::AccountIndex::sa(i))).to_vec(), + ids[i * ENUM_SET_SIZE..ids.len().min((i + 1) * ENUM_SET_SIZE)].to_owned().encode()); + } + for (who, value) in self.balances.into_iter() { + r.insert(Self::hash(&>::key_for(who)).to_vec(), value.encode()); + } + Ok(r.into()) + } +} diff --git a/substrate/substrate/runtime/balances/src/lib.rs b/substrate/substrate/runtime/balances/src/lib.rs new file mode 100644 index 0000000000..00c4fd04c3 --- /dev/null +++ b/substrate/substrate/runtime/balances/src/lib.rs @@ -0,0 +1,651 @@ +// Copyright 2017 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Balances: Handles balances. + +#![cfg_attr(not(feature = "std"), no_std)] + +#[cfg(feature = "std")] +extern crate serde; + +#[cfg(feature = "std")] +#[macro_use] +extern crate serde_derive; + +#[macro_use] +extern crate substrate_runtime_support as runtime_support; + +#[cfg_attr(feature = "std", macro_use)] +extern crate substrate_runtime_std as rstd; + +#[macro_use] +extern crate substrate_codec_derive; + +extern crate substrate_codec as codec; +extern crate substrate_primitives; +extern crate substrate_runtime_io as runtime_io; +extern crate substrate_runtime_primitives as primitives; +extern crate substrate_runtime_system as system; + +use rstd::prelude::*; +use rstd::{cmp, result}; +use codec::{Encode, Decode, Codec, Input, Output}; +use runtime_support::{StorageValue, StorageMap, Parameter}; +use runtime_support::dispatch::Result; +use primitives::traits::{Zero, One, RefInto, SimpleArithmetic, Executable, MakePayment, + As, AuxLookup, Member, CheckedAdd, CheckedSub}; +use address::Address as RawAddress; + +mod mock; + +pub mod address; +mod tests; +mod genesis_config; + +#[cfg(feature = "std")] +pub use genesis_config::GenesisConfig; + +/// Number of account IDs stored per enum set. +const ENUM_SET_SIZE: usize = 64; + +/// The byte to identify intention to reclaim an existing account index. +const RECLAIM_INDEX_MAGIC: usize = 0x69; + +pub type Address = RawAddress<::AccountId, ::AccountIndex>; + +pub type Event = RawEvent< + ::AccountId, + ::AccountIndex +>; + +/// The account with the given id was killed. +pub trait OnFreeBalanceZero { + /// The account was the given id was killed. + fn on_free_balance_zero(who: &AccountId); +} + +impl OnFreeBalanceZero for () { + fn on_free_balance_zero(_who: &AccountId) {} +} +impl< + AccountId, + X: OnFreeBalanceZero, + Y: OnFreeBalanceZero, +> OnFreeBalanceZero for (X, Y) { + fn on_free_balance_zero(who: &AccountId) { + X::on_free_balance_zero(who); + Y::on_free_balance_zero(who); + } +} + +/// Determinator for whether a given account is able to transfer balance. +pub trait EnsureAccountLiquid { + /// Returns `Ok` iff the account is able to transfer funds normally. `Err(...)` + /// with the reason why not otherwise. + fn ensure_account_liquid(who: &AccountId) -> Result; +} + +impl EnsureAccountLiquid for () { + fn ensure_account_liquid(_who: &AccountId) -> Result { Ok(()) } +} + +pub trait Trait: system::Trait { + /// The balance of an account. + type Balance: Parameter + SimpleArithmetic + Codec + Default + Copy + As + As + As; + /// Type used for storing an account's index; implies the maximum number of accounts the system + /// can hold. + type AccountIndex: Parameter + Member + Codec + SimpleArithmetic + As + As + As + As + As + Copy; + /// A function which is invoked when the free-balance has fallen below the existential deposit and + /// has been reduced to zero. + /// + /// Gives a chance to clean up resources associated with the given account. + type OnFreeBalanceZero: OnFreeBalanceZero; + + /// A function that returns true iff a given account can transfer its funds to another account. + type EnsureAccountLiquid: EnsureAccountLiquid; + + /// The overarching event type. + type Event: From> + Into<::Event>; +} + +decl_module! { + pub struct Module; + + #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + pub enum Call where aux: T::PublicAux { + fn transfer(aux, dest: RawAddress, value: T::Balance) -> Result = 0; + } + + #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] + pub enum PrivCall { + fn set_balance(who: RawAddress, free: T::Balance, reserved: T::Balance) -> Result = 0; + } +} + +/// An event in this module. +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[derive(Encode, Decode, PartialEq, Eq, Clone)] +pub enum RawEvent { + /// A new account was created. + NewAccount(AccountId, AccountIndex, NewAccountOutcome), + /// An account was reaped. + ReapedAccount(AccountId), +} + +impl From> for () { + fn from(_: RawEvent) -> () { () } +} + +decl_storage! { + trait Store for Module as Balances { + // The total amount of stake on the system. + pub TotalIssuance get(total_stake): required T::Balance; + // The minimum amount allowed to keep an account open. + pub ExistentialDeposit get(existential_deposit): required T::Balance; + // The amount credited to a destination's account whose index was reclaimed. + pub ReclaimRebate get(reclaim_rebate): required T::Balance; + // The fee required to make a transfer. + pub TransferFee get(transfer_fee): required T::Balance; + // The fee required to create an account. At least as big as ReclaimRebate. + pub CreationFee get(creation_fee): required T::Balance; + + // The next free enumeration set. + pub NextEnumSet get(next_enum_set): required T::AccountIndex; + // The enumeration sets. + pub EnumSet get(enum_set): default map [ T::AccountIndex => Vec ]; + + // The "free" balance of a given account. + // + // This is the only balance that matters in terms of most operations on tokens. It is + // alone used to determine the balance when in the contract execution environment. When this + // balance falls below the value of `ExistentialDeposit`, then the "current account" is + // deleted: specifically `FreeBalance`. Furthermore, `OnFreeBalanceZero` callback + // is invoked, giving a chance to external modules to cleanup data associated with + // the deleted account. + // + // `system::AccountNonce` is also deleted if `ReservedBalance` is also zero (it also gets + // collapsed to zero if it ever becomes less than `ExistentialDeposit`. + pub FreeBalance get(free_balance): default map [ T::AccountId => T::Balance ]; + + // The amount of the balance of a given account that is exterally reserved; this can still get + // slashed, but gets slashed last of all. + // + // This balance is a "reserve" balance that other subsystems use in order to set aside tokens + // that are still "owned" by the account holder, but which are unspendable. (This is different + // and wholly unrelated to the `Bondage` system used in the staking module.) + // + // When this balance falls below the value of `ExistentialDeposit`, then this "reserve account" + // is deleted: specifically, `ReservedBalance`. + // + // `system::AccountNonce` is also deleted if `FreeBalance` is also zero (it also gets + // collapsed to zero if it ever becomes less than `ExistentialDeposit`. + pub ReservedBalance get(reserved_balance): default map [ T::AccountId => T::Balance ]; + + + // Payment stuff. + + // The fee to be paid for making a transaction; the base. + pub TransactionBaseFee get(transaction_base_fee): required T::Balance; + // The fee to be paid for making a transaction; the per-byte portion. + pub TransactionByteFee get(transaction_byte_fee): required T::Balance; + } +} + +/// Whatever happened about the hint given when creating the new account. +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] +#[derive(Encode, Decode, PartialEq, Eq, Clone, Copy)] +pub enum NewAccountOutcome { + NoHint, + GoodHint, + BadHint, +} + +/// Outcome of a balance update. +pub enum UpdateBalanceOutcome { + /// Account balance was simply updated. + Updated, + /// The update has led to killing of the account. + AccountKilled, +} + +impl Module { + + // PUBLIC IMMUTABLES + + /// The combined balance of `who`. + pub fn total_balance(who: &T::AccountId) -> T::Balance { + Self::free_balance(who) + Self::reserved_balance(who) + } + + /// Some result as `slash(who, value)` (but without the side-effects) assuming there are no + /// balance changes in the meantime and only the reserved balance is not taken into account. + pub fn can_slash(who: &T::AccountId, value: T::Balance) -> bool { + Self::free_balance(who) >= value + } + + /// Same result as `reserve(who, value)` (but without the side-effects) assuming there + /// are no balance changes in the meantime. + pub fn can_reserve(who: &T::AccountId, value: T::Balance) -> bool { + if T::EnsureAccountLiquid::ensure_account_liquid(who).is_ok() { + Self::free_balance(who) >= value + } else { + false + } + } + + /// Lookup an T::AccountIndex to get an Id, if there's one there. + pub fn lookup_index(index: T::AccountIndex) -> Option { + let enum_set_size = Self::enum_set_size(); + let set = Self::enum_set(index / enum_set_size); + let i: usize = (index % enum_set_size).as_(); + set.get(i).map(|x| x.clone()) + } + + /// `true` if the account `index` is ready for reclaim. + pub fn can_reclaim(try_index: T::AccountIndex) -> bool { + let enum_set_size = Self::enum_set_size(); + let try_set = Self::enum_set(try_index / enum_set_size); + let i = (try_index % enum_set_size).as_(); + i < try_set.len() && Self::total_balance(&try_set[i]).is_zero() + } + + /// Lookup an address to get an Id, if there's one there. + pub fn lookup_address(a: address::Address) -> Option { + match a { + address::Address::Id(i) => Some(i), + address::Address::Index(i) => Self::lookup_index(i), + } + } + + // PUBLIC DISPATCH + + /// Transfer some liquid free balance to another staker. + pub fn transfer(aux: &T::PublicAux, dest: Address, value: T::Balance) -> Result { + let dest = Self::lookup(dest)?; + + let transactor = aux.ref_into(); + let from_balance = Self::free_balance(transactor); + let would_create = from_balance.is_zero(); + let fee = if would_create { Self::creation_fee() } else { Self::transfer_fee() }; + let liability = value + fee; + + 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)?; + + let to_balance = Self::free_balance(&dest); + // 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); + } + + Ok(()) + } + + // PRIV DISPATCH + + /// Deposit one of this module's events. + fn deposit_event(event: Event) { + >::deposit_event(::Event::from(event).into()); + } + + /// Set the balances of a given account. + fn set_balance(who: Address, free: T::Balance, reserved: T::Balance) -> Result { + let who = Self::lookup(who)?; + Self::set_free_balance(&who, free); + Self::set_reserved_balance(&who, reserved); + Ok(()) + } + + // PUBLIC MUTABLES (DANGEROUS) + + /// Set the free balance of an account to some new value. + /// + /// Will enforce ExistentialDeposit law, anulling the account as needed. + /// In that case it will return `AccountKilled`. + pub fn set_reserved_balance(who: &T::AccountId, balance: T::Balance) -> UpdateBalanceOutcome { + if balance < Self::existential_deposit() { + >::insert(who, balance); + Self::on_reserved_too_low(who); + UpdateBalanceOutcome::AccountKilled + } else { + >::insert(who, balance); + UpdateBalanceOutcome::Updated + } + } + + /// Set the free balance of an account to some new value. Will enforce ExistentialDeposit + /// law anulling the account as needed. + /// + /// Doesn't do any preparatory work for creating a new account, so should only be used when it + /// is known that the account already exists. + /// + /// Returns if the account was successfully updated or update has led to killing of the account. + pub fn set_free_balance(who: &T::AccountId, balance: T::Balance) -> UpdateBalanceOutcome { + // Commented out for no - but consider it instructive. + // assert!(!Self::total_balance(who).is_zero()); + if balance < Self::existential_deposit() { + >::insert(who, balance); + Self::on_free_too_low(who); + UpdateBalanceOutcome::AccountKilled + } else { + >::insert(who, balance); + UpdateBalanceOutcome::Updated + } + } + + /// Set the free balance on an account to some new value. + /// + /// Same as [`set_free_balance`], but will create a new account. + /// + /// Returns if the account was successfully updated or update has led to killing of the account. + /// + /// [`set_free_balance`]: #method.set_free_balance + pub fn set_free_balance_creating(who: &T::AccountId, balance: T::Balance) -> UpdateBalanceOutcome { + let ed = >::existential_deposit(); + // If the balance is too low, then the account is reaped. + // NOTE: There are two balances for every account: `reserved_balance` and + // `free_balance`. This contract subsystem only cares about the latter: whenever + // the term "balance" is used *here* it should be assumed to mean "free balance" + // in the rest of the module. + // Free balance can never be less than ED. If that happens, it gets reduced to zero + // and the account information relevant to this subsystem is deleted (i.e. the + // account is reaped). + // NOTE: This is orthogonal to the `Bondage` value that an account has, a high + // value of which makes even the `free_balance` unspendable. + // TODO: enforce this for the other balance-altering functions. + if balance < ed { + Self::set_free_balance(who, balance); + UpdateBalanceOutcome::AccountKilled + } else { + if !>::exists(who) { + let outcome = Self::new_account(&who, balance); + let credit = match outcome { + NewAccountOutcome::GoodHint => balance + >::reclaim_rebate(), + _ => balance, + }; + Self::set_free_balance(who, credit); + Self::increase_total_stake_by(credit - balance); + } else { + Self::set_free_balance(who, balance); + } + + UpdateBalanceOutcome::Updated + } + } + + /// Deducts up to `value` from the combined balance of `who`, preferring to deduct from the + /// free balance. This function cannot fail. + /// + /// As much funds up to `value` will be deducted as possible. If this is less than `value`, + /// then `Some(remaining)` will be returned. Full completion is given by `None`. + pub fn slash(who: &T::AccountId, value: T::Balance) -> Option { + let free_balance = Self::free_balance(who); + let free_slash = cmp::min(free_balance, value); + Self::set_free_balance(who, free_balance - free_slash); + Self::decrease_total_stake_by(free_slash); + if free_slash < value { + Self::slash_reserved(who, value - free_slash) + } else { + None + } + } + + /// Adds up to `value` to the free balance of `who`. + /// + /// If `who` doesn't exist, nothing is done and an Err returned. + pub fn reward(who: &T::AccountId, value: T::Balance) -> Result { + if Self::total_balance(who).is_zero() { + return Err("beneficiary account must pre-exist"); + } + Self::set_free_balance(who, Self::free_balance(who) + value); + Self::increase_total_stake_by(value); + Ok(()) + } + + /// Moves `value` from balance to reserved balance. + /// + /// If the free balance is lower than `value`, then no funds will be moved and an `Err` will + /// be returned to notify of this. This is different behaviour to `unreserve`. + pub fn reserve(who: &T::AccountId, value: T::Balance) -> Result { + let b = Self::free_balance(who); + if b < value { + return Err("not enough free funds") + } + T::EnsureAccountLiquid::ensure_account_liquid(who)?; + Self::set_reserved_balance(who, Self::reserved_balance(who) + value); + Self::set_free_balance(who, b - value); + Ok(()) + } + + /// Moves up to `value` from reserved balance to balance. This function cannot fail. + /// + /// As much funds up to `value` will be deducted as possible. If this is less than `value`, + /// then `Some(remaining)` will be returned. Full completion is given by `None`. + /// NOTE: This is different to `reserve`. + pub fn unreserve(who: &T::AccountId, value: T::Balance) -> Option { + let b = Self::reserved_balance(who); + let actual = cmp::min(b, value); + Self::set_free_balance(who, Self::free_balance(who) + actual); + Self::set_reserved_balance(who, b - actual); + if actual == value { + None + } else { + Some(value - actual) + } + } + + /// Deducts up to `value` from reserved balance of `who`. This function cannot fail. + /// + /// As much funds up to `value` will be deducted as possible. If this is less than `value`, + /// then `Some(remaining)` will be returned. Full completion is given by `None`. + pub fn slash_reserved(who: &T::AccountId, value: T::Balance) -> Option { + let b = Self::reserved_balance(who); + let slash = cmp::min(b, value); + Self::set_reserved_balance(who, b - slash); + Self::decrease_total_stake_by(slash); + if value == slash { + None + } else { + Some(value - slash) + } + } + + /// Moves up to `value` from reserved balance of account `slashed` to free balance of account + /// `beneficiary`. `beneficiary` must exist for this to succeed. If it does not, `Err` will be + /// returned. + /// + /// As much funds up to `value` will be moved as possible. If this is less than `value`, then + /// `Ok(Some(remaining))` will be returned. Full completion is given by `Ok(None)`. + pub fn repatriate_reserved( + slashed: &T::AccountId, + beneficiary: &T::AccountId, + value: T::Balance + ) -> result::Result, &'static str> { + if Self::total_balance(beneficiary).is_zero() { + return Err("beneficiary account must pre-exist"); + } + let b = Self::reserved_balance(slashed); + let slash = cmp::min(b, value); + Self::set_free_balance(beneficiary, Self::free_balance(beneficiary) + slash); + Self::set_reserved_balance(slashed, b - slash); + if value == slash { + Ok(None) + } else { + Ok(Some(value - slash)) + } + } + + fn enum_set_size() -> T::AccountIndex { + T::AccountIndex::sa(ENUM_SET_SIZE) + } + + /// Register a new account (with existential balance). + fn new_account(who: &T::AccountId, balance: T::Balance) -> NewAccountOutcome { + let enum_set_size = Self::enum_set_size(); + let next_set_index = Self::next_enum_set(); + let reclaim_index_magic = T::AccountIndex::sa(RECLAIM_INDEX_MAGIC); + let reclaim_index_modulus = T::AccountIndex::sa(256usize); + let quantization = T::AccountIndex::sa(256usize); + + // A little easter-egg for reclaiming dead indexes.. + let ret = { + // we quantise the number of accounts so it stays constant over a reasonable + // period of time. + let quantized_account_count: T::AccountIndex = (next_set_index * enum_set_size / quantization + One::one()) * quantization; + // then modify the starting balance to be modulo this to allow it to potentially + // identify an account index for reuse. + let maybe_try_index = balance % >::sa(quantized_account_count * reclaim_index_modulus); + let maybe_try_index = As::::as_(maybe_try_index); + + // this identifier must end with magic byte 0x69 to trigger this check (a minor + // optimisation to ensure we don't check most unintended account creations). + if maybe_try_index % reclaim_index_modulus == reclaim_index_magic { + // reuse is probably intended. first, remove magic byte. + let try_index = maybe_try_index / reclaim_index_modulus; + + // then check to see if this balance identifies a dead account index. + let set_index = try_index / enum_set_size; + let mut try_set = Self::enum_set(set_index); + let item_index = (try_index % enum_set_size).as_(); + if item_index < try_set.len() { + if Self::total_balance(&try_set[item_index]).is_zero() { + // yup - this index refers to a dead account. can be reused. + try_set[item_index] = who.clone(); + >::insert(set_index, try_set); + + Self::deposit_event(RawEvent::NewAccount(who.clone(), try_index, NewAccountOutcome::GoodHint)); + + return NewAccountOutcome::GoodHint + } + } + NewAccountOutcome::BadHint + } else { + NewAccountOutcome::NoHint + } + }; + + // insert normally as a back up + let mut set_index = next_set_index; + // defensive only: this loop should never iterate since we keep NextEnumSet up to date later. + let mut set = loop { + let set = Self::enum_set(set_index); + if set.len() < ENUM_SET_SIZE { + break set; + } + set_index += One::one(); + }; + + let index = T::AccountIndex::sa(set_index.as_() * ENUM_SET_SIZE + set.len()); + + // update set. + set.push(who.clone()); + + // keep NextEnumSet up to date + if set.len() == ENUM_SET_SIZE { + >::put(set_index + One::one()); + } + + // write set. + >::insert(set_index, set); + + Self::deposit_event(RawEvent::NewAccount(who.clone(), index, ret)); + + ret + } + + fn reap_account(who: &T::AccountId) { + >::remove(who); + Self::deposit_event(RawEvent::ReapedAccount(who.clone())); + } + + /// Kill an account's free portion. + fn on_free_too_low(who: &T::AccountId) { + Self::decrease_total_stake_by(Self::free_balance(who)); + >::remove(who); + + T::OnFreeBalanceZero::on_free_balance_zero(who); + + if Self::reserved_balance(who).is_zero() { + Self::reap_account(who); + } + } + + /// Kill an account's reserved portion. + fn on_reserved_too_low(who: &T::AccountId) { + Self::decrease_total_stake_by(Self::reserved_balance(who)); + >::remove(who); + + if Self::free_balance(who).is_zero() { + Self::reap_account(who); + } + } + + /// Increase TotalIssuance by Value. + pub fn increase_total_stake_by(value: T::Balance) { + if let Some(v) = >::total_stake().checked_add(&value) { + >::put(v); + } + } + /// Decrease TotalIssuance by Value. + pub fn decrease_total_stake_by(value: T::Balance) { + if let Some(v) = >::total_stake().checked_sub(&value) { + >::put(v); + } + } +} + +impl Executable for Module { + fn execute() { + } +} + +impl AuxLookup for Module { + type Source = address::Address; + type Target = T::AccountId; + fn lookup(a: Self::Source) -> result::Result { + match a { + address::Address::Id(i) => Ok(i), + address::Address::Index(i) => >::lookup_index(i).ok_or("invalid account index"), + } + } +} + +impl MakePayment for Module { + fn make_payment(transactor: &T::AccountId, encoded_len: usize) -> Result { + let b = Self::free_balance(transactor); + let transaction_fee = Self::transaction_base_fee() + Self::transaction_byte_fee() * >::sa(encoded_len as u64); + if b < transaction_fee + Self::existential_deposit() { + return Err("not enough funds for transaction fee"); + } + Self::set_free_balance(transactor, b - transaction_fee); + Self::decrease_total_stake_by(transaction_fee); + Ok(()) + } +} diff --git a/substrate/substrate/runtime/balances/src/mock.rs b/substrate/substrate/runtime/balances/src/mock.rs new file mode 100644 index 0000000000..b7066a704f --- /dev/null +++ b/substrate/substrate/runtime/balances/src/mock.rs @@ -0,0 +1,77 @@ +// 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 . + +//! Test utilities + +#![cfg(test)] + +use primitives::BuildStorage; +use primitives::traits::HasPublicAux; +use primitives::testing::{Digest, Header}; +use substrate_primitives::{H256, KeccakHasher}; +use runtime_io; +use {GenesisConfig, Module, Trait, system}; + +// Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. +#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)] +pub struct Test; +impl HasPublicAux for Test { + type PublicAux = u64; +} +impl system::Trait for Test { + type PublicAux = ::PublicAux; + type Index = u64; + type BlockNumber = u64; + type Hash = H256; + type Hashing = ::primitives::traits::BlakeTwo256; + type Digest = Digest; + type AccountId = u64; + type Header = Header; + type Event = (); +} +impl Trait for Test { + type Balance = u64; + type AccountIndex = u64; + type OnFreeBalanceZero = (); + type EnsureAccountLiquid = (); + type Event = (); +} + +pub fn new_test_ext(ext_deposit: u64, monied: bool) -> runtime_io::TestExternalities { + let mut t = system::GenesisConfig::::default().build_storage().unwrap(); + let balance_factor = if ext_deposit > 0 { + 256 + } else { + 1 + }; + t.extend(GenesisConfig::{ + balances: if monied { + vec![(1, 10 * balance_factor), (2, 20 * balance_factor), (3, 30 * balance_factor), (4, 40 * balance_factor)] + } else { + vec![(10, balance_factor), (20, balance_factor)] + }, + transaction_base_fee: 0, + transaction_byte_fee: 0, + existential_deposit: ext_deposit, + transfer_fee: 0, + creation_fee: 0, + reclaim_rebate: 0, + }.build_storage().unwrap()); + t.into() +} + +pub type System = system::Module; +pub type Balances = Module; diff --git a/substrate/substrate/runtime/balances/src/tests.rs b/substrate/substrate/runtime/balances/src/tests.rs new file mode 100644 index 0000000000..7f3a740a93 --- /dev/null +++ b/substrate/substrate/runtime/balances/src/tests.rs @@ -0,0 +1,324 @@ +// Copyright 2017 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Tests for the module. + +#![cfg(test)] + +use super::*; +use runtime_io::with_externalities; +use mock::{Balances, System, Test, new_test_ext}; + +#[test] +fn reward_should_work() { + with_externalities(&mut new_test_ext(0, true), || { + assert_eq!(Balances::total_balance(&1), 10); + assert_ok!(Balances::reward(&1, 10)); + assert_eq!(Balances::total_balance(&1), 20); + assert_eq!(>::get(), 110); + }); +} + +#[test] +fn indexing_lookup_should_work() { + with_externalities(&mut new_test_ext(10, true), || { + assert_eq!(Balances::lookup_index(0), Some(1)); + assert_eq!(Balances::lookup_index(1), Some(2)); + assert_eq!(Balances::lookup_index(2), Some(3)); + assert_eq!(Balances::lookup_index(3), Some(4)); + assert_eq!(Balances::lookup_index(4), None); + }); +} + +#[test] +fn default_indexing_on_new_accounts_should_work() { + with_externalities(&mut new_test_ext(10, true), || { + assert_eq!(Balances::lookup_index(4), None); + assert_ok!(Balances::transfer(&1, 5.into(), 10)); + assert_eq!(Balances::lookup_index(4), Some(5)); + }); +} + +#[test] +fn dust_account_removal_should_work() { + with_externalities(&mut new_test_ext(256 * 10, true), || { + System::inc_account_nonce(&2); + assert_eq!(System::account_nonce(&2), 1); + assert_eq!(Balances::total_balance(&2), 256 * 20); + + assert_ok!(Balances::transfer(&2, 5.into(), 256 * 10 + 1)); // index 1 (account 2) becomes zombie + assert_eq!(Balances::total_balance(&2), 0); + assert_eq!(Balances::total_balance(&5), 256 * 10 + 1); + assert_eq!(System::account_nonce(&2), 0); + }); +} + +#[test] +fn reclaim_indexing_on_new_accounts_should_work() { + with_externalities(&mut new_test_ext(256 * 1, true), || { + assert_eq!(Balances::lookup_index(1), Some(2)); + assert_eq!(Balances::lookup_index(4), None); + assert_eq!(Balances::total_balance(&2), 256 * 20); + + assert_ok!(Balances::transfer(&2, 5.into(), 256 * 20)); // account 2 becomes zombie freeing index 1 for reclaim) + assert_eq!(Balances::total_balance(&2), 0); + + assert_ok!(Balances::transfer(&5, 6.into(), 256 * 1 + 0x69)); // account 6 takes index 1. + assert_eq!(Balances::total_balance(&6), 256 * 1 + 0x69); + assert_eq!(Balances::lookup_index(1), Some(6)); + }); +} + +#[test] +fn reserved_balance_should_prevent_reclaim_count() { + with_externalities(&mut new_test_ext(256 * 1, true), || { + System::inc_account_nonce(&2); + assert_eq!(Balances::lookup_index(1), Some(2)); + assert_eq!(Balances::lookup_index(4), None); + assert_eq!(Balances::total_balance(&2), 256 * 20); + + assert_ok!(Balances::reserve(&2, 256 * 19 + 1)); // account 2 becomes mostly reserved + assert_eq!(Balances::free_balance(&2), 0); // "free" account deleted." + assert_eq!(Balances::total_balance(&2), 256 * 19 + 1); // reserve still exists. + assert_eq!(System::account_nonce(&2), 1); + + assert_ok!(Balances::transfer(&4, 5.into(), 256 * 1 + 0x69)); // account 4 tries to take index 1 for account 5. + assert_eq!(Balances::total_balance(&5), 256 * 1 + 0x69); + assert_eq!(Balances::lookup_index(1), Some(2)); // but fails. + assert_eq!(System::account_nonce(&2), 1); + + assert_eq!(Balances::slash(&2, 256 * 18 + 2), None); // account 2 gets slashed + assert_eq!(Balances::total_balance(&2), 0); // "free" account deleted." + assert_eq!(System::account_nonce(&2), 0); + + assert_ok!(Balances::transfer(&4, 6.into(), 256 * 1 + 0x69)); // account 4 tries to take index 1 again for account 6. + assert_eq!(Balances::total_balance(&6), 256 * 1 + 0x69); + assert_eq!(Balances::lookup_index(1), Some(6)); // and succeeds. + }); +} + +#[test] +fn balance_works() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 42); + assert_eq!(Balances::free_balance(&1), 42); + assert_eq!(Balances::reserved_balance(&1), 0); + assert_eq!(Balances::total_balance(&1), 42); + assert_eq!(Balances::free_balance(&2), 0); + assert_eq!(Balances::reserved_balance(&2), 0); + assert_eq!(Balances::total_balance(&2), 0); + }); +} + +#[test] +fn balance_transfer_works() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 111); + Balances::increase_total_stake_by(111); + assert_ok!(Balances::transfer(&1, 2.into(), 69)); + assert_eq!(Balances::total_balance(&1), 42); + assert_eq!(Balances::total_balance(&2), 69); + }); +} + +#[test] +fn reserving_balance_should_work() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 111); + + assert_eq!(Balances::total_balance(&1), 111); + assert_eq!(Balances::free_balance(&1), 111); + assert_eq!(Balances::reserved_balance(&1), 0); + + assert_ok!(Balances::reserve(&1, 69)); + + assert_eq!(Balances::total_balance(&1), 111); + assert_eq!(Balances::free_balance(&1), 42); + assert_eq!(Balances::reserved_balance(&1), 69); + }); +} + +#[test] +fn balance_transfer_when_reserved_should_not_work() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 111); + assert_ok!(Balances::reserve(&1, 69)); + assert_noop!(Balances::transfer(&1, 2.into(), 69), "balance too low to send value"); + }); +} + +#[test] +fn deducting_balance_should_work() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 111); + assert_ok!(Balances::reserve(&1, 69)); + assert_eq!(Balances::free_balance(&1), 42); + }); +} + +#[test] +fn refunding_balance_should_work() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 42); + Balances::set_reserved_balance(&1, 69); + Balances::unreserve(&1, 69); + assert_eq!(Balances::free_balance(&1), 111); + assert_eq!(Balances::reserved_balance(&1), 0); + }); +} + +#[test] +fn slashing_balance_should_work() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 111); + Balances::increase_total_stake_by(111); + assert_ok!(Balances::reserve(&1, 69)); + assert!(Balances::slash(&1, 69).is_none()); + assert_eq!(Balances::free_balance(&1), 0); + assert_eq!(Balances::reserved_balance(&1), 42); + assert_eq!(>::get(), 44); + }); +} + +#[test] +fn slashing_incomplete_balance_should_work() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 42); + Balances::increase_total_stake_by(42); + assert_ok!(Balances::reserve(&1, 21)); + assert!(Balances::slash(&1, 69).is_some()); + assert_eq!(Balances::free_balance(&1), 0); + assert_eq!(Balances::reserved_balance(&1), 0); + assert_eq!(>::get(), 2); + }); +} + +#[test] +fn unreserving_balance_should_work() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 111); + assert_ok!(Balances::reserve(&1, 111)); + Balances::unreserve(&1, 42); + assert_eq!(Balances::reserved_balance(&1), 69); + assert_eq!(Balances::free_balance(&1), 42); + }); +} + +#[test] +fn slashing_reserved_balance_should_work() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 111); + Balances::increase_total_stake_by(111); + assert_ok!(Balances::reserve(&1, 111)); + assert!(Balances::slash_reserved(&1, 42).is_none()); + assert_eq!(Balances::reserved_balance(&1), 69); + assert_eq!(Balances::free_balance(&1), 0); + assert_eq!(>::get(), 71); + }); +} + +#[test] +fn slashing_incomplete_reserved_balance_should_work() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 111); + Balances::increase_total_stake_by(111); + assert_ok!(Balances::reserve(&1, 42)); + assert!(Balances::slash_reserved(&1, 69).is_some()); + assert_eq!(Balances::free_balance(&1), 69); + assert_eq!(Balances::reserved_balance(&1), 0); + assert_eq!(>::get(), 71); + }); +} + +#[test] +fn transferring_reserved_balance_should_work() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 110); + Balances::set_free_balance(&2, 1); + assert_ok!(Balances::reserve(&1, 110)); + assert_ok!(Balances::repatriate_reserved(&1, &2, 41), None); + assert_eq!(Balances::reserved_balance(&1), 69); + assert_eq!(Balances::free_balance(&1), 0); + assert_eq!(Balances::reserved_balance(&2), 0); + assert_eq!(Balances::free_balance(&2), 42); + }); +} + +#[test] +fn transferring_reserved_balance_to_nonexistent_should_fail() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 111); + assert_ok!(Balances::reserve(&1, 111)); + assert_noop!(Balances::repatriate_reserved(&1, &2, 42), "beneficiary account must pre-exist"); + }); +} + +#[test] +fn transferring_incomplete_reserved_balance_should_work() { + with_externalities(&mut new_test_ext(0, false), || { + Balances::set_free_balance(&1, 110); + Balances::set_free_balance(&2, 1); + assert_ok!(Balances::reserve(&1, 41)); + assert!(Balances::repatriate_reserved(&1, &2, 69).unwrap().is_some()); + assert_eq!(Balances::reserved_balance(&1), 0); + assert_eq!(Balances::free_balance(&1), 69); + assert_eq!(Balances::reserved_balance(&2), 0); + assert_eq!(Balances::free_balance(&2), 42); + }); +} + +#[test] +fn transferring_too_high_value_should_not_panic() { + with_externalities(&mut new_test_ext(0, false), || { + >::insert(1, u64::max_value()); + >::insert(2, 1); + + assert_err!( + Balances::transfer(&1, 2.into(), u64::max_value()), + "destination balance too high to receive value" + ); + + assert_eq!(Balances::free_balance(&1), u64::max_value()); + assert_eq!(Balances::free_balance(&2), 1); + }); +} + +#[test] +fn account_removal_on_free_too_low() { + with_externalities(&mut new_test_ext(100, false), || { + // Setup two accounts with free balance above the exsistential threshold. + { + Balances::set_free_balance(&1, 110); + Balances::increase_total_stake_by(110); + + Balances::set_free_balance(&2, 110); + Balances::increase_total_stake_by(110); + + assert_eq!(>::get(), 732); + } + + // Transfer funds from account 1 of such amount that after this transfer + // the balance of account 1 will be below the exsistential threshold. + // This should lead to the removal of all balance of this account. + assert_ok!(Balances::transfer(&1, 2.into(), 20)); + + // Verify free balance removal of account 1. + assert_eq!(Balances::free_balance(&1), 0); + + // Verify that TotalIssuance tracks balance removal when free balance is too low. + assert_eq!(>::get(), 642); + }); +} diff --git a/substrate/substrate/runtime/consensus/src/lib.rs b/substrate/substrate/runtime/consensus/src/lib.rs index 3b9e2554b4..df6d034c8f 100644 --- a/substrate/substrate/runtime/consensus/src/lib.rs +++ b/substrate/substrate/runtime/consensus/src/lib.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Conensus module for runtime; manages the authority set ready for the native code. @@ -42,7 +42,7 @@ use rstd::prelude::*; use runtime_support::{storage, Parameter}; use runtime_support::dispatch::Result; use runtime_support::storage::unhashed::StorageVec; -use primitives::traits::{RefInto, MaybeSerializeDebug, MaybeEmpty}; +use primitives::traits::{MaybeSerializeDebug, MaybeEmpty}; use primitives::bft::MisbehaviorReport; #[cfg(any(feature = "std", test))] @@ -63,9 +63,20 @@ pub const CODE: &'static [u8] = b":code"; pub type KeyValue = (Vec, Vec); +pub trait OnOfflineValidator { + fn on_offline_validator(validator_index: usize); +} + +impl OnOfflineValidator for () { + fn on_offline_validator(_validator_index: usize) {} +} + pub trait Trait: system::Trait { - type PublicAux: RefInto + MaybeEmpty; // MaybeEmpty is for Timestamp's usage. + /// The allowed extrinsic position for `note_offline` inherent. + const NOTE_OFFLINE_POSITION: u32; + type SessionKey: Parameter + Default + MaybeSerializeDebug; + type OnOfflineValidator: OnOfflineValidator; } decl_module! { @@ -74,7 +85,8 @@ decl_module! { #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub enum Call where aux: T::PublicAux { fn report_misbehavior(aux, report: MisbehaviorReport) -> Result = 0; - fn remark(aux, remark: Vec) -> Result = 1; + fn note_offline(aux, offline_val_indices: Vec) -> Result = 1; + fn remark(aux, remark: Vec) -> Result = 2; } #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] @@ -110,6 +122,24 @@ impl Module { 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(aux: &T::PublicAux, offline_val_indices: Vec) -> Result { + assert!(aux.is_empty()); + 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(_aux: &T::PublicAux, _remark: Vec) -> Result { Ok(()) diff --git a/substrate/substrate/runtime/contract/Cargo.toml b/substrate/substrate/runtime/contract/Cargo.toml index 0658425c06..f72c2b490e 100644 --- a/substrate/substrate/runtime/contract/Cargo.toml +++ b/substrate/substrate/runtime/contract/Cargo.toml @@ -8,16 +8,13 @@ serde = { version = "1.0", default_features = false } serde_derive = { version = "1.0", optional = true } substrate-codec = { path = "../../codec", default_features = false } substrate-primitives = { path = "../../primitives" } -substrate-runtime-consensus = { path = "../../runtime/consensus", default_features = false } substrate-runtime-primitives = { path = "../../runtime/primitives" } substrate-runtime-io = { path = "../../runtime-io", default_features = false } substrate-runtime-std = { path = "../../runtime-std", default_features = false } substrate-runtime-sandbox = { path = "../../runtime-sandbox", default_features = false } -substrate-runtime-staking = { path = "../../runtime/staking", default_features = false } substrate-runtime-support = { path = "../../runtime-support", default_features = false } substrate-runtime-system = { path = "../../runtime/system", default_features = false } -substrate-runtime-session = { path = "../session", default_features = false } -substrate-runtime-timestamp = { path = "../timestamp", default_features = false } +substrate-runtime-balances = { path = "../balances", default_features = false } parity-wasm = { version = "0.31", default_features = false } pwasm-utils = { version = "0.3", default_features = false } @@ -32,15 +29,12 @@ std = [ "serde/std", "substrate-codec/std", "substrate-runtime-primitives/std", - "substrate-runtime-consensus/std", "substrate-runtime-io/std", "substrate-runtime-std/std", + "substrate-runtime-balances/std", "substrate-runtime-sandbox/std", - "substrate-runtime-staking/std", "substrate-runtime-support/std", "substrate-runtime-system/std", - "substrate-runtime-timestamp/std", - "substrate-runtime-session/std", "parity-wasm/std", "pwasm-utils/std", ] diff --git a/substrate/substrate/runtime/contract/src/account_db.rs b/substrate/substrate/runtime/contract/src/account_db.rs index e5ad0e2b88..d7ff094003 100644 --- a/substrate/substrate/runtime/contract/src/account_db.rs +++ b/substrate/substrate/runtime/contract/src/account_db.rs @@ -22,8 +22,7 @@ use rstd::cell::RefCell; use rstd::collections::btree_map::{BTreeMap, Entry}; use rstd::prelude::*; use runtime_support::StorageMap; -use staking; -use system; +use {balances, system}; pub struct ChangeEntry { balance: Option, @@ -61,13 +60,13 @@ impl AccountDb for DirectAccountDb { >::get(account) } fn get_balance(&self, account: &T::AccountId) -> T::Balance { - staking::Module::::free_balance(account) + balances::Module::::free_balance(account) } fn commit(&mut self, s: ChangeSet) { for (address, changed) in s.into_iter() { if let Some(balance) = changed.balance { - if let staking::UpdateBalanceOutcome::AccountKilled = - staking::Module::::set_free_balance_creating(&address, balance) + if let balances::UpdateBalanceOutcome::AccountKilled = + balances::Module::::set_free_balance_creating(&address, balance) { // Account killed. This will ultimately lead to calling `OnFreeBalanceZero` callback // which will make removal of CodeOf and StorageOf for this account. diff --git a/substrate/substrate/runtime/contract/src/double_map.rs b/substrate/substrate/runtime/contract/src/double_map.rs index 505fe9e6a2..6867d2a5c6 100644 --- a/substrate/substrate/runtime/contract/src/double_map.rs +++ b/substrate/substrate/runtime/contract/src/double_map.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! An implementation of double map backed by storage. //! diff --git a/substrate/substrate/runtime/contract/src/exec.rs b/substrate/substrate/runtime/contract/src/exec.rs index a62e2ce97f..4779e959c1 100644 --- a/substrate/substrate/runtime/contract/src/exec.rs +++ b/substrate/substrate/runtime/contract/src/exec.rs @@ -22,8 +22,7 @@ use vm; use rstd::prelude::*; use runtime_primitives::traits::{Zero, CheckedAdd, CheckedSub}; use runtime_support::{StorageMap, StorageValue}; -use staking; -use system; +use balances::{self, EnsureAccountLiquid}; pub struct CreateReceipt { pub address: T::AccountId, @@ -185,9 +184,9 @@ fn transfer( >::contract_fee() } else { if would_create { - >::creation_fee() + >::creation_fee() } else { - >::transfer_fee() + >::transfer_fee() } }; @@ -200,12 +199,10 @@ fn transfer( Some(b) => b, None => return Err("balance too low to send value"), }; - if would_create && value < >::existential_deposit() { + if would_create && value < >::existential_deposit() { return Err("value too low to create account"); } - if >::bondage(transactor) > >::block_number() { - return Err("bondage too high to send value"); - } + ::EnsureAccountLiquid::ensure_account_liquid(transactor)?; let to_balance = overlay.get_balance(dest); let new_to_balance = match to_balance.checked_add(&value) { diff --git a/substrate/substrate/runtime/contract/src/gas.rs b/substrate/substrate/runtime/contract/src/gas.rs index b405e31d7f..9d1978f7a5 100644 --- a/substrate/substrate/runtime/contract/src/gas.rs +++ b/substrate/substrate/runtime/contract/src/gas.rs @@ -17,7 +17,7 @@ use {Trait, Module, GasSpent}; use runtime_primitives::traits::{As, CheckedMul, CheckedSub, Zero}; use runtime_support::StorageValue; -use staking; +use balances; #[must_use] #[derive(Debug, PartialEq, Eq)] @@ -146,15 +146,15 @@ pub fn buy_gas( // Buy the specified amount of gas. let gas_price = >::gas_price(); - let b = >::free_balance(transactor); + let b = >::free_balance(transactor); let cost = >::as_(gas_limit.clone()) .checked_mul(&gas_price) .ok_or("overflow multiplying gas limit by price")?; - if b < cost + >::existential_deposit() { + if b < cost + >::existential_deposit() { return Err("not enough funds for transaction fee"); } - >::set_free_balance(transactor, b - cost); - >::decrease_total_stake_by(cost); + >::set_free_balance(transactor, b - cost); + >::decrease_total_stake_by(cost); Ok(GasMeter { limit: gas_limit, gas_left: gas_limit, @@ -171,8 +171,8 @@ pub fn refund_unused_gas(transactor: &T::AccountId, gas_meter: GasMete >::put(gas_spent); // Refund gas left by the price it was bought. - let b = >::free_balance(transactor); + let b = >::free_balance(transactor); let refund = >::as_(gas_meter.gas_left) * gas_meter.gas_price; - >::set_free_balance(transactor, b + refund); - >::increase_total_stake_by(refund); + >::set_free_balance(transactor, b + refund); + >::increase_total_stake_by(refund); } diff --git a/substrate/substrate/runtime/contract/src/lib.rs b/substrate/substrate/runtime/contract/src/lib.rs index 7479686ddc..9f77b07fb8 100644 --- a/substrate/substrate/runtime/contract/src/lib.rs +++ b/substrate/substrate/runtime/contract/src/lib.rs @@ -70,15 +70,9 @@ extern crate substrate_runtime_sandbox as sandbox; #[cfg_attr(feature = "std", macro_use)] extern crate substrate_runtime_std as rstd; -extern crate substrate_runtime_consensus as consensus; -extern crate substrate_runtime_staking as staking; +extern crate substrate_runtime_balances as balances; extern crate substrate_runtime_system as system; -#[cfg(test)] -extern crate substrate_runtime_timestamp as timestamp; -#[cfg(test)] -extern crate substrate_runtime_session as session; - #[macro_use] extern crate substrate_runtime_support as runtime_support; @@ -112,7 +106,7 @@ use runtime_primitives::traits::{As, RefInto, SimpleArithmetic, Executable}; use runtime_support::dispatch::Result; use runtime_support::{Parameter, StorageMap, StorageValue}; -pub trait Trait: system::Trait + staking::Trait + consensus::Trait { +pub trait Trait: balances::Trait { /// Function type to get the contract address given the creator. type DetermineContractAddress: ContractAddressFor; @@ -188,7 +182,7 @@ impl double_map::StorageDoubleMap for StorageOf { impl Module { /// Make a call to a specified account, optionally transferring some balance. fn call( - aux: &::PublicAux, + aux: &::PublicAux, dest: T::AccountId, value: T::Balance, gas_limit: T::Gas, @@ -233,7 +227,7 @@ impl Module { /// 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( - aux: &::PublicAux, + aux: &::PublicAux, endowment: T::Balance, gas_limit: T::Gas, ctor_code: Vec, @@ -269,7 +263,7 @@ impl Module { } } -impl staking::OnFreeBalanceZero for Module { +impl balances::OnFreeBalanceZero for Module { fn on_free_balance_zero(who: &T::AccountId) { >::remove(who); >::remove_prefix(who.clone()); diff --git a/substrate/substrate/runtime/contract/src/tests.rs b/substrate/substrate/runtime/contract/src/tests.rs index 5f1014243a..d12b137d41 100644 --- a/substrate/substrate/runtime/contract/src/tests.rs +++ b/substrate/substrate/runtime/contract/src/tests.rs @@ -17,13 +17,13 @@ use double_map::StorageDoubleMap; use runtime_io::with_externalities; use runtime_primitives::testing::{Digest, H256, Header}; -use runtime_primitives::traits::{BlakeTwo256, HasPublicAux, Identity}; +use runtime_primitives::traits::{BlakeTwo256, HasPublicAux}; use runtime_primitives::BuildStorage; use runtime_support::StorageMap; use substrate_primitives::KeccakHasher; use wabt; use { - consensus, runtime_io, session, staking, system, timestamp, CodeOf, ContractAddressFor, + runtime_io, balances, system, CodeOf, ContractAddressFor, GenesisConfig, Module, StorageOf, Trait, }; @@ -32,11 +32,8 @@ pub struct Test; impl HasPublicAux for Test { type PublicAux = u64; } -impl consensus::Trait for Test { - type PublicAux = ::PublicAux; - type SessionKey = u64; -} impl system::Trait for Test { + type PublicAux = ::PublicAux; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -46,20 +43,11 @@ impl system::Trait for Test { type Header = Header; type Event = (); } -impl timestamp::Trait for Test { - const TIMESTAMP_SET_POSITION: u32 = 0; - type Moment = u64; -} -impl staking::Trait for Test { - const NOTE_MISSED_PROPOSAL_POSITION: u32 = 1; +impl balances::Trait for Test { type Balance = u64; type AccountIndex = u64; type OnFreeBalanceZero = Contract; - type Event = (); -} -impl session::Trait for Test { - type ConvertAccountIdToSessionKey = Identity; - type OnSessionChange = Staking; + type EnsureAccountLiquid = (); type Event = (); } impl Trait for Test { @@ -67,7 +55,7 @@ impl Trait for Test { type DetermineContractAddress = DummyContractAddressFor; } -type Staking = staking::Module; +type Balances = balances::Module; type Contract = Module; pub struct DummyContractAddressFor; @@ -109,45 +97,17 @@ impl ExtBuilder { .build_storage() .unwrap(); t.extend( - consensus::GenesisConfig:: { - code: vec![], - authorities: vec![], - }.build_storage() - .unwrap(), - ); - t.extend( - session::GenesisConfig:: { - session_length: 1, - validators: vec![10, 20], - }.build_storage() - .unwrap(), - ); - t.extend( - staking::GenesisConfig:: { - sessions_per_era: 1, - current_era: 0, + balances::GenesisConfig:: { balances: vec![], - intentions: vec![], - validator_count: 2, - minimum_validator_count: 0, - bonding_duration: 0, transaction_base_fee: 0, transaction_byte_fee: 0, existential_deposit: self.existential_deposit, transfer_fee: 0, creation_fee: 0, reclaim_rebate: 0, - early_era_slash: 0, - session_reward: 0, - offline_slash_grace: 0, }.build_storage() .unwrap(), ); - t.extend( - timestamp::GenesisConfig::::default() - .build_storage() - .unwrap(), - ); t.extend( GenesisConfig:: { contract_fee: 21, @@ -195,15 +155,15 @@ fn contract_transfer() { with_externalities(&mut ExtBuilder::default().build(), || { >::insert(1, code_transfer.to_vec()); - Staking::set_free_balance(&0, 100_000_000); - Staking::increase_total_stake_by(100_000_000); - Staking::set_free_balance(&1, 11); - Staking::increase_total_stake_by(11); + Balances::set_free_balance(&0, 100_000_000); + Balances::increase_total_stake_by(100_000_000); + Balances::set_free_balance(&1, 11); + Balances::increase_total_stake_by(11); assert_ok!(Contract::call(&0, 1, 3, 100_000, Vec::new())); assert_eq!( - Staking::free_balance(&0), + Balances::free_balance(&0), // 3 - value sent with the transaction // 2 * 6 - gas used by the contract (6) multiplied by gas price (2) // 2 * 135 - base gas fee for call (by transaction) @@ -211,11 +171,11 @@ fn contract_transfer() { 100_000_000 - 3 - (2 * 6) - (2 * 135) - (2 * 135), ); assert_eq!( - Staking::free_balance(&1), + Balances::free_balance(&1), 11 + 3 - CONTRACT_SHOULD_TRANSFER_VALUE, ); assert_eq!( - Staking::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), + Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), CONTRACT_SHOULD_TRANSFER_VALUE, ); }); @@ -230,10 +190,10 @@ fn contract_transfer_oog() { with_externalities(&mut ExtBuilder::default().build(), || { >::insert(1, code_transfer.to_vec()); - Staking::set_free_balance(&0, 100_000_000); - Staking::increase_total_stake_by(100_000_000); - Staking::set_free_balance(&1, 11); - Staking::increase_total_stake_by(11); + Balances::set_free_balance(&0, 100_000_000); + Balances::increase_total_stake_by(100_000_000); + Balances::set_free_balance(&1, 11); + Balances::increase_total_stake_by(11); assert_err!( Contract::call(&0, 1, 3, 276, Vec::new()), @@ -241,15 +201,15 @@ fn contract_transfer_oog() { ); assert_eq!( - Staking::free_balance(&0), + Balances::free_balance(&0), // 3 - value sent with the transaction // 2 * 6 - gas used by the contract (6) multiplied by gas price (2) // 2 * 135 - base gas fee for call (by transaction) // 2 * 135 - base gas fee for call (by contract) 100_000_000 - (2 * 6) - (2 * 135) - (2 * 135), ); - assert_eq!(Staking::free_balance(&1), 11); - assert_eq!(Staking::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), 0); + assert_eq!(Balances::free_balance(&1), 11); + assert_eq!(Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), 0); }); } @@ -262,10 +222,10 @@ fn contract_transfer_max_depth() { with_externalities(&mut ExtBuilder::default().build(), || { >::insert(CONTRACT_SHOULD_TRANSFER_TO, code_transfer.to_vec()); - Staking::set_free_balance(&0, 100_000_000); - Staking::increase_total_stake_by(100_000_000); - Staking::set_free_balance(&CONTRACT_SHOULD_TRANSFER_TO, 11); - Staking::increase_total_stake_by(11); + Balances::set_free_balance(&0, 100_000_000); + Balances::increase_total_stake_by(100_000_000); + Balances::set_free_balance(&CONTRACT_SHOULD_TRANSFER_TO, 11); + Balances::increase_total_stake_by(11); assert_err!( Contract::call(&0, CONTRACT_SHOULD_TRANSFER_TO, 3, 100_000, Vec::new()), @@ -273,14 +233,14 @@ fn contract_transfer_max_depth() { ); assert_eq!( - Staking::free_balance(&0), + Balances::free_balance(&0), // 3 - value sent with the transaction // 2 * 6 * 100 - gas used by the contract (6) multiplied by gas price (2) // multiplied by max depth (100). // 2 * 135 * 100 - base gas fee for call (by transaction) multiplied by max depth (100). 100_000_000 - (2 * 135 * 100) - (2 * 6 * 100), ); - assert_eq!(Staking::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), 11); + assert_eq!(Balances::free_balance(&CONTRACT_SHOULD_TRANSFER_TO), 11); }); } @@ -360,11 +320,11 @@ fn contract_create() { let code_create = wabt::wat2wasm(&code_create(&code_ctor_transfer)).unwrap(); with_externalities(&mut ExtBuilder::default().build(), || { - Staking::set_free_balance(&0, 100_000_000); - Staking::increase_total_stake_by(100_000_000); - Staking::set_free_balance(&1, 0); - Staking::set_free_balance(&9, 30); - Staking::increase_total_stake_by(30); + Balances::set_free_balance(&0, 100_000_000); + Balances::increase_total_stake_by(100_000_000); + Balances::set_free_balance(&1, 0); + Balances::set_free_balance(&9, 30); + Balances::increase_total_stake_by(30); >::insert(1, code_create.to_vec()); @@ -383,23 +343,23 @@ fn contract_create() { // ((21 / 2) * 2) - price per account creation let expected_gas_after_create = 100_000_000 - 11 - (2 * 128) - (2 * 135) - (2 * 175) - ((21 / 2) * 2); - assert_eq!(Staking::free_balance(&0), expected_gas_after_create); - assert_eq!(Staking::free_balance(&1), 8); - assert_eq!(Staking::free_balance(&derived_address), 3); + assert_eq!(Balances::free_balance(&0), expected_gas_after_create); + assert_eq!(Balances::free_balance(&1), 8); + assert_eq!(Balances::free_balance(&derived_address), 3); // Initiate transfer to the newly created contract. assert_ok!(Contract::call(&0, derived_address, 22, 100_000, Vec::new())); assert_eq!( - Staking::free_balance(&0), + Balances::free_balance(&0), // 22 - value sent with the transaction // (2 * 6) - gas used by the contract // (2 * 135) - base gas fee for call (top level) // (2 * 135) - base gas fee for call (by transfer contract) expected_gas_after_create - 22 - (2 * 6) - (2 * 135) - (2 * 135), ); - assert_eq!(Staking::free_balance(&derived_address), 22 - 3); - assert_eq!(Staking::free_balance(&9), 36); + assert_eq!(Balances::free_balance(&derived_address), 22 - 3); + assert_eq!(Balances::free_balance(&9), 36); }); } @@ -414,10 +374,10 @@ fn top_level_create() { &0, ); - Staking::set_free_balance(&0, 100_000_000); - Staking::increase_total_stake_by(100_000_000); - Staking::set_free_balance(&derived_address, 30); - Staking::increase_total_stake_by(30); + Balances::set_free_balance(&0, 100_000_000); + Balances::increase_total_stake_by(100_000_000); + Balances::set_free_balance(&derived_address, 30); + Balances::increase_total_stake_by(30); assert_ok!(Contract::create( &0, @@ -432,10 +392,10 @@ fn top_level_create() { // (3 * 175) - base gas fee for create (175) (top level) multipled by gas price (3) // ((21 / 3) * 3) - price for contract creation assert_eq!( - Staking::free_balance(&0), + Balances::free_balance(&0), 100_000_000 - 11 - (3 * 122) - (3 * 175) - ((21 / 3) * 3) ); - assert_eq!(Staking::free_balance(&derived_address), 30 + 11); + assert_eq!(Balances::free_balance(&derived_address), 30 + 11); assert_eq!(>::get(&derived_address), code_transfer); }); @@ -456,12 +416,12 @@ fn refunds_unused_gas() { with_externalities(&mut ExtBuilder::default().build(), || { >::insert(1, code_nop.to_vec()); - Staking::set_free_balance(&0, 100_000_000); - Staking::increase_total_stake_by(100_000_000); + Balances::set_free_balance(&0, 100_000_000); + Balances::increase_total_stake_by(100_000_000); assert_ok!(Contract::call(&0, 1, 0, 100_000, Vec::new())); - assert_eq!(Staking::free_balance(&0), 100_000_000 - 4 - (2 * 135)); + assert_eq!(Balances::free_balance(&0), 100_000_000 - 4 - (2 * 135)); }); } @@ -470,12 +430,12 @@ fn call_with_zero_value() { with_externalities(&mut ExtBuilder::default().build(), || { >::insert(1, vec![]); - Staking::set_free_balance(&0, 100_000_000); - Staking::increase_total_stake_by(100_000_000); + Balances::set_free_balance(&0, 100_000_000); + Balances::increase_total_stake_by(100_000_000); assert_ok!(Contract::call(&0, 1, 0, 100_000, Vec::new())); - assert_eq!(Staking::free_balance(&0), 100_000_000 - (2 * 135)); + assert_eq!(Balances::free_balance(&0), 100_000_000 - (2 * 135)); }); } @@ -484,13 +444,13 @@ fn create_with_zero_endowment() { let code_nop = wabt::wat2wasm(CODE_NOP).unwrap(); with_externalities(&mut ExtBuilder::default().build(), || { - Staking::set_free_balance(&0, 100_000_000); - Staking::increase_total_stake_by(100_000_000); + Balances::set_free_balance(&0, 100_000_000); + Balances::increase_total_stake_by(100_000_000); assert_ok!(Contract::create(&0, 0, 100_000, code_nop, Vec::new())); assert_eq!( - Staking::free_balance(&0), + Balances::free_balance(&0), // 4 - for the gas spent by the constructor // 2 * 175 - base gas fee for create (175) multiplied by gas price (2) (top level) 100_000_000 - 4 - (2 * 175), @@ -505,13 +465,13 @@ fn account_removal_removes_storage() { || { // Setup two accounts with free balance above than exsistential threshold. { - Staking::set_free_balance(&1, 110); - Staking::increase_total_stake_by(110); + Balances::set_free_balance(&1, 110); + Balances::increase_total_stake_by(110); >::insert(1, b"foo".to_vec(), b"1".to_vec()); >::insert(1, b"bar".to_vec(), b"2".to_vec()); - Staking::set_free_balance(&2, 110); - Staking::increase_total_stake_by(110); + Balances::set_free_balance(&2, 110); + Balances::increase_total_stake_by(110); >::insert(2, b"hello".to_vec(), b"3".to_vec()); >::insert(2, b"world".to_vec(), b"4".to_vec()); } @@ -520,7 +480,7 @@ fn account_removal_removes_storage() { // the balance of account 1 is will be below than exsistential threshold. // // This should lead to the removal of all storage associated with this account. - assert_ok!(Staking::transfer(&1, 2.into(), 20)); + assert_ok!(Balances::transfer(&1, 2.into(), 20)); // Verify that all entries from account 1 is removed, while // entries from account 2 is in place. @@ -556,15 +516,15 @@ fn top_level_call_refunds_even_if_fails() { with_externalities(&mut ExtBuilder::default().gas_price(4).build(), || { >::insert(1, code_unreachable.to_vec()); - Staking::set_free_balance(&0, 100_000_000); - Staking::increase_total_stake_by(100_000_000); + Balances::set_free_balance(&0, 100_000_000); + Balances::increase_total_stake_by(100_000_000); assert_err!( Contract::call(&0, 1, 0, 100_000, Vec::new()), "vm execute returned error while call" ); - assert_eq!(Staking::free_balance(&0), 100_000_000 - (4 * 3) - (4 * 135)); + assert_eq!(Balances::free_balance(&0), 100_000_000 - (4 * 3) - (4 * 135)); }); } @@ -586,8 +546,8 @@ fn block_gas_limit() { || { >::insert(1, code_loop.to_vec()); - Staking::set_free_balance(&0, 100_000_000); - Staking::increase_total_stake_by(100_000_000); + Balances::set_free_balance(&0, 100_000_000); + Balances::increase_total_stake_by(100_000_000); // Spend 50_000 units of gas (OOG). assert_err!( diff --git a/substrate/substrate/runtime/contract/src/vm/mod.rs b/substrate/substrate/runtime/contract/src/vm/mod.rs index ec26fb2daa..5b3318e6fc 100644 --- a/substrate/substrate/runtime/contract/src/vm/mod.rs +++ b/substrate/substrate/runtime/contract/src/vm/mod.rs @@ -21,12 +21,10 @@ use exec::{CallReceipt, CreateReceipt}; use gas::{GasMeter, GasMeterResult}; use rstd::prelude::*; use runtime_primitives::traits::{As, CheckedMul}; -use sandbox; -use staking; -use system; +use {sandbox, balances, system}; use Trait; -type BalanceOf = ::Balance; +type BalanceOf = ::Balance; type AccountIdOf = ::AccountId; mod prepare; diff --git a/substrate/substrate/runtime/council/Cargo.toml b/substrate/substrate/runtime/council/Cargo.toml index aaffa4ba1a..1f85d467d4 100644 --- a/substrate/substrate/runtime/council/Cargo.toml +++ b/substrate/substrate/runtime/council/Cargo.toml @@ -17,14 +17,10 @@ substrate-runtime-io = { path = "../../runtime-io", default_features = false } substrate-runtime-support = { path = "../../runtime-support", default_features = false } substrate-runtime-primitives = { path = "../primitives", default_features = false } substrate-runtime-consensus = { path = "../consensus", default_features = false } +substrate-runtime-balances = { path = "../balances", default_features = false } substrate-runtime-democracy = { path = "../democracy", default_features = false } -substrate-runtime-session = { path = "../session", default_features = false } -substrate-runtime-staking = { path = "../staking", default_features = false } substrate-runtime-system = { path = "../system", default_features = false } -[dev-dependencies] -substrate-runtime-timestamp = { path = "../timestamp" } - [features] default = ["std"] std = [ @@ -38,9 +34,7 @@ std = [ "substrate-runtime-io/std", "substrate-runtime-support/std", "substrate-runtime-primitives/std", - "substrate-runtime-consensus/std", + "substrate-runtime-balances/std", "substrate-runtime-democracy/std", - "substrate-runtime-session/std", - "substrate-runtime-staking/std", "substrate-runtime-system/std", ] diff --git a/substrate/substrate/runtime/council/src/lib.rs b/substrate/substrate/runtime/council/src/lib.rs index 103679e8a7..f13f637b3a 100644 --- a/substrate/substrate/runtime/council/src/lib.rs +++ b/substrate/substrate/runtime/council/src/lib.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Council system: Handles the voting in and maintenance of council members. @@ -33,19 +33,15 @@ extern crate substrate_primitives; extern crate substrate_runtime_io as runtime_io; #[macro_use] extern crate substrate_runtime_support; extern crate substrate_runtime_primitives as primitives; -extern crate substrate_runtime_consensus as consensus; +extern crate substrate_runtime_balances as balances; extern crate substrate_runtime_democracy as democracy; -extern crate substrate_runtime_session as session; -extern crate substrate_runtime_staking as staking; extern crate substrate_runtime_system as system; -#[cfg(test)] -extern crate substrate_runtime_timestamp as timestamp; use rstd::prelude::*; use primitives::traits::{Zero, One, RefInto, As, AuxLookup}; use substrate_runtime_support::{StorageValue, StorageMap}; use substrate_runtime_support::dispatch::Result; -use staking::address::Address; +use balances::address::Address; #[cfg(any(feature = "std", test))] use std::collections::HashMap; @@ -245,7 +241,7 @@ impl Module { if !>::exists(aux.ref_into()) { // not yet a voter - deduct bond. // NOTE: this must be the last potential bailer, since it changes state. - >::reserve(aux.ref_into(), Self::voting_bond())?; + >::reserve(aux.ref_into(), Self::voting_bond())?; >::put({ let mut v = Self::voters(); @@ -270,7 +266,7 @@ impl Module { who_index: u32, assumed_vote_index: VoteIndex ) -> Result { - let who = >::lookup(who)?; + let who = >::lookup(who)?; ensure!(!Self::presentation_active(), "cannot reap during presentation period"); ensure!(Self::voter_last_active(aux.ref_into()).is_some(), "reaper must be a voter"); let last_active = Self::voter_last_active(&who).ok_or("target for inactivity cleanup must be active")?; @@ -300,9 +296,9 @@ impl Module { if valid { // This only fails if `who` doesn't exist, which it clearly must do since its the aux. // Still, it's no more harmful to propagate any error at this point. - >::transfer_reserved(&who, aux.ref_into(), Self::voting_bond())?; + >::repatriate_reserved(&who, aux.ref_into(), Self::voting_bond())?; } else { - >::slash_reserved(aux.ref_into(), Self::voting_bond()); + >::slash_reserved(aux.ref_into(), Self::voting_bond()); } Ok(()) } @@ -317,7 +313,7 @@ impl Module { ensure!(&voters[index] == aux.ref_into(), "retraction index mismatch"); Self::remove_voter(aux.ref_into(), index, voters); - >::unreserve(aux.ref_into(), Self::voting_bond()); + >::unreserve(aux.ref_into(), Self::voting_bond()); Ok(()) } @@ -335,7 +331,7 @@ impl Module { "invalid candidate slot" ); // NOTE: This must be last as it has side-effects. - >::reserve(aux.ref_into(), Self::candidacy_bond()) + >::reserve(aux.ref_into(), Self::candidacy_bond()) .map_err(|_| "candidate has not enough funds")?; let mut candidates = candidates; @@ -359,13 +355,13 @@ impl Module { total: T::Balance, index: VoteIndex ) -> Result { - let candidate = >::lookup(candidate)?; + 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(aux.ref_into(), bad_presentation_punishment), "presenter must have sufficient slashable funds"); + ensure!(>::can_slash(aux.ref_into(), 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"); @@ -396,7 +392,7 @@ impl Module { } else { // we can rest assured it will be Ok since we checked `can_slash` earlier; still // better safe than sorry. - let _ = >::slash(aux.ref_into(), bad_presentation_punishment); + let _ = >::slash(aux.ref_into(), bad_presentation_punishment); Err(if dupe { "duplicate presentation" } else { "incorrect total" }) } } @@ -413,7 +409,7 @@ impl Module { /// 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 who = >::lookup(who)?; let new_council: Vec<(T::AccountId, T::BlockNumber)> = Self::active_council() .into_iter() .filter(|i| i.0 != who) @@ -473,7 +469,7 @@ impl Module { >::put((number + Self::presentation_duration(), empty_seats as u32, expiring)); let voters = Self::voters(); - let votes = voters.iter().map(>::voting_balance).collect::>(); + let votes = voters.iter().map(>::total_balance).collect::>(); >::put(votes); // initialise leaderboard. @@ -500,7 +496,7 @@ impl Module { .take_while(|&&(b, _)| !b.is_zero()) .take(coming as usize) { - >::unreserve(w, candidacy_bond); + >::unreserve(w, candidacy_bond); } // set the new council. @@ -622,14 +618,14 @@ mod tests { pub use runtime_io::with_externalities; pub use substrate_primitives::H256; use primitives::BuildStorage; - use primitives::traits::{HasPublicAux, Identity, BlakeTwo256}; + use primitives::traits::{HasPublicAux, BlakeTwo256}; use primitives::testing::{Digest, Header}; use substrate_primitives::KeccakHasher; impl_outer_dispatch! { #[derive(Debug, Clone, Eq, Serialize, Deserialize, PartialEq)] pub enum Proposal { - Staking = 0, + Balances = 0, Democracy = 1, } } @@ -640,11 +636,8 @@ mod tests { impl HasPublicAux for Test { type PublicAux = u64; } - impl consensus::Trait for Test { - type PublicAux = ::PublicAux; - type SessionKey = u64; - } impl system::Trait for Test { + type PublicAux = ::PublicAux; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -654,54 +647,28 @@ mod tests { type Header = Header; type Event = (); } - impl session::Trait for Test { - type ConvertAccountIdToSessionKey = Identity; - type OnSessionChange = staking::Module; - type Event = (); - } - impl staking::Trait for Test { - const NOTE_MISSED_PROPOSAL_POSITION: u32 = 1; + impl balances::Trait for Test { type Balance = u64; type AccountIndex = u64; type OnFreeBalanceZero = (); + type EnsureAccountLiquid = (); type Event = (); } impl democracy::Trait for Test { type Proposal = Proposal; } - impl timestamp::Trait for Test { - const TIMESTAMP_SET_POSITION: u32 = 0; - type Moment = u64; - } impl Trait for Test {} pub fn new_test_ext(with_council: bool) -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); - t.extend(consensus::GenesisConfig::{ - code: vec![], - authorities: vec![], - }.build_storage().unwrap()); - t.extend(session::GenesisConfig::{ - session_length: 1, //??? or 2? - validators: vec![10, 20], - }.build_storage().unwrap()); - t.extend(staking::GenesisConfig::{ - sessions_per_era: 1, - current_era: 0, + t.extend(balances::GenesisConfig::{ balances: vec![(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (6, 60)], - intentions: vec![], - validator_count: 2, - minimum_validator_count: 0, - bonding_duration: 0, transaction_base_fee: 0, transaction_byte_fee: 0, existential_deposit: 0, transfer_fee: 0, creation_fee: 0, reclaim_rebate: 0, - early_era_slash: 0, - session_reward: 0, - offline_slash_grace: 0, }.build_storage().unwrap()); t.extend(democracy::GenesisConfig::{ launch_period: 1, @@ -726,12 +693,11 @@ mod tests { cooloff_period: 2, voting_period: 1, }.build_storage().unwrap()); - t.extend(timestamp::GenesisConfig::::default().build_storage().unwrap()); t.into() } pub type System = system::Module; - pub type Staking = staking::Module; + pub type Balances = balances::Module; pub type Democracy = democracy::Module; pub type Council = Module; @@ -1045,7 +1011,7 @@ mod tests { #[test] fn double_presentations_should_be_punished() { with_externalities(&mut new_test_ext(false), || { - assert!(Staking::can_slash(&4, 10)); + assert!(Balances::can_slash(&4, 10)); System::set_block_number(4); assert_ok!(Council::submit_candidacy(&2, 0)); @@ -1061,7 +1027,7 @@ mod tests { assert_ok!(Council::end_block(System::block_number())); assert_eq!(Council::active_council(), vec![(5, 11), (2, 11)]); - assert_eq!(Staking::voting_balance(&4), 38); + assert_eq!(Balances::total_balance(&4), 38); }); } @@ -1094,8 +1060,8 @@ mod tests { assert_eq!(Council::voters(), vec![5]); assert_eq!(Council::approvals_of(2).len(), 0); - assert_eq!(Staking::voting_balance(&2), 17); - assert_eq!(Staking::voting_balance(&5), 53); + assert_eq!(Balances::total_balance(&2), 17); + assert_eq!(Balances::total_balance(&5), 53); }); } @@ -1153,8 +1119,8 @@ mod tests { assert_eq!(Council::voters(), vec![5]); assert_eq!(Council::approvals_of(2).len(), 0); - assert_eq!(Staking::voting_balance(&2), 17); - assert_eq!(Staking::voting_balance(&5), 53); + assert_eq!(Balances::total_balance(&2), 17); + assert_eq!(Balances::total_balance(&5), 53); }); } @@ -1254,7 +1220,7 @@ mod tests { assert_eq!(Council::voters(), vec![2, 3, 5]); assert_eq!(Council::approvals_of(4).len(), 0); - assert_eq!(Staking::voting_balance(&4), 37); + assert_eq!(Balances::total_balance(&4), 37); }); } @@ -1381,8 +1347,8 @@ mod tests { assert_ok!(Council::end_block(System::block_number())); System::set_block_number(6); - assert_eq!(Staking::free_balance(&1), 1); - assert_eq!(Staking::reserved_balance(&1), 9); + assert_eq!(Balances::free_balance(&1), 1); + assert_eq!(Balances::reserved_balance(&1), 9); assert_noop!(Council::present_winner(&1, 1.into(), 20, 0), "presenter must have sufficient slashable funds"); }); } @@ -1392,7 +1358,7 @@ mod tests { with_externalities(&mut new_test_ext(false), || { System::set_block_number(4); assert!(!Council::presentation_active()); - assert_eq!(Staking::voting_balance(&4), 40); + assert_eq!(Balances::total_balance(&4), 40); assert_ok!(Council::submit_candidacy(&2, 0)); assert_ok!(Council::submit_candidacy(&5, 1)); @@ -1403,7 +1369,7 @@ mod tests { System::set_block_number(6); assert_err!(Council::present_winner(&4, 2.into(), 80, 0), "incorrect total"); - assert_eq!(Staking::voting_balance(&4), 38); + assert_eq!(Balances::total_balance(&4), 38); }); } diff --git a/substrate/substrate/runtime/council/src/voting.rs b/substrate/substrate/runtime/council/src/voting.rs index b26df57e60..5569adc9e4 100644 --- a/substrate/substrate/runtime/council/src/voting.rs +++ b/substrate/substrate/runtime/council/src/voting.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Council voting system. @@ -227,7 +227,7 @@ mod tests { fn basic_environment_works() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - assert_eq!(Staking::bonding_duration(), 0); + assert_eq!(Balances::free_balance(&42), 0); assert_eq!(CouncilVoting::cooloff_period(), 2); assert_eq!(CouncilVoting::voting_period(), 1); assert_eq!(CouncilVoting::will_still_be_councillor_at(&1, 1), true); @@ -243,8 +243,8 @@ mod tests { }); } - fn bonding_duration_proposal(value: u64) -> Proposal { - Proposal::Staking(staking::PrivCall::set_bonding_duration(value)) + fn set_balance_proposal(value: u64) -> Proposal { + Proposal::Balances(balances::PrivCall::set_balance(balances::address::Address::Id(42), value, 0)) } fn cancel_referendum_proposal(id: u32) -> Proposal { @@ -255,7 +255,7 @@ mod tests { fn referendum_cancellation_should_work_when_unanimous() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); assert_ok!(Democracy::internal_start_referendum(proposal.clone(), VoteThreshold::SuperMajorityApprove), 0); assert_eq!(Democracy::active_referendums(), vec![(0, 4, proposal, VoteThreshold::SuperMajorityApprove)]); @@ -270,7 +270,7 @@ mod tests { System::set_block_number(2); assert_ok!(CouncilVoting::end_block(System::block_number())); assert_eq!(Democracy::active_referendums(), vec![]); - assert_eq!(Staking::bonding_duration(), 0); + assert_eq!(Balances::free_balance(&42), 0); }); } @@ -278,7 +278,7 @@ mod tests { fn referendum_cancellation_should_fail_when_not_unanimous() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); assert_ok!(Democracy::internal_start_referendum(proposal.clone(), VoteThreshold::SuperMajorityApprove), 0); let cancellation = cancel_referendum_proposal(0); @@ -298,7 +298,7 @@ mod tests { fn referendum_cancellation_should_fail_when_abstentions() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); assert_ok!(Democracy::internal_start_referendum(proposal.clone(), VoteThreshold::SuperMajorityApprove), 0); let cancellation = cancel_referendum_proposal(0); @@ -317,7 +317,7 @@ mod tests { fn veto_should_work() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); let hash = proposal.blake2_256().into(); assert_ok!(CouncilVoting::propose(&1, Box::new(proposal.clone()))); assert_ok!(CouncilVoting::veto(&2, hash)); @@ -330,7 +330,7 @@ mod tests { fn double_veto_should_not_work() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); let hash = proposal.blake2_256().into(); assert_ok!(CouncilVoting::propose(&1, Box::new(proposal.clone()))); assert_ok!(CouncilVoting::veto(&2, hash)); @@ -345,7 +345,7 @@ mod tests { fn retry_in_cooloff_should_not_work() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); let hash = proposal.blake2_256().into(); assert_ok!(CouncilVoting::propose(&1, Box::new(proposal.clone()))); assert_ok!(CouncilVoting::veto(&2, hash)); @@ -359,7 +359,7 @@ mod tests { fn retry_after_cooloff_should_work() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); let hash = proposal.blake2_256().into(); assert_ok!(CouncilVoting::propose(&1, Box::new(proposal.clone()))); assert_ok!(CouncilVoting::veto(&2, hash)); @@ -373,7 +373,7 @@ mod tests { System::set_block_number(4); assert_ok!(CouncilVoting::end_block(System::block_number())); assert_eq!(CouncilVoting::proposals().len(), 0); - assert_eq!(Democracy::active_referendums(), vec![(0, 7, bonding_duration_proposal(42), VoteThreshold::SimpleMajority)]); + assert_eq!(Democracy::active_referendums(), vec![(0, 7, set_balance_proposal(42), VoteThreshold::SimpleMajority)]); }); } @@ -381,7 +381,7 @@ mod tests { fn alternative_double_veto_should_work() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); let hash = proposal.blake2_256().into(); assert_ok!(CouncilVoting::propose(&1, Box::new(proposal.clone()))); assert_ok!(CouncilVoting::veto(&2, hash)); @@ -398,7 +398,7 @@ mod tests { fn simple_propose_should_work() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); let hash = proposal.blake2_256().into(); assert_ok!(CouncilVoting::propose(&1, Box::new(proposal.clone()))); assert_eq!(CouncilVoting::proposals().len(), 1); @@ -412,7 +412,7 @@ mod tests { fn unvoted_proposal_should_expire_without_action() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); assert_ok!(CouncilVoting::propose(&1, Box::new(proposal.clone()))); assert_eq!(CouncilVoting::tally(&proposal.blake2_256().into()), (1, 0, 2)); assert_ok!(CouncilVoting::end_block(System::block_number())); @@ -428,7 +428,7 @@ mod tests { fn unanimous_proposal_should_expire_with_biased_referendum() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); assert_ok!(CouncilVoting::propose(&1, Box::new(proposal.clone()))); assert_ok!(CouncilVoting::vote(&2, proposal.blake2_256().into(), true)); assert_ok!(CouncilVoting::vote(&3, proposal.blake2_256().into(), true)); @@ -446,7 +446,7 @@ mod tests { fn majority_proposal_should_expire_with_unbiased_referendum() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); assert_ok!(CouncilVoting::propose(&1, Box::new(proposal.clone()))); assert_ok!(CouncilVoting::vote(&2, proposal.blake2_256().into(), true)); assert_ok!(CouncilVoting::vote(&3, proposal.blake2_256().into(), false)); @@ -464,7 +464,7 @@ mod tests { fn propose_by_public_should_not_work() { with_externalities(&mut new_test_ext(true), || { System::set_block_number(1); - let proposal = bonding_duration_proposal(42); + let proposal = set_balance_proposal(42); assert_noop!(CouncilVoting::propose(&4, Box::new(proposal)), "proposer would not be on council"); }); } diff --git a/substrate/substrate/runtime/democracy/Cargo.toml b/substrate/substrate/runtime/democracy/Cargo.toml index bf144eece6..602bf1adb4 100644 --- a/substrate/substrate/runtime/democracy/Cargo.toml +++ b/substrate/substrate/runtime/democracy/Cargo.toml @@ -15,14 +15,10 @@ substrate-runtime-std = { path = "../../runtime-std", default_features = false } substrate-runtime-io = { path = "../../runtime-io", default_features = false } substrate-runtime-support = { path = "../../runtime-support", default_features = false } substrate-runtime-primitives = { path = "../primitives", default_features = false } +substrate-runtime-balances = { path = "../balances", default_features = false } substrate-runtime-consensus = { path = "../consensus", default_features = false } -substrate-runtime-session = { path = "../session", default_features = false } -substrate-runtime-staking = { path = "../staking", default_features = false } substrate-runtime-system = { path = "../system", default_features = false } -[dev-dependencies] -substrate-runtime-timestamp = { path = "../timestamp" } - [features] default = ["std"] std = [ @@ -35,8 +31,6 @@ std = [ "substrate-runtime-io/std", "substrate-runtime-support/std", "substrate-runtime-primitives/std", - "substrate-runtime-consensus/std", - "substrate-runtime-session/std", - "substrate-runtime-staking/std", + "substrate-runtime-balances/std", "substrate-runtime-system/std", ] diff --git a/substrate/substrate/runtime/democracy/src/lib.rs b/substrate/substrate/runtime/democracy/src/lib.rs index bc04fe877a..7f3846ad97 100644 --- a/substrate/substrate/runtime/democracy/src/lib.rs +++ b/substrate/substrate/runtime/democracy/src/lib.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Democratic system: Handles administration of general stakeholder voting. @@ -38,12 +38,8 @@ extern crate substrate_runtime_support; extern crate substrate_codec as codec; extern crate substrate_runtime_io as runtime_io; extern crate substrate_runtime_primitives as primitives; -extern crate substrate_runtime_consensus as consensus; -extern crate substrate_runtime_session as session; -extern crate substrate_runtime_staking as staking; +extern crate substrate_runtime_balances as balances; extern crate substrate_runtime_system as system; -#[cfg(test)] -extern crate substrate_runtime_timestamp as timestamp; use rstd::prelude::*; use rstd::result; @@ -62,7 +58,7 @@ pub type PropIndex = u32; /// A referendum index. pub type ReferendumIndex = u32; -pub trait Trait: staking::Trait + Sized { +pub trait Trait: balances::Trait + Sized { type Proposal: Parameter + Dispatchable + IsSubType> + MaybeSerializeDebug; } @@ -152,7 +148,7 @@ impl Module { /// Get the voters for the current proposal. pub fn tally(ref_index: ReferendumIndex) -> (T::Balance, T::Balance) { Self::voters_for(ref_index).iter() - .map(|a| (>::voting_balance(a), Self::vote_of((ref_index, a.clone())).unwrap_or(false)/*defensive only: all items come from `voters`; for an item to be in `voters` there must be a vote registered; qed*/)) + .map(|a| (>::total_balance(a), Self::vote_of((ref_index, a.clone())).unwrap_or(false)/*defensive only: all items come from `voters`; for an item to be in `voters` there must be a vote registered; qed*/)) .map(|(bal, vote)| if vote { (bal, Zero::zero()) } else { (Zero::zero(), bal) }) .fold((Zero::zero(), Zero::zero()), |(a, b), (c, d)| (a + c, b + d)) } @@ -162,7 +158,7 @@ impl Module { /// Propose a sensitive action to be taken. fn propose(aux: &T::PublicAux, proposal: Box, value: T::Balance) -> Result { ensure!(value >= Self::minimum_deposit(), "value too low"); - >::reserve(aux.ref_into(), value) + >::reserve(aux.ref_into(), value) .map_err(|_| "proposer's balance too low")?; let index = Self::public_prop_count(); @@ -179,7 +175,7 @@ impl Module { fn second(aux: &T::PublicAux, proposal: PropIndex) -> Result { let mut deposit = Self::deposit_of(proposal) .ok_or("can only second an existing proposal")?; - >::reserve(aux.ref_into(), deposit.0) + >::reserve(aux.ref_into(), deposit.0) .map_err(|_| "seconder's balance too low")?; deposit.1.push(aux.ref_into().clone()); >::insert(proposal, deposit); @@ -190,7 +186,7 @@ impl Module { /// false would be a vote to keep the status quo.. fn vote(aux: &T::PublicAux, ref_index: ReferendumIndex, approve_proposal: bool) -> Result { ensure!(Self::is_active_referendum(ref_index), "vote given for invalid referendum."); - ensure!(!>::voting_balance(aux.ref_into()).is_zero(), + ensure!(!>::total_balance(aux.ref_into()).is_zero(), "transactor must have balance to signal approval."); if !>::exists(&(ref_index, aux.ref_into().clone())) { let mut voters = Self::voters_for(ref_index); @@ -268,7 +264,7 @@ impl Module { if let Some((deposit, depositors)) = >::take(prop_index) {//: (T::Balance, Vec) = // refund depositors for d in &depositors { - >::unreserve(d, deposit); + >::unreserve(d, deposit); } >::put(public_props); Self::inject_referendum(now + Self::voting_period(), proposal, VoteThreshold::SuperMajorityApprove)?; @@ -281,7 +277,7 @@ impl Module { // tally up votes for any expiring referenda. for (index, _, proposal, vote_threshold) in Self::maturing_referendums_at(now) { let (approve, against) = Self::tally(index); - let total_stake = >::total_stake(); + let total_stake = >::total_stake(); Self::clear_referendum(index); if vote_threshold.approved(approve, against, total_stake) { proposal.dispatch()?; @@ -319,14 +315,6 @@ impl GenesisConfig { minimum_deposit: T::Balance::sa(1), } } - - pub fn extended() -> Self { - GenesisConfig { - launch_period: T::BlockNumber::sa(1), - voting_period: T::BlockNumber::sa(3), - minimum_deposit: T::Balance::sa(1), - } - } } #[cfg(any(feature = "std", test))] @@ -363,16 +351,14 @@ mod tests { use runtime_io::with_externalities; use substrate_primitives::{H256, KeccakHasher}; use primitives::BuildStorage; - use primitives::traits::{HasPublicAux, Identity, BlakeTwo256}; + use primitives::traits::{HasPublicAux, BlakeTwo256}; use primitives::testing::{Digest, Header}; - use session::OnSessionChange; impl_outer_dispatch! { #[derive(Debug, Clone, Eq, Serialize, Deserialize, PartialEq)] pub enum Proposal { - Session = 0, - Staking = 1, - Democracy = 2, + Balances = 0, + Democracy = 1, } } @@ -382,11 +368,8 @@ mod tests { impl HasPublicAux for Test { type PublicAux = u64; } - impl consensus::Trait for Test { - type PublicAux = ::PublicAux; - type SessionKey = u64; - } impl system::Trait for Test { + type PublicAux = ::PublicAux; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -396,66 +379,38 @@ mod tests { type Header = Header; type Event = (); } - impl session::Trait for Test { - type ConvertAccountIdToSessionKey = Identity; - type OnSessionChange = staking::Module; - type Event = (); - } - impl staking::Trait for Test { - const NOTE_MISSED_PROPOSAL_POSITION: u32 = 1; + impl balances::Trait for Test { type Balance = u64; type AccountIndex = u64; type OnFreeBalanceZero = (); + type EnsureAccountLiquid = (); type Event = (); } - impl timestamp::Trait for Test { - const TIMESTAMP_SET_POSITION: u32 = 0; - type Moment = u64; - } impl Trait for Test { type Proposal = Proposal; } fn new_test_ext() -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); - t.extend(consensus::GenesisConfig::{ - code: vec![], - authorities: vec![], - }.build_storage().unwrap()); - t.extend(session::GenesisConfig::{ - session_length: 1, //??? or 2? - validators: vec![10, 20], - }.build_storage().unwrap()); - t.extend(staking::GenesisConfig::{ - sessions_per_era: 1, - current_era: 0, + t.extend(balances::GenesisConfig::{ balances: vec![(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (6, 60)], - intentions: vec![], - validator_count: 2, - minimum_validator_count: 0, - bonding_duration: 3, transaction_base_fee: 0, transaction_byte_fee: 0, existential_deposit: 0, transfer_fee: 0, creation_fee: 0, reclaim_rebate: 0, - early_era_slash: 0, - session_reward: 0, - offline_slash_grace: 0, }.build_storage().unwrap()); t.extend(GenesisConfig::{ launch_period: 1, voting_period: 1, minimum_deposit: 1, }.build_storage().unwrap()); - t.extend(timestamp::GenesisConfig::::default().build_storage().unwrap()); t.into() } type System = system::Module; - type Session = session::Module; - type Staking = staking::Module; + type Balances = balances::Module; type Democracy = Module; #[test] @@ -465,22 +420,26 @@ mod tests { assert_eq!(Democracy::voting_period(), 1); assert_eq!(Democracy::minimum_deposit(), 1); assert_eq!(Democracy::referendum_count(), 0); - assert_eq!(Staking::sessions_per_era(), 1); - assert_eq!(Staking::total_stake(), 210); + assert_eq!(Balances::free_balance(&42), 0); + assert_eq!(Balances::total_stake(), 210); }); } - fn propose_sessions_per_era(who: u64, value: u64, locked: u64) -> super::Result { - Democracy::propose(&who, Box::new(Proposal::Staking(staking::PrivCall::set_sessions_per_era(value))), locked) + fn set_balance_proposal(value: u64) -> Proposal { + Proposal::Balances(balances::PrivCall::set_balance(balances::address::Address::Id(42), value, 0)) + } + + fn propose_set_balance(who: u64, value: u64, locked: u64) -> super::Result { + Democracy::propose(&who, Box::new(set_balance_proposal(value)), locked) } #[test] fn locked_for_should_work() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - assert_ok!(propose_sessions_per_era(1, 2, 2)); - assert_ok!(propose_sessions_per_era(1, 4, 4)); - assert_ok!(propose_sessions_per_era(1, 3, 3)); + assert_ok!(propose_set_balance(1, 2, 2)); + assert_ok!(propose_set_balance(1, 4, 4)); + assert_ok!(propose_set_balance(1, 3, 3)); assert_eq!(Democracy::locked_for(0), Some(2)); assert_eq!(Democracy::locked_for(1), Some(4)); assert_eq!(Democracy::locked_for(2), Some(3)); @@ -491,7 +450,7 @@ mod tests { fn single_proposal_should_work() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - assert_ok!(propose_sessions_per_era(1, 2, 1)); + assert_ok!(propose_set_balance(1, 2, 1)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); System::set_block_number(2); @@ -504,9 +463,8 @@ mod tests { assert_eq!(Democracy::tally(r), (10, 0)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); - Staking::on_session_change(0, true); - assert_eq!(Staking::era_length(), 2); + assert_eq!(Balances::free_balance(&42), 2); }); } @@ -514,14 +472,14 @@ mod tests { fn deposit_for_proposals_should_be_taken() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - assert_ok!(propose_sessions_per_era(1, 2, 5)); + assert_ok!(propose_set_balance(1, 2, 5)); assert_ok!(Democracy::second(&2, 0)); assert_ok!(Democracy::second(&5, 0)); assert_ok!(Democracy::second(&5, 0)); assert_ok!(Democracy::second(&5, 0)); - assert_eq!(Staking::free_balance(&1), 5); - assert_eq!(Staking::free_balance(&2), 15); - assert_eq!(Staking::free_balance(&5), 35); + assert_eq!(Balances::free_balance(&1), 5); + assert_eq!(Balances::free_balance(&2), 15); + assert_eq!(Balances::free_balance(&5), 35); }); } @@ -529,15 +487,15 @@ mod tests { fn deposit_for_proposals_should_be_returned() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - assert_ok!(propose_sessions_per_era(1, 2, 5)); + assert_ok!(propose_set_balance(1, 2, 5)); assert_ok!(Democracy::second(&2, 0)); assert_ok!(Democracy::second(&5, 0)); assert_ok!(Democracy::second(&5, 0)); assert_ok!(Democracy::second(&5, 0)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); - assert_eq!(Staking::free_balance(&1), 10); - assert_eq!(Staking::free_balance(&2), 20); - assert_eq!(Staking::free_balance(&5), 50); + assert_eq!(Balances::free_balance(&1), 10); + assert_eq!(Balances::free_balance(&2), 20); + assert_eq!(Balances::free_balance(&5), 50); }); } @@ -545,7 +503,7 @@ mod tests { fn proposal_with_deposit_below_minimum_should_not_work() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - assert_noop!(propose_sessions_per_era(1, 2, 0), "value too low"); + assert_noop!(propose_set_balance(1, 2, 0), "value too low"); }); } @@ -553,7 +511,7 @@ mod tests { fn poor_proposer_should_not_work() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - assert_noop!(propose_sessions_per_era(1, 2, 11), "proposer\'s balance too low"); + assert_noop!(propose_set_balance(1, 2, 11), "proposer\'s balance too low"); }); } @@ -561,53 +519,41 @@ mod tests { fn poor_seconder_should_not_work() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - assert_ok!(propose_sessions_per_era(2, 2, 11)); + assert_ok!(propose_set_balance(2, 2, 11)); assert_noop!(Democracy::second(&1, 0), "seconder\'s balance too low"); }); } - fn propose_bonding_duration(who: u64, value: u64, locked: u64) -> super::Result { - Democracy::propose(&who, Box::new(Proposal::Staking(staking::PrivCall::set_bonding_duration(value))), locked) - } - #[test] fn runners_up_should_come_after() { with_externalities(&mut new_test_ext(), || { System::set_block_number(0); - assert_ok!(propose_bonding_duration(1, 2, 2)); - assert_ok!(propose_bonding_duration(1, 4, 4)); - assert_ok!(propose_bonding_duration(1, 3, 3)); + assert_ok!(propose_set_balance(1, 2, 2)); + assert_ok!(propose_set_balance(1, 4, 4)); + assert_ok!(propose_set_balance(1, 3, 3)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); System::set_block_number(1); assert_ok!(Democracy::vote(&1, 0, true)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); - Staking::on_session_change(0, true); - assert_eq!(Staking::bonding_duration(), 4); + assert_eq!(Balances::free_balance(&42), 4); System::set_block_number(2); assert_ok!(Democracy::vote(&1, 1, true)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); - Staking::on_session_change(0, true); - assert_eq!(Staking::bonding_duration(), 3); + assert_eq!(Balances::free_balance(&42), 3); System::set_block_number(3); assert_ok!(Democracy::vote(&1, 2, true)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); - Staking::on_session_change(0, true); - assert_eq!(Staking::bonding_duration(), 2); }); } - fn sessions_per_era_proposal(value: u64) -> Proposal { - Proposal::Staking(staking::PrivCall::set_sessions_per_era(value)) - } - #[test] fn simple_passing_should_work() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - let r = Democracy::inject_referendum(1, sessions_per_era_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); + let r = Democracy::inject_referendum(1, set_balance_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); assert_ok!(Democracy::vote(&1, r, true)); assert_eq!(Democracy::voters_for(r), vec![1]); @@ -615,9 +561,8 @@ mod tests { assert_eq!(Democracy::tally(r), (10, 0)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); - Staking::on_session_change(0, true); - assert_eq!(Staking::era_length(), 2); + assert_eq!(Balances::free_balance(&42), 2); }); } @@ -625,14 +570,13 @@ mod tests { fn cancel_referendum_should_work() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - let r = Democracy::inject_referendum(1, sessions_per_era_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); + let r = Democracy::inject_referendum(1, set_balance_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); assert_ok!(Democracy::vote(&1, r, true)); assert_ok!(Democracy::cancel_referendum(r)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); - Staking::on_session_change(0, true); - assert_eq!(Staking::era_length(), 1); + assert_eq!(Balances::free_balance(&42), 0); }); } @@ -640,7 +584,7 @@ mod tests { fn simple_failing_should_work() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - let r = Democracy::inject_referendum(1, sessions_per_era_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); + let r = Democracy::inject_referendum(1, set_balance_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); assert_ok!(Democracy::vote(&1, r, false)); assert_eq!(Democracy::voters_for(r), vec![1]); @@ -648,9 +592,8 @@ mod tests { assert_eq!(Democracy::tally(r), (0, 10)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); - Staking::on_session_change(0, true); - assert_eq!(Staking::era_length(), 1); + assert_eq!(Balances::free_balance(&42), 0); }); } @@ -658,7 +601,7 @@ mod tests { fn controversial_voting_should_work() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - let r = Democracy::inject_referendum(1, sessions_per_era_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); + let r = Democracy::inject_referendum(1, set_balance_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); assert_ok!(Democracy::vote(&1, r, true)); assert_ok!(Democracy::vote(&2, r, false)); assert_ok!(Democracy::vote(&3, r, false)); @@ -669,9 +612,8 @@ mod tests { assert_eq!(Democracy::tally(r), (110, 100)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); - Staking::on_session_change(0, true); - assert_eq!(Staking::era_length(), 2); + assert_eq!(Balances::free_balance(&42), 2); }); } @@ -679,27 +621,26 @@ mod tests { fn controversial_low_turnout_voting_should_work() { with_externalities(&mut new_test_ext(), || { System::set_block_number(1); - let r = Democracy::inject_referendum(1, sessions_per_era_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); + let r = Democracy::inject_referendum(1, set_balance_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); assert_ok!(Democracy::vote(&5, r, false)); assert_ok!(Democracy::vote(&6, r, true)); assert_eq!(Democracy::tally(r), (60, 50)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); - Staking::on_session_change(0, true); - assert_eq!(Staking::era_length(), 1); + assert_eq!(Balances::free_balance(&42), 0); }); } #[test] fn passing_low_turnout_voting_should_work() { with_externalities(&mut new_test_ext(), || { - assert_eq!(Staking::era_length(), 1); - assert_eq!(Staking::total_stake(), 210); + assert_eq!(Balances::free_balance(&42), 0); + assert_eq!(Balances::total_stake(), 210); System::set_block_number(1); - let r = Democracy::inject_referendum(1, sessions_per_era_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); + let r = Democracy::inject_referendum(1, set_balance_proposal(2), VoteThreshold::SuperMajorityApprove).unwrap(); assert_ok!(Democracy::vote(&4, r, true)); assert_ok!(Democracy::vote(&5, r, false)); assert_ok!(Democracy::vote(&6, r, true)); @@ -707,9 +648,8 @@ mod tests { assert_eq!(Democracy::tally(r), (100, 50)); assert_eq!(Democracy::end_block(System::block_number()), Ok(())); - Staking::on_session_change(0, true); - assert_eq!(Staking::era_length(), 2); + assert_eq!(Balances::free_balance(&42), 2); }); } } diff --git a/substrate/substrate/runtime/democracy/src/vote_threshold.rs b/substrate/substrate/runtime/democracy/src/vote_threshold.rs index 0027f7c006..ce46149222 100644 --- a/substrate/substrate/runtime/democracy/src/vote_threshold.rs +++ b/substrate/substrate/runtime/democracy/src/vote_threshold.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Voting thresholds. diff --git a/substrate/substrate/runtime/executive/Cargo.toml b/substrate/substrate/runtime/executive/Cargo.toml index 20d913e925..74a10d18f8 100644 --- a/substrate/substrate/runtime/executive/Cargo.toml +++ b/substrate/substrate/runtime/executive/Cargo.toml @@ -17,6 +17,7 @@ substrate-runtime-system = { path = "../system", default_features = false } [dev-dependencies] substrate-primitives = { path = "../../primitives" } +substrate-runtime-balances = { path = "../balances" } substrate-runtime-session = { path = "../session" } substrate-runtime-staking = { path = "../staking" } substrate-runtime-consensus = { path = "../consensus" } diff --git a/substrate/substrate/runtime/executive/src/lib.rs b/substrate/substrate/runtime/executive/src/lib.rs index 4f7d6bd278..1d832b73e3 100644 --- a/substrate/substrate/runtime/executive/src/lib.rs +++ b/substrate/substrate/runtime/executive/src/lib.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Executive: Handles all of the top-level stuff; essentially just executing blocks/extrinsics. @@ -53,6 +53,9 @@ extern crate substrate_runtime_consensus as consensus; #[cfg(test)] extern crate substrate_runtime_session as session; +#[cfg(test)] +extern crate substrate_runtime_balances as balances; + #[cfg(test)] extern crate substrate_runtime_staking as staking; @@ -224,7 +227,7 @@ impl< #[cfg(test)] mod tests { use super::*; - use staking::Call; + use balances::Call; use runtime_io::with_externalities; use substrate_primitives::{H256, KeccakHasher}; use primitives::BuildStorage; @@ -242,7 +245,7 @@ mod tests { impl_outer_event!{ pub enum MetaEvent for Test { - session, staking + balances, session, staking } } @@ -253,10 +256,19 @@ mod tests { type PublicAux = u64; } impl consensus::Trait for Test { - type PublicAux = ::PublicAux; + const NOTE_OFFLINE_POSITION: u32 = 1; type SessionKey = u64; + type OnOfflineValidator = staking::Module; + } + impl balances::Trait for Test { + type Balance = u64; + type AccountIndex = u64; + type OnFreeBalanceZero = staking::Module; + type EnsureAccountLiquid = staking::Module; + type Event = MetaEvent; } impl system::Trait for Test { + type PublicAux = ::PublicAux; type Index = u64; type BlockNumber = u64; type Hash = substrate_primitives::H256; @@ -272,10 +284,6 @@ mod tests { type Event = MetaEvent; } impl staking::Trait for Test { - const NOTE_MISSED_PROPOSAL_POSITION: u32 = 1; - type Balance = u64; - type AccountIndex = u64; - type OnFreeBalanceZero = (); type Event = MetaEvent; } impl timestamp::Trait for Test { @@ -284,25 +292,27 @@ mod tests { } type TestXt = primitives::testing::TestXt>; - type Executive = super::Executive, NullLookup, staking::Module, (session::Module, staking::Module)>; + type Executive = super::Executive, NullLookup, balances::Module, (session::Module, staking::Module)>; #[test] fn staking_balance_transfer_dispatch_works() { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); - t.extend(staking::GenesisConfig:: { - sessions_per_era: 0, - current_era: 0, + t.extend(balances::GenesisConfig:: { balances: vec![(1, 111)], - intentions: vec![], - validator_count: 0, - minimum_validator_count: 0, - bonding_duration: 0, transaction_base_fee: 10, transaction_byte_fee: 0, existential_deposit: 0, transfer_fee: 0, creation_fee: 0, reclaim_rebate: 0, + }.build_storage().unwrap()); + t.extend(staking::GenesisConfig:: { + sessions_per_era: 0, + current_era: 0, + intentions: vec![], + validator_count: 0, + minimum_validator_count: 0, + bonding_duration: 0, early_era_slash: 0, session_reward: 0, offline_slash_grace: 0, @@ -312,13 +322,14 @@ mod tests { with_externalities(&mut t, || { Executive::initialise_block(&Header::new(1, H256::default(), H256::default(), [69u8; 32].into(), Digest::default())); Executive::apply_extrinsic(xt).unwrap(); - assert_eq!(>::voting_balance(&1), 32); - assert_eq!(>::voting_balance(&2), 69); + assert_eq!(>::total_balance(&1), 32); + assert_eq!(>::total_balance(&2), 69); }); } fn new_test_ext() -> runtime_io::TestExternalities { let mut t = system::GenesisConfig::::default().build_storage().unwrap(); + t.extend(balances::GenesisConfig::::default().build_storage().unwrap()); t.extend(consensus::GenesisConfig::::default().build_storage().unwrap()); t.extend(session::GenesisConfig::::default().build_storage().unwrap()); t.extend(staking::GenesisConfig::::default().build_storage().unwrap()); @@ -336,7 +347,7 @@ mod tests { // Blake // state_root: hex!("02532989c613369596025dfcfc821339fc9861987003924913a5a1382f87034a").into(), // Keccak - state_root: hex!("e576ed2adacdc09b61844b5106bfaa18d2a4bfd7feb56d7af97c3421cdefca48").into(), + state_root: hex!("ffe27b4c3a8b421fa10592be61fb28eca7ebbe04cbfa99cdda9f703f35522569").into(), extrinsics_root: hex!("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").into(), digest: Digest { logs: vec![], }, }, @@ -370,7 +381,7 @@ mod tests { header: Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("e576ed2adacdc09b61844b5106bfaa18d2a4bfd7feb56d7af97c3421cdefca48").into(), + state_root: hex!("ffe27b4c3a8b421fa10592be61fb28eca7ebbe04cbfa99cdda9f703f35522569").into(), extrinsics_root: [0u8; 32].into(), digest: Digest { logs: vec![], }, }, diff --git a/substrate/substrate/runtime/primitives/src/generic.rs b/substrate/substrate/runtime/primitives/src/generic.rs index f1a9448c8f..efcc52fbec 100644 --- a/substrate/substrate/runtime/primitives/src/generic.rs +++ b/substrate/substrate/runtime/primitives/src/generic.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Generic implementations of Extrinsic/Header/Block. diff --git a/substrate/substrate/runtime/primitives/src/lib.rs b/substrate/substrate/runtime/primitives/src/lib.rs index a1ff760f76..87553942b9 100644 --- a/substrate/substrate/runtime/primitives/src/lib.rs +++ b/substrate/substrate/runtime/primitives/src/lib.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! System manager: Handles all of the top-level stuff; executing block/transaction, setting code //! and depositing logs. diff --git a/substrate/substrate/runtime/primitives/src/testing.rs b/substrate/substrate/runtime/primitives/src/testing.rs index eab978d3b8..b1dcef2ead 100644 --- a/substrate/substrate/runtime/primitives/src/testing.rs +++ b/substrate/substrate/runtime/primitives/src/testing.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Testing utilities. diff --git a/substrate/substrate/runtime/primitives/src/traits.rs b/substrate/substrate/runtime/primitives/src/traits.rs index 4026fa7cf7..b64aa678f2 100644 --- a/substrate/substrate/runtime/primitives/src/traits.rs +++ b/substrate/substrate/runtime/primitives/src/traits.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Primitives for the runtime modules. diff --git a/substrate/substrate/runtime/session/src/lib.rs b/substrate/substrate/runtime/session/src/lib.rs index 1530723907..75dad0adae 100644 --- a/substrate/substrate/runtime/session/src/lib.rs +++ b/substrate/substrate/runtime/session/src/lib.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Session manager: is told the validators and allows them to manage their session keys for the //! consensus module. @@ -302,10 +302,12 @@ mod tests { type PublicAux = u64; } impl consensus::Trait for Test { - type PublicAux = ::PublicAux; + const NOTE_OFFLINE_POSITION: u32 = 1; type SessionKey = u64; + type OnOfflineValidator = (); } impl system::Trait for Test { + type PublicAux = ::PublicAux; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -327,7 +329,6 @@ mod tests { type System = system::Module; type Consensus = consensus::Module; - type Timestamp = timestamp::Module; type Session = Module; fn new_test_ext() -> runtime_io::TestExternalities { diff --git a/substrate/substrate/runtime/staking/Cargo.toml b/substrate/substrate/runtime/staking/Cargo.toml index 7cffe09d01..d4214862a7 100644 --- a/substrate/substrate/runtime/staking/Cargo.toml +++ b/substrate/substrate/runtime/staking/Cargo.toml @@ -17,6 +17,7 @@ substrate-runtime-io = { path = "../../runtime-io", default_features = false } substrate-runtime-sandbox = { path = "../../runtime-sandbox", default_features = false } substrate-runtime-support = { path = "../../runtime-support", default_features = false } substrate-runtime-primitives = { path = "../primitives", default_features = false } +substrate-runtime-balances = { path = "../balances", default_features = false } substrate-runtime-consensus = { path = "../consensus", default_features = false } substrate-runtime-system = { path = "../system", default_features = false } substrate-runtime-session = { path = "../session", default_features = false } @@ -40,6 +41,7 @@ std = [ "substrate-runtime-sandbox/std", "substrate-runtime-support/std", "substrate-runtime-primitives/std", + "substrate-runtime-balances/std", "substrate-runtime-session/std", "substrate-runtime-system/std", "substrate-runtime-timestamp/std" diff --git a/substrate/substrate/runtime/staking/src/genesis_config.rs b/substrate/substrate/runtime/staking/src/genesis_config.rs index 8da72bf1d9..7577e125c2 100644 --- a/substrate/substrate/runtime/staking/src/genesis_config.rs +++ b/substrate/substrate/runtime/staking/src/genesis_config.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Build a staking genesis block. @@ -21,15 +21,12 @@ use std::collections::HashMap; use rstd::prelude::*; use codec::Encode; -use runtime_support::{StorageValue, StorageMap}; -use primitives::traits::{Zero, As}; +use runtime_support::StorageValue; +use primitives::traits::As; use substrate_primitives::KeccakHasher; use {runtime_io, primitives}; -use super::{Trait, ENUM_SET_SIZE, EnumSet, NextEnumSet, Intentions, CurrentEra, - BondingDuration, CreationFee, TransferFee, ReclaimRebate, - ExistentialDeposit, TransactionByteFee, TransactionBaseFee, TotalStake, - SessionsPerEra, ValidatorCount, FreeBalance, SessionReward, EarlyEraSlash, - OfflineSlashGrace, MinimumValidatorCount}; +use super::{Trait, Intentions, CurrentEra, OfflineSlashGrace, MinimumValidatorCount, + BondingDuration, SessionsPerEra, ValidatorCount, SessionReward, EarlyEraSlash}; #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -37,90 +34,24 @@ use super::{Trait, ENUM_SET_SIZE, EnumSet, NextEnumSet, Intentions, CurrentEra, pub struct GenesisConfig { pub sessions_per_era: T::BlockNumber, pub current_era: T::BlockNumber, - pub balances: Vec<(T::AccountId, T::Balance)>, pub intentions: Vec, pub validator_count: u32, pub minimum_validator_count: u32, pub bonding_duration: T::BlockNumber, - pub transaction_base_fee: T::Balance, - pub transaction_byte_fee: T::Balance, - pub transfer_fee: T::Balance, - pub creation_fee: T::Balance, - pub reclaim_rebate: T::Balance, - pub existential_deposit: T::Balance, pub session_reward: T::Balance, pub early_era_slash: T::Balance, pub offline_slash_grace: u32, } -impl GenesisConfig where T::AccountId: From { - pub fn simple() -> Self { - GenesisConfig { - sessions_per_era: T::BlockNumber::sa(2), - current_era: T::BlockNumber::sa(0), - balances: vec![(T::AccountId::from(1), T::Balance::sa(111))], - intentions: vec![T::AccountId::from(1), T::AccountId::from(2), T::AccountId::from(3)], - validator_count: 3, - minimum_validator_count: 1, - bonding_duration: T::BlockNumber::sa(0), - transaction_base_fee: T::Balance::sa(0), - transaction_byte_fee: T::Balance::sa(0), - transfer_fee: T::Balance::sa(0), - creation_fee: T::Balance::sa(0), - existential_deposit: T::Balance::sa(0), - reclaim_rebate: T::Balance::sa(0), - session_reward: T::Balance::sa(0), - early_era_slash: T::Balance::sa(0), - offline_slash_grace: 1, - } - } - - pub fn extended() -> Self { - GenesisConfig { - sessions_per_era: T::BlockNumber::sa(3), - current_era: T::BlockNumber::sa(1), - balances: vec![ - (T::AccountId::from(1), T::Balance::sa(10)), - (T::AccountId::from(2), T::Balance::sa(20)), - (T::AccountId::from(3), T::Balance::sa(30)), - (T::AccountId::from(4), T::Balance::sa(40)), - (T::AccountId::from(5), T::Balance::sa(50)), - (T::AccountId::from(6), T::Balance::sa(60)), - (T::AccountId::from(7), T::Balance::sa(1)) - ], - intentions: vec![T::AccountId::from(1), T::AccountId::from(2), T::AccountId::from(3)], - validator_count: 3, - minimum_validator_count: 1, - bonding_duration: T::BlockNumber::sa(0), - transaction_base_fee: T::Balance::sa(1), - transaction_byte_fee: T::Balance::sa(0), - transfer_fee: T::Balance::sa(0), - creation_fee: T::Balance::sa(0), - existential_deposit: T::Balance::sa(0), - reclaim_rebate: T::Balance::sa(0), - session_reward: T::Balance::sa(0), - early_era_slash: T::Balance::sa(0), - offline_slash_grace: 1, - } - } -} - impl Default for GenesisConfig { fn default() -> Self { GenesisConfig { sessions_per_era: T::BlockNumber::sa(1000), current_era: T::BlockNumber::sa(0), - balances: vec![], intentions: vec![], validator_count: 0, minimum_validator_count: 0, bonding_duration: T::BlockNumber::sa(1000), - transaction_base_fee: T::Balance::sa(0), - transaction_byte_fee: T::Balance::sa(0), - transfer_fee: T::Balance::sa(0), - creation_fee: T::Balance::sa(0), - existential_deposit: T::Balance::sa(0), - reclaim_rebate: T::Balance::sa(0), session_reward: T::Balance::sa(0), early_era_slash: T::Balance::sa(0), offline_slash_grace: 0, @@ -130,36 +61,17 @@ impl Default for GenesisConfig { impl primitives::BuildStorage for GenesisConfig { fn build_storage(self) -> ::std::result::Result, Vec>, String> { - let total_stake: T::Balance = self.balances.iter().fold(Zero::zero(), |acc, &(_, n)| acc + n); - - let mut r: runtime_io::TestExternalities = map![ - Self::hash(>::key()).to_vec() => T::AccountIndex::sa(self.balances.len() / ENUM_SET_SIZE).encode(), + let r: runtime_io::TestExternalities = map![ Self::hash(>::key()).to_vec() => self.intentions.encode(), Self::hash(>::key()).to_vec() => self.sessions_per_era.encode(), Self::hash(>::key()).to_vec() => self.validator_count.encode(), Self::hash(>::key()).to_vec() => self.minimum_validator_count.encode(), Self::hash(>::key()).to_vec() => self.bonding_duration.encode(), - Self::hash(>::key()).to_vec() => self.transaction_base_fee.encode(), - Self::hash(>::key()).to_vec() => self.transaction_byte_fee.encode(), - Self::hash(>::key()).to_vec() => self.transfer_fee.encode(), - Self::hash(>::key()).to_vec() => self.creation_fee.encode(), - Self::hash(>::key()).to_vec() => self.existential_deposit.encode(), - Self::hash(>::key()).to_vec() => self.reclaim_rebate.encode(), Self::hash(>::key()).to_vec() => self.current_era.encode(), Self::hash(>::key()).to_vec() => self.session_reward.encode(), Self::hash(>::key()).to_vec() => self.early_era_slash.encode(), - Self::hash(>::key()).to_vec() => self.offline_slash_grace.encode(), - Self::hash(>::key()).to_vec() => total_stake.encode() + Self::hash(>::key()).to_vec() => self.offline_slash_grace.encode() ]; - - let ids: Vec<_> = self.balances.iter().map(|x| x.0.clone()).collect(); - for i in 0..(ids.len() + ENUM_SET_SIZE - 1) / ENUM_SET_SIZE { - r.insert(Self::hash(&>::key_for(T::AccountIndex::sa(i))).to_vec(), - ids[i * ENUM_SET_SIZE..ids.len().min((i + 1) * ENUM_SET_SIZE)].to_owned().encode()); - } - for (who, value) in self.balances.into_iter() { - r.insert(Self::hash(&>::key_for(who)).to_vec(), value.encode()); - } Ok(r.into()) } } diff --git a/substrate/substrate/runtime/staking/src/lib.rs b/substrate/substrate/runtime/staking/src/lib.rs index 92c8f47faa..3c3c2cd9df 100644 --- a/substrate/substrate/runtime/staking/src/lib.rs +++ b/substrate/substrate/runtime/staking/src/lib.rs @@ -1,20 +1,20 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . -//! Staking manager: Handles balances and periodically determines the best set of validators. +//! Staking manager: Periodically determines the best set of validators. #![cfg_attr(not(feature = "std"), no_std)] @@ -41,26 +41,23 @@ extern crate substrate_codec as codec; extern crate substrate_primitives; extern crate substrate_runtime_io as runtime_io; extern crate substrate_runtime_primitives as primitives; +extern crate substrate_runtime_balances as balances; extern crate substrate_runtime_consensus as consensus; extern crate substrate_runtime_sandbox as sandbox; extern crate substrate_runtime_session as session; extern crate substrate_runtime_system as system; extern crate substrate_runtime_timestamp as timestamp; -#[cfg(test)] use std::fmt::Debug; use rstd::prelude::*; -use rstd::{cmp, result}; -use codec::{Encode, Decode, Codec, Input, Output}; -use runtime_support::{StorageValue, StorageMap, Parameter}; +use runtime_support::{Parameter, StorageValue, StorageMap}; use runtime_support::dispatch::Result; use session::OnSessionChange; -use primitives::traits::{Zero, One, Bounded, RefInto, SimpleArithmetic, Executable, MakePayment, - As, AuxLookup, Member, CheckedAdd, CheckedSub, MaybeEmpty}; -use address::Address as RawAddress; +use primitives::traits::{Zero, One, Bounded, RefInto, Executable, + As, AuxLookup}; +use balances::address::Address; mod mock; -pub mod address; mod tests; mod genesis_config; @@ -69,44 +66,17 @@ pub use genesis_config::GenesisConfig; const DEFAULT_MINIMUM_VALIDATOR_COUNT: usize = 4; -/// Number of account IDs stored per enum set. -const ENUM_SET_SIZE: usize = 64; - -/// The byte to identify intention to reclaim an existing account index. -const RECLAIM_INDEX_MAGIC: usize = 0x69; - -pub type Address = RawAddress<::AccountId, ::AccountIndex>; - pub type Event = RawEvent< - ::Balance, - ::AccountId, - ::AccountIndex + ::Balance, + ::AccountId >; -#[cfg(test)] -#[derive(Debug, PartialEq, Clone)] -pub enum LockStatus { - Liquid, - LockedUntil(BlockNumber), - Staked, -} - -#[cfg(not(test))] #[derive(PartialEq, Clone)] -pub enum LockStatus { +#[cfg_attr(test, derive(Debug))] +pub enum LockStatus { Liquid, LockedUntil(BlockNumber), - Staked, -} - -/// The account was the given id was killed. -pub trait OnFreeBalanceZero { - /// The account was the given id was killed. - fn on_free_balance_zero(who: &AccountId); -} - -impl OnFreeBalanceZero for () { - fn on_free_balance_zero(_who: &AccountId) {} + Bonded, } /// Preference of what happens on a slash event. @@ -125,21 +95,7 @@ impl Default for SlashPreference { } } -pub trait Trait: system::Trait + session::Trait { - /// The allowed extrinsic position for `missed_proposal` inherent. - const NOTE_MISSED_PROPOSAL_POSITION: u32; - - /// The balance of an account. - type Balance: Parameter + SimpleArithmetic + Codec + Default + Copy + As + As + As; - /// Type used for storing an account's index; implies the maximum number of accounts the system - /// can hold. - type AccountIndex: Parameter + Member + Codec + SimpleArithmetic + As + As + As + As + As + Copy; - /// A function which is invoked when the free-balance has fallen below the existential deposit and - /// has been reduced to zero. - /// - /// Gives a chance to clean up resources associated with the given account. - type OnFreeBalanceZero: OnFreeBalanceZero; - +pub trait Trait: balances::Trait + session::Trait { /// The overarching event type. type Event: From> + Into<::Event>; } @@ -149,13 +105,11 @@ decl_module! { #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub enum Call where aux: T::PublicAux { - fn transfer(aux, dest: RawAddress, value: T::Balance) -> Result = 0; - fn stake(aux) -> Result = 1; - fn unstake(aux, intentions_index: u32) -> Result = 2; - fn nominate(aux, target: RawAddress) -> Result = 3; - fn unnominate(aux, target_index: u32) -> Result = 4; - fn register_slash_preference(aux, intentions_index: u32, p: SlashPreference) -> Result = 5; - fn note_missed_proposal(aux, offline_val_indices: Vec) -> Result = 6; + fn stake(aux) -> Result = 0; + fn unstake(aux, intentions_index: u32) -> Result = 1; + fn nominate(aux, target: Address) -> Result = 2; + fn unnominate(aux, target_index: u32) -> Result = 3; + fn register_slash_preference(aux, intentions_index: u32, p: SlashPreference) -> Result = 4; } #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] @@ -165,14 +119,13 @@ decl_module! { fn set_validator_count(new: u32) -> Result = 2; fn force_new_era(apply_rewards: bool) -> Result = 3; fn set_offline_slash_grace(new: u32) -> Result = 4; - fn set_balance(who: RawAddress, free: T::Balance, reserved: T::Balance) -> Result = 5; } } /// An event in this module. #[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] #[derive(Encode, Decode, PartialEq, Eq, Clone)] -pub enum RawEvent { +pub enum RawEvent { /// All validators have been rewarded by the given balance. Reward(Balance), /// One validator (and their nominators) has been given a offline-warning (they're still within @@ -180,47 +133,28 @@ pub enum RawEvent { OfflineWarning(AccountId, u32), /// One validator (and their nominators) has been slashed by the given amount. OfflineSlash(AccountId, Balance), - /// A new account was created. - NewAccount(AccountId, AccountIndex, NewAccountOutcome), - /// An account was reaped. - ReapedAccount(AccountId), } -impl From> for () { - fn from(_: RawEvent) -> () { () } +impl From> for () { + fn from(_: RawEvent) -> () { () } } decl_storage! { trait Store for Module as Staking { - // The length of the bonding duration in eras. - pub BondingDuration get(bonding_duration): required T::BlockNumber; // The ideal number of staking participants. pub ValidatorCount get(validator_count): required u32; // Minimum number of staking participants before emergency conditions are imposed. pub MinimumValidatorCount: u32; // The length of a staking era in sessions. pub SessionsPerEra get(sessions_per_era): required T::BlockNumber; - // The total amount of stake on the system. - // TODO: this doesn't actually track total stake yet - it should do. - pub TotalStake get(total_stake): required T::Balance; - // The fee to be paid for making a transaction; the base. - pub TransactionBaseFee get(transaction_base_fee): required T::Balance; - // The fee to be paid for making a transaction; the per-byte portion. - pub TransactionByteFee get(transaction_byte_fee): required T::Balance; - // The minimum amount allowed to keep an account open. - pub ExistentialDeposit get(existential_deposit): required T::Balance; - // The amount credited to a destination's account whose index was reclaimed. - pub ReclaimRebate get(reclaim_rebate): required T::Balance; - // The fee required to make a transfer. - pub TransferFee get(transfer_fee): required T::Balance; - // The fee required to create an account. At least as big as ReclaimRebate. - pub CreationFee get(creation_fee): required T::Balance; // Maximum reward, per validator, that is provided per acceptable session. pub SessionReward get(session_reward): required T::Balance; // Slash, per validator that is taken per abnormal era end. pub EarlyEraSlash get(early_era_slash): required T::Balance; // Number of instances of offline reports before slashing begins for validators. pub OfflineSlashGrace get(offline_slash_grace): default u32; + // The length of the bonding duration in blocks. + pub BondingDuration get(bonding_duration): required T::BlockNumber; // The current era index. pub CurrentEra get(current_era): required T::BlockNumber; @@ -238,69 +172,20 @@ decl_storage! { pub NextSessionsPerEra get(next_sessions_per_era): T::BlockNumber; // The session index at which the era length last changed. pub LastEraLengthChange get(last_era_length_change): default T::BlockNumber; - // The current era stake threshold + + // The current era stake threshold - unused at present. Consider for removal. pub StakeThreshold get(stake_threshold): required T::Balance; - // The number of times a given validator has been reported offline. This gets decremented by one each era that passes. - pub SlashCount get(slash_count): default map [ T::AccountId => u32 ]; - - // The next free enumeration set. - pub NextEnumSet get(next_enum_set): required T::AccountIndex; - // The enumeration sets. - pub EnumSet get(enum_set): default map [ T::AccountIndex => Vec ]; - - // We are forcing a new era. - pub ForcingNewEra get(forcing_new_era): (); - - // The "free" balance of a given account. - // - // This is the only balance that matters in terms of most operations on tokens. It is - // alone used to determine the balance when in the contract execution environment. When this - // balance falls below the value of `ExistentialDeposit`, then the "current account" is - // deleted: specifically, `Bondage` and `FreeBalance`. Furthermore, `OnFreeBalanceZero` callback - // is invoked, giving a chance to external modules to cleanup data associated with - // the deleted account. - // - // `system::AccountNonce` is also deleted if `ReservedBalance` is also zero (it also gets - // collapsed to zero if it ever becomes less than `ExistentialDeposit`. - pub FreeBalance get(free_balance): default map [ T::AccountId => T::Balance ]; - - // The amount of the balance of a given account that is exterally reserved; this can still get - // slashed, but gets slashed last of all. - // - // This balance is a "reserve" balance that other subsystems use in order to set aside tokens - // that are still "owned" by the account holder, but which are unspendable. This is different - // and wholly unrelated to the `Bondage` system used for staking. - // - // When this balance falls below the value of `ExistentialDeposit`, then this "reserve account" - // is deleted: specifically, `ReservedBalance`. - // - // `system::AccountNonce` is also deleted if `FreeBalance` is also zero (it also gets - // collapsed to zero if it ever becomes less than `ExistentialDeposit`. - pub ReservedBalance get(reserved_balance): default map [ T::AccountId => T::Balance ]; - // The block at which the `who`'s funds become entirely liquid. pub Bondage get(bondage): default map [ T::AccountId => T::BlockNumber ]; + // The number of times a given validator has been reported offline. This gets decremented by one each era that passes. + pub SlashCount get(slash_count): default map [ T::AccountId => u32 ]; + + // We are forcing a new era. + pub ForcingNewEra get(forcing_new_era): (); } } -/// Whatever happened about the hint given when creating the new account. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))] -#[derive(Encode, Decode, PartialEq, Eq, Clone, Copy)] -pub enum NewAccountOutcome { - NoHint, - GoodHint, - BadHint, -} - -/// Outcome of a balance update. -pub enum UpdateBalanceOutcome { - /// Account balance was simply updated. - Updated, - /// The update has led to killing of the account. - AccountKilled, -} - impl Module { // PUBLIC IMMUTABLES @@ -314,112 +199,31 @@ impl Module { Self::sessions_per_era() * >::length() } - /// The combined balance of `who`. - pub fn voting_balance(who: &T::AccountId) -> T::Balance { - Self::free_balance(who) + Self::reserved_balance(who) - } - /// Balance of a (potential) validator that includes all nominators. pub fn nomination_balance(who: &T::AccountId) -> T::Balance { Self::nominators_for(who).iter() - .map(Self::voting_balance) + .map(>::total_balance) .fold(Zero::zero(), |acc, x| acc + x) } /// The total balance that can be slashed from an account. pub fn slashable_balance(who: &T::AccountId) -> T::Balance { Self::nominators_for(who).iter() - .map(Self::voting_balance) - .fold(Self::voting_balance(who), |acc, x| acc + x) - } - - /// Some result as `slash(who, value)` (but without the side-effects) assuming there are no - /// balance changes in the meantime and only the reserved balance is not taken into account. - pub fn can_slash(who: &T::AccountId, value: T::Balance) -> bool { - Self::free_balance(who) >= value - } - - /// Same result as `reserve(who, value)` (but without the side-effects) assuming there - /// are no balance changes in the meantime. - pub fn can_reserve(who: &T::AccountId, value: T::Balance) -> bool { - if let LockStatus::Liquid = Self::unlock_block(who) { - Self::free_balance(who) >= value - } else { - false - } - } - - /// Lookup an T::AccountIndex to get an Id, if there's one there. - pub fn lookup_index(index: T::AccountIndex) -> Option { - let enum_set_size = Self::enum_set_size(); - let set = Self::enum_set(index / enum_set_size); - let i: usize = (index % enum_set_size).as_(); - set.get(i).map(|x| x.clone()) - } - - /// `true` if the account `index` is ready for reclaim. - pub fn can_reclaim(try_index: T::AccountIndex) -> bool { - let enum_set_size = Self::enum_set_size(); - let try_set = Self::enum_set(try_index / enum_set_size); - let i = (try_index % enum_set_size).as_(); - i < try_set.len() && Self::voting_balance(&try_set[i]).is_zero() + .map(>::total_balance) + .fold(>::total_balance(who), |acc, x| acc + x) } /// The block at which the `who`'s funds become entirely liquid. pub fn unlock_block(who: &T::AccountId) -> LockStatus { match Self::bondage(who) { - i if i == T::BlockNumber::max_value() => LockStatus::Staked, + i if i == T::BlockNumber::max_value() => LockStatus::Bonded, i if i <= >::block_number() => LockStatus::Liquid, i => LockStatus::LockedUntil(i), } } - /// Lookup an address to get an Id, if there's one there. - pub fn lookup_address(a: address::Address) -> Option { - match a { - address::Address::Id(i) => Some(i), - address::Address::Index(i) => Self::lookup_index(i), - } - } - // PUBLIC DISPATCH - /// Transfer some unlocked staking balance to another staker. - pub fn transfer(aux: &T::PublicAux, dest: Address, value: T::Balance) -> Result { - let dest = Self::lookup(dest)?; - - let transactor = aux.ref_into(); - let from_balance = Self::free_balance(transactor); - let would_create = from_balance.is_zero(); - let fee = if would_create { Self::creation_fee() } else { Self::transfer_fee() }; - let liability = value + fee; - - 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"); - } - if >::get(transactor) > >::block_number() { - return Err("bondage too high to send value"); - } - - let to_balance = Self::free_balance(&dest); - 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); - } - - Ok(()) - } - /// Declare the desire to stake for the transactor. /// /// Effects will be felt at the beginning of the next era. @@ -446,8 +250,8 @@ impl Module { Self::apply_unstake(aux.ref_into(), intentions_index as usize) } - fn nominate(aux: &T::PublicAux, target: RawAddress) -> Result { - let target = Self::lookup(target)?; + fn nominate(aux: &T::PublicAux, target: Address) -> Result { + let target = >::lookup(target)?; let aux = aux.ref_into(); ensure!(Self::nominating(aux).is_none(), "Cannot nominate if already nominating."); @@ -490,7 +294,7 @@ impl Module { >::remove(source); // update bondage - >::insert(aux.ref_into(), Self::current_era() + Self::bonding_duration()); + >::insert(aux.ref_into(), >::block_number() + Self::bonding_duration()); Ok(()) } @@ -513,49 +317,6 @@ impl Module { 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_missed_proposal(aux: &T::PublicAux, offline_val_indices: Vec) -> Result { - assert!(aux.is_empty()); - assert!( - >::extrinsic_index() == Some(T::NOTE_MISSED_PROPOSAL_POSITION), - "note_missed_proposal extrinsic must be at position {} in the block", - T::NOTE_MISSED_PROPOSAL_POSITION - ); - - for validator_index in offline_val_indices.into_iter() { - let v = >::validators()[validator_index as usize].clone(); - let slash_count = Self::slash_count(&v); - >::insert(v.clone(), slash_count + 1); - let grace = Self::offline_slash_grace(); - - let event = if slash_count >= grace { - let instances = slash_count - grace; - let slash = Self::early_era_slash() << instances; - let next_slash = slash << 1u32; - let _ = Self::slash_validator(&v, slash); - if instances >= Self::slash_preference_of(&v).unstake_threshold - || Self::slashable_balance(&v) < next_slash - { - if let Some(pos) = Self::intentions().into_iter().position(|x| &x == &v) { - Self::apply_unstake(&v, pos) - .expect("pos derived correctly from Self::intentions(); \ - apply_unstake can only fail if pos wrong; \ - Self::intentions() doesn't change; qed"); - } - let _ = Self::force_new_era(false); - } - RawEvent::OfflineSlash(v, slash) - } else { - RawEvent::OfflineWarning(v, slash_count) - }; - Self::deposit_event(event); - } - - Ok(()) - } - // PRIV DISPATCH /// Deposit one of this module's events. @@ -594,195 +355,8 @@ impl Module { Ok(()) } - /// Set the balances of a given account. - fn set_balance(who: Address, free: T::Balance, reserved: T::Balance) -> Result { - let who = Self::lookup(who)?; - Self::set_free_balance(&who, free); - Self::set_reserved_balance(&who, reserved); - Ok(()) - } - // PUBLIC MUTABLES (DANGEROUS) - /// Set the free balance of an account to some new value. - /// - /// Will enforce ExistentialDeposit law, anulling the account as needed. - /// In that case it will return `AccountKilled`. - pub fn set_reserved_balance(who: &T::AccountId, balance: T::Balance) -> UpdateBalanceOutcome { - if balance < Self::existential_deposit() { - >::insert(who, balance); - Self::on_reserved_too_low(who); - UpdateBalanceOutcome::AccountKilled - } else { - >::insert(who, balance); - UpdateBalanceOutcome::Updated - } - } - - /// Set the free balance of an account to some new value. Will enforce ExistentialDeposit - /// law anulling the account as needed. - /// - /// Doesn't do any preparatory work for creating a new account, so should only be used when it - /// is known that the account already exists. - /// - /// Returns if the account was successfully updated or update has led to killing of the account. - pub fn set_free_balance(who: &T::AccountId, balance: T::Balance) -> UpdateBalanceOutcome { - // Commented out for no - but consider it instructive. - // assert!(!Self::voting_balance(who).is_zero()); - if balance < Self::existential_deposit() { - >::insert(who, balance); - Self::on_free_too_low(who); - UpdateBalanceOutcome::AccountKilled - } else { - >::insert(who, balance); - UpdateBalanceOutcome::Updated - } - } - - /// Set the free balance on an account to some new value. - /// - /// Same as [`set_free_balance`], but will create a new account. - /// - /// Returns if the account was successfully updated or update has led to killing of the account. - /// - /// [`set_free_balance`]: #method.set_free_balance - pub fn set_free_balance_creating(who: &T::AccountId, balance: T::Balance) -> UpdateBalanceOutcome { - let ed = >::existential_deposit(); - // If the balance is too low, then the account is reaped. - // NOTE: There are two balances for every account: `reserved_balance` and - // `free_balance`. This contract subsystem only cares about the latter: whenever - // the term "balance" is used *here* it should be assumed to mean "free balance" - // in the rest of the module. - // Free balance can never be less than ED. If that happens, it gets reduced to zero - // and the account information relevant to this subsystem is deleted (i.e. the - // account is reaped). - // NOTE: This is orthogonal to the `Bondage` value that an account has, a high - // value of which makes even the `free_balance` unspendable. - // TODO: enforce this for the other balance-altering functions. - if balance < ed { - Self::set_free_balance(who, balance); - UpdateBalanceOutcome::AccountKilled - } else { - if !>::exists(who) { - let outcome = Self::new_account(&who, balance); - let credit = match outcome { - NewAccountOutcome::GoodHint => balance + >::reclaim_rebate(), - _ => balance, - }; - Self::set_free_balance(who, credit); - Self::increase_total_stake_by(credit - balance); - } else { - Self::set_free_balance(who, balance); - } - - UpdateBalanceOutcome::Updated - } - } - - /// Deducts up to `value` from the combined balance of `who`, preferring to deduct from the - /// free balance. This function cannot fail. - /// - /// As much funds up to `value` will be deducted as possible. If this is less than `value`, - /// then `Some(remaining)` will be returned. Full completion is given by `None`. - pub fn slash(who: &T::AccountId, value: T::Balance) -> Option { - let free_balance = Self::free_balance(who); - let free_slash = cmp::min(free_balance, value); - Self::set_free_balance(who, free_balance - free_slash); - Self::decrease_total_stake_by(free_slash); - if free_slash < value { - Self::slash_reserved(who, value - free_slash) - } else { - None - } - } - - /// Adds up to `value` to the free balance of `who`. - /// - /// If `who` doesn't exist, nothing is done and an Err returned. - pub fn reward(who: &T::AccountId, value: T::Balance) -> Result { - if Self::voting_balance(who).is_zero() { - return Err("beneficiary account must pre-exist"); - } - Self::set_free_balance(who, Self::free_balance(who) + value); - Self::increase_total_stake_by(value); - Ok(()) - } - - /// Moves `value` from balance to reserved balance. - /// - /// If the free balance is lower than `value`, then no funds will be moved and an `Err` will - /// be returned to notify of this. This is different behaviour to `unreserve`. - pub fn reserve(who: &T::AccountId, value: T::Balance) -> Result { - let b = Self::free_balance(who); - if b < value { - return Err("not enough free funds") - } - if Self::unlock_block(who) != LockStatus::Liquid { - return Err("free funds are still bonded") - } - Self::set_reserved_balance(who, Self::reserved_balance(who) + value); - Self::set_free_balance(who, b - value); - Ok(()) - } - - /// Moves up to `value` from reserved balance to balance. This function cannot fail. - /// - /// As much funds up to `value` will be deducted as possible. If this is less than `value`, - /// then `Some(remaining)` will be returned. Full completion is given by `None`. - /// NOTE: This is different to `reserve`. - pub fn unreserve(who: &T::AccountId, value: T::Balance) -> Option { - let b = Self::reserved_balance(who); - let actual = cmp::min(b, value); - Self::set_free_balance(who, Self::free_balance(who) + actual); - Self::set_reserved_balance(who, b - actual); - if actual == value { - None - } else { - Some(value - actual) - } - } - - /// Deducts up to `value` from reserved balance of `who`. This function cannot fail. - /// - /// As much funds up to `value` will be deducted as possible. If this is less than `value`, - /// then `Some(remaining)` will be returned. Full completion is given by `None`. - pub fn slash_reserved(who: &T::AccountId, value: T::Balance) -> Option { - let b = Self::reserved_balance(who); - let slash = cmp::min(b, value); - Self::set_reserved_balance(who, b - slash); - Self::decrease_total_stake_by(slash); - if value == slash { - None - } else { - Some(value - slash) - } - } - - /// Moves up to `value` from reserved balance of account `slashed` to free balance of account - /// `beneficiary`. `beneficiary` must exist for this to succeed. If it does not, `Err` will be - /// returned. - /// - /// As much funds up to `value` will be moved as possible. If this is less than `value`, then - /// `Ok(Some(remaining))` will be returned. Full completion is given by `Ok(None)`. - pub fn transfer_reserved( - slashed: &T::AccountId, - beneficiary: &T::AccountId, - value: T::Balance - ) -> result::Result, &'static str> { - if Self::voting_balance(beneficiary).is_zero() { - return Err("beneficiary account must pre-exist"); - } - let b = Self::reserved_balance(slashed); - let slash = cmp::min(b, value); - Self::set_free_balance(beneficiary, Self::free_balance(beneficiary) + slash); - Self::set_reserved_balance(slashed, b - slash); - if value == slash { - Ok(None) - } else { - Ok(Some(value - slash)) - } - } - /// Slash a given validator by a specific amount. Removes the slash from their balance by preference, /// and reduces the nominators' balance if needed. fn slash_validator(v: &T::AccountId, slash: T::Balance) { @@ -792,13 +366,13 @@ impl Module { return } - if let Some(rem) = Self::slash(v, slash) { + if let Some(rem) = >::slash(v, slash) { let noms = Self::current_nominators_for(v); - let total = noms.iter().map(Self::voting_balance).fold(T::Balance::zero(), |acc, x| acc + x); + let total = noms.iter().map(>::total_balance).fold(T::Balance::zero(), |acc, x| acc + x); if !total.is_zero() { let safe_mul_rational = |b| b * rem / total;// TODO: avoid overflow for n in noms.iter() { - let _ = Self::slash(n, safe_mul_rational(Self::voting_balance(n))); // best effort - not much that can be done on fail. + let _ = >::slash(n, safe_mul_rational(>::total_balance(n))); // best effort - not much that can be done on fail. } } } @@ -808,13 +382,13 @@ impl Module { /// balance, pro-rata. fn reward_validator(who: &T::AccountId, reward: T::Balance) { let noms = Self::current_nominators_for(who); - let total = noms.iter().map(Self::voting_balance).fold(Self::voting_balance(who), |acc, x| acc + x); + let total = noms.iter().map(>::total_balance).fold(>::total_balance(who), |acc, x| acc + x); if !total.is_zero() { let safe_mul_rational = |b| b * reward / total;// TODO: avoid overflow for n in noms.iter() { - let _ = Self::reward(n, safe_mul_rational(Self::voting_balance(n))); + let _ = >::reward(n, safe_mul_rational(>::total_balance(n))); } - let _ = Self::reward(who, safe_mul_rational(Self::voting_balance(who))); + let _ = >::reward(who, safe_mul_rational(>::total_balance(who))); } } @@ -829,7 +403,7 @@ impl Module { >::put(intentions); >::remove(who); >::remove(who); - >::insert(who, Self::current_era() + Self::bonding_duration()); + >::insert(who, >::block_number() + Self::bonding_duration()); Ok(()) } @@ -916,125 +490,6 @@ impl Module { } >::set_validators(vals); } - - fn enum_set_size() -> T::AccountIndex { - T::AccountIndex::sa(ENUM_SET_SIZE) - } - - /// Register a new account (with existential balance). - fn new_account(who: &T::AccountId, balance: T::Balance) -> NewAccountOutcome { - let enum_set_size = Self::enum_set_size(); - let next_set_index = Self::next_enum_set(); - let reclaim_index_magic = T::AccountIndex::sa(RECLAIM_INDEX_MAGIC); - let reclaim_index_modulus = T::AccountIndex::sa(256usize); - let quantization = T::AccountIndex::sa(256usize); - - // A little easter-egg for reclaiming dead indexes.. - let ret = { - // we quantise the number of accounts so it stays constant over a reasonable - // period of time. - let quantized_account_count: T::AccountIndex = (next_set_index * enum_set_size / quantization + One::one()) * quantization; - // then modify the starting balance to be modulo this to allow it to potentially - // identify an account index for reuse. - let maybe_try_index = balance % >::sa(quantized_account_count * reclaim_index_modulus); - let maybe_try_index = As::::as_(maybe_try_index); - - // this identifier must end with magic byte 0x69 to trigger this check (a minor - // optimisation to ensure we don't check most unintended account creations). - if maybe_try_index % reclaim_index_modulus == reclaim_index_magic { - // reuse is probably intended. first, remove magic byte. - let try_index = maybe_try_index / reclaim_index_modulus; - - // then check to see if this balance identifies a dead account index. - let set_index = try_index / enum_set_size; - let mut try_set = Self::enum_set(set_index); - let item_index = (try_index % enum_set_size).as_(); - if item_index < try_set.len() { - if Self::voting_balance(&try_set[item_index]).is_zero() { - // yup - this index refers to a dead account. can be reused. - try_set[item_index] = who.clone(); - >::insert(set_index, try_set); - - Self::deposit_event(RawEvent::NewAccount(who.clone(), try_index, NewAccountOutcome::GoodHint)); - - return NewAccountOutcome::GoodHint - } - } - NewAccountOutcome::BadHint - } else { - NewAccountOutcome::NoHint - } - }; - - // insert normally as a back up - let mut set_index = next_set_index; - // defensive only: this loop should never iterate since we keep NextEnumSet up to date later. - let mut set = loop { - let set = Self::enum_set(set_index); - if set.len() < ENUM_SET_SIZE { - break set; - } - set_index += One::one(); - }; - - let index = T::AccountIndex::sa(set_index.as_() * ENUM_SET_SIZE + set.len()); - - // update set. - set.push(who.clone()); - - // keep NextEnumSet up to date - if set.len() == ENUM_SET_SIZE { - >::put(set_index + One::one()); - } - - // write set. - >::insert(set_index, set); - - Self::deposit_event(RawEvent::NewAccount(who.clone(), index, ret)); - - ret - } - - fn reap_account(who: &T::AccountId) { - >::remove(who); - Self::deposit_event(RawEvent::ReapedAccount(who.clone())); - } - - /// Kill an account's free portion. - fn on_free_too_low(who: &T::AccountId) { - Self::decrease_total_stake_by(Self::free_balance(who)); - >::remove(who); - >::remove(who); - - T::OnFreeBalanceZero::on_free_balance_zero(who); - - if Self::reserved_balance(who).is_zero() { - Self::reap_account(who); - } - } - - /// Kill an account's reserved portion. - fn on_reserved_too_low(who: &T::AccountId) { - Self::decrease_total_stake_by(Self::reserved_balance(who)); - >::remove(who); - - if Self::free_balance(who).is_zero() { - Self::reap_account(who); - } - } - - /// Increase TotalStake by Value. - pub fn increase_total_stake_by(value: T::Balance) { - if let Some(v) = >::total_stake().checked_add(&value) { - >::put(v); - } - } - /// Decrease TotalStake by Value. - pub fn decrease_total_stake_by(value: T::Balance) { - if let Some(v) = >::total_stake().checked_sub(&value) { - >::put(v); - } - } } impl Executable for Module { @@ -1048,26 +503,49 @@ impl OnSessionChange for Module { } } -impl AuxLookup for Module { - type Source = address::Address; - type Target = T::AccountId; - fn lookup(a: Self::Source) -> result::Result { - match a { - address::Address::Id(i) => Ok(i), - address::Address::Index(i) => >::lookup_index(i).ok_or("invalid account index"), +impl balances::EnsureAccountLiquid for Module { + fn ensure_account_liquid(who: &T::AccountId) -> Result { + if Self::bondage(who) <= >::block_number() { + Ok(()) + } else { + Err("cannot transfer illiquid funds") } } } -impl MakePayment for Module { - fn make_payment(transactor: &T::AccountId, encoded_len: usize) -> Result { - let b = Self::free_balance(transactor); - let transaction_fee = Self::transaction_base_fee() + Self::transaction_byte_fee() * >::sa(encoded_len as u64); - if b < transaction_fee + Self::existential_deposit() { - return Err("not enough funds for transaction fee"); - } - Self::set_free_balance(transactor, b - transaction_fee); - Self::decrease_total_stake_by(transaction_fee); - Ok(()) +impl balances::OnFreeBalanceZero for Module { + fn on_free_balance_zero(who: &T::AccountId) { + >::remove(who); + } +} + +impl consensus::OnOfflineValidator for Module { + fn on_offline_validator(validator_index: usize) { + let v = >::validators()[validator_index].clone(); + let slash_count = Self::slash_count(&v); + >::insert(v.clone(), slash_count + 1); + let grace = Self::offline_slash_grace(); + + let event = if slash_count >= grace { + let instances = slash_count - grace; + let slash = Self::early_era_slash() << instances; + let next_slash = slash << 1u32; + let _ = Self::slash_validator(&v, slash); + if instances >= Self::slash_preference_of(&v).unstake_threshold + || Self::slashable_balance(&v) < next_slash + { + if let Some(pos) = Self::intentions().into_iter().position(|x| &x == &v) { + Self::apply_unstake(&v, pos) + .expect("pos derived correctly from Self::intentions(); \ + apply_unstake can only fail if pos wrong; \ + Self::intentions() doesn't change; qed"); + } + let _ = Self::force_new_era(false); + } + RawEvent::OfflineSlash(v, slash) + } else { + RawEvent::OfflineWarning(v, slash_count) + }; + Self::deposit_event(event); } } diff --git a/substrate/substrate/runtime/staking/src/mock.rs b/substrate/substrate/runtime/staking/src/mock.rs index 7b3097010d..25447c39cb 100644 --- a/substrate/substrate/runtime/staking/src/mock.rs +++ b/substrate/substrate/runtime/staking/src/mock.rs @@ -23,7 +23,7 @@ use primitives::traits::{HasPublicAux, Identity}; use primitives::testing::{Digest, Header}; use substrate_primitives::{H256, KeccakHasher}; use runtime_io; -use {GenesisConfig, Module, Trait, consensus, session, system, timestamp}; +use {GenesisConfig, Module, Trait, consensus, session, system, timestamp, balances}; // Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. #[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)] @@ -32,10 +32,12 @@ impl HasPublicAux for Test { type PublicAux = u64; } impl consensus::Trait for Test { - type PublicAux = ::PublicAux; + const NOTE_OFFLINE_POSITION: u32 = 1; type SessionKey = u64; + type OnOfflineValidator = (); } impl system::Trait for Test { + type PublicAux = ::PublicAux; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -45,6 +47,13 @@ impl system::Trait for Test { type Header = Header; type Event = (); } +impl balances::Trait for Test { + type Balance = u64; + type AccountIndex = u64; + type OnFreeBalanceZero = Staking; + type EnsureAccountLiquid = Staking; + type Event = (); +} impl session::Trait for Test { type ConvertAccountIdToSessionKey = Identity; type OnSessionChange = Staking; @@ -55,10 +64,6 @@ impl timestamp::Trait for Test { type Moment = u64; } impl Trait for Test { - const NOTE_MISSED_PROPOSAL_POSITION: u32 = 1; - type Balance = u64; - type AccountIndex = u64; - type OnFreeBalanceZero = (); type Event = (); } @@ -77,9 +82,7 @@ pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64 session_length, validators: vec![10, 20], }.build_storage().unwrap()); - t.extend(GenesisConfig::{ - sessions_per_era, - current_era, + t.extend(balances::GenesisConfig::{ balances: if monied { if reward > 0 { vec![(1, 10 * balance_factor), (2, 20 * balance_factor), (3, 30 * balance_factor), (4, 40 * balance_factor), (10, balance_factor), (20, balance_factor)] @@ -89,16 +92,20 @@ pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64 } else { vec![(10, balance_factor), (20, balance_factor)] }, - intentions: vec![10, 20], - validator_count: 2, - minimum_validator_count: 0, - bonding_duration: 3, transaction_base_fee: 0, transaction_byte_fee: 0, existential_deposit: ext_deposit, transfer_fee: 0, creation_fee: 0, reclaim_rebate: 0, + }.build_storage().unwrap()); + t.extend(GenesisConfig::{ + sessions_per_era, + current_era, + intentions: vec![10, 20], + validator_count: 2, + minimum_validator_count: 0, + bonding_duration: sessions_per_era * session_length * 3, session_reward: reward, early_era_slash: if monied { 20 } else { 0 }, offline_slash_grace: 0, @@ -110,6 +117,7 @@ pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64 } pub type System = system::Module; +pub type Balances = balances::Module; pub type Session = session::Module; pub type Timestamp = timestamp::Module; pub type Staking = Module; diff --git a/substrate/substrate/runtime/staking/src/tests.rs b/substrate/substrate/runtime/staking/src/tests.rs index 809838379a..e60a7b129b 100644 --- a/substrate/substrate/runtime/staking/src/tests.rs +++ b/substrate/substrate/runtime/staking/src/tests.rs @@ -1,175 +1,171 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Tests for the module. #![cfg(test)] use super::*; +use consensus::OnOfflineValidator; use runtime_io::with_externalities; -use mock::{Session, Staking, System, Timestamp, Test, new_test_ext}; +use mock::{Balances, Session, Staking, System, Timestamp, Test, new_test_ext}; #[test] -fn note_null_missed_proposal_should_work() { +fn note_null_offline_should_work() { with_externalities(&mut new_test_ext(0, 3, 3, 0, true, 10), || { assert_eq!(Staking::offline_slash_grace(), 0); assert_eq!(Staking::slash_count(&10), 0); - assert_eq!(Staking::free_balance(&10), 1); + assert_eq!(Balances::free_balance(&10), 1); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![])); assert_eq!(Staking::slash_count(&10), 0); - assert_eq!(Staking::free_balance(&10), 1); + assert_eq!(Balances::free_balance(&10), 1); assert!(Staking::forcing_new_era().is_none()); }); } #[test] -fn note_missed_proposal_should_work() { +fn note_offline_should_work() { with_externalities(&mut new_test_ext(0, 3, 3, 0, true, 10), || { - Staking::set_free_balance(&10, 70); + Balances::set_free_balance(&10, 70); assert_eq!(Staking::offline_slash_grace(), 0); assert_eq!(Staking::slash_count(&10), 0); - assert_eq!(Staking::free_balance(&10), 70); + assert_eq!(Balances::free_balance(&10), 70); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![0])); + Staking::on_offline_validator(0); assert_eq!(Staking::slash_count(&10), 1); - assert_eq!(Staking::free_balance(&10), 50); + assert_eq!(Balances::free_balance(&10), 50); assert!(Staking::forcing_new_era().is_none()); }); } #[test] -fn note_missed_proposal_exponent_should_work() { +fn note_offline_exponent_should_work() { with_externalities(&mut new_test_ext(0, 3, 3, 0, true, 10), || { - Staking::set_free_balance(&10, 150); + Balances::set_free_balance(&10, 150); assert_eq!(Staking::offline_slash_grace(), 0); assert_eq!(Staking::slash_count(&10), 0); - assert_eq!(Staking::free_balance(&10), 150); + assert_eq!(Balances::free_balance(&10), 150); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![0])); + Staking::on_offline_validator(0); assert_eq!(Staking::slash_count(&10), 1); - assert_eq!(Staking::free_balance(&10), 130); + assert_eq!(Balances::free_balance(&10), 130); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![0])); + Staking::on_offline_validator(0); assert_eq!(Staking::slash_count(&10), 2); - assert_eq!(Staking::free_balance(&10), 90); + assert_eq!(Balances::free_balance(&10), 90); assert!(Staking::forcing_new_era().is_none()); }); } #[test] -fn note_missed_proposal_grace_should_work() { +fn note_offline_grace_should_work() { with_externalities(&mut new_test_ext(0, 3, 3, 0, true, 10), || { - Staking::set_free_balance(&10, 70); - Staking::set_free_balance(&20, 70); + Balances::set_free_balance(&10, 70); + Balances::set_free_balance(&20, 70); assert_ok!(Staking::set_offline_slash_grace(1)); assert_eq!(Staking::offline_slash_grace(), 1); assert_eq!(Staking::slash_count(&10), 0); - assert_eq!(Staking::free_balance(&10), 70); + assert_eq!(Balances::free_balance(&10), 70); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![0])); + Staking::on_offline_validator(0); assert_eq!(Staking::slash_count(&10), 1); - assert_eq!(Staking::free_balance(&10), 70); + assert_eq!(Balances::free_balance(&10), 70); assert_eq!(Staking::slash_count(&20), 0); - assert_eq!(Staking::free_balance(&20), 70); + assert_eq!(Balances::free_balance(&20), 70); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![0, 1])); + Staking::on_offline_validator(0); + Staking::on_offline_validator(1); assert_eq!(Staking::slash_count(&10), 2); - assert_eq!(Staking::free_balance(&10), 50); + assert_eq!(Balances::free_balance(&10), 50); assert_eq!(Staking::slash_count(&20), 1); - assert_eq!(Staking::free_balance(&20), 70); + assert_eq!(Balances::free_balance(&20), 70); assert!(Staking::forcing_new_era().is_none()); }); } #[test] -fn note_missed_proposal_force_unstake_session_change_should_work() { +fn note_offline_force_unstake_session_change_should_work() { with_externalities(&mut new_test_ext(0, 3, 3, 0, true, 10), || { - Staking::set_free_balance(&10, 70); - Staking::set_free_balance(&20, 70); + Balances::set_free_balance(&10, 70); + Balances::set_free_balance(&20, 70); assert_ok!(Staking::stake(&1)); assert_eq!(Staking::slash_count(&10), 0); - assert_eq!(Staking::free_balance(&10), 70); + assert_eq!(Balances::free_balance(&10), 70); assert_eq!(Staking::intentions(), vec![10, 20, 1]); assert_eq!(Session::validators(), vec![10, 20]); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![0])); - assert_eq!(Staking::free_balance(&10), 50); + Staking::on_offline_validator(0); + assert_eq!(Balances::free_balance(&10), 50); assert_eq!(Staking::slash_count(&10), 1); assert_eq!(Staking::intentions(), vec![10, 20, 1]); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![0])); + Staking::on_offline_validator(0); assert_eq!(Staking::intentions(), vec![1, 20]); - assert_eq!(Staking::free_balance(&10), 10); + assert_eq!(Balances::free_balance(&10), 10); assert!(Staking::forcing_new_era().is_some()); }); } #[test] -fn note_missed_proposal_auto_unstake_session_change_should_work() { +fn note_offline_auto_unstake_session_change_should_work() { with_externalities(&mut new_test_ext(0, 3, 3, 0, true, 10), || { - Staking::set_free_balance(&10, 7000); - Staking::set_free_balance(&20, 7000); + Balances::set_free_balance(&10, 7000); + Balances::set_free_balance(&20, 7000); assert_ok!(Staking::register_slash_preference(&10, 0, SlashPreference { unstake_threshold: 1 })); assert_eq!(Staking::intentions(), vec![10, 20]); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![0, 1])); - assert_eq!(Staking::free_balance(&10), 6980); - assert_eq!(Staking::free_balance(&20), 6980); + Staking::on_offline_validator(0); + Staking::on_offline_validator(1); + assert_eq!(Balances::free_balance(&10), 6980); + assert_eq!(Balances::free_balance(&20), 6980); assert_eq!(Staking::intentions(), vec![10, 20]); assert!(Staking::forcing_new_era().is_none()); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![0, 1])); - assert_eq!(Staking::free_balance(&10), 6940); - assert_eq!(Staking::free_balance(&20), 6940); + Staking::on_offline_validator(0); + Staking::on_offline_validator(1); + assert_eq!(Balances::free_balance(&10), 6940); + assert_eq!(Balances::free_balance(&20), 6940); assert_eq!(Staking::intentions(), vec![20]); assert!(Staking::forcing_new_era().is_some()); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![1])); - assert_eq!(Staking::free_balance(&10), 6940); - assert_eq!(Staking::free_balance(&20), 6860); + Staking::on_offline_validator(1); + assert_eq!(Balances::free_balance(&10), 6940); + assert_eq!(Balances::free_balance(&20), 6860); assert_eq!(Staking::intentions(), vec![20]); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![1])); - assert_eq!(Staking::free_balance(&10), 6940); - assert_eq!(Staking::free_balance(&20), 6700); + Staking::on_offline_validator(1); + assert_eq!(Balances::free_balance(&10), 6940); + assert_eq!(Balances::free_balance(&20), 6700); assert_eq!(Staking::intentions(), vec![0u64; 0]); }); } -#[test] -fn reward_should_work() { - with_externalities(&mut new_test_ext(0, 3, 3, 0, true, 10), || { - assert_eq!(Staking::voting_balance(&10), 1); - assert_ok!(Staking::reward(&10, 10)); - assert_eq!(Staking::voting_balance(&10), 11); - assert_eq!(>::get(), 112); - }); -} + + #[test] fn rewards_should_work() { @@ -179,26 +175,26 @@ fn rewards_should_work() { assert_eq!(Staking::last_era_length_change(), 0); assert_eq!(Staking::current_era(), 0); assert_eq!(Session::current_index(), 0); - assert_eq!(Staking::voting_balance(&10), 1); + assert_eq!(Balances::total_balance(&10), 1); System::set_block_number(3); Timestamp::set_timestamp(15); // on time. Session::check_rotate_session(); assert_eq!(Staking::current_era(), 0); assert_eq!(Session::current_index(), 1); - assert_eq!(Staking::voting_balance(&10), 11); + assert_eq!(Balances::total_balance(&10), 11); System::set_block_number(6); Timestamp::set_timestamp(31); // a little late Session::check_rotate_session(); assert_eq!(Staking::current_era(), 0); assert_eq!(Session::current_index(), 2); - assert_eq!(Staking::voting_balance(&10), 20); // less reward + assert_eq!(Balances::total_balance(&10), 20); // less reward System::set_block_number(9); Timestamp::set_timestamp(50); // very late Session::check_rotate_session(); assert_eq!(Staking::current_era(), 1); assert_eq!(Session::current_index(), 3); - assert_eq!(Staking::voting_balance(&10), 27); // much less reward + assert_eq!(Balances::total_balance(&10), 27); // much less reward }); } @@ -210,112 +206,40 @@ fn slashing_should_work() { assert_eq!(Staking::last_era_length_change(), 0); assert_eq!(Staking::current_era(), 0); assert_eq!(Session::current_index(), 0); - assert_eq!(Staking::voting_balance(&10), 1); + assert_eq!(Balances::total_balance(&10), 1); System::set_block_number(3); Session::check_rotate_session(); assert_eq!(Staking::current_era(), 0); assert_eq!(Session::current_index(), 1); - assert_eq!(Staking::voting_balance(&10), 11); + assert_eq!(Balances::total_balance(&10), 11); System::set_block_number(6); Session::check_rotate_session(); assert_eq!(Staking::current_era(), 0); assert_eq!(Session::current_index(), 2); - assert_eq!(Staking::voting_balance(&10), 21); + assert_eq!(Balances::total_balance(&10), 21); System::set_block_number(7); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![0, 1])); - assert_eq!(Staking::voting_balance(&10), 1); + Staking::on_offline_validator(0); + Staking::on_offline_validator(1); + assert_eq!(Balances::total_balance(&10), 1); }); } -#[test] -fn indexing_lookup_should_work() { - with_externalities(&mut new_test_ext(10, 1, 2, 0, true, 0), || { - assert_eq!(Staking::lookup_index(0), Some(1)); - assert_eq!(Staking::lookup_index(1), Some(2)); - assert_eq!(Staking::lookup_index(2), Some(3)); - assert_eq!(Staking::lookup_index(3), Some(4)); - assert_eq!(Staking::lookup_index(4), None); - }); -} -#[test] -fn default_indexing_on_new_accounts_should_work() { - with_externalities(&mut new_test_ext(10, 1, 2, 0, true, 0), || { - assert_eq!(Staking::lookup_index(4), None); - assert_ok!(Staking::transfer(&1, 5.into(), 10)); - assert_eq!(Staking::lookup_index(4), Some(5)); - }); -} - -#[test] -fn dust_account_removal_should_work() { - with_externalities(&mut new_test_ext(256 * 10, 1, 2, 0, true, 0), || { - System::inc_account_nonce(&2); - assert_eq!(System::account_nonce(&2), 1); - assert_eq!(Staking::voting_balance(&2), 256 * 20); - - assert_ok!(Staking::transfer(&2, 5.into(), 256 * 10 + 1)); // index 1 (account 2) becomes zombie - assert_eq!(Staking::voting_balance(&2), 0); - assert_eq!(Staking::voting_balance(&5), 256 * 10 + 1); - assert_eq!(System::account_nonce(&2), 0); - }); -} - -#[test] -fn reclaim_indexing_on_new_accounts_should_work() { - with_externalities(&mut new_test_ext(256 * 1, 1, 2, 0, true, 0), || { - assert_eq!(Staking::lookup_index(1), Some(2)); - assert_eq!(Staking::lookup_index(4), None); - assert_eq!(Staking::voting_balance(&2), 256 * 20); - - assert_ok!(Staking::transfer(&2, 5.into(), 256 * 20)); // account 2 becomes zombie freeing index 1 for reclaim) - assert_eq!(Staking::voting_balance(&2), 0); - - assert_ok!(Staking::transfer(&5, 6.into(), 256 * 1 + 0x69)); // account 6 takes index 1. - assert_eq!(Staking::voting_balance(&6), 256 * 1 + 0x69); - assert_eq!(Staking::lookup_index(1), Some(6)); - }); -} - -#[test] -fn reserved_balance_should_prevent_reclaim_count() { - with_externalities(&mut new_test_ext(256 * 1, 1, 2, 0, true, 0), || { - System::inc_account_nonce(&2); - assert_eq!(Staking::lookup_index(1), Some(2)); - assert_eq!(Staking::lookup_index(4), None); - assert_eq!(Staking::voting_balance(&2), 256 * 20); - - assert_ok!(Staking::reserve(&2, 256 * 19 + 1)); // account 2 becomes mostly reserved - assert_eq!(Staking::free_balance(&2), 0); // "free" account deleted." - assert_eq!(Staking::voting_balance(&2), 256 * 19 + 1); // reserve still exists. - assert_eq!(System::account_nonce(&2), 1); - - assert_ok!(Staking::transfer(&4, 5.into(), 256 * 1 + 0x69)); // account 4 tries to take index 1 for account 5. - assert_eq!(Staking::voting_balance(&5), 256 * 1 + 0x69); - assert_eq!(Staking::lookup_index(1), Some(2)); // but fails. - assert_eq!(System::account_nonce(&2), 1); - - assert_eq!(Staking::slash(&2, 256 * 18 + 2), None); // account 2 gets slashed - assert_eq!(Staking::voting_balance(&2), 0); // "free" account deleted." - assert_eq!(System::account_nonce(&2), 0); - - assert_ok!(Staking::transfer(&4, 6.into(), 256 * 1 + 0x69)); // account 4 tries to take index 1 again for account 6. - assert_eq!(Staking::voting_balance(&6), 256 * 1 + 0x69); - assert_eq!(Staking::lookup_index(1), Some(6)); // and succeeds. - }); -} #[test] fn staking_should_work() { with_externalities(&mut new_test_ext(0, 1, 2, 0, true, 0), || { + assert_eq!(Staking::era_length(), 2); assert_eq!(Staking::validator_count(), 2); - assert_eq!(Staking::bonding_duration(), 3); assert_eq!(Session::validators(), vec![10, 20]); + + assert_ok!(Staking::set_bonding_duration(2)); + assert_eq!(Staking::bonding_duration(), 2); // Block 1: Add three validators. No obvious change. System::set_block_number(1); @@ -347,7 +271,7 @@ fn staking_should_work() { // Block 5: Transfer stake from highest to lowest. No change yet. System::set_block_number(5); - assert_ok!(Staking::transfer(&4, 1.into(), 40)); + assert_ok!(Balances::transfer(&4, 1.into(), 40)); Session::check_rotate_session(); // Block 6: Lowest now validator. @@ -384,20 +308,20 @@ fn nominating_and_rewards_should_work() { Session::check_rotate_session(); assert_eq!(Staking::current_era(), 1); assert_eq!(Session::validators(), vec![1, 3]); // 4 + 1, 3 - assert_eq!(Staking::voting_balance(&1), 10); - assert_eq!(Staking::voting_balance(&2), 20); - assert_eq!(Staking::voting_balance(&3), 30); - assert_eq!(Staking::voting_balance(&4), 40); + assert_eq!(Balances::total_balance(&1), 10); + assert_eq!(Balances::total_balance(&2), 20); + assert_eq!(Balances::total_balance(&3), 30); + assert_eq!(Balances::total_balance(&4), 40); System::set_block_number(2); assert_ok!(Staking::unnominate(&4, 0)); Session::check_rotate_session(); assert_eq!(Staking::current_era(), 2); assert_eq!(Session::validators(), vec![3, 2]); - assert_eq!(Staking::voting_balance(&1), 12); - assert_eq!(Staking::voting_balance(&2), 20); - assert_eq!(Staking::voting_balance(&3), 40); - assert_eq!(Staking::voting_balance(&4), 48); + assert_eq!(Balances::total_balance(&1), 12); + assert_eq!(Balances::total_balance(&2), 20); + assert_eq!(Balances::total_balance(&3), 40); + assert_eq!(Balances::total_balance(&4), 48); System::set_block_number(3); assert_ok!(Staking::stake(&4)); @@ -405,17 +329,17 @@ fn nominating_and_rewards_should_work() { assert_ok!(Staking::nominate(&3, 1.into())); Session::check_rotate_session(); assert_eq!(Session::validators(), vec![1, 4]); - assert_eq!(Staking::voting_balance(&1), 12); - assert_eq!(Staking::voting_balance(&2), 30); - assert_eq!(Staking::voting_balance(&3), 50); - assert_eq!(Staking::voting_balance(&4), 48); + assert_eq!(Balances::total_balance(&1), 12); + assert_eq!(Balances::total_balance(&2), 30); + assert_eq!(Balances::total_balance(&3), 50); + assert_eq!(Balances::total_balance(&4), 48); System::set_block_number(4); Session::check_rotate_session(); - assert_eq!(Staking::voting_balance(&1), 13); - assert_eq!(Staking::voting_balance(&2), 30); - assert_eq!(Staking::voting_balance(&3), 58); - assert_eq!(Staking::voting_balance(&4), 58); + assert_eq!(Balances::total_balance(&1), 13); + assert_eq!(Balances::total_balance(&2), 30); + assert_eq!(Balances::total_balance(&3), 58); + assert_eq!(Balances::total_balance(&4), 58); }); } @@ -424,7 +348,7 @@ fn nominating_slashes_should_work() { with_externalities(&mut new_test_ext(0, 2, 2, 0, true, 10), || { assert_eq!(Staking::era_length(), 4); assert_eq!(Staking::validator_count(), 2); - assert_eq!(Staking::bonding_duration(), 3); + assert_eq!(Staking::bonding_duration(), 12); assert_eq!(Session::validators(), vec![10, 20]); System::set_block_number(2); @@ -440,18 +364,19 @@ fn nominating_slashes_should_work() { assert_eq!(Staking::current_era(), 1); assert_eq!(Session::validators(), vec![1, 3]); // 1 + 4, 3 + 2 - assert_eq!(Staking::voting_balance(&1), 10); - assert_eq!(Staking::voting_balance(&2), 20); - assert_eq!(Staking::voting_balance(&3), 30); - assert_eq!(Staking::voting_balance(&4), 40); + assert_eq!(Balances::total_balance(&1), 10); + assert_eq!(Balances::total_balance(&2), 20); + assert_eq!(Balances::total_balance(&3), 30); + assert_eq!(Balances::total_balance(&4), 40); System::set_block_number(5); ::system::ExtrinsicIndex::::put(1); - assert_ok!(Staking::note_missed_proposal(&Default::default(), vec![0, 1])); - assert_eq!(Staking::voting_balance(&1), 0); - assert_eq!(Staking::voting_balance(&2), 20); - assert_eq!(Staking::voting_balance(&3), 10); - assert_eq!(Staking::voting_balance(&4), 30); + Staking::on_offline_validator(0); + Staking::on_offline_validator(1); + assert_eq!(Balances::total_balance(&1), 0); + assert_eq!(Balances::total_balance(&2), 20); + assert_eq!(Balances::total_balance(&3), 10); + assert_eq!(Balances::total_balance(&4), 30); }); } @@ -536,235 +461,22 @@ fn staking_eras_work() { }); } -#[test] -fn staking_balance_works() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 42); - assert_eq!(Staking::free_balance(&1), 42); - assert_eq!(Staking::reserved_balance(&1), 0); - assert_eq!(Staking::voting_balance(&1), 42); - assert_eq!(Staking::free_balance(&2), 0); - assert_eq!(Staking::reserved_balance(&2), 0); - assert_eq!(Staking::voting_balance(&2), 0); - }); -} - -#[test] -fn staking_balance_transfer_works() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 111); - Staking::increase_total_stake_by(111); - assert_ok!(Staking::transfer(&1, 2.into(), 69)); - assert_eq!(Staking::voting_balance(&1), 42); - assert_eq!(Staking::voting_balance(&2), 69); - }); -} - #[test] fn staking_balance_transfer_when_bonded_should_not_work() { with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 111); + Balances::set_free_balance(&1, 111); assert_ok!(Staking::stake(&1)); - assert_noop!(Staking::transfer(&1, 2.into(), 69), "bondage too high to send value"); - }); -} - -#[test] -fn reserving_balance_should_work() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 111); - - assert_eq!(Staking::voting_balance(&1), 111); - assert_eq!(Staking::free_balance(&1), 111); - assert_eq!(Staking::reserved_balance(&1), 0); - - assert_ok!(Staking::reserve(&1, 69)); - - assert_eq!(Staking::voting_balance(&1), 111); - assert_eq!(Staking::free_balance(&1), 42); - assert_eq!(Staking::reserved_balance(&1), 69); - }); -} - -#[test] -fn staking_balance_transfer_when_reserved_should_not_work() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 111); - assert_ok!(Staking::reserve(&1, 69)); - assert_noop!(Staking::transfer(&1, 2.into(), 69), "balance too low to send value"); - }); -} - -#[test] -fn deducting_balance_should_work() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 111); - assert_ok!(Staking::reserve(&1, 69)); - assert_eq!(Staking::free_balance(&1), 42); + assert_noop!(Balances::transfer(&1, 2.into(), 69), "cannot transfer illiquid funds"); }); } #[test] fn deducting_balance_when_bonded_should_not_work() { with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 111); + Balances::set_free_balance(&1, 111); >::insert(1, 2); System::set_block_number(1); assert_eq!(Staking::unlock_block(&1), LockStatus::LockedUntil(2)); - assert_noop!(Staking::reserve(&1, 69), "free funds are still bonded"); - }); -} - -#[test] -fn refunding_balance_should_work() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 42); - Staking::set_reserved_balance(&1, 69); - Staking::unreserve(&1, 69); - assert_eq!(Staking::free_balance(&1), 111); - assert_eq!(Staking::reserved_balance(&1), 0); - }); -} - -#[test] -fn slashing_balance_should_work() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 111); - Staking::increase_total_stake_by(111); - assert_ok!(Staking::reserve(&1, 69)); - assert!(Staking::slash(&1, 69).is_none()); - assert_eq!(Staking::free_balance(&1), 0); - assert_eq!(Staking::reserved_balance(&1), 42); - assert_eq!(>::get(), 44); - }); -} - -#[test] -fn slashing_incomplete_balance_should_work() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 42); - Staking::increase_total_stake_by(42); - assert_ok!(Staking::reserve(&1, 21)); - assert!(Staking::slash(&1, 69).is_some()); - assert_eq!(Staking::free_balance(&1), 0); - assert_eq!(Staking::reserved_balance(&1), 0); - assert_eq!(>::get(), 2); - }); -} - -#[test] -fn unreserving_balance_should_work() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 111); - assert_ok!(Staking::reserve(&1, 111)); - Staking::unreserve(&1, 42); - assert_eq!(Staking::reserved_balance(&1), 69); - assert_eq!(Staking::free_balance(&1), 42); - }); -} - -#[test] -fn slashing_reserved_balance_should_work() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 111); - Staking::increase_total_stake_by(111); - assert_ok!(Staking::reserve(&1, 111)); - assert!(Staking::slash_reserved(&1, 42).is_none()); - assert_eq!(Staking::reserved_balance(&1), 69); - assert_eq!(Staking::free_balance(&1), 0); - assert_eq!(>::get(), 71); - }); -} - -#[test] -fn slashing_incomplete_reserved_balance_should_work() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 111); - Staking::increase_total_stake_by(111); - assert_ok!(Staking::reserve(&1, 42)); - assert!(Staking::slash_reserved(&1, 69).is_some()); - assert_eq!(Staking::free_balance(&1), 69); - assert_eq!(Staking::reserved_balance(&1), 0); - assert_eq!(>::get(), 71); - }); -} - -#[test] -fn transferring_reserved_balance_should_work() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 110); - Staking::set_free_balance(&2, 1); - assert_ok!(Staking::reserve(&1, 110)); - assert_ok!(Staking::transfer_reserved(&1, &2, 41), None); - assert_eq!(Staking::reserved_balance(&1), 69); - assert_eq!(Staking::free_balance(&1), 0); - assert_eq!(Staking::reserved_balance(&2), 0); - assert_eq!(Staking::free_balance(&2), 42); - }); -} - -#[test] -fn transferring_reserved_balance_to_nonexistent_should_fail() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 111); - assert_ok!(Staking::reserve(&1, 111)); - assert_noop!(Staking::transfer_reserved(&1, &2, 42), "beneficiary account must pre-exist"); - }); -} - -#[test] -fn transferring_incomplete_reserved_balance_should_work() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - Staking::set_free_balance(&1, 110); - Staking::set_free_balance(&2, 1); - assert_ok!(Staking::reserve(&1, 41)); - assert!(Staking::transfer_reserved(&1, &2, 69).unwrap().is_some()); - assert_eq!(Staking::reserved_balance(&1), 0); - assert_eq!(Staking::free_balance(&1), 69); - assert_eq!(Staking::reserved_balance(&2), 0); - assert_eq!(Staking::free_balance(&2), 42); - }); -} - -#[test] -fn transferring_too_high_value_should_not_panic() { - with_externalities(&mut new_test_ext(0, 1, 3, 1, false, 0), || { - >::insert(1, u64::max_value()); - >::insert(2, 1); - - assert_err!( - Staking::transfer(&1, 2.into(), u64::max_value()), - "destination balance too high to receive value" - ); - - assert_eq!(Staking::free_balance(&1), u64::max_value()); - assert_eq!(Staking::free_balance(&2), 1); - }); -} - -#[test] -fn account_removal_on_free_too_low() { - with_externalities(&mut new_test_ext(100, 1, 3, 1, false, 0), || { - // Setup two accounts with free balance above the exsistential threshold. - { - Staking::set_free_balance(&1, 110); - Staking::increase_total_stake_by(110); - - Staking::set_free_balance(&2, 110); - Staking::increase_total_stake_by(110); - - assert_eq!(>::get(), 732); - } - - // Transfer funds from account 1 of such amount that after this transfer - // the balance of account 1 will be below the exsistential threshold. - // This should lead to the removal of all balance of this account. - assert_ok!(Staking::transfer(&1, 2.into(), 20)); - - // Verify free balance removal of account 1. - assert_eq!(Staking::free_balance(&1), 0); - - // Verify that TotalStake tracks balance removal when free balance is too low. - assert_eq!(>::get(), 642); + assert_noop!(Balances::reserve(&1, 69), "cannot transfer illiquid funds"); }); } diff --git a/substrate/substrate/runtime/system/src/lib.rs b/substrate/substrate/runtime/system/src/lib.rs index c91799dc93..420192468f 100644 --- a/substrate/substrate/runtime/system/src/lib.rs +++ b/substrate/substrate/runtime/system/src/lib.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! System manager: Handles lowest level stuff like depositing logs, basic set up and take down of //! temporary storage entries, access to old block hashes. @@ -45,7 +45,7 @@ extern crate safe_mix; use rstd::prelude::*; use primitives::traits::{self, CheckEqual, SimpleArithmetic, SimpleBitOps, Zero, One, Bounded, - Hash, Member, MaybeDisplay}; + Hash, Member, MaybeDisplay, RefInto, MaybeEmpty}; use runtime_support::{StorageValue, StorageMap, Parameter}; use safe_mix::TripletMix; @@ -69,6 +69,9 @@ pub fn extrinsics_data_root(xts: Vec>) -> H::Output { } pub trait Trait: Eq + Clone { + // We require that PublicAux impl MaybeEmpty, since we require that inherents - or unsigned + // user-level extrinsics - can exist. + type PublicAux: RefInto + MaybeEmpty; type Index: Parameter + Member + Default + MaybeDisplay + SimpleArithmetic + Copy; type BlockNumber: Parameter + Member + MaybeDisplay + SimpleArithmetic + Default + Bounded + Copy + rstd::hash::Hash; type Hash: Parameter + Member + MaybeDisplay + SimpleBitOps + Default + Copy + CheckEqual + rstd::hash::Hash + AsRef<[u8]>; @@ -287,6 +290,7 @@ mod tests { #[derive(Clone, Eq, PartialEq)] pub struct Test; impl Trait for Test { + type PublicAux = u64; type Index = u64; type BlockNumber = u64; type Hash = H256; diff --git a/substrate/substrate/runtime/timestamp/src/lib.rs b/substrate/substrate/runtime/timestamp/src/lib.rs index db1c7e1281..80781ab075 100644 --- a/substrate/substrate/runtime/timestamp/src/lib.rs +++ b/substrate/substrate/runtime/timestamp/src/lib.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Timestamp manager: just handles the current timestamp. @@ -43,7 +43,7 @@ use runtime_support::dispatch::Result; use runtime_primitives::traits::{Executable, MaybeEmpty, SimpleArithmetic, As, Zero}; pub trait Trait: consensus::Trait where - ::PublicAux: MaybeEmpty + ::PublicAux: MaybeEmpty { // the position of the required timestamp-set extrinsic. const TIMESTAMP_SET_POSITION: u32; @@ -152,6 +152,7 @@ mod tests { type PublicAux = u64; } impl system::Trait for Test { + type PublicAux = u64; type Index = u64; type BlockNumber = u64; type Hash = H256; @@ -162,8 +163,9 @@ mod tests { type Event = (); } impl consensus::Trait for Test { - type PublicAux = u64; + const NOTE_OFFLINE_POSITION: u32 = 1; type SessionKey = u64; + type OnOfflineValidator = (); } impl Trait for Test { const TIMESTAMP_SET_POSITION: u32 = 0; diff --git a/substrate/substrate/runtime/version/src/lib.rs b/substrate/substrate/runtime/version/src/lib.rs index 1dbf4aa2da..ab66ecc88d 100644 --- a/substrate/substrate/runtime/version/src/lib.rs +++ b/substrate/substrate/runtime/version/src/lib.rs @@ -1,18 +1,18 @@ // Copyright 2017 Parity Technologies (UK) Ltd. -// This file is part of Substrate Demo. +// This file is part of Substrate. -// Substrate Demo is free software: you can redistribute it and/or modify +// 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 Demo is distributed in the hope that it will be useful, +// 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 Demo. If not, see . +// along with Substrate. If not, see . //! Version module for runtime; Provide a function that returns runtime version. diff --git a/substrate/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index 7d2f104d0966a541ae8c43a747f71e22157011bc..625a093a6d41b355265e3b42b40b9e2de6c07a84 100644 GIT binary patch delta 2985 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 F{TB*+o+JPO diff --git a/substrate/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.wasm b/substrate/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.wasm index 5618789cf379b570bb2f6e2d80c4e0d069a00cf7..874a7a2da0c3f640b3238887bada703f0bc868c7 100755 GIT binary patch delta 2910 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