Light friendly storage tracking: changes trie + extending over ranges (#628)

* changes_trie

* changs_trie: continue

* changes_trie: adding tests

* fixed TODO

* removed obsolete ExtrinsicChanges

* encodable ChangesTrieConfiguration

* removed polkadot fle

* fixed grumbles

* ext_storage_changes_root returns u32

* moved changes trie root to digest

* removed commented code

* read storage values from native code

* fixed grumbles

* fixed grumbles

* missing comma
This commit is contained in:
Svyatoslav Nikolsky
2018-09-18 10:14:41 +03:00
committed by Gav Wood
parent 24479cd7f5
commit 7fa337afbc
64 changed files with 3130 additions and 788 deletions
+4 -7
View File
@@ -18,13 +18,11 @@
#![cfg(feature = "std")]
use std::collections::HashMap;
use rstd::prelude::*;
use codec::Encode;
use runtime_support::StorageValue;
use primitives::traits::As;
use substrate_primitives::Blake2Hasher;
use {runtime_io, primitives};
use primitives;
use super::{Trait, Intentions, CurrentEra, OfflineSlashGrace, MinimumValidatorCount,
BondingDuration, SessionsPerEra, ValidatorCount, SessionReward, OfflineSlash};
@@ -60,8 +58,8 @@ impl<T: Trait> Default for GenesisConfig<T> {
}
impl<T: Trait> primitives::BuildStorage for GenesisConfig<T> {
fn build_storage(self) -> ::std::result::Result<HashMap<Vec<u8>, Vec<u8>>, String> {
let r: runtime_io::TestExternalities<Blake2Hasher> = map![
fn build_storage(self) -> ::std::result::Result<primitives::StorageMap, String> {
Ok(map![
Self::hash(<Intentions<T>>::key()).to_vec() => self.intentions.encode(),
Self::hash(<SessionsPerEra<T>>::key()).to_vec() => self.sessions_per_era.encode(),
Self::hash(<ValidatorCount<T>>::key()).to_vec() => self.validator_count.encode(),
@@ -71,7 +69,6 @@ impl<T: Trait> primitives::BuildStorage for GenesisConfig<T> {
Self::hash(<SessionReward<T>>::key()).to_vec() => self.session_reward.encode(),
Self::hash(<OfflineSlash<T>>::key()).to_vec() => self.offline_slash.encode(),
Self::hash(<OfflineSlashGrace<T>>::key()).to_vec() => self.offline_slash_grace.encode()
];
Ok(r.into())
])
}
}
+13 -5
View File
@@ -20,8 +20,8 @@
use primitives::BuildStorage;
use primitives::traits::{Identity};
use primitives::testing::{Digest, Header};
use substrate_primitives::{H256, Blake2Hasher};
use primitives::testing::{Digest, DigestItem, Header};
use substrate_primitives::{H256, Blake2Hasher, RlpCodec};
use runtime_io;
use {GenesisConfig, Module, Trait, consensus, session, system, timestamp, balances};
@@ -34,7 +34,7 @@ impl_outer_origin!{
pub struct Test;
impl consensus::Trait for Test {
const NOTE_OFFLINE_POSITION: u32 = 1;
type Log = u64;
type Log = DigestItem;
type SessionKey = u64;
type OnOfflineValidator = ();
}
@@ -48,6 +48,7 @@ impl system::Trait for Test {
type AccountId = u64;
type Header = Header;
type Event = ();
type Log = DigestItem;
}
impl balances::Trait for Test {
type Balance = u64;
@@ -70,7 +71,14 @@ impl Trait for Test {
type Event = ();
}
pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64, current_era: u64, monied: bool, reward: u64) -> runtime_io::TestExternalities<Blake2Hasher> {
pub fn new_test_ext(
ext_deposit: u64,
session_length: u64,
sessions_per_era: u64,
current_era: u64,
monied: bool,
reward: u64
) -> runtime_io::TestExternalities<Blake2Hasher, RlpCodec> {
let mut t = system::GenesisConfig::<Test>::default().build_storage().unwrap();
let balance_factor = if ext_deposit > 0 {
256
@@ -116,7 +124,7 @@ pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64
t.extend(timestamp::GenesisConfig::<Test>{
period: 5
}.build_storage().unwrap());
t.into()
runtime_io::TestExternalities::new(t)
}
pub type System = system::Module<Test>;
+14 -14
View File
@@ -29,7 +29,7 @@ fn note_null_offline_should_work() {
assert_eq!(Staking::offline_slash_grace(), 0);
assert_eq!(Staking::slash_count(&10), 0);
assert_eq!(Balances::free_balance(&10), 1);
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
assert_eq!(Staking::slash_count(&10), 0);
assert_eq!(Balances::free_balance(&10), 1);
assert!(Staking::forcing_new_era().is_none());
@@ -43,7 +43,7 @@ fn note_offline_should_work() {
assert_eq!(Staking::offline_slash_grace(), 0);
assert_eq!(Staking::slash_count(&10), 0);
assert_eq!(Balances::free_balance(&10), 70);
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
Staking::on_offline_validator(0);
assert_eq!(Staking::slash_count(&10), 1);
assert_eq!(Balances::free_balance(&10), 50);
@@ -58,11 +58,11 @@ fn note_offline_exponent_should_work() {
assert_eq!(Staking::offline_slash_grace(), 0);
assert_eq!(Staking::slash_count(&10), 0);
assert_eq!(Balances::free_balance(&10), 150);
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
Staking::on_offline_validator(0);
assert_eq!(Staking::slash_count(&10), 1);
assert_eq!(Balances::free_balance(&10), 130);
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
Staking::on_offline_validator(0);
assert_eq!(Staking::slash_count(&10), 2);
assert_eq!(Balances::free_balance(&10), 90);
@@ -81,14 +81,14 @@ fn note_offline_grace_should_work() {
assert_eq!(Staking::slash_count(&10), 0);
assert_eq!(Balances::free_balance(&10), 70);
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
Staking::on_offline_validator(0);
assert_eq!(Staking::slash_count(&10), 1);
assert_eq!(Balances::free_balance(&10), 70);
assert_eq!(Staking::slash_count(&20), 0);
assert_eq!(Balances::free_balance(&20), 70);
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
Staking::on_offline_validator(0);
Staking::on_offline_validator(1);
assert_eq!(Staking::slash_count(&10), 2);
@@ -111,13 +111,13 @@ fn note_offline_force_unstake_session_change_should_work() {
assert_eq!(Staking::intentions(), vec![10, 20, 1]);
assert_eq!(Session::validators(), vec![10, 20]);
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
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::<Test>::put(1);
System::set_extrinsic_index(1);
Staking::on_offline_validator(0);
assert_eq!(Staking::intentions(), vec![1, 20]);
assert_eq!(Balances::free_balance(&10), 10);
@@ -134,7 +134,7 @@ fn note_offline_auto_unstake_session_change_should_work() {
assert_eq!(Staking::intentions(), vec![10, 20]);
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
Staking::on_offline_validator(0);
Staking::on_offline_validator(1);
assert_eq!(Balances::free_balance(&10), 6980);
@@ -142,7 +142,7 @@ fn note_offline_auto_unstake_session_change_should_work() {
assert_eq!(Staking::intentions(), vec![10, 20]);
assert!(Staking::forcing_new_era().is_none());
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
Staking::on_offline_validator(0);
Staking::on_offline_validator(1);
assert_eq!(Balances::free_balance(&10), 6940);
@@ -150,13 +150,13 @@ fn note_offline_auto_unstake_session_change_should_work() {
assert_eq!(Staking::intentions(), vec![20]);
assert!(Staking::forcing_new_era().is_some());
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
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::<Test>::put(1);
System::set_extrinsic_index(1);
Staking::on_offline_validator(1);
assert_eq!(Balances::free_balance(&10), 6940);
assert_eq!(Balances::free_balance(&20), 6700);
@@ -219,7 +219,7 @@ fn slashing_should_work() {
assert_eq!(Balances::total_balance(&10), 21);
System::set_block_number(7);
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
Staking::on_offline_validator(0);
Staking::on_offline_validator(1);
assert_eq!(Balances::total_balance(&10), 1);
@@ -390,7 +390,7 @@ fn nominating_slashes_should_work() {
assert_eq!(Balances::total_balance(&4), 40);
System::set_block_number(5);
::system::ExtrinsicIndex::<Test>::put(1);
System::set_extrinsic_index(1);
Staking::on_offline_validator(0);
Staking::on_offline_validator(1);
assert_eq!(Balances::total_balance(&1), 0);