diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock
index 93f09afe02..ad94382aa2 100644
--- a/substrate/Cargo.lock
+++ b/substrate/Cargo.lock
@@ -965,10 +965,12 @@ version = "0.1.0"
dependencies = [
"error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "native-runtime 0.1.0",
"parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"polkadot-primitives 0.1.0",
"polkadot-serializer 0.1.0",
"polkadot-state-machine 0.1.0",
+ "triehash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
diff --git a/substrate/client/Cargo.toml b/substrate/client/Cargo.toml
index 468cf42de1..524429d1af 100644
--- a/substrate/client/Cargo.toml
+++ b/substrate/client/Cargo.toml
@@ -10,3 +10,5 @@ parking_lot = "0.4"
polkadot-primitives = { path = "../primitives", version = "0.1" }
polkadot-state-machine = { path = "../state_machine", version = "0.1" }
polkadot-serializer = { path = "../serializer" }
+native-runtime = { path = "../native-runtime" }
+triehash = "0.1"
diff --git a/substrate/client/src/genesis.rs b/substrate/client/src/genesis.rs
new file mode 100644
index 0000000000..8aa6d9409a
--- /dev/null
+++ b/substrate/client/src/genesis.rs
@@ -0,0 +1,37 @@
+// Copyright 2017 Parity Technologies (UK) Ltd.
+// This file is part of Polkadot.
+
+// Polkadot 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.
+
+// Polkadot 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 Polkadot. If not, see .
+
+//! Tool for creating the genesis block.
+
+use std::collections::HashMap;
+use native_runtime::primitives::{Block, Header};
+use triehash::trie_root;
+
+/// Create a genesis block, given the initial storage.
+pub fn construct_genesis_block(storage: &HashMap, Vec>) -> Block {
+ let state_root = trie_root(storage.clone().into_iter()).0;
+ let header = Header {
+ parent_hash: Default::default(),
+ number: 0,
+ state_root,
+ transaction_root: trie_root(vec![].into_iter()).0,
+ digest: Default::default(),
+ };
+ Block {
+ header,
+ transactions: vec![],
+ }
+}
diff --git a/substrate/client/src/lib.rs b/substrate/client/src/lib.rs
index 2773085ece..13f881167b 100644
--- a/substrate/client/src/lib.rs
+++ b/substrate/client/src/lib.rs
@@ -21,7 +21,9 @@
extern crate polkadot_primitives as primitives;
extern crate polkadot_state_machine as state_machine;
extern crate polkadot_serializer as ser;
+extern crate native_runtime;
+extern crate triehash;
extern crate parking_lot;
#[macro_use] extern crate error_chain;
#[macro_use] extern crate log;
@@ -31,6 +33,10 @@ pub mod blockchain;
pub mod backend;
pub mod in_mem;
+mod genesis;
+
+pub use genesis::construct_genesis_block;
+
pub use blockchain::Info as ChainInfo;
pub use blockchain::BlockId;
diff --git a/substrate/primitives/src/ed25519.rs b/substrate/primitives/src/ed25519.rs
index b44d59c0b3..e190c4f018 100644
--- a/substrate/primitives/src/ed25519.rs
+++ b/substrate/primitives/src/ed25519.rs
@@ -233,8 +233,11 @@ mod test {
let pair = Pair::from_seed(b"12345678901234567890123456789012");
let public = pair.public();
assert_eq!(public, "2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee".into());
- let message = FromHex::from_hex("2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000").unwrap();
+ let message = FromHex::from_hex("2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000002228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000").unwrap();
let signature = pair.sign(&message[..]);
+ use hexdisplay::HexDisplay;
+ println!("Correct signature: {}", HexDisplay::from(&signature.0));
assert!(signature.verify(&message[..], &public));
+ panic!();
}
}
diff --git a/substrate/state_machine/src/backend.rs b/substrate/state_machine/src/backend.rs
index 5057339ce9..4f5ff5d18f 100644
--- a/substrate/state_machine/src/backend.rs
+++ b/substrate/state_machine/src/backend.rs
@@ -23,10 +23,7 @@ use triehash::sec_trie_root;
use super::{Update, MemoryState};
/// Output of a commit.
-pub struct Committed {
- /// Root of the storage tree after changes committed.
- pub storage_tree_root: H256,
-}
+pub struct Committed {}
/// A state backend is used to read state data and can have changes committed
/// to it.
@@ -90,17 +87,7 @@ impl Backend for InMemory {
where I: IntoIterator-
{
self.inner.update(changes);
-
- // fully recalculate trie roots.
- let storage_tree_root = H256(sec_trie_root(
- self.inner.storage.iter()
- .map(|(k, v)| (k.to_vec(), v.clone()))
- .collect()
- ).0);
-
- Committed {
- storage_tree_root,
- }
+ Committed {}
}
fn pairs(&self) -> Vec<(&[u8], &[u8])> {
diff --git a/substrate/wasm-runtime/polkadot/src/primitives/function.rs b/substrate/wasm-runtime/polkadot/src/primitives/function.rs
index e906cdc718..8d45a71df7 100644
--- a/substrate/wasm-runtime/polkadot/src/primitives/function.rs
+++ b/substrate/wasm-runtime/polkadot/src/primitives/function.rs
@@ -25,13 +25,13 @@ use runtime::{staking, session, timestamp, governance};
#[cfg_attr(feature = "with-std", derive(PartialEq, Debug))]
#[repr(u8)]
pub enum Function {
- StakingStake = 0,
- StakingUnstake = 1,
- StakingTransfer = 2,
- SessionSetKey = 3,
- TimestampSet = 4,
- GovernancePropose = 5,
- GovernanceApprove = 6,
+ TimestampSet = 0x00,
+ SessionSetKey = 0x10,
+ StakingStake = 0x20,
+ StakingUnstake = 0x21,
+ StakingTransfer = 0x22,
+ GovernancePropose = 0x30,
+ GovernanceApprove = 0x31,
}
impl Function {
@@ -41,11 +41,7 @@ impl Function {
let functions = [Function::StakingStake, Function::StakingUnstake,
Function::StakingTransfer, Function::SessionSetKey, Function::TimestampSet,
Function::GovernancePropose, Function::GovernanceApprove];
- if (value as usize) < functions.len() {
- Some(functions[value as usize])
- } else {
- None
- }
+ functions.iter().map(|&f| f).find(|&f| value == f as u8)
}
}
diff --git a/substrate/wasm-runtime/polkadot/src/primitives/proposal.rs b/substrate/wasm-runtime/polkadot/src/primitives/proposal.rs
index 1b8aa6b13e..d6b26bb8e3 100644
--- a/substrate/wasm-runtime/polkadot/src/primitives/proposal.rs
+++ b/substrate/wasm-runtime/polkadot/src/primitives/proposal.rs
@@ -27,12 +27,17 @@ use runtime::{system, governance, staking, session};
#[cfg_attr(feature = "with-std", derive(PartialEq, Debug))]
#[repr(u8)]
pub enum InternalFunction {
- SystemSetCode = 0,
- StakingSetSessionsPerEra = 1,
- StakingSetBondingDuration = 2,
- StakingSetValidatorCount = 3,
- GovernanceSetApprovalPpmRequired = 4,
- SessionSetLength = 5,
+ SystemSetCode = 0x00,
+
+ SessionSetLength = 0x10,
+ SessionForceNewSession = 0x11,
+
+ StakingSetSessionsPerEra = 0x20,
+ StakingSetBondingDuration = 0x21,
+ StakingSetValidatorCount = 0x22,
+ StakingForceNewEra = 0x23,
+
+ GovernanceSetApprovalPpmRequired = 0x30,
}
impl InternalFunction {
@@ -41,17 +46,15 @@ impl InternalFunction {
use self::*;
let functions = [
InternalFunction::SystemSetCode,
+ InternalFunction::SessionSetLength,
+ InternalFunction::SessionForceNewSession,
InternalFunction::StakingSetSessionsPerEra,
InternalFunction::StakingSetBondingDuration,
InternalFunction::StakingSetValidatorCount,
+ InternalFunction::StakingForceNewEra,
InternalFunction::GovernanceSetApprovalPpmRequired,
- InternalFunction::SessionSetLength
];
- if (value as usize) < functions.len() {
- Some(functions[value as usize])
- } else {
- None
- }
+ functions.iter().map(|&f| f).find(|&f| value == f as u8)
}
}
@@ -93,6 +96,13 @@ impl Proposal {
let code: Vec = params.read().unwrap();
system::privileged::set_code(&code);
}
+ InternalFunction::SessionSetLength => {
+ let value = params.read().unwrap();
+ session::privileged::set_length(value);
+ }
+ InternalFunction::SessionForceNewSession => {
+ session::privileged::force_new_session();
+ }
InternalFunction::StakingSetSessionsPerEra => {
let value = params.read().unwrap();
staking::privileged::set_sessions_per_era(value);
@@ -105,14 +115,13 @@ impl Proposal {
let value = params.read().unwrap();
staking::privileged::set_validator_count(value);
}
+ InternalFunction::StakingForceNewEra => {
+ staking::privileged::force_new_era();
+ }
InternalFunction::GovernanceSetApprovalPpmRequired => {
let value = params.read().unwrap();
governance::privileged::set_approval_ppm_required(value);
}
- InternalFunction::SessionSetLength => {
- let value = params.read().unwrap();
- session::privileged::set_length(value);
- }
}
}
}
diff --git a/substrate/wasm-runtime/polkadot/src/primitives/tests.rs b/substrate/wasm-runtime/polkadot/src/primitives/tests.rs
index fdb600a5bb..9b17672eb1 100644
--- a/substrate/wasm-runtime/polkadot/src/primitives/tests.rs
+++ b/substrate/wasm-runtime/polkadot/src/primitives/tests.rs
@@ -35,7 +35,7 @@ fn serialise_transaction_works() {
assert_eq!(serialised, vec![
1u8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
69, 0, 0, 0, 0, 0, 0, 0,
- 2,
+ 34,
40, 0, 0, 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
69, 0, 0, 0, 0, 0, 0, 0
@@ -55,7 +55,7 @@ fn deserialise_transaction_works() {
let data = [
1u8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
69, 0, 0, 0, 0, 0, 0, 0,
- 2,
+ 34,
40, 0, 0, 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
69, 0, 0, 0, 0, 0, 0, 0
@@ -162,7 +162,7 @@ fn serialise_block_works() {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
69, 0, 0, 0, 0, 0, 0, 0,
- 2,
+ 34,
40, 0, 0, 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
69, 0, 0, 0, 0, 0, 0, 0,
@@ -170,7 +170,7 @@ fn serialise_block_works() {
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
42, 0, 0, 0, 0, 0, 0, 0,
- 0,
+ 32,
0, 0, 0, 0
]);
}
@@ -225,7 +225,7 @@ fn deserialise_block_works() {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
69, 0, 0, 0, 0, 0, 0, 0,
- 2,
+ 34,
40, 0, 0, 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
69, 0, 0, 0, 0, 0, 0, 0,
@@ -233,7 +233,7 @@ fn deserialise_block_works() {
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
42, 0, 0, 0, 0, 0, 0, 0,
- 0,
+ 32,
0, 0, 0, 0
];
let deserialised = Block::from_slice(&data).unwrap();
diff --git a/substrate/wasm-runtime/polkadot/src/runtime/genesismap.rs b/substrate/wasm-runtime/polkadot/src/runtime/genesismap.rs
new file mode 100644
index 0000000000..e10b5e4557
--- /dev/null
+++ b/substrate/wasm-runtime/polkadot/src/runtime/genesismap.rs
@@ -0,0 +1,85 @@
+// Copyright 2017 Parity Technologies (UK) Ltd.
+// This file is part of Polkadot.
+
+// Polkadot 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.
+
+// Polkadot 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 Polkadot. If not, see .
+
+//! Tool for creating the genesis block.
+
+use std::collections::HashMap;
+use runtime_std::twox_128;
+use codec::{KeyedVec, Slicable};
+use support::Hashable;
+use primitives::{AccountID, BlockNumber, Block};
+use runtime::staking::Balance;
+
+/// Configuration of a general Polkadot genesis block.
+pub struct GenesisConfig {
+ pub validators: Vec,
+ pub authorities: Vec,
+ pub balances: Vec<(AccountID, Balance)>,
+ pub block_time: u64,
+ pub session_length: BlockNumber,
+ pub sessions_per_era: BlockNumber,
+ pub bonding_duration: u64,
+ pub approval_ratio: u32,
+}
+
+impl GenesisConfig {
+ pub fn new_simple(authorities_validators: Vec, balance: Balance) -> Self {
+ GenesisConfig {
+ validators: authorities_validators.clone(),
+ authorities: authorities_validators.clone(),
+ balances: authorities_validators.iter().map(|v| (v.clone(), balance)).collect(),
+ block_time: 5, // 5 second block time.
+ session_length: 720, // that's 1 hour per session.
+ sessions_per_era: 24, // 24 hours per era.
+ bonding_duration: 90, // 90 days per bond.
+ approval_ratio: 667, // 66.7% approvals required for legislation.
+ }
+ }
+
+ pub fn genesis_map(&self) -> HashMap, Vec> {
+ let wasm_runtime = include_bytes!("../../../../wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm");
+ vec![
+ (&b":code"[..], wasm_runtime.to_vec()),
+ (&b"gov:apr"[..], self.approval_ratio.to_vec()),
+ (&b"ses:len"[..], self.session_length.to_vec()),
+ (&b"ses:val:len"[..], (self.validators.len() as u32).to_vec()),
+ (&b"con:aut:len"[..], (self.authorities.len() as u32).to_vec()),
+ (&b"sta:wil:len"[..], 0u32.to_vec()),
+ (&b"sta:spe"[..], self.sessions_per_era.to_vec()),
+ (&b"sta:vac"[..], (self.validators.len() as u32).to_vec()),
+ (&b"sta:era"[..], 0u64.to_vec()),
+ ].into_iter()
+ .map(|(k, v)| (k.to_vec(), v))
+ .chain(self.validators.iter()
+ .enumerate()
+ .map(|(i, account)| ((i as u32).to_keyed_vec(b"ses:val:"), account.to_vec()))
+ ).chain(self.authorities.iter()
+ .enumerate()
+ .map(|(i, account)| ((i as u32).to_keyed_vec(b"con:aut:"), account.to_vec()))
+ ).chain(self.balances.iter()
+ .map(|&(account, balance)| (account.to_keyed_vec(b"sta:bal:"), balance.to_vec()))
+ )
+ .map(|(k, v)| (twox_128(&k[..])[..].to_vec(), v.to_vec()))
+ .collect()
+ }
+}
+
+pub fn additional_storage_with_genesis(genesis_block: &[u8]) -> Result, Vec>, ()> {
+ let h = Block::from_slice(genesis_block).ok_or(())?.header.blake2_256();
+ Ok(map![
+ twox_128(&0u64.to_keyed_vec(b"sys:old:")).to_vec() => h.to_vec()
+ ])
+}
diff --git a/substrate/wasm-runtime/polkadot/src/runtime/mod.rs b/substrate/wasm-runtime/polkadot/src/runtime/mod.rs
index 9befa9bd42..664cbac8c0 100644
--- a/substrate/wasm-runtime/polkadot/src/runtime/mod.rs
+++ b/substrate/wasm-runtime/polkadot/src/runtime/mod.rs
@@ -31,3 +31,7 @@ pub mod governance;
// TODO: polkadao
// TODO: parachains
+
+
+#[cfg(feature = "with-std")]
+pub mod genesismap;
diff --git a/substrate/wasm-runtime/polkadot/src/runtime/session.rs b/substrate/wasm-runtime/polkadot/src/runtime/session.rs
index 6cda783beb..495c60701a 100644
--- a/substrate/wasm-runtime/polkadot/src/runtime/session.rs
+++ b/substrate/wasm-runtime/polkadot/src/runtime/session.rs
@@ -78,6 +78,11 @@ pub mod privileged {
pub fn set_length(new: BlockNumber) {
storage::put(NEXT_SESSION_LENGTH, &new);
}
+
+ /// Forces a new session.
+ pub fn force_new_session() {
+ rotate_session();
+ }
}
// INTERNAL API (available to other runtime modules)
diff --git a/substrate/wasm-runtime/polkadot/src/runtime/staking.rs b/substrate/wasm-runtime/polkadot/src/runtime/staking.rs
index 004480b91b..5f71b608f2 100644
--- a/substrate/wasm-runtime/polkadot/src/runtime/staking.rs
+++ b/substrate/wasm-runtime/polkadot/src/runtime/staking.rs
@@ -151,6 +151,12 @@ pub mod privileged {
pub fn set_validator_count(new: usize) {
storage::put(VALIDATOR_COUNT, &(new as u32));
}
+
+ /// Force there to be a new era. This also forces a new session immediately after.
+ pub fn force_new_era() {
+ new_era();
+ session::privileged::force_new_session();
+ }
}
pub mod internal {
diff --git a/substrate/wasm-runtime/polkadot/src/runtime/system.rs b/substrate/wasm-runtime/polkadot/src/runtime/system.rs
index bfede1f875..a3d3a3a03b 100644
--- a/substrate/wasm-runtime/polkadot/src/runtime/system.rs
+++ b/substrate/wasm-runtime/polkadot/src/runtime/system.rs
@@ -79,6 +79,7 @@ pub mod internal {
let txs = block.transactions.iter().map(Slicable::to_vec).collect::>();
let txs = txs.iter().map(Vec::as_slice).collect::>();
let txs_root = enumerated_trie_root(&txs);
+ debug_assert_hash(&header.transaction_root, &txs_root);
assert!(header.transaction_root == txs_root, "Transaction trie root must be valid.");
// execute transactions
@@ -167,10 +168,8 @@ mod tests {
function: Function::StakingTransfer,
input_data: vec![].join(&two).join(&69u64),
},
- signature: "679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a".convert(),
+ signature: "13590ae48241e29780407687b86c331a9f40f3ab7f2cc2441787628bcafab6645dc81863b138a358e2a1ed1ffa940a4584ba94837f022f0cd162791530320904".convert(),
};
- // tx: 2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000
- // sig: 679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a
println!("tx is {}", HexDisplay::from(&tx.transaction.to_vec()));
@@ -212,33 +211,21 @@ mod tests {
let mut t = new_test_ext();
- let tx = UncheckedTransaction {
- transaction: Transaction {
- signed: one.clone(),
- nonce: 0,
- function: Function::StakingTransfer,
- input_data: vec![].join(&two).join(&69u64),
- },
- signature: "679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a".convert(),
- };
-
let h = Header {
parent_hash: [69u8; 32],
number: 1,
- state_root: hex!("2481853da20b9f4322f34650fea5f240dcbfb266d02db94bfa0153c31f4a29db"),
- transaction_root: hex!("91fab88ad8c30a6d05ad8e0cf9ab139bf1b8cdddc69abd51cdfa6d2699038af1"),
+ state_root: hex!("1ab2dbb7d4868a670b181327b0b6a58dc64b10cfb9876f737a5aa014b8da31e0"),
+ transaction_root: hex!("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"),
digest: Digest { logs: vec![], },
};
let b = Block {
header: h,
- transactions: vec![tx],
+ transactions: vec![],
};
with_externalities(&mut t, || {
execute_block(b);
- assert_eq!(staking::balance(&one), 42);
- assert_eq!(staking::balance(&two), 69);
});
}
@@ -250,35 +237,21 @@ mod tests {
let mut t = new_test_ext();
- let tx = UncheckedTransaction {
- transaction: Transaction {
- signed: one.clone(),
- nonce: 0,
- function: Function::StakingTransfer,
- input_data: vec![].join(&two).join(&69u64),
- },
- signature: "679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a".convert(),
- };
- // tx: 2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000
- // sig: 679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a
-
let h = Header {
parent_hash: [69u8; 32],
number: 1,
state_root: [0u8; 32],
- transaction_root: hex!("91fab88ad8c30a6d05ad8e0cf9ab139bf1b8cdddc69abd51cdfa6d2699038af1"),
+ transaction_root: hex!("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"),
digest: Digest { logs: vec![], },
};
let b = Block {
header: h,
- transactions: vec![tx],
+ transactions: vec![],
};
with_externalities(&mut t, || {
execute_block(b);
- assert_eq!(staking::balance(&one), 42);
- assert_eq!(staking::balance(&two), 69);
});
}
@@ -290,35 +263,21 @@ mod tests {
let mut t = new_test_ext();
- let tx = UncheckedTransaction {
- transaction: Transaction {
- signed: one.clone(),
- nonce: 0,
- function: Function::StakingTransfer,
- input_data: vec![].join(&two).join(&69u64),
- },
- signature: "679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a".convert(),
- };
- // tx: 2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee00000000000000000228000000d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a4500000000000000
- // sig: 679fcf0a846b4224c84ecad7d91a26241c46d00cb53d6480a363274e8965ee34b0b80b4b2e3836d3d8f8f12c0c1aef7350af587d9aee3883561d11726068ac0a
-
let h = Header {
parent_hash: [69u8; 32],
number: 1,
- state_root: hex!("2481853da20b9f4322f34650fea5f240dcbfb266d02db94bfa0153c31f4a29db"),
+ state_root: hex!("1ab2dbb7d4868a670b181327b0b6a58dc64b10cfb9876f737a5aa014b8da31e0"),
transaction_root: [0u8; 32],
digest: Digest { logs: vec![], },
};
let b = Block {
header: h,
- transactions: vec![tx],
+ transactions: vec![],
};
with_externalities(&mut t, || {
execute_block(b);
- assert_eq!(staking::balance(&one), 42);
- assert_eq!(staking::balance(&two), 69);
});
}
}
diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm
index 4981abe023..4ff597b8c7 100644
Binary files a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm and b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm differ
diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm
index 65624ef986..b02b09b63d 100644
Binary files a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm and b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm differ