Dump genesis to JSON file (#218)

* Merge remote-tracking branch 'origin/master' into gav-xts-dont-panic

* Update wasm.

* consensus, session and staking all panic-safe.

* Democracy doesn't panic in apply.

* Fix tests.

* Extra helper macro, council depanicked.

* Fix one test.

* Fix up all council tests. No panics!

* Council voting depanicked.

* Dispatch returns result.

* session & staking tests updated

* Fix democracy tests.

* Fix council tests.

* Fix up polkadot parachains in runtime

* Fix borked merge

* More Slicable support

Support general `Option` and array types.

* Basic storage types.

* Existential deposit for contract creation

* Basic implemnetation along with removals

* Fix tests.

* externalities builder fix.

* Tests.

* Fix up the runtime.

* Fix tests.

* Add generic `Address` type.

* Initial function integration of Address into Extrinsic.

* Fix build

* All tests compile.

* Fix (some) tests.

* Fix signing.

* Push error.

* transfer can accept Address

* Make Address generic over AccountIndex

* Fix test

* Make Council use Address for dispatch.

* Fix build

* Bend over backwards to support braindead derive.

* Repot some files.

* Fix tests.

* Fix grumbles

* Remove Default bound

* Fix build for new nightly.

* Make `apply_extrinsic` never panic, return useful Result.

* More merge hell

* Doesn't build, but might do soon

* Serde woes

* get substrate-runtime-staking compiling

* Polkadot builds again!

* Fix all build.

* Fix tests & binaries.

* Reserve some extra initial byte values of address for future format changes

* Make semantic of `ReservedBalance` clear.

* Fix panic handler.

* Integrate other balance transformations into the new model

Fix up staking tests.

* Fix runtime tests.

* Fix panic build.

* Tests for demonstrating interaction between balance types.

* Repot some runtime code

* Fix checkedblock in non-std builds

* Get rid of `DoLookup` phantom.

* Attempt to make transaction_pool work with lookups.

* Remove vscode settings

* New attempt at making transaction pool work.

* It builds again!

* --all builds

* Fix tests.

* New build.

* Test account nonce reset.

* polkadot transaction pool tests/framework.

* Initial draft (working).

* Address grumbles.

* Revert bad `map_or`

* Rebuild binaries, workaround.

* Avoid checking in vscode

* reconnecting, shared, slog

* CLI options for name and telemetry url

* ensure telemetry url imples enabled

* Avoid casting to usize early.

* Provide on-connect event for session message

* Better port

* heartbeat and some renaming

* transaction pool stuff

* minor renaming.

* report telemetry

* cleanups.

* Fix for previous cleanup

* dump genesis, dev mode, renaming

* Rework chain spec/config &c. to allow for genesis file loading.

* Avoid producing genesis storage when unneeded

* Allow reading JSON genesis state dumps

* tests work again

* better logging.

* Fix wasm build.

* Introduce PoC-1 spec

* Made block message compatible with poc-1

* Squashed changes for dumping genesis block.

* Binaries.

* Made block message compatible with poc-1

* Remove dead code.

* Fix bad merge.

* Argument passing and returning values when invoking sandboxed funcs (#189)

* Fixed block download sequence (#223)

* Trie-based execution proof (#177)

* TrieBasedBackend

* trie tests

* redunant return_value removed

* use Trie::get_with to record trie proofs

* Relaying tx/blocks by light clients (#190)

* do not import external transactions into light tx pool

* do not announce blocks on light clients

* blocks_are_not_announced_by_light_nodes
This commit is contained in:
Gav Wood
2018-06-21 19:18:05 +02:00
committed by GitHub
parent 2d99855ef7
commit 60f7b897a8
49 changed files with 686 additions and 488 deletions
@@ -134,9 +134,9 @@ impl<T: Trait> Default for GenesisConfig<T> {
}
#[cfg(any(feature = "std", test))]
impl<T: Trait> primitives::BuildExternalities for GenesisConfig<T>
impl<T: Trait> primitives::BuildStorage for GenesisConfig<T>
{
fn build_externalities(self) -> runtime_io::TestExternalities {
fn build_storage(self) -> runtime_io::TestExternalities {
use codec::{Slicable, KeyedVec};
let auth_count = self.authorities.len() as u32;
let mut r: runtime_io::TestExternalities = self.authorities.into_iter().enumerate().map(|(i, v)|
@@ -583,9 +583,9 @@ impl<T: Trait> Default for GenesisConfig<T> {
}
#[cfg(any(feature = "std", test))]
impl<T: Trait> primitives::BuildExternalities for GenesisConfig<T>
impl<T: Trait> primitives::BuildStorage for GenesisConfig<T>
{
fn build_externalities(self) -> runtime_io::TestExternalities {
fn build_storage(self) -> runtime_io::TestExternalities {
use codec::Slicable;
use runtime_io::twox_128;
@@ -613,7 +613,7 @@ mod tests {
pub use super::*;
pub use runtime_io::with_externalities;
pub use substrate_primitives::H256;
use primitives::BuildExternalities;
use primitives::BuildStorage;
use primitives::traits::{HasPublicAux, Identity, BlakeTwo256};
use primitives::testing::{Digest, Header};
@@ -658,15 +658,15 @@ mod tests {
impl Trait for Test {}
pub fn new_test_ext(with_council: bool) -> runtime_io::TestExternalities {
let mut t = system::GenesisConfig::<Test>::default().build_externalities();
let mut t = system::GenesisConfig::<Test>::default().build_storage();
t.extend(consensus::GenesisConfig::<Test>{
code: vec![],
authorities: vec![],
}.build_externalities());
}.build_storage());
t.extend(session::GenesisConfig::<Test>{
session_length: 1, //??? or 2?
validators: vec![10, 20],
}.build_externalities());
}.build_storage());
t.extend(staking::GenesisConfig::<Test>{
sessions_per_era: 1,
current_era: 0,
@@ -681,12 +681,12 @@ mod tests {
creation_fee: 0,
contract_fee: 0,
reclaim_rebate: 0,
}.build_externalities());
}.build_storage());
t.extend(democracy::GenesisConfig::<Test>{
launch_period: 1,
voting_period: 3,
minimum_deposit: 1,
}.build_externalities());
}.build_storage());
t.extend(GenesisConfig::<Test>{
candidacy_bond: 9,
voter_bond: 3,
@@ -704,7 +704,7 @@ mod tests {
term_duration: 5,
cooloff_period: 2,
voting_period: 1,
}.build_externalities());
}.build_storage());
t
}
@@ -331,9 +331,9 @@ impl<T: Trait> Default for GenesisConfig<T> {
}
#[cfg(any(feature = "std", test))]
impl<T: Trait> primitives::BuildExternalities for GenesisConfig<T>
impl<T: Trait> primitives::BuildStorage for GenesisConfig<T>
{
fn build_externalities(self) -> runtime_io::TestExternalities {
fn build_storage(self) -> runtime_io::TestExternalities {
use codec::Slicable;
use runtime_io::twox_128;
@@ -353,7 +353,7 @@ mod tests {
use super::*;
use runtime_io::with_externalities;
use substrate_primitives::H256;
use primitives::BuildExternalities;
use primitives::BuildStorage;
use primitives::traits::{HasPublicAux, Identity, BlakeTwo256};
use primitives::testing::{Digest, Header};
@@ -398,15 +398,15 @@ mod tests {
}
fn new_test_ext() -> runtime_io::TestExternalities {
let mut t = system::GenesisConfig::<Test>::default().build_externalities();
let mut t = system::GenesisConfig::<Test>::default().build_storage();
t.extend(consensus::GenesisConfig::<Test>{
code: vec![],
authorities: vec![],
}.build_externalities());
}.build_storage());
t.extend(session::GenesisConfig::<Test>{
session_length: 1, //??? or 2?
validators: vec![10, 20],
}.build_externalities());
}.build_storage());
t.extend(staking::GenesisConfig::<Test>{
sessions_per_era: 1,
current_era: 0,
@@ -421,12 +421,12 @@ mod tests {
creation_fee: 0,
contract_fee: 0,
reclaim_rebate: 0,
}.build_externalities());
}.build_storage());
t.extend(GenesisConfig::<Test>{
launch_period: 1,
voting_period: 1,
minimum_deposit: 1,
}.build_externalities());
}.build_storage());
t
}
@@ -216,7 +216,7 @@ mod tests {
use staking::Call;
use runtime_io::with_externalities;
use substrate_primitives::H256;
use primitives::BuildExternalities;
use primitives::BuildStorage;
use primitives::traits::{HasPublicAux, Identity, Header as HeaderT, BlakeTwo256, AuxLookup};
use primitives::testing::{Digest, Header, Block};
@@ -262,7 +262,7 @@ mod tests {
#[test]
fn staking_balance_transfer_dispatch_works() {
let mut t = system::GenesisConfig::<Test>::default().build_externalities();
let mut t = system::GenesisConfig::<Test>::default().build_storage();
t.extend(staking::GenesisConfig::<Test> {
sessions_per_era: 0,
current_era: 0,
@@ -277,7 +277,7 @@ mod tests {
creation_fee: 0,
contract_fee: 0,
reclaim_rebate: 0,
}.build_externalities());
}.build_storage());
let xt = primitives::testing::TestXt((1, 0, Call::transfer(2.into(), 69)));
with_externalities(&mut t, || {
Executive::initialise_block(&Header::new(1, H256::default(), H256::default(), [69u8; 32].into(), Digest::default()));
@@ -288,10 +288,10 @@ mod tests {
}
fn new_test_ext() -> runtime_io::TestExternalities {
let mut t = system::GenesisConfig::<Test>::default().build_externalities();
t.extend(consensus::GenesisConfig::<Test>::default().build_externalities());
t.extend(session::GenesisConfig::<Test>::default().build_externalities());
t.extend(staking::GenesisConfig::<Test>::default().build_externalities());
let mut t = system::GenesisConfig::<Test>::default().build_storage();
t.extend(consensus::GenesisConfig::<Test>::default().build_storage());
t.extend(session::GenesisConfig::<Test>::default().build_storage());
t.extend(staking::GenesisConfig::<Test>::default().build_storage());
t
}
@@ -52,12 +52,32 @@ pub mod bft;
use traits::{Verify, Lazy};
/// A set of key value pairs for storage.
#[cfg(feature = "std")]
pub type BuiltExternalities = HashMap<Vec<u8>, Vec<u8>>;
pub type StorageMap = HashMap<Vec<u8>, Vec<u8>>;
/// A simple function allowing StorageMap to be created.
#[cfg(feature = "std")]
pub type MakeStorage = Box<FnMut() -> StorageMap>;
/// Complex storage builder stuff.
#[cfg(feature = "std")]
pub trait BuildStorage {
fn build_storage(self) -> StorageMap;
}
#[cfg(feature = "std")]
pub trait BuildExternalities {
fn build_externalities(self) -> BuiltExternalities;
impl BuildStorage for MakeStorage {
fn build_storage(mut self) -> StorageMap {
self()
}
}
#[cfg(feature = "std")]
impl BuildStorage for StorageMap {
fn build_storage(self) -> StorageMap {
self
}
}
/// Ed25519 signature verify.
@@ -227,12 +247,12 @@ macro_rules! impl_outer_config {
)*
}
#[cfg(any(feature = "std", test))]
impl $crate::BuildExternalities for $main {
fn build_externalities(self) -> $crate::BuiltExternalities {
let mut s = $crate::BuiltExternalities::new();
impl $crate::BuildStorage for $main {
fn build_storage(self) -> $crate::StorageMap {
let mut s = $crate::StorageMap::new();
$(
if let Some(extra) = self.$snake {
s.extend(extra.build_externalities());
s.extend(extra.build_storage());
}
)*
s
@@ -185,9 +185,9 @@ impl<T: Trait> Default for GenesisConfig<T> {
}
#[cfg(any(feature = "std", test))]
impl<T: Trait> primitives::BuildExternalities for GenesisConfig<T>
impl<T: Trait> primitives::BuildStorage for GenesisConfig<T>
{
fn build_externalities(self) -> runtime_io::TestExternalities {
fn build_storage(self) -> runtime_io::TestExternalities {
use runtime_io::twox_128;
use codec::Slicable;
use primitives::traits::As;
@@ -204,7 +204,7 @@ mod tests {
use super::*;
use runtime_io::with_externalities;
use substrate_primitives::H256;
use primitives::BuildExternalities;
use primitives::BuildStorage;
use primitives::traits::{HasPublicAux, Identity, BlakeTwo256};
use primitives::testing::{Digest, Header};
@@ -235,15 +235,15 @@ mod tests {
type Session = Module<Test>;
fn new_test_ext() -> runtime_io::TestExternalities {
let mut t = system::GenesisConfig::<Test>::default().build_externalities();
let mut t = system::GenesisConfig::<Test>::default().build_storage();
t.extend(consensus::GenesisConfig::<Test>{
code: vec![],
authorities: vec![1, 2, 3],
}.build_externalities());
}.build_storage());
t.extend(GenesisConfig::<Test>{
session_length: 2,
validators: vec![1, 2, 3],
}.build_externalities());
}.build_storage());
t
}
@@ -1031,8 +1031,8 @@ impl<T: Trait> Default for GenesisConfig<T> {
}
#[cfg(any(feature = "std", test))]
impl<T: Trait> primitives::BuildExternalities for GenesisConfig<T> {
fn build_externalities(self) -> runtime_io::TestExternalities {
impl<T: Trait> primitives::BuildStorage for GenesisConfig<T> {
fn build_storage(self) -> runtime_io::TestExternalities {
use runtime_io::twox_128;
use codec::Slicable;
@@ -18,7 +18,7 @@
#![cfg(test)]
use primitives::BuildExternalities;
use primitives::BuildStorage;
use primitives::traits::{HasPublicAux, Identity};
use primitives::testing::{Digest, Header};
use substrate_primitives::H256;
@@ -54,7 +54,7 @@ impl Trait for Test {
}
pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64, current_era: u64, monied: bool) -> runtime_io::TestExternalities {
let mut t = system::GenesisConfig::<Test>::default().build_externalities();
let mut t = system::GenesisConfig::<Test>::default().build_storage();
let balance_factor = if ext_deposit > 0 {
256
} else {
@@ -63,11 +63,11 @@ pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64
t.extend(consensus::GenesisConfig::<Test>{
code: vec![],
authorities: vec![],
}.build_externalities());
}.build_storage());
t.extend(session::GenesisConfig::<Test>{
session_length,
validators: vec![10, 20],
}.build_externalities());
}.build_storage());
t.extend(GenesisConfig::<Test>{
sessions_per_era,
current_era,
@@ -82,7 +82,7 @@ pub fn new_test_ext(ext_deposit: u64, session_length: u64, sessions_per_era: u64
creation_fee: 0,
contract_fee: 0,
reclaim_rebate: 0,
}.build_externalities());
}.build_storage());
t
}
@@ -203,9 +203,9 @@ impl<T: Trait> Default for GenesisConfig<T> {
}
#[cfg(any(feature = "std", test))]
impl<T: Trait> primitives::BuildExternalities for GenesisConfig<T>
impl<T: Trait> primitives::BuildStorage for GenesisConfig<T>
{
fn build_externalities(self) -> runtime_io::TestExternalities {
fn build_storage(self) -> runtime_io::TestExternalities {
use runtime_io::twox_128;
use codec::Slicable;
@@ -98,9 +98,9 @@ pub struct GenesisConfig<T: Trait> {
}
#[cfg(any(feature = "std", test))]
impl<T: Trait> runtime_primitives::BuildExternalities for GenesisConfig<T>
impl<T: Trait> runtime_primitives::BuildStorage for GenesisConfig<T>
{
fn build_externalities(self) -> runtime_primitives::BuiltExternalities {
fn build_storage(self) -> runtime_primitives::StorageMap {
use runtime_io::twox_128;
use codec::Slicable;
map![
@@ -116,7 +116,7 @@ mod tests {
use runtime_io::with_externalities;
use runtime_support::storage::StorageValue;
use substrate_primitives::H256;
use runtime_primitives::BuildExternalities;
use runtime_primitives::BuildStorage;
use runtime_primitives::traits::{HasPublicAux, BlakeTwo256};
use runtime_primitives::testing::{Digest, Header};
@@ -142,8 +142,8 @@ mod tests {
#[test]
fn timestamp_works() {
let mut t = system::GenesisConfig::<Test>::default().build_externalities();
t.extend(GenesisConfig::<Test> { now: 42 }.build_externalities());
let mut t = system::GenesisConfig::<Test>::default().build_storage();
t.extend(GenesisConfig::<Test> { now: 42 }.build_storage());
with_externalities(&mut t, || {
assert_eq!(<Timestamp as Store>::Now::get(), 42);