From bffdc5811cbd64ecb4adc90d50988bf10b3b4366 Mon Sep 17 00:00:00 2001 From: Gav Wood Date: Mon, 12 Feb 2018 15:30:38 +0100 Subject: [PATCH] Additional runtime tests for the test-runtime (#69) * Remove rustc dependency from ed25519 and refactor a little. * Runtime support provides more extensive test-key functionality. * Additional APIs for ed25519 stuff. * Extensive test for test-runtime. * Fixes for the new test key API. * Additional convenience for tests * Take advantage of more convenient API. * Redo formating. * Remove old test identities. * Remove boilerplate, add test. * Refactor out unneeded code. * Clean up algo for determining authorities. * Remove unneeded API. * Make `to_*` consume * Only export keyring when testing * Fix build & warning * Extract Keyring into separate library. * Add tests for Keyring and a trait-based API. * Address grumbles. --- polkadot/api/src/lib.rs | 8 +- polkadot/cli/src/lib.rs | 2 +- polkadot/executor/Cargo.toml | 3 + polkadot/executor/src/lib.rs | 116 +++++++----------- polkadot/runtime/Cargo.toml | 3 + polkadot/runtime/src/lib.rs | 1 + polkadot/runtime/src/runtime/governance.rs | 38 +++--- polkadot/runtime/src/runtime/parachains.rs | 2 +- polkadot/runtime/src/runtime/session.rs | 2 +- polkadot/runtime/src/runtime/staking.rs | 18 +-- polkadot/runtime/src/runtime/system.rs | 22 ++-- polkadot/runtime/wasm/Cargo.lock | 3 +- .../release/polkadot_runtime.compact.wasm | Bin 75751 -> 75751 bytes .../release/polkadot_runtime.wasm | Bin 75800 -> 75800 bytes 14 files changed, 98 insertions(+), 120 deletions(-) diff --git a/polkadot/api/src/lib.rs b/polkadot/api/src/lib.rs index c79295823a..a16781eb69 100644 --- a/polkadot/api/src/lib.rs +++ b/polkadot/api/src/lib.rs @@ -31,7 +31,7 @@ use client::backend::Backend; use client::blockchain::BlockId; use client::Client; use polkadot_runtime::runtime; -use polkadot_executor::LocalNativeExecutionDispatch as LocalDispatch; +use polkadot_executor::Executor as LocalDispatch; use substrate_executor::{NativeExecutionDispatch, NativeExecutor}; use primitives::{AccountId, SessionKey}; use primitives::parachain::DutyRoster; @@ -64,8 +64,8 @@ error_chain! { /// /// All calls should fail when the exact runtime is unknown. pub trait PolkadotApi { - /// Get authorities at a given block. - fn authorities(&self, at: &BlockId) -> Result>; + /// Get session keys at a given block. + fn session_keys(&self, at: &BlockId) -> Result>; /// Get validators at a given block. fn validators(&self, at: &BlockId) -> Result>; @@ -104,7 +104,7 @@ macro_rules! with_runtime { impl PolkadotApi for Client> where ::client::error::Error: From<<::State as state_machine::backend::Backend>::Error> { - fn authorities(&self, at: &BlockId) -> Result> { + fn session_keys(&self, at: &BlockId) -> Result> { with_runtime!(self, at, ::runtime::consensus::authorities) } diff --git a/polkadot/cli/src/lib.rs b/polkadot/cli/src/lib.rs index 59e6ef270e..807ff6c2cb 100644 --- a/polkadot/cli/src/lib.rs +++ b/polkadot/cli/src/lib.rs @@ -65,7 +65,7 @@ pub fn run(args: I) -> error::Result<()> where init_logger(log_pattern); // Create client - let executor = polkadot_executor::executor(); + let executor = polkadot_executor::Executor::new(); let mut storage = Default::default(); let god_key = hex!["3d866ec8a9190c8343c2fc593d21d8a6d0c5c4763aaab2349de3a6111d64d124"]; diff --git a/polkadot/executor/Cargo.toml b/polkadot/executor/Cargo.toml index 60cd4ee20d..cca94287b0 100644 --- a/polkadot/executor/Cargo.toml +++ b/polkadot/executor/Cargo.toml @@ -16,3 +16,6 @@ substrate-executor = { path = "../../substrate/executor" } substrate-primitives = { path = "../../substrate/primitives" } polkadot-primitives = { path = "../primitives" } polkadot-runtime = { path = "../runtime" } + +[dev-dependencies] +substrate-keyring = { path = "../../substrate/keyring" } diff --git a/polkadot/executor/src/lib.rs b/polkadot/executor/src/lib.rs index 7db96440a4..a7cef0c3cb 100644 --- a/polkadot/executor/src/lib.rs +++ b/polkadot/executor/src/lib.rs @@ -18,7 +18,7 @@ //! executed is equivalent to the natively compiled code. extern crate polkadot_runtime; -extern crate substrate_executor; +#[macro_use] extern crate substrate_executor; extern crate substrate_codec as codec; extern crate substrate_state_machine as state_machine; extern crate substrate_runtime_io as runtime_io; @@ -27,48 +27,26 @@ extern crate polkadot_primitives as polkadot_primitives; extern crate ed25519; extern crate triehash; +#[cfg(test)] extern crate substrate_keyring as keyring; #[cfg(test)] extern crate substrate_runtime_support as runtime_support; #[cfg(test)] #[macro_use] extern crate hex_literal; -use polkadot_runtime as runtime; -use substrate_executor::error::{Error, ErrorKind}; -use substrate_executor::{NativeExecutionDispatch, NativeExecutor}; -use state_machine::Externalities; - -/// A null struct which implements `NativeExecutionDispatch` feeding in the hard-coded runtime. -pub struct LocalNativeExecutionDispatch; - -impl NativeExecutionDispatch for LocalNativeExecutionDispatch { - fn native_equivalent() -> &'static [u8] { - // WARNING!!! This assumes that the runtime was built *before* the main project. Until we - // get a proper build script, this must be strictly adhered to or things will go wrong. - include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm") - } - - fn dispatch(ext: &mut Externalities, method: &str, data: &[u8]) -> Result, Error> { - ::substrate_executor::with_native_environment(ext, move || runtime::api::dispatch(method, data))? - .ok_or_else(|| ErrorKind::MethodNotFound(method.to_owned()).into()) - } -} - -/// Creates new RustExecutor for contracts. -pub fn executor() -> NativeExecutor { - NativeExecutor { _dummy: ::std::marker::PhantomData } -} +native_executor_instance!(pub Executor, polkadot_runtime::api::dispatch, include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm")); #[cfg(test)] mod tests { use runtime_io; - use super::*; + use super::Executor; use substrate_executor::WasmExecutor; use codec::{KeyedVec, Slicable, Joiner}; - use runtime_support::{one, two, Hashable}; + use keyring::Keyring; + use runtime_support::Hashable; use polkadot_runtime::runtime::staking::balance; use state_machine::{CodeExecutor, TestExternalities}; use primitives::twox_128; use polkadot_primitives::{Hash, Header, BlockNumber, Block, Digest, Transaction, - UncheckedTransaction, Function, AccountId}; - use ed25519::Pair; + UncheckedTransaction, Function}; + use ed25519::{Public, Pair}; const BLOATY_CODE: &[u8] = include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm"); const COMPACT_CODE: &[u8] = include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm"); @@ -82,11 +60,11 @@ mod tests { fn tx() -> UncheckedTransaction { let transaction = Transaction { - signed: one(), + signed: Keyring::One.to_raw_public(), nonce: 0, - function: Function::StakingTransfer(two(), 69), + function: Function::StakingTransfer(Keyring::Two.to_raw_public(), 69), }; - let signature = secret_for(&transaction.signed).unwrap() + let signature = Keyring::from_raw_public(transaction.signed).unwrap() .sign(&transaction.encode()); UncheckedTransaction { transaction, signature } @@ -94,36 +72,36 @@ mod tests { #[test] fn panic_execution_with_foreign_code_gives_error() { - let one = one(); + let one = Keyring::One.to_raw_public(); let mut t = TestExternalities { storage: map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = executor().call(&mut t, BLOATY_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); + let r = Executor::new().call(&mut t, BLOATY_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); assert!(r.is_err()); } #[test] fn panic_execution_with_native_equivalent_code_gives_error() { - let one = one(); + let one = Keyring::One.to_raw_public(); let mut t = TestExternalities { storage: map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = executor().call(&mut t, COMPACT_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); + let r = Executor::new().call(&mut t, COMPACT_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); assert!(r.is_err()); } #[test] fn successful_execution_with_native_equivalent_code_gives_ok() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let mut t = TestExternalities { storage: map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = executor().call(&mut t, COMPACT_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); + let r = Executor::new().call(&mut t, COMPACT_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); assert!(r.is_ok()); runtime_io::with_externalities(&mut t, || { @@ -134,14 +112,14 @@ mod tests { #[test] fn successful_execution_with_foreign_code_gives_ok() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let mut t = TestExternalities { storage: map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] ], }; - let r = executor().call(&mut t, BLOATY_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); + let r = Executor::new().call(&mut t, BLOATY_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); assert!(r.is_ok()); runtime_io::with_externalities(&mut t, || { @@ -151,8 +129,8 @@ mod tests { } fn new_test_ext() -> TestExternalities { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; TestExternalities { storage: map![ @@ -174,19 +152,11 @@ mod tests { ], } } - fn secret_for(who: &AccountId) -> Option { - match who { - x if *x == one() => Some(Pair::from_seed(b"12345678901234567890123456789012")), - x if *x == two() => Some("9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60".into()), - _ => None, - } - } - fn construct_block(number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec) -> (Vec, Hash) { use triehash::ordered_trie_root; let transactions = txs.into_iter().map(|transaction| { - let signature = secret_for(&transaction.signed).unwrap() + let signature = Pair::from(Keyring::from_public(Public::from_raw(transaction.signed)).unwrap()) .sign(&transaction.encode()); UncheckedTransaction { transaction, signature } @@ -212,9 +182,9 @@ mod tests { [69u8; 32].into(), hex!("2481853da20b9f4322f34650fea5f240dcbfb266d02db94bfa0153c31f4a29db").into(), vec![Transaction { - signed: one(), + signed: Keyring::One.to_raw_public(), nonce: 0, - function: Function::StakingTransfer(two(), 69), + function: Function::StakingTransfer(Keyring::Two.to_raw_public(), 69), }] ) } @@ -226,14 +196,14 @@ mod tests { hex!("1feb4d3a2e587079e6ce1685fa79994efd995e33cb289d39cded67aac1bb46a9").into(), vec![ Transaction { - signed: two(), + signed: Keyring::Two.to_raw_public(), nonce: 0, - function: Function::StakingTransfer(one(), 5), + function: Function::StakingTransfer(Keyring::One.to_raw_public(), 5), }, Transaction { - signed: one(), + signed: Keyring::One.to_raw_public(), nonce: 1, - function: Function::StakingTransfer(two(), 15), + function: Function::StakingTransfer(Keyring::Two.to_raw_public(), 15), } ] ) @@ -243,18 +213,18 @@ mod tests { fn full_native_block_import_works() { let mut t = new_test_ext(); - executor().call(&mut t, COMPACT_CODE, "execute_block", &block1().0).unwrap(); + Executor::new().call(&mut t, COMPACT_CODE, "execute_block", &block1().0).unwrap(); runtime_io::with_externalities(&mut t, || { - assert_eq!(balance(&one()), 42); - assert_eq!(balance(&two()), 69); + assert_eq!(balance(&Keyring::One.to_raw_public()), 42); + assert_eq!(balance(&Keyring::Two.to_raw_public()), 69); }); - executor().call(&mut t, COMPACT_CODE, "execute_block", &block2().0).unwrap(); + Executor::new().call(&mut t, COMPACT_CODE, "execute_block", &block2().0).unwrap(); runtime_io::with_externalities(&mut t, || { - assert_eq!(balance(&one()), 32); - assert_eq!(balance(&two()), 79); + assert_eq!(balance(&Keyring::One.to_raw_public()), 32); + assert_eq!(balance(&Keyring::Two.to_raw_public()), 79); }); } @@ -265,21 +235,21 @@ mod tests { WasmExecutor.call(&mut t, COMPACT_CODE, "execute_block", &block1().0).unwrap(); runtime_io::with_externalities(&mut t, || { - assert_eq!(balance(&one()), 42); - assert_eq!(balance(&two()), 69); + assert_eq!(balance(&Keyring::One.to_raw_public()), 42); + assert_eq!(balance(&Keyring::Two.to_raw_public()), 69); }); WasmExecutor.call(&mut t, COMPACT_CODE, "execute_block", &block2().0).unwrap(); runtime_io::with_externalities(&mut t, || { - assert_eq!(balance(&one()), 32); - assert_eq!(balance(&two()), 79); + assert_eq!(balance(&Keyring::One.to_raw_public()), 32); + assert_eq!(balance(&Keyring::Two.to_raw_public()), 79); }); } #[test] fn panic_execution_gives_error() { - let one = one(); + let one = Keyring::One.to_raw_public(); let mut t = TestExternalities { storage: map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] ], }; @@ -291,8 +261,8 @@ mod tests { #[test] fn successful_execution_gives_ok() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let mut t = TestExternalities { storage: map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] diff --git a/polkadot/runtime/Cargo.toml b/polkadot/runtime/Cargo.toml index c8decd0462..4efe5c15e7 100644 --- a/polkadot/runtime/Cargo.toml +++ b/polkadot/runtime/Cargo.toml @@ -14,6 +14,9 @@ substrate-runtime-support = { path = "../../substrate/runtime-support" } substrate-primitives = { path = "../../substrate/primitives" } polkadot-primitives = { path = "../primitives" } +[dev-dependencies] +substrate-keyring = { path = "../../substrate/keyring" } + [features] default = ["std"] std = [ diff --git a/polkadot/runtime/src/lib.rs b/polkadot/runtime/src/lib.rs index 6eb3a259fe..99aebd5990 100644 --- a/polkadot/runtime/src/lib.rs +++ b/polkadot/runtime/src/lib.rs @@ -21,6 +21,7 @@ extern crate substrate_runtime_std as rstd; #[macro_use] extern crate substrate_runtime_io as runtime_io; extern crate substrate_runtime_support as runtime_support; +#[cfg(all(feature = "std", test))] extern crate substrate_keyring as keyring; #[cfg(feature = "std")] extern crate rustc_hex; diff --git a/polkadot/runtime/src/runtime/governance.rs b/polkadot/runtime/src/runtime/governance.rs index 4ac1e17a33..b8733b9776 100644 --- a/polkadot/runtime/src/runtime/governance.rs +++ b/polkadot/runtime/src/runtime/governance.rs @@ -147,14 +147,14 @@ mod tests { use super::*; use runtime_io::{with_externalities, twox_128, TestExternalities}; use codec::{KeyedVec, Joiner}; - use runtime_support::{one, two}; + use keyring::Keyring; use environment::with_env; use polkadot_primitives::{AccountId, Proposal}; use runtime::{staking, session}; fn new_test_ext() -> TestExternalities { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; TestExternalities { storage: map![ @@ -176,8 +176,8 @@ mod tests { #[test] fn majority_voting_should_work() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; let mut t = new_test_ext(); @@ -199,8 +199,8 @@ mod tests { #[test] fn majority_voting_should_work_after_unsuccessful_previous() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; let mut t = new_test_ext(); @@ -228,8 +228,8 @@ mod tests { #[test] fn minority_voting_should_not_succeed() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; let mut t = new_test_ext(); @@ -251,8 +251,8 @@ mod tests { #[test] #[should_panic] fn old_voting_should_be_illegal() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; let mut t = new_test_ext(); @@ -275,8 +275,8 @@ mod tests { #[test] #[should_panic] fn double_voting_should_be_illegal() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; let mut t = new_test_ext(); @@ -300,8 +300,8 @@ mod tests { #[test] #[should_panic] fn over_proposing_should_be_illegal() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; let mut t = new_test_ext(); @@ -324,8 +324,8 @@ mod tests { #[test] #[should_panic] fn approving_without_proposal_should_be_illegal() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; let mut t = new_test_ext(); @@ -347,8 +347,8 @@ mod tests { #[test] #[should_panic] fn non_validator_approving_should_be_illegal() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; let four = [4u8; 32]; let mut t = new_test_ext(); diff --git a/polkadot/runtime/src/runtime/parachains.rs b/polkadot/runtime/src/runtime/parachains.rs index 56559ee356..dd7485ddc8 100644 --- a/polkadot/runtime/src/runtime/parachains.rs +++ b/polkadot/runtime/src/runtime/parachains.rs @@ -79,7 +79,7 @@ mod tests { use super::*; use runtime_io::{with_externalities, twox_128, TestExternalities}; use codec::{KeyedVec, Joiner}; - use runtime_support::{one, two}; + use keyring::Keyring; use runtime::{consensus, session}; fn simple_setup() -> TestExternalities { diff --git a/polkadot/runtime/src/runtime/session.rs b/polkadot/runtime/src/runtime/session.rs index 9252e9774d..a3a43d88cc 100644 --- a/polkadot/runtime/src/runtime/session.rs +++ b/polkadot/runtime/src/runtime/session.rs @@ -139,7 +139,7 @@ mod tests { use super::internal::*; use runtime_io::{with_externalities, twox_128, TestExternalities}; use codec::{KeyedVec, Joiner}; - use runtime_support::{one, two}; + use keyring::Keyring; use environment::with_env; use polkadot_primitives::AccountId; use runtime::{consensus, session}; diff --git a/polkadot/runtime/src/runtime/staking.rs b/polkadot/runtime/src/runtime/staking.rs index b281bc5cd5..a66d43eeb9 100644 --- a/polkadot/runtime/src/runtime/staking.rs +++ b/polkadot/runtime/src/runtime/staking.rs @@ -215,15 +215,15 @@ mod tests { use runtime_io::{with_externalities, twox_128, TestExternalities}; use codec::{KeyedVec, Joiner}; - use runtime_support::{one, two}; + use keyring::Keyring; use environment::with_env; use polkadot_primitives::AccountId; use runtime::{staking, session}; #[test] fn staking_should_work() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; let four = [4u8; 32]; @@ -360,8 +360,8 @@ mod tests { #[test] fn staking_balance_works() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let mut t = TestExternalities { storage: map![ twox_128(&one.to_keyed_vec(BALANCE_OF)).to_vec() => vec![].and(&42u64) @@ -375,8 +375,8 @@ mod tests { #[test] fn staking_balance_transfer_works() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let mut t = TestExternalities { storage: map![ twox_128(&one.to_keyed_vec(BALANCE_OF)).to_vec() => vec![].and(&111u64) @@ -392,8 +392,8 @@ mod tests { #[test] #[should_panic] fn staking_balance_transfer_when_bonded_doesnt_work() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let mut t = TestExternalities { storage: map![ twox_128(&one.to_keyed_vec(BALANCE_OF)).to_vec() => vec![].and(&111u64) diff --git a/polkadot/runtime/src/runtime/system.rs b/polkadot/runtime/src/runtime/system.rs index 2a8519a683..2f8f5c25c7 100644 --- a/polkadot/runtime/src/runtime/system.rs +++ b/polkadot/runtime/src/runtime/system.rs @@ -236,7 +236,7 @@ mod tests { use runtime_io::{with_externalities, twox_128, TestExternalities}; use codec::{Joiner, KeyedVec, Slicable}; - use runtime_support::{one, two}; + use keyring::Keyring; use environment::with_env; use primitives::hexdisplay::HexDisplay; use polkadot_primitives::{Header, Digest, UncheckedTransaction, Transaction, Function}; @@ -244,8 +244,8 @@ mod tests { #[test] fn staking_balance_transfer_dispatch_works() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let mut t = TestExternalities { storage: map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] @@ -268,8 +268,8 @@ mod tests { } fn new_test_ext() -> TestExternalities { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; TestExternalities { storage: map![ @@ -293,8 +293,8 @@ mod tests { #[test] fn block_import_works() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let mut t = new_test_ext(); @@ -319,8 +319,8 @@ mod tests { #[test] #[should_panic] fn block_import_of_bad_state_root_fails() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let mut t = new_test_ext(); @@ -345,8 +345,8 @@ mod tests { #[test] #[should_panic] fn block_import_of_bad_transaction_root_fails() { - let one = one(); - let two = two(); + let one = Keyring::One.to_raw_public(); + let two = Keyring::Two.to_raw_public(); let mut t = new_test_ext(); diff --git a/polkadot/runtime/wasm/Cargo.lock b/polkadot/runtime/wasm/Cargo.lock index df8296ff09..11fe2d48f8 100644 --- a/polkadot/runtime/wasm/Cargo.lock +++ b/polkadot/runtime/wasm/Cargo.lock @@ -92,8 +92,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "ed25519" version = "0.1.0" dependencies = [ + "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-hex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-primitives 0.1.0", "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -643,6 +643,7 @@ dependencies = [ name = "substrate-runtime-support" version = "0.1.0" dependencies = [ + "ed25519 0.1.0", "environmental 0.1.0", "hex-literal 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "substrate-codec 0.1.0", diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm index 0382155efe00b8a70216123aa970a4038d6981b4..b4b77e5ec9e4c2a74a57d38ded342bd8de036607 100644 GIT binary patch delta 4199 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 P^nw*-;!qL0F6{pW*cvQ9 diff --git a/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm b/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm index 442401ac0613bef04e94de5eb6f253a90fd084d7..2b5124161a1f76f50f483c1c8bf74aa9942dd88a 100644 GIT binary patch delta 4193 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 Yvju!-E0G0<>wNVE$b_SHY}#1=3+l5Xr2qf` delta 4336 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