Revert and redo #952 (#1133)

* Revert "Pruning changes trie without digests (#952)"

This reverts commit 6f9a505fba.

* pruning changes tries without digests

* u64::max_value()

* Update wasm files and fix merge conflict

* Fixes tests
This commit is contained in:
Bastian Köcher
2018-11-18 10:09:18 +01:00
committed by Gav Wood
parent 6f9a505fba
commit d149f3358a
28 changed files with 290 additions and 131 deletions
+5 -12
View File
@@ -1661,11 +1661,6 @@ dependencies = [
"rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "nan-preserving-float"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "native-tls"
version = "0.2.2"
@@ -2609,7 +2604,7 @@ dependencies = [
"sr-std 0.1.0",
"substrate-primitives 0.1.0",
"wabt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -3177,7 +3172,7 @@ dependencies = [
"substrate-state-machine 0.1.0",
"substrate-trie 0.4.0",
"wabt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -3313,7 +3308,7 @@ dependencies = [
"twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"uint 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
"untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -4156,12 +4151,11 @@ dependencies = [
[[package]]
name = "wasmi"
version = "0.4.1"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 1.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
"memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -4473,7 +4467,6 @@ dependencies = [
"checksum multihash 0.8.1-pre (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "<none>"
"checksum multistream-select 0.1.0 (git+https://github.com/libp2p/rust-libp2p?rev=d961e656a74d1bab5366d371a06f9e10d5f4a6c5)" = "<none>"
"checksum names 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ef320dab323286b50fb5cdda23f61c796a72a89998ab565ca32525c5c556f2da"
"checksum nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34d4f00fcc2f4c9efa8cc971db0da9e28290e28e97af47585e48691ef10ff31f"
"checksum native-tls 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff8e08de0070bbf4c31f452ea2a70db092f36f6f2e4d897adf5674477d488fb2"
"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
"checksum nix 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d37e713a259ff641624b6cb20e3b12b2952313ba36b6823c0f16e6cfd9e5de17"
@@ -4650,7 +4643,7 @@ dependencies = [
"checksum wabt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "182ae543249ccf2705f324d233891c1176fca142e137b55ba43d9dbfe93f18a2"
"checksum wabt-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ca77c6b934a2b32618941b2f565aac43b8cb7141378c3b4fba4d8fcdcd57da3"
"checksum want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3"
"checksum wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d184c4b7081f30316f74f8d73c197314dcb56ea7af9323522b42a2fa9cb19453"
"checksum wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8a60b9508cff2b7c27ed41200dd668806280740fadc8c88440e9c88625e84f1a"
"checksum websocket 0.21.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c9faed2bff8af2ea6b9f8b917d3d00b467583f6781fe3def174a9e33c879703"
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
+57 -56
View File
@@ -1276,6 +1276,62 @@ mod tests {
check_changes(&backend, 2, changes2);
}
#[test]
fn changes_trie_storage_works_with_forks() {
let backend = Backend::<Block>::new_test(1000, 100);
let changes0 = vec![(b"k0".to_vec(), b"v0".to_vec())];
let changes1 = vec![(b"k1".to_vec(), b"v1".to_vec())];
let changes2 = vec![(b"k2".to_vec(), b"v2".to_vec())];
let block0 = insert_header(&backend, 0, Default::default(), changes0.clone(), Default::default());
let block1 = insert_header(&backend, 1, block0, changes1.clone(), Default::default());
let block2 = insert_header(&backend, 2, block1, changes2.clone(), Default::default());
let changes2_1_0 = vec![(b"k3".to_vec(), b"v3".to_vec())];
let changes2_1_1 = vec![(b"k4".to_vec(), b"v4".to_vec())];
let block2_1_0 = insert_header(&backend, 3, block2, changes2_1_0.clone(), Default::default());
let block2_1_1 = insert_header(&backend, 4, block2_1_0, changes2_1_1.clone(), Default::default());
let changes2_2_0 = vec![(b"k5".to_vec(), b"v5".to_vec())];
let changes2_2_1 = vec![(b"k6".to_vec(), b"v6".to_vec())];
let block2_2_0 = insert_header(&backend, 3, block2, changes2_2_0.clone(), Default::default());
let block2_2_1 = insert_header(&backend, 4, block2_2_0, changes2_2_1.clone(), Default::default());
// finalize block1
backend.changes_tries_storage.meta.write().finalized_number = 1;
// branch1: when asking for finalized block hash
let (changes1_root, _) = prepare_changes(changes1);
let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_1_1, number: 4 };
assert_eq!(backend.changes_tries_storage.root(&anchor, 1), Ok(Some(changes1_root)));
// branch2: when asking for finalized block hash
let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_2_1, number: 4 };
assert_eq!(backend.changes_tries_storage.root(&anchor, 1), Ok(Some(changes1_root)));
// branch1: when asking for non-finalized block hash (search by traversal)
let (changes2_1_0_root, _) = prepare_changes(changes2_1_0);
let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_1_1, number: 4 };
assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_1_0_root)));
// branch2: when asking for non-finalized block hash (search using canonicalized hint)
let (changes2_2_0_root, _) = prepare_changes(changes2_2_0);
let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_2_1, number: 4 };
assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_2_0_root)));
// finalize first block of branch2 (block2_2_0)
backend.changes_tries_storage.meta.write().finalized_number = 3;
// branch2: when asking for finalized block of this branch
assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_2_0_root)));
// branch1: when asking for finalized block of other branch
// => result is incorrect (returned for the block of branch1), but this is expected,
// because the other fork is abandoned (forked before finalized header)
let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_1_1, number: 4 };
assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_2_0_root)));
}
#[test]
fn changes_tries_with_digest_are_pruned_on_finalization() {
let mut backend = Backend::<Block>::new_test(1000, 100);
@@ -1378,6 +1434,7 @@ mod tests {
backend.blockchain().header(BlockId::Number(num)).unwrap().unwrap().digest().logs().iter()
.find(|i| i.as_changes_trie_root().is_some()).unwrap().as_changes_trie_root().unwrap().clone()
}
let root1 = read_changes_trie_root(&backend, 1); assert_eq!(backend.changes_tries_storage.root(&anchor, 1).unwrap(), Some(root1));
let root2 = read_changes_trie_root(&backend, 2); assert_eq!(backend.changes_tries_storage.root(&anchor, 2).unwrap(), Some(root2));
let root3 = read_changes_trie_root(&backend, 3); assert_eq!(backend.changes_tries_storage.root(&anchor, 3).unwrap(), Some(root3));
@@ -1400,62 +1457,6 @@ mod tests {
assert!(backend.changes_tries_storage.get(&root3).unwrap().is_some());
}
#[test]
fn changes_trie_storage_works_with_forks() {
let backend = Backend::<Block>::new_test(1000, 100);
let changes0 = vec![(b"k0".to_vec(), b"v0".to_vec())];
let changes1 = vec![(b"k1".to_vec(), b"v1".to_vec())];
let changes2 = vec![(b"k2".to_vec(), b"v2".to_vec())];
let block0 = insert_header(&backend, 0, Default::default(), changes0.clone(), Default::default());
let block1 = insert_header(&backend, 1, block0, changes1.clone(), Default::default());
let block2 = insert_header(&backend, 2, block1, changes2.clone(), Default::default());
let changes2_1_0 = vec![(b"k3".to_vec(), b"v3".to_vec())];
let changes2_1_1 = vec![(b"k4".to_vec(), b"v4".to_vec())];
let block2_1_0 = insert_header(&backend, 3, block2, changes2_1_0.clone(), Default::default());
let block2_1_1 = insert_header(&backend, 4, block2_1_0, changes2_1_1.clone(), Default::default());
let changes2_2_0 = vec![(b"k5".to_vec(), b"v5".to_vec())];
let changes2_2_1 = vec![(b"k6".to_vec(), b"v6".to_vec())];
let block2_2_0 = insert_header(&backend, 3, block2, changes2_2_0.clone(), Default::default());
let block2_2_1 = insert_header(&backend, 4, block2_2_0, changes2_2_1.clone(), Default::default());
// finalize block1
backend.changes_tries_storage.meta.write().finalized_number = 1;
// branch1: when asking for finalized block hash
let (changes1_root, _) = prepare_changes(changes1);
let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_1_1, number: 4 };
assert_eq!(backend.changes_tries_storage.root(&anchor, 1), Ok(Some(changes1_root)));
// branch2: when asking for finalized block hash
let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_2_1, number: 4 };
assert_eq!(backend.changes_tries_storage.root(&anchor, 1), Ok(Some(changes1_root)));
// branch1: when asking for non-finalized block hash (search by traversal)
let (changes2_1_0_root, _) = prepare_changes(changes2_1_0);
let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_1_1, number: 4 };
assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_1_0_root)));
// branch2: when asking for non-finalized block hash (search using canonicalized hint)
let (changes2_2_0_root, _) = prepare_changes(changes2_2_0);
let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_2_1, number: 4 };
assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_2_0_root)));
// finalize first block of branch2 (block2_2_0)
backend.changes_tries_storage.meta.write().finalized_number = 3;
// branch2: when asking for finalized block of this branch
assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_2_0_root)));
// branch1: when asking for finalized block of other branch
// => result is incorrect (returned for the block of branch1), but this is expected,
// because the other fork is abandoned (forked before finalized header)
let anchor = state_machine::ChangesTrieAnchorBlockId { hash: block2_1_1, number: 4 };
assert_eq!(backend.changes_tries_storage.root(&anchor, 3), Ok(Some(changes2_2_0_root)));
}
#[test]
fn tree_route_works() {
let backend = Backend::<Block>::new_test(1000, 100);
@@ -465,14 +465,20 @@ macro_rules! impl_runtime_apis {
)*
}
impl_runtime_apis! {
@EXTEND_FUNCTIONS
$runtime;
$( $fn_name ( $( $arg_name: $arg_ty ),* ); )*;
;
$trait_name;
$( $( $generic ),* )*;
{ $( $fn_name ( $( $arg_name: $arg_ty ),* ); )* }
$( $rest )*
}
};
(
$runtime:ident;
$( $fn_name_parsed:ident ( $( $arg_name_parsed:ident : $arg_ty_parsed:ty ),* ); )*;
$( $trait_name_parsed:ident $( < $( $parsed_generic:ident ),* > )*::$fn_name_parsed:ident (
$( $arg_name_parsed:ident : $arg_ty_parsed:ty ),* );
)*;
impl $trait_name:ident $( < $( $generic:ident ),* > )* for $runtime_ignore:ident {
$(
fn $fn_name:ident ( $( $arg_name:ident : $arg_ty:ty ),* ) $( -> $return_ty:ty )* {
@@ -490,15 +496,73 @@ macro_rules! impl_runtime_apis {
)*
}
impl_runtime_apis! {
@EXTEND_FUNCTIONS
$runtime;
$( $fn_name_parsed ( $( $arg_name_parsed: $arg_ty_parsed ),* ); )*
$( $fn_name ( $( $arg_name: $arg_ty ),* ); )*;
$(
$trait_name_parsed $( < $( $parsed_generic ),* > )*
::$fn_name_parsed ( $( $arg_name_parsed: $arg_ty_parsed ),* );
)*;
$trait_name;
$( $( $generic ),* )*;
{ $( $fn_name ( $( $arg_name: $arg_ty ),* ); )* }
$( $rest )*
}
};
(@EXTEND_FUNCTIONS
$runtime:ident;
$( $trait_name_parsed:ident $( < $( $parsed_generic:ident ),* > )*::$fn_name_parsed:ident (
$( $arg_name_parsed:ident : $arg_ty_parsed:ty ),* );
)*;
$trait_name:ident;
$( $generic:ident ),*;
{
$fn_name_extend:ident ( $( $arg_name_extend:ident : $arg_ty_extend:ty ),* );
$( $extend_rest:tt )*
}
$( $rest:tt )*
) => {
impl_runtime_apis! {
@EXTEND_FUNCTIONS
$runtime;
$(
$trait_name_parsed $( < $( $parsed_generic ),* > )*
::$fn_name_parsed ( $( $arg_name_parsed: $arg_ty_parsed ),* );
)*
$trait_name < $( $generic ),* >
::$fn_name_extend ( $( $arg_name_extend: $arg_ty_extend ),* );;
$trait_name;
$( $generic ),*;
{
$( $extend_rest )*
}
$( $rest )*
}
};
(@EXTEND_FUNCTIONS
$runtime:ident;
$( $trait_name_parsed:ident $( < $( $parsed_generic:ident ),* > )*::$fn_name_parsed:ident (
$( $arg_name_parsed:ident : $arg_ty_parsed:ty ),* );
)*;
$trait_name:ident;
$( $generic:ident ),*;
{}
$( $rest:tt )*
) => {
impl_runtime_apis! {
$runtime;
$(
$trait_name_parsed $( < $( $parsed_generic ),* > )*
::$fn_name_parsed ( $( $arg_name_parsed: $arg_ty_parsed ),* );
)*;
$( $rest )*
}
};
(
$runtime:ident;
$( $fn_name:ident ( $( $arg_name:ident : $arg_ty:ty ),* ); )*;
$(
$trait_name:ident $( < $( $generic:ident ),* > )*
::$fn_name:ident ( $( $arg_name:ident : $arg_ty:ty ),* );
)*;
) => {
pub mod api {
use super::*;
@@ -511,6 +575,7 @@ macro_rules! impl_runtime_apis {
Some({impl_runtime_apis! {
@GENERATE_IMPL_CALL
$runtime;
$trait_name $( < $( $generic ),* > )*;
$fn_name;
$( $arg_name : $arg_ty ),*;
data;
@@ -536,6 +601,7 @@ macro_rules! impl_runtime_apis {
let output = { impl_runtime_apis! {
@GENERATE_IMPL_CALL
$runtime;
$trait_name $( < $( $generic ),* > )*;
$fn_name;
$( $arg_name : $arg_ty ),*;
input;
@@ -553,6 +619,7 @@ macro_rules! impl_runtime_apis {
};
(@GENERATE_IMPL_CALL
$runtime:ident;
$trait_name:ident $( < $( $generic:ident ),* > )*;
$fn_name:ident;
$arg_name:ident : $arg_ty:ty;
$input:ident;
@@ -562,11 +629,12 @@ macro_rules! impl_runtime_apis {
None => panic!("Bad input data provided to {}", stringify!($fn_name)),
};
let output = $runtime::$fn_name($arg_name);
let output = <$runtime as $trait_name $( < $( $generic ),* > )*>::$fn_name($arg_name);
$crate::runtime_api::Encode::encode(&output)
};
(@GENERATE_IMPL_CALL
$runtime:ident;
$trait_name:ident $( < $( $generic:ident ),* > )*;
$fn_name:ident;
$( $arg_name:ident : $arg_ty:ty ),*;
$input:ident;
@@ -576,7 +644,7 @@ macro_rules! impl_runtime_apis {
None => panic!("Bad input data provided to {}", stringify!($fn_name)),
};
let output = $runtime::$fn_name($( $arg_name ),*);
let output = <$runtime as $trait_name $( < $( $generic ),* > )*>::$fn_name($( $arg_name ),*);
$crate::runtime_api::Encode::encode(&output)
};
}
+37 -14
View File
@@ -286,7 +286,6 @@ enum CheckedHeader<H> {
Checked(H, u64, ed25519::Signature),
}
/// check a header has been signed by the right key. If the slot is too far in the future, an error will be returned.
/// if it's successful, returns the pre-header, the slot number, and the signat.
//
@@ -328,15 +327,37 @@ fn check_header<B: Block>(slot_now: u64, mut header: B::Header, hash: B::Hash, a
}
}
/// A verifier for Aura blocks.
pub struct AuraVerifier<C> {
config: Config,
client: Arc<C>,
/// Extra verification for Aura blocks.
pub trait ExtraVerification<B: Block>: Send + Sync {
/// Future that resolves when the block is verified or fails with error if not.
type Verified: IntoFuture<Item=(),Error=String>;
/// Do additional verification for this block.
fn verify(&self, header: &B::Header, body: Option<&[B::Extrinsic]>) -> Self::Verified;
}
impl<B: Block, C> Verifier<B> for AuraVerifier<C> where
/// No-op extra verification.
#[derive(Debug, Clone, Copy)]
pub struct NothingExtra;
impl<B: Block> ExtraVerification<B> for NothingExtra {
type Verified = Result<(), String>;
fn verify(&self, _: &B::Header, _: Option<&[B::Extrinsic]>) -> Self::Verified {
Ok(())
}
}
/// A verifier for Aura blocks.
pub struct AuraVerifier<C, E> {
config: Config,
client: Arc<C>,
extra: E,
}
impl<B: Block, C, E> Verifier<B> for AuraVerifier<C, E> where
C: Authorities<B> + BlockImport<B> + Send + Sync,
DigestItemFor<B>: CompatibleDigestItem,
E: ExtraVerification<B>,
{
fn verify(
&self,
@@ -352,6 +373,8 @@ impl<B: Block, C> Verifier<B> for AuraVerifier<C> where
let authorities = self.client.authorities(&BlockId::Hash(parent_hash))
.map_err(|e| format!("Could not fetch authorities at {:?}: {:?}", parent_hash, e))?;
let extra_verification = self.extra.verify(&header, body.as_ref().map(|x| &x[..]));
// we add one to allow for some small drift.
// FIXME: in the future, alter this queue to allow deferring of headers
// https://github.com/paritytech/substrate/issues/1019
@@ -362,6 +385,7 @@ impl<B: Block, C> Verifier<B> for AuraVerifier<C> where
debug!(target: "aura", "Checked {:?}; importing.", pre_header);
extra_verification.into_future().wait()?;
let import_block = ImportBlock {
origin,
header: pre_header,
@@ -384,20 +408,19 @@ impl<B: Block, C> Verifier<B> for AuraVerifier<C> where
}
/// The Aura import queue type.
pub type AuraImportQueue<B, C> = BasicQueue<B, AuraVerifier<C>>;
pub type AuraImportQueue<B, C, E> = BasicQueue<B, AuraVerifier<C, E>>;
/// Start an import queue for the Aura consensus algorithm.
pub fn import_queue<B, C>(config: Config, client: Arc<C>) -> AuraImportQueue<B, C> where
pub fn import_queue<B, C, E>(config: Config, client: Arc<C>, extra: E) -> AuraImportQueue<B, C, E> where
B: Block,
C: Authorities<B> + BlockImport<B,Error=client::error::Error> + Send + Sync,
DigestItemFor<B>: CompatibleDigestItem,
E: ExtraVerification<B>,
{
let verifier = Arc::new(AuraVerifier { config, client: client.clone() });
let verifier = Arc::new(AuraVerifier { config, client: client.clone(), extra, });
BasicQueue::new(verifier, client)
}
#[cfg(test)]
mod tests {
use super::*;
@@ -443,12 +466,12 @@ mod tests {
const TEST_ROUTING_INTERVAL: Duration = Duration::from_millis(50);
pub struct AuraTestNet {
peers: Vec<Arc<Peer<AuraVerifier<PeersClient>, ()>>>,
peers: Vec<Arc<Peer<AuraVerifier<PeersClient, NothingExtra>, ()>>>,
started: bool
}
impl TestNetFactory for AuraTestNet {
type Verifier = AuraVerifier<PeersClient>;
type Verifier = AuraVerifier<PeersClient, NothingExtra>;
type PeerData = ();
/// Create new test network with peers and given config.
@@ -463,7 +486,7 @@ mod tests {
-> Arc<Self::Verifier>
{
let config = Config { local_key: None, slot_duration: SLOT_DURATION };
Arc::new(AuraVerifier { client, config })
Arc::new(AuraVerifier { client, config, extra: NothingExtra })
}
fn peer(&self, i: usize) -> &Peer<Self::Verifier, ()> {
+1 -1
View File
@@ -14,7 +14,7 @@ substrate-state-machine = { path = "../state-machine" }
sr-version = { path = "../sr-version" }
serde = "1.0"
serde_derive = "1.0"
wasmi = { version = "0.4.1" }
wasmi = { version = "0.4.2" }
byteorder = "1.1"
lazy_static = "1.0"
parking_lot = "*"
+1 -1
View File
@@ -15,7 +15,7 @@ serde_derive = { version = "1.0", optional = true }
uint = { version = "0.5.0-beta", default-features = false }
twox-hash = { version = "1.1.0", optional = true }
byteorder = { version = "1.1", default-features = false }
wasmi = { version = "0.4.1", optional = true }
wasmi = { version = "0.4.2", optional = true }
hash-db = { git = "https://github.com/paritytech/trie", default-features = false }
hash256-std-hasher = { git = "https://github.com/paritytech/trie", default-features = false }
ring = { version = "0.12", optional = true }
+1 -1
View File
@@ -8,7 +8,7 @@ build = "build.rs"
rustc_version = "0.2"
[dependencies]
wasmi = { version = "0.4.1", optional = true }
wasmi = { version = "0.4.2", optional = true }
substrate-primitives = { path = "../primitives", default-features = false }
sr-std = { path = "../sr-std", default-features = false }
parity-codec = { version = "2.1", default-features = false }
+4 -11
View File
@@ -472,11 +472,6 @@ dependencies = [
"ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "nan-preserving-float"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "net2"
version = "0.2.33"
@@ -985,7 +980,7 @@ dependencies = [
"substrate-serializer 0.1.0",
"substrate-state-machine 0.1.0",
"substrate-trie 0.4.0",
"wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1019,7 +1014,7 @@ dependencies = [
"twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)",
"untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1379,12 +1374,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "wasmi"
version = "0.4.1"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
"memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1507,7 +1501,6 @@ dependencies = [
"checksum mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "46e73a04c2fa6250b8d802134d56d554a9ec2922bf977777c805ea5def61ce40"
"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125"
"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
"checksum nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34d4f00fcc2f4c9efa8cc971db0da9e28290e28e97af47585e48691ef10ff31f"
"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
"checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2"
"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
@@ -1586,7 +1579,7 @@ dependencies = [
"checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d"
"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
"checksum wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d184c4b7081f30316f74f8d73c197314dcb56ea7af9323522b42a2fa9cb19453"
"checksum wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8a60b9508cff2b7c27ed41200dd668806280740fadc8c88440e9c88625e84f1a"
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+23 -1
View File
@@ -59,6 +59,7 @@ fn staging_testnet_config_genesis() -> GenesisConfig {
consensus: Some(ConsensusConfig {
code: include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm").to_vec(), // TODO change
authorities: initial_authorities.clone(),
_genesis_phantom_data: Default::default(),
}),
system: None,
balances: Some(BalancesConfig {
@@ -69,10 +70,12 @@ fn staging_testnet_config_genesis() -> GenesisConfig {
transfer_fee: 1 * CENTS,
creation_fee: 1 * CENTS,
reclaim_rebate: 1 * CENTS,
_genesis_phantom_data: Default::default(),
}),
session: Some(SessionConfig {
validators: initial_authorities.iter().cloned().map(Into::into).collect(),
session_length: 5 * MINUTES,
_genesis_phantom_data: Default::default(),
}),
staking: Some(StakingConfig {
current_era: 0,
@@ -86,11 +89,13 @@ fn staging_testnet_config_genesis() -> GenesisConfig {
bonding_duration: 1 * DAYS,
offline_slash_grace: 4,
minimum_validator_count: 4,
_genesis_phantom_data: Default::default(),
}),
democracy: Some(DemocracyConfig {
launch_period: 5 * MINUTES, // 1 day per public referendum
voting_period: 5 * MINUTES, // 3 days to discuss & vote on an active referendum
minimum_deposit: 50 * DOLLARS, // 12000 as the minimum deposit for a referendum
_genesis_phantom_data: Default::default(),
}),
council_seats: Some(CouncilSeatsConfig {
active_council: vec![],
@@ -103,19 +108,23 @@ fn staging_testnet_config_genesis() -> GenesisConfig {
term_duration: 28 * DAYS,
desired_seats: 0,
inactive_grace_period: 1, // one additional vote should go by before an inactive voter can be reaped.
_genesis_phantom_data: Default::default(),
}),
council_voting: Some(CouncilVotingConfig {
cooloff_period: 4 * DAYS,
voting_period: 1 * DAYS,
_genesis_phantom_data: Default::default(),
}),
timestamp: Some(TimestampConfig {
period: SECS_PER_BLOCK,
_genesis_phantom_data: Default::default(),
}),
treasury: Some(TreasuryConfig {
proposal_bond: Permill::from_percent(5),
proposal_bond_minimum: 1 * DOLLARS,
spend_period: 1 * DAYS,
burn: Permill::from_percent(50),
_genesis_phantom_data: Default::default(),
}),
contract: Some(ContractConfig {
contract_fee: 1 * CENTS,
@@ -125,9 +134,11 @@ fn staging_testnet_config_genesis() -> GenesisConfig {
max_depth: 1024,
block_gas_limit: 10_000_000,
current_schedule: Default::default(),
_genesis_phantom_data: Default::default(),
}),
upgrade_key: Some(UpgradeKeyConfig {
key: endowed_accounts[0].clone(),
_genesis_phantom_data: Default::default(),
}),
}
}
@@ -175,6 +186,7 @@ pub fn testnet_genesis(
consensus: Some(ConsensusConfig {
code: include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/node_runtime.compact.wasm").to_vec(),
authorities: initial_authorities.clone(),
_genesis_phantom_data: Default::default(),
}),
system: None,
balances: Some(BalancesConfig {
@@ -185,10 +197,12 @@ pub fn testnet_genesis(
creation_fee: 0,
reclaim_rebate: 0,
balances: endowed_accounts.iter().map(|&k| (k.into(), (1 << 60))).collect(),
_genesis_phantom_data: Default::default(),
}),
session: Some(SessionConfig {
validators: initial_authorities.iter().cloned().map(Into::into).collect(),
session_length: 10,
_genesis_phantom_data: Default::default(),
}),
staking: Some(StakingConfig {
current_era: 0,
@@ -202,11 +216,13 @@ pub fn testnet_genesis(
current_offline_slash: 0,
current_session_reward: 0,
offline_slash_grace: 0,
_genesis_phantom_data: Default::default(),
}),
democracy: Some(DemocracyConfig {
launch_period: 9,
voting_period: 18,
minimum_deposit: 10,
_genesis_phantom_data: Default::default(),
}),
council_seats: Some(CouncilSeatsConfig {
active_council: endowed_accounts.iter()
@@ -221,19 +237,23 @@ pub fn testnet_genesis(
term_duration: 1000000,
desired_seats: (endowed_accounts.len() - initial_authorities.len()) as u32,
inactive_grace_period: 1,
_genesis_phantom_data: Default::default(),
}),
council_voting: Some(CouncilVotingConfig {
cooloff_period: 75,
voting_period: 20,
_genesis_phantom_data: Default::default(),
}),
timestamp: Some(TimestampConfig {
period: 5, // 5 second block time.
_genesis_phantom_data: Default::default(),
}),
treasury: Some(TreasuryConfig {
proposal_bond: Permill::from_percent(5),
proposal_bond_minimum: 1_000_000,
spend_period: 12 * 60 * 24,
burn: Permill::from_percent(50),
_genesis_phantom_data: Default::default(),
}),
contract: Some(ContractConfig {
contract_fee: 21,
@@ -243,9 +263,11 @@ pub fn testnet_genesis(
max_depth: 1024,
block_gas_limit: 10_000_000,
current_schedule: Default::default(),
_genesis_phantom_data: Default::default(),
}),
upgrade_key: Some(UpgradeKeyConfig {
key: upgrade_key,
_genesis_phantom_data: Default::default(),
}),
}
}
@@ -289,7 +311,7 @@ mod tests {
fn local_testnet_genesis_instant() -> GenesisConfig {
let mut genesis = local_testnet_genesis();
genesis.timestamp = Some(TimestampConfig { period: 0 });
genesis.timestamp = Some(TimestampConfig { period: 0, _genesis_phantom_data: Default::default() });
genesis
}
+18 -10
View File
@@ -28,7 +28,7 @@ use substrate_service::{
Roles, TaskExecutor,
};
use node_executor;
use consensus::{import_queue, start_aura, Config as AuraConfig, AuraImportQueue};
use consensus::{import_queue, start_aura, Config as AuraConfig, AuraImportQueue, NothingExtra};
use client;
const AURA_SLOT_DURATION: u64 = 6;
@@ -79,17 +79,25 @@ construct_service_factory! {
},
LightService = LightComponents<Self>
{ |config, executor| <LightComponents<Factory>>::new(config, executor) },
FullImportQueue = AuraImportQueue<Self::Block, FullClient<Self>>
{ |config, client| Ok(import_queue(AuraConfig {
local_key: None,
slot_duration: 5
}, client)) },
LightImportQueue = AuraImportQueue<Self::Block, LightClient<Self>>
{ |config, client| Ok(
import_queue(AuraConfig {
FullImportQueue = AuraImportQueue<Self::Block, FullClient<Self>, NothingExtra>
{ |config, client| Ok(import_queue(
AuraConfig {
local_key: None,
slot_duration: 5
}, client))
},
client,
NothingExtra,
))
},
LightImportQueue = AuraImportQueue<Self::Block, LightClient<Self>, NothingExtra>
{ |config, client| Ok(import_queue(
AuraConfig {
local_key: None,
slot_duration: 5
},
client,
NothingExtra,
))
},
}
}
+3
View File
@@ -29,3 +29,6 @@ srml-timestamp = { path = "../../srml/timestamp" }
srml-treasury = { path = "../../srml/treasury" }
srml-contract = { path = "../../srml/contract" }
wabt = "0.4"
[features]
benchmarks = []
+22
View File
@@ -17,10 +17,14 @@
//! A `CodeExecutor` specialisation which uses natively compiled runtime when the wasm to be
//! executed is equivalent to the natively compiled code.
#![cfg_attr(feature = "benchmarks", feature(test))]
extern crate node_runtime;
#[macro_use] extern crate substrate_executor;
#[cfg_attr(test, macro_use)] extern crate substrate_primitives as primitives;
#[cfg(feature = "benchmarks")] extern crate test;
#[cfg(test)] extern crate substrate_keyring as keyring;
#[cfg(test)] extern crate sr_primitives as runtime_primitives;
#[cfg(test)] extern crate srml_support as runtime_support;
@@ -230,10 +234,12 @@ mod tests {
transfer_fee: 0,
creation_fee: 0,
reclaim_rebate: 0,
_genesis_phantom_data: Default::default(),
}),
session: Some(SessionConfig {
session_length: 2,
validators: vec![One.to_raw_public().into(), Two.to_raw_public().into(), three],
_genesis_phantom_data: Default::default(),
}),
staking: Some(StakingConfig {
sessions_per_era: 2,
@@ -247,6 +253,7 @@ mod tests {
current_offline_slash: 0,
current_session_reward: 0,
offline_slash_grace: 0,
_genesis_phantom_data: Default::default(),
}),
democracy: Some(Default::default()),
council_seats: Some(Default::default()),
@@ -744,4 +751,19 @@ mod tests {
assert!(t.storage_changes_root(Default::default(), 0).is_some());
}
#[cfg(feature = "benchmarks")]
mod benches {
use super::*;
use test::Bencher;
#[bench]
fn wasm_execute_block(b: &mut Bencher) {
b.iter(|| {
let mut t = new_test_ext(false);
WasmExecutor::new().call(&mut t, 8, COMPACT_CODE, "execute_block", &block1(false).0).unwrap();
WasmExecutor::new().call(&mut t, 8, COMPACT_CODE, "execute_block", &block2().0).unwrap();
});
}
}
}
+5 -12
View File
@@ -472,11 +472,6 @@ dependencies = [
"ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "nan-preserving-float"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "net2"
version = "0.2.33"
@@ -939,7 +934,7 @@ dependencies = [
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"sr-std 0.1.0",
"substrate-primitives 0.1.0",
"wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1270,7 +1265,7 @@ dependencies = [
"substrate-serializer 0.1.0",
"substrate-state-machine 0.1.0",
"substrate-trie 0.4.0",
"wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1316,7 +1311,7 @@ dependencies = [
"twox-hash 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"uint 0.5.0-beta.1 (registry+https://github.com/rust-lang/crates.io-index)",
"untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1659,12 +1654,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "wasmi"
version = "0.4.1"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
"memory_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"parity-wasm 0.31.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1787,7 +1781,6 @@ dependencies = [
"checksum mio-extras 2.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "46e73a04c2fa6250b8d802134d56d554a9ec2922bf977777c805ea5def61ce40"
"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125"
"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
"checksum nan-preserving-float 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34d4f00fcc2f4c9efa8cc971db0da9e28290e28e97af47585e48691ef10ff31f"
"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
"checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2"
"checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
@@ -1868,7 +1861,7 @@ dependencies = [
"checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d"
"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
"checksum wasmi 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d184c4b7081f30316f74f8d73c197314dcb56ea7af9323522b42a2fa9cb19453"
"checksum wasmi 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8a60b9508cff2b7c27ed41200dd668806280740fadc8c88440e9c88625e84f1a"
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+1
View File
@@ -104,6 +104,7 @@ impl ExtBuilder {
transfer_fee: self.transfer_fee,
creation_fee: self.creation_fee,
reclaim_rebate: 0,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.into()
}
+1
View File
@@ -54,6 +54,7 @@ pub fn new_test_ext(authorities: Vec<u64>) -> runtime_io::TestExternalities<Blak
t.extend(GenesisConfig::<Test>{
code: vec![],
authorities,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.into()
}
+2
View File
@@ -131,6 +131,7 @@ impl ExtBuilder {
transfer_fee: self.transfer_fee,
creation_fee: self.creation_fee,
reclaim_rebate: 0,
_genesis_phantom_data: Default::default(),
}.build_storage()
.unwrap().0,
);
@@ -143,6 +144,7 @@ impl ExtBuilder {
max_depth: 100,
block_gas_limit: self.block_gas_limit,
current_schedule: Default::default(),
_genesis_phantom_data: Default::default(),
}.build_storage()
.unwrap().0,
);
+4
View File
@@ -122,11 +122,13 @@ mod tests {
transfer_fee: 0,
creation_fee: 0,
reclaim_rebate: 0,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.extend(democracy::GenesisConfig::<Test>{
launch_period: 1,
voting_period: 3,
minimum_deposit: 1,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.extend(seats::GenesisConfig::<Test> {
candidacy_bond: 9,
@@ -143,10 +145,12 @@ mod tests {
presentation_duration: 2,
desired_seats: 2,
term_duration: 5,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.extend(voting::GenesisConfig::<Test> {
cooloff_period: 2,
voting_period: 1,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
runtime_io::TestExternalities::new(t)
}
+2
View File
@@ -358,11 +358,13 @@ mod tests {
transfer_fee: 0,
creation_fee: 0,
reclaim_rebate: 0,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.extend(GenesisConfig::<Test>{
launch_period: 1,
voting_period: 1,
minimum_deposit: 1,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
runtime_io::TestExternalities::new(t)
}
+1
View File
@@ -313,6 +313,7 @@ mod tests {
t.extend(GenesisConfig::<Test>{
dummy: 42,
foo: 24,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.into()
}
+1
View File
@@ -327,6 +327,7 @@ mod tests {
transfer_fee: 0,
creation_fee: 0,
reclaim_rebate: 0,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
let xt = primitives::testing::TestXt(Some(1), 0, Call::transfer(2.into(), 69.into()));
let mut t = runtime_io::TestExternalities::<Blake2Hasher>::new(t);
+3
View File
@@ -270,13 +270,16 @@ mod tests {
t.extend(consensus::GenesisConfig::<Test>{
code: vec![],
authorities: vec![1, 2, 3],
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.extend(timestamp::GenesisConfig::<Test>{
period: 5,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.extend(GenesisConfig::<Test>{
session_length: 2,
validators: vec![1, 2, 3],
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
runtime_io::TestExternalities::new(t)
}
+6 -1
View File
@@ -88,10 +88,12 @@ pub fn new_test_ext(
t.extend(consensus::GenesisConfig::<Test>{
code: vec![],
authorities: vec![],
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.extend(session::GenesisConfig::<Test>{
session_length,
validators: vec![10, 20],
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.extend(balances::GenesisConfig::<Test>{
balances: if monied {
@@ -109,6 +111,7 @@ pub fn new_test_ext(
transfer_fee: 0,
creation_fee: 0,
reclaim_rebate: 0,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.extend(GenesisConfig::<Test>{
sessions_per_era,
@@ -122,9 +125,11 @@ pub fn new_test_ext(
current_session_reward: reward,
current_offline_slash: 20,
offline_slash_grace: 0,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.extend(timestamp::GenesisConfig::<Test>{
period: 5
period: 5,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
runtime_io::TestExternalities::new(t)
}
@@ -627,6 +627,8 @@ macro_rules! __generate_genesis_config {
#[serde(rename_all = "camelCase")]
#[serde(deny_unknown_fields)]
pub struct GenesisConfig<$traitinstance: $traittype> {
#[serde(skip)]
pub _genesis_phantom_data: $crate::storage::generator::PhantomData<$traitinstance>,
$(pub $fieldname : $fieldtype ,)*
$( $(#[$attr])* pub $extrafieldname : $extrafieldty ,)*
}
@@ -635,6 +637,7 @@ macro_rules! __generate_genesis_config {
impl<$traitinstance: $traittype> Default for GenesisConfig<$traitinstance> {
fn default() -> Self {
GenesisConfig {
_genesis_phantom_data: Default::default(),
$($fieldname : $fielddefault ,)*
$($extrafieldname : $extrafielddefault ,)*
}
-1
View File
@@ -201,7 +201,6 @@ decl_storage! {
}
add_extra_genesis {
config(changes_trie_config): Option<ChangesTrieConfiguration>;
config(_phantom): ::std::marker::PhantomData<T>;
build(|storage: &mut primitives::StorageMap, _: &mut primitives::ChildrenStorageMap, config: &GenesisConfig<T>| {
use codec::Encode;
+12 -3
View File
@@ -211,7 +211,10 @@ mod tests {
#[test]
fn timestamp_works() {
let mut t = system::GenesisConfig::<Test>::default().build_storage().unwrap().0;
t.extend(GenesisConfig::<Test> { period: 0 }.build_storage().unwrap().0);
t.extend(GenesisConfig::<Test> {
period: 5,
_genesis_phantom_data: Default::default()
}.build_storage().unwrap().0);
with_externalities(&mut TestExternalities::new(t), || {
Timestamp::set_timestamp(42);
@@ -224,7 +227,10 @@ mod tests {
#[should_panic(expected = "Timestamp must be updated only once in the block")]
fn double_timestamp_should_fail() {
let mut t = system::GenesisConfig::<Test>::default().build_storage().unwrap().0;
t.extend(GenesisConfig::<Test> { period: 5 }.build_storage().unwrap().0);
t.extend(GenesisConfig::<Test> {
period: 5,
_genesis_phantom_data: Default::default()
}.build_storage().unwrap().0);
with_externalities(&mut TestExternalities::new(t), || {
Timestamp::set_timestamp(42);
@@ -237,7 +243,10 @@ mod tests {
#[should_panic(expected = "Timestamp must increment by at least <BlockPeriod> between sequential blocks")]
fn block_period_is_enforced() {
let mut t = system::GenesisConfig::<Test>::default().build_storage().unwrap().0;
t.extend(GenesisConfig::<Test> { period: 5 }.build_storage().unwrap().0);
t.extend(GenesisConfig::<Test> {
period: 5,
_genesis_phantom_data: Default::default()
}.build_storage().unwrap().0);
with_externalities(&mut TestExternalities::new(t), || {
Timestamp::set_timestamp(42);
+2
View File
@@ -330,12 +330,14 @@ mod tests {
creation_fee: 0,
existential_deposit: 0,
reclaim_rebate: 0,
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.extend(GenesisConfig::<Test>{
proposal_bond: Permill::from_percent(5),
proposal_bond_minimum: 1,
spend_period: 2,
burn: Permill::from_percent(50),
_genesis_phantom_data: Default::default(),
}.build_storage().unwrap().0);
t.into()
}