From ec9060460ca80f4d859cd496fab7980f404d7711 Mon Sep 17 00:00:00 2001 From: Gav Wood <gavin@parity.io> Date: Mon, 19 Feb 2018 20:05:30 +0100 Subject: [PATCH] Optional storage entries (#75) * Block builder (substrate) * Fix wasm build * Bulid on any block * Test for block builder. * Block import tests for client. * Tidy ups * Repotted client * Avoid pointless work * All backend stuff now manages optional storage. Also simplified a lot of the backend. * Native runtime-io now supports empty storage items. * Finish up the API transition. * Build fix. * Fix tests. * Remerge in changes to client. * Final fixes. * Unrevert typos * Remove accidentally committed change * Bring back zero copy * Fix merge. --- substrate/polkadot/executor/src/lib.rs | 28 +- .../runtime/src/runtime/governance.rs | 4 +- .../runtime/src/runtime/parachains.rs | 4 +- .../polkadot/runtime/src/runtime/session.rs | 4 +- .../polkadot/runtime/src/runtime/staking.rs | 20 +- .../polkadot/runtime/src/runtime/system.rs | 8 +- .../polkadot/runtime/src/runtime/timestamp.rs | 4 +- substrate/polkadot/runtime/wasm/genesis.wasm | Bin 70449 -> 76656 bytes .../release/polkadot_runtime.compact.wasm | Bin 75751 -> 76656 bytes .../release/polkadot_runtime.wasm | Bin 75800 -> 76705 bytes substrate/substrate/client/src/backend.rs | 2 +- substrate/substrate/client/src/client.rs | 504 ++++++++++++++++++ substrate/substrate/client/src/error.rs | 31 +- substrate/substrate/client/src/genesis.rs | 15 +- substrate/substrate/client/src/in_mem.rs | 2 +- substrate/substrate/client/src/lib.rs | 484 +---------------- .../substrate/executor/src/wasm_executor.rs | 51 +- substrate/substrate/executor/wasm/src/lib.rs | 2 +- .../release/runtime_test.compact.wasm | Bin 13451 -> 14298 bytes .../release/runtime_test.wasm | Bin 13576 -> 14394 bytes substrate/substrate/rpc/src/state/tests.rs | 2 +- substrate/substrate/runtime-io/with_std.rs | 64 +-- substrate/substrate/runtime-io/without_std.rs | 27 +- .../substrate/runtime-support/src/storage.rs | 83 ++- .../substrate/state-machine/src/backend.rs | 48 +- substrate/substrate/state-machine/src/ext.rs | 42 +- substrate/substrate/state-machine/src/lib.rs | 130 ++--- .../substrate/state-machine/src/testing.rs | 30 +- .../substrate/test-runtime/src/system.rs | 4 +- .../substrate/test-runtime/wasm/genesis.wasm | Bin 31744 -> 32296 bytes .../substrate_test_runtime.compact.wasm | Bin 31904 -> 32296 bytes .../release/substrate_test_runtime.wasm | Bin 31984 -> 32376 bytes 32 files changed, 856 insertions(+), 737 deletions(-) create mode 100644 substrate/substrate/client/src/client.rs diff --git a/substrate/polkadot/executor/src/lib.rs b/substrate/polkadot/executor/src/lib.rs index a7cef0c3cb3..f7ded050250 100644 --- a/substrate/polkadot/executor/src/lib.rs +++ b/substrate/polkadot/executor/src/lib.rs @@ -73,9 +73,9 @@ mod tests { #[test] fn panic_execution_with_foreign_code_gives_error() { let one = Keyring::One.to_raw_public(); - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] - ], }; + ]; let r = Executor::new().call(&mut t, BLOATY_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); assert!(r.is_err()); @@ -84,9 +84,9 @@ mod tests { #[test] fn panic_execution_with_native_equivalent_code_gives_error() { let one = Keyring::One.to_raw_public(); - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] - ], }; + ]; let r = Executor::new().call(&mut t, COMPACT_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); assert!(r.is_err()); @@ -97,9 +97,9 @@ mod tests { let one = Keyring::One.to_raw_public(); let two = Keyring::Two.to_raw_public(); - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] - ], }; + ]; let r = Executor::new().call(&mut t, COMPACT_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); assert!(r.is_ok()); @@ -115,9 +115,9 @@ mod tests { let one = Keyring::One.to_raw_public(); let two = Keyring::Two.to_raw_public(); - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] - ], }; + ]; let r = Executor::new().call(&mut t, BLOATY_CODE, "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); assert!(r.is_ok()); @@ -133,7 +133,7 @@ mod tests { let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; - TestExternalities { storage: map![ + map![ twox_128(&0u64.to_keyed_vec(b"sys:old:")).to_vec() => [69u8; 32].encode(), twox_128(b"gov:apr").to_vec() => vec![].and(&667u32), twox_128(b"ses:len").to_vec() => vec![].and(&2u64), @@ -149,7 +149,7 @@ mod tests { twox_128(b"sta:vac").to_vec() => vec![].and(&3u64), twox_128(b"sta:era").to_vec() => vec![].and(&0u64), twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] - ], } + ] } fn construct_block(number: BlockNumber, parent_hash: Hash, state_root: Hash, txs: Vec<Transaction>) -> (Vec<u8>, Hash) { @@ -250,9 +250,9 @@ mod tests { #[test] fn panic_execution_gives_error() { let one = Keyring::One.to_raw_public(); - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![68u8, 0, 0, 0, 0, 0, 0, 0] - ], }; + ]; let foreign_code = include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm"); let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); @@ -264,9 +264,9 @@ mod tests { let one = Keyring::One.to_raw_public(); let two = Keyring::Two.to_raw_public(); - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] - ], }; + ]; let foreign_code = include_bytes!("../../runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm"); let r = WasmExecutor.call(&mut t, &foreign_code[..], "execute_transaction", &vec![].and(&Header::from_block_number(1u64)).and(&tx())); diff --git a/substrate/polkadot/runtime/src/runtime/governance.rs b/substrate/polkadot/runtime/src/runtime/governance.rs index b8733b9776a..9138a3eddfe 100644 --- a/substrate/polkadot/runtime/src/runtime/governance.rs +++ b/substrate/polkadot/runtime/src/runtime/governance.rs @@ -157,7 +157,7 @@ mod tests { let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; - TestExternalities { storage: map![ + map![ twox_128(APPROVALS_REQUIRED).to_vec() => vec![].and(&667u32), twox_128(b"ses:len").to_vec() => vec![].and(&1u64), twox_128(b"ses:val:len").to_vec() => vec![].and(&3u32), @@ -171,7 +171,7 @@ mod tests { twox_128(b"sta:spe").to_vec() => vec![].and(&1u64), twox_128(b"sta:vac").to_vec() => vec![].and(&3u64), twox_128(b"sta:era").to_vec() => vec![].and(&1u64) - ], } + ] } #[test] diff --git a/substrate/polkadot/runtime/src/runtime/parachains.rs b/substrate/polkadot/runtime/src/runtime/parachains.rs index dd7485ddc83..1cd4151cf9a 100644 --- a/substrate/polkadot/runtime/src/runtime/parachains.rs +++ b/substrate/polkadot/runtime/src/runtime/parachains.rs @@ -83,10 +83,10 @@ mod tests { use runtime::{consensus, session}; fn simple_setup() -> TestExternalities { - TestExternalities { storage: map![ + map![ twox_128(b"ses:val:len").to_vec() => vec![].and(&8u32), twox_128(b"par:cou").to_vec() => vec![].and(&2u32) - ], } + ] } #[test] diff --git a/substrate/polkadot/runtime/src/runtime/session.rs b/substrate/polkadot/runtime/src/runtime/session.rs index a3a43d88cc1..e9bf5f37656 100644 --- a/substrate/polkadot/runtime/src/runtime/session.rs +++ b/substrate/polkadot/runtime/src/runtime/session.rs @@ -145,7 +145,7 @@ mod tests { use runtime::{consensus, session}; fn simple_setup() -> TestExternalities { - TestExternalities { storage: map![ + map![ twox_128(SESSION_LENGTH).to_vec() => vec![].and(&2u64), // the validators (10, 20, ...) twox_128(b"ses:val:len").to_vec() => vec![].and(&2u32), @@ -155,7 +155,7 @@ mod tests { b":auth:len".to_vec() => vec![].and(&2u32), 0u32.to_keyed_vec(b":auth:") => vec![11; 32], 1u32.to_keyed_vec(b":auth:") => vec![21; 32] - ], } + ] } #[test] diff --git a/substrate/polkadot/runtime/src/runtime/staking.rs b/substrate/polkadot/runtime/src/runtime/staking.rs index a66d43eeb90..0bb4372c6d2 100644 --- a/substrate/polkadot/runtime/src/runtime/staking.rs +++ b/substrate/polkadot/runtime/src/runtime/staking.rs @@ -227,7 +227,7 @@ mod tests { let three = [3u8; 32]; let four = [4u8; 32]; - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(b"ses:len").to_vec() => vec![].and(&1u64), twox_128(b"ses:val:len").to_vec() => vec![].and(&2u32), twox_128(&0u32.to_keyed_vec(b"ses:val:")).to_vec() => vec![10; 32], @@ -239,7 +239,7 @@ mod tests { twox_128(&two.to_keyed_vec(BALANCE_OF)).to_vec() => vec![].and(&20u64), twox_128(&three.to_keyed_vec(BALANCE_OF)).to_vec() => vec![].and(&30u64), twox_128(&four.to_keyed_vec(BALANCE_OF)).to_vec() => vec![].and(&40u64) - ], }; + ]; with_externalities(&mut t, || { assert_eq!(era_length(), 2u64); @@ -296,10 +296,10 @@ mod tests { #[test] fn staking_eras_work() { - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(b"ses:len").to_vec() => vec![].and(&1u64), twox_128(SESSIONS_PER_ERA).to_vec() => vec![].and(&2u64) - ], }; + ]; with_externalities(&mut t, || { assert_eq!(era_length(), 2u64); assert_eq!(sessions_per_era(), 2u64); @@ -363,9 +363,9 @@ mod tests { let one = Keyring::One.to_raw_public(); let two = Keyring::Two.to_raw_public(); - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(&one.to_keyed_vec(BALANCE_OF)).to_vec() => vec![].and(&42u64) - ], }; + ]; with_externalities(&mut t, || { assert_eq!(balance(&one), 42); @@ -378,9 +378,9 @@ mod tests { let one = Keyring::One.to_raw_public(); let two = Keyring::Two.to_raw_public(); - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(&one.to_keyed_vec(BALANCE_OF)).to_vec() => vec![].and(&111u64) - ], }; + ]; with_externalities(&mut t, || { transfer(&one, &two, 69); @@ -395,9 +395,9 @@ mod tests { let one = Keyring::One.to_raw_public(); let two = Keyring::Two.to_raw_public(); - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(&one.to_keyed_vec(BALANCE_OF)).to_vec() => vec![].and(&111u64) - ], }; + ]; with_externalities(&mut t, || { stake(&one); diff --git a/substrate/polkadot/runtime/src/runtime/system.rs b/substrate/polkadot/runtime/src/runtime/system.rs index 2f8f5c25c71..7d5e8835ed0 100644 --- a/substrate/polkadot/runtime/src/runtime/system.rs +++ b/substrate/polkadot/runtime/src/runtime/system.rs @@ -247,9 +247,9 @@ mod tests { let one = Keyring::One.to_raw_public(); let two = Keyring::Two.to_raw_public(); - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] - ], }; + ]; let tx = UncheckedTransaction { transaction: Transaction { @@ -272,7 +272,7 @@ mod tests { let two = Keyring::Two.to_raw_public(); let three = [3u8; 32]; - TestExternalities { storage: map![ + map![ twox_128(&0u64.to_keyed_vec(b"sys:old:")).to_vec() => [69u8; 32].encode(), twox_128(b"gov:apr").to_vec() => vec![].and(&667u32), twox_128(b"ses:len").to_vec() => vec![].and(&2u64), @@ -288,7 +288,7 @@ mod tests { twox_128(b"sta:vac").to_vec() => vec![].and(&3u64), twox_128(b"sta:era").to_vec() => vec![].and(&0u64), twox_128(&one.to_keyed_vec(b"sta:bal:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] - ], } + ] } #[test] diff --git a/substrate/polkadot/runtime/src/runtime/timestamp.rs b/substrate/polkadot/runtime/src/runtime/timestamp.rs index c64a511ad03..0b96f39bd4a 100644 --- a/substrate/polkadot/runtime/src/runtime/timestamp.rs +++ b/substrate/polkadot/runtime/src/runtime/timestamp.rs @@ -47,9 +47,9 @@ mod tests { #[test] fn timestamp_works() { - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ twox_128(CURRENT_TIMESTAMP).to_vec() => vec![].and(&42u64) - ], }; + ]; with_externalities(&mut t, || { assert_eq!(get(), 42); diff --git a/substrate/polkadot/runtime/wasm/genesis.wasm b/substrate/polkadot/runtime/wasm/genesis.wasm index 91c7b475743cb7b9cbb48c6dcc162501fe9e43c0..bc0cb89235c570beee9e2749b796933e05e9f774 100644 GIT binary patch literal 76656 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 literal 70449 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å`1UM2t#2gH@&gRI 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 Zyw((5E(i5Qc~<(%Z<M_bmEX#G{vTj`!=C^E diff --git a/substrate/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm b/substrate/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.compact.wasm index 84e52dbc50cfa544c0a8899aa70d307a4b0562d5..a1f28badf2e10cf131d7a34138f17d95b2ba1abf 100644 GIT binary patch delta 29608 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 B)a(EN delta 29234 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 diff --git a/substrate/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm b/substrate/polkadot/runtime/wasm/target/wasm32-unknown-unknown/release/polkadot_runtime.wasm index a92614dcc2d6fc281b868d3754d5c972ece62333..160550b5c786ffa6addf6c2a3ec6210a8605e9dd 100644 GIT binary patch delta 29773 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 Mnp-`44)-DcAD;FD<NyEw delta 29155 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 B7uf&+ diff --git a/substrate/substrate/client/src/backend.rs b/substrate/substrate/client/src/backend.rs index eef90467917..b53f48ff49d 100644 --- a/substrate/substrate/client/src/backend.rs +++ b/substrate/substrate/client/src/backend.rs @@ -31,7 +31,7 @@ pub trait BlockImportOperation { /// Append block data to the transaction. fn set_block_data(&mut self, header: block::Header, body: Option<block::Body>, justification: Option<primitives::bft::Justification>, is_new_best: bool) -> error::Result<()>; /// Inject storage data into the database. - fn set_storage<I: Iterator<Item=(Vec<u8>, Vec<u8>)>>(&mut self, iter: I) -> error::Result<()>; + fn set_storage<I: Iterator<Item=(Vec<u8>, Option<Vec<u8>>)>>(&mut self, changes: I) -> error::Result<()>; /// Inject storage data into the database. fn reset_storage<I: Iterator<Item=(Vec<u8>, Vec<u8>)>>(&mut self, iter: I) -> error::Result<()>; } diff --git a/substrate/substrate/client/src/client.rs b/substrate/substrate/client/src/client.rs new file mode 100644 index 00000000000..3ccc9debff5 --- /dev/null +++ b/substrate/substrate/client/src/client.rs @@ -0,0 +1,504 @@ +// Copyright 2017 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate 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. + +// Substrate 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 Substrate. If not, see <http://www.gnu.org/licenses/>. + +//! Substrate Client + +use primitives::{self, block, AuthorityId}; +use primitives::block::Id as BlockId; +use primitives::storage::{StorageKey, StorageData}; +use runtime_support::Hashable; +use codec::{KeyedVec, Slicable}; +use state_machine::{self, Ext, OverlayedChanges, Backend as StateBackend, CodeExecutor}; + +use backend::{self, BlockImportOperation}; +use blockchain::{self, Info as ChainInfo, Backend as ChainBackend}; +use {error, in_mem, block_builder, runtime_io, bft}; + +/// Polkadot Client +#[derive(Debug)] +pub struct Client<B, E> where B: backend::Backend { + backend: B, + executor: E, +} + +/// Client info +// TODO: split queue info from chain info and amalgamate into single struct. +#[derive(Debug)] +pub struct ClientInfo { + /// Best block hash. + pub chain: ChainInfo, + /// Best block number in the queue. + pub best_queued_number: Option<block::Number>, + /// Best queued block hash. + pub best_queued_hash: Option<block::HeaderHash>, +} + +/// Information regarding the result of a call. +pub struct CallResult { + /// The data that was returned from the call. + pub return_data: Vec<u8>, + /// The changes made to the state by the call. + pub changes: OverlayedChanges, +} + +/// Block import result. +#[derive(Debug)] +pub enum ImportResult { + /// Added to the import queue. + Queued, + /// Already in the import queue. + AlreadyQueued, + /// Already in the blockchain. + AlreadyInChain, + /// Block or parent is known to be bad. + KnownBad, + /// Block parent is not in the chain. + UnknownParent, +} + +/// Block status. +#[derive(Debug, PartialEq, Eq)] +pub enum BlockStatus { + /// Added to the import queue. + Queued, + /// Already in the blockchain. + InChain, + /// Block or parent is known to be bad. + KnownBad, + /// Not in the queue or the blockchain. + Unknown, +} + +/// A header paired with a justification which has already been checked. +#[derive(Debug, PartialEq, Eq, Clone)] +pub struct JustifiedHeader { + header: block::Header, + justification: bft::Justification, +} + +impl JustifiedHeader { + /// Deconstruct the justified header into parts. + pub fn into_inner(self) -> (block::Header, bft::Justification) { + (self.header, self.justification) + } +} + +/// Create an instance of in-memory client. +pub fn new_in_mem<E, F>( + executor: E, + build_genesis: F +) -> error::Result<Client<in_mem::Backend, E>> + where + E: CodeExecutor, + F: FnOnce() -> (block::Header, Vec<(Vec<u8>, Vec<u8>)>) +{ + Client::new(in_mem::Backend::new(), executor, build_genesis) +} + +impl<B, E> Client<B, E> where + B: backend::Backend, + E: CodeExecutor, + error::Error: From<<<B as backend::Backend>::State as StateBackend>::Error>, +{ + /// Creates new Polkadot Client with given blockchain and code executor. + pub fn new<F>( + backend: B, + executor: E, + build_genesis: F + ) -> error::Result<Self> + where + F: FnOnce() -> (block::Header, Vec<(Vec<u8>, Vec<u8>)>) + { + if backend.blockchain().header(BlockId::Number(0))?.is_none() { + trace!("Empty database, writing genesis block"); + let (genesis_header, genesis_store) = build_genesis(); + let mut op = backend.begin_operation(BlockId::Hash(block::HeaderHash::default()))?; + op.reset_storage(genesis_store.into_iter())?; + op.set_block_data(genesis_header, Some(vec![]), None, true)?; + backend.commit_operation(op)?; + } + Ok(Client { + backend, + executor, + }) + } + + /// Get a reference to the state at a given block. + pub fn state_at(&self, block: &BlockId) -> error::Result<B::State> { + self.backend.state_at(*block) + } + + /// Expose backend reference. To be used in tests only + pub fn backend(&self) -> &B { + &self.backend + } + + /// Return single storage entry of contract under given address in state in a block of given hash. + pub fn storage(&self, id: &BlockId, key: &StorageKey) -> error::Result<StorageData> { + Ok(StorageData(self.state_at(id)? + .storage(&key.0)? + .ok_or_else(|| error::ErrorKind::NoValueForKey(key.0.clone()))? + .to_vec())) + } + + /// Get the code at a given block. + pub fn code_at(&self, id: &BlockId) -> error::Result<Vec<u8>> { + self.storage(id, &StorageKey(b":code".to_vec())).map(|data| data.0) + } + + /// Clone a new instance of Executor. + pub fn clone_executor(&self) -> E where E: Clone { + self.executor.clone() + } + + /// Get the current set of authorities from storage. + pub fn authorities_at(&self, id: &BlockId) -> error::Result<Vec<AuthorityId>> { + let state = self.state_at(id)?; + (0..u32::decode(&mut state.storage(b":auth:len")?.ok_or(error::ErrorKind::AuthLenEmpty)?).ok_or(error::ErrorKind::AuthLenInvalid)?) + .map(|i| state.storage(&i.to_keyed_vec(b":auth:")) + .map_err(|_| error::ErrorKind::Backend) + .and_then(|v| v.ok_or(error::ErrorKind::AuthEmpty(i))) + .and_then(|mut s| AuthorityId::decode(&mut s).ok_or(error::ErrorKind::AuthInvalid(i))) + .map_err(Into::into) + ).collect() + } + + /// Execute a call to a contract on top of state in a block of given hash. + /// + /// No changes are made. + pub fn call(&self, id: &BlockId, method: &str, call_data: &[u8]) -> error::Result<CallResult> { + let mut changes = OverlayedChanges::default(); + let return_data = state_machine::execute( + &self.state_at(id)?, + &mut changes, + &self.executor, + method, + call_data, + )?; + Ok(CallResult { return_data, changes }) + } + + /// Set up the native execution environment to call into a native runtime code. + pub fn using_environment<F: FnOnce() -> T, T>( + &self, f: F + ) -> error::Result<T> { + self.using_environment_at(&BlockId::Number(self.info()?.chain.best_number), &mut Default::default(), f) + } + + /// Set up the native execution environment to call into a native runtime code. + pub fn using_environment_at<F: FnOnce() -> T, T>( + &self, + id: &BlockId, + overlay: &mut OverlayedChanges, + f: F + ) -> error::Result<T> { + Ok(runtime_io::with_externalities(&mut Ext { backend: &self.state_at(id)?, overlay }, f)) + } + + /// Create a new block, built on the head of the chain. + pub fn new_block(&self) -> error::Result<block_builder::BlockBuilder<B, E>> where E: Clone { + block_builder::BlockBuilder::new(self) + } + + /// Create a new block, built on top of `parent`. + pub fn new_block_at(&self, parent: &BlockId) -> error::Result<block_builder::BlockBuilder<B, E>> where E: Clone { + block_builder::BlockBuilder::at_block(parent, &self) + } + + /// Check a header's justification. + pub fn check_justification( + &self, + header: block::Header, + justification: bft::UncheckedJustification, + ) -> error::Result<JustifiedHeader> { + let authorities = self.authorities_at(&BlockId::Hash(header.parent_hash))?; + let just = bft::check_justification(&authorities[..], header.parent_hash, justification) + .map_err(|_| error::ErrorKind::BadJustification(BlockId::Hash(header.hash())))?; + Ok(JustifiedHeader { + header, + justification: just, + }) + } + + /// Queue a block for import. + pub fn import_block( + &self, + header: JustifiedHeader, + body: Option<block::Body>, + ) -> error::Result<ImportResult> { + // TODO: import lock + // TODO: validate block + // TODO: import justification. + let (header, justification) = header.into_inner(); + match self.backend.blockchain().status(BlockId::Hash(header.parent_hash))? { + blockchain::BlockStatus::InChain => (), + blockchain::BlockStatus::Unknown => return Ok(ImportResult::UnknownParent), + } + + let mut transaction = self.backend.begin_operation(BlockId::Hash(header.parent_hash))?; + let mut overlay = OverlayedChanges::default(); + + state_machine::execute( + transaction.state()?, + &mut overlay, + &self.executor, + "execute_block", + &block::Block { header: header.clone(), transactions: body.clone().unwrap_or_default().clone() }.encode() + )?; + + let is_new_best = header.number == self.backend.blockchain().info()?.best_number + 1; + trace!("Imported {}, (#{}), best={}", block::HeaderHash::from(header.blake2_256()), header.number, is_new_best); + transaction.set_block_data(header, body, Some(justification.uncheck().into()), is_new_best)?; + transaction.set_storage(overlay.drain())?; + self.backend.commit_operation(transaction)?; + Ok(ImportResult::Queued) + } + + /// Get blockchain info. + pub fn info(&self) -> error::Result<ClientInfo> { + let info = self.backend.blockchain().info().map_err(|e| error::Error::from_blockchain(Box::new(e)))?; + Ok(ClientInfo { + chain: info, + best_queued_hash: None, + best_queued_number: None, + }) + } + + /// Get block status. + pub fn block_status(&self, id: &BlockId) -> error::Result<BlockStatus> { + // TODO: more efficient implementation + match self.backend.blockchain().header(*id).map_err(|e| error::Error::from_blockchain(Box::new(e)))?.is_some() { + true => Ok(BlockStatus::InChain), + false => Ok(BlockStatus::Unknown), + } + } + + /// Get block hash by number. + pub fn block_hash(&self, block_number: block::Number) -> error::Result<Option<block::HeaderHash>> { + self.backend.blockchain().hash(block_number) + } + + /// Convert an arbitrary block ID into a block hash. + pub fn block_hash_from_id(&self, id: &BlockId) -> error::Result<Option<block::HeaderHash>> { + match *id { + BlockId::Hash(h) => Ok(Some(h)), + BlockId::Number(n) => self.block_hash(n), + } + } + + /// Convert an arbitrary block ID into a block hash. + pub fn block_number_from_id(&self, id: &BlockId) -> error::Result<Option<block::Number>> { + match *id { + BlockId::Hash(_) => Ok(self.header(id)?.map(|h| h.number)), + BlockId::Number(n) => Ok(Some(n)), + } + } + + /// Get block header by id. + pub fn header(&self, id: &BlockId) -> error::Result<Option<block::Header>> { + self.backend.blockchain().header(*id) + } + + /// Get block body by id. + pub fn body(&self, id: &BlockId) -> error::Result<Option<block::Body>> { + self.backend.blockchain().body(*id) + } + + /// Get block justification set by id. + pub fn justification(&self, id: &BlockId) -> error::Result<Option<primitives::bft::Justification>> { + self.backend.blockchain().justification(*id) + } +} + +impl<B, E> bft::BlockImport for Client<B, E> + where + B: backend::Backend, + E: state_machine::CodeExecutor, + error::Error: From<<B::State as state_machine::backend::Backend>::Error> +{ + fn import_block(&self, block: block::Block, justification: bft::Justification) { + let justified_header = JustifiedHeader { + header: block.header, + justification, + }; + + let _ = self.import_block(justified_header, Some(block.transactions)); + } +} + +impl<B, E> bft::Authorities for Client<B, E> + where + B: backend::Backend, + E: state_machine::CodeExecutor, + error::Error: From<<B::State as state_machine::backend::Backend>::Error> +{ + fn authorities(&self, at: &BlockId) -> Result<Vec<AuthorityId>, bft::Error> { + self.authorities_at(at).map_err(|_| bft::ErrorKind::StateUnavailable(*at).into()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use codec::Slicable; + use keyring::Keyring; + use {primitives, genesis}; + use primitives::block::Transaction as PrimitiveTransaction; + use test_runtime::genesismap::{GenesisConfig, additional_storage_with_genesis}; + use test_runtime::{UncheckedTransaction, Transaction}; + use test_runtime; + + native_executor_instance!(Executor, test_runtime::api::dispatch, include_bytes!("../../test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm")); + + fn genesis_config() -> GenesisConfig { + GenesisConfig::new_simple(vec![ + Keyring::Alice.to_raw_public(), + Keyring::Bob.to_raw_public(), + Keyring::Charlie.to_raw_public() + ], 1000) + } + + fn prepare_genesis() -> (primitives::block::Header, Vec<(Vec<u8>, Vec<u8>)>) { + let mut storage = genesis_config().genesis_map(); + let block = genesis::construct_genesis_block(&storage); + storage.extend(additional_storage_with_genesis(&block)); + (primitives::block::Header::decode(&mut block.header.encode().as_ref()).expect("to_vec() always gives a valid serialisation; qed"), storage.into_iter().collect()) + } + + // since we are in the client module we can create falsely justified + // headers. + // TODO: remove this in favor of custom verification pipelines for the + // client + fn justify(header: &block::Header) -> bft::UncheckedJustification { + let hash = header.hash(); + let authorities = vec![ + Keyring::Alice.into(), + Keyring::Bob.into(), + Keyring::Charlie.into(), + ]; + + bft::UncheckedJustification { + digest: hash, + signatures: authorities.iter().map(|key| { + bft::sign_message( + bft::generic::Message::Commit(1, hash), + key, + header.parent_hash + ).signature + }).collect(), + round_number: 1, + } + } + + #[test] + fn client_initialises_from_genesis_ok() { + let client = new_in_mem(Executor::new(), prepare_genesis).unwrap(); + let genesis_hash = client.block_hash(0).unwrap().unwrap(); + + assert_eq!(client.using_environment(|| test_runtime::system::latest_block_hash()).unwrap(), genesis_hash); + assert_eq!(client.using_environment(|| test_runtime::system::balance_of(Keyring::Alice.to_raw_public())).unwrap(), 1000); + assert_eq!(client.using_environment(|| test_runtime::system::balance_of(Keyring::Ferdie.to_raw_public())).unwrap(), 0); + } + + #[test] + fn authorities_call_works() { + let genesis_config = genesis_config(); + + let prepare_genesis = || { + let mut storage = genesis_config.genesis_map(); + let block = genesis::construct_genesis_block(&storage); + storage.extend(additional_storage_with_genesis(&block)); + (primitives::block::Header::decode(&mut block.header.encode().as_ref()).expect("to_vec() always gives a valid serialisation; qed"), storage.into_iter().collect()) + }; + let client = new_in_mem(Executor::new(), prepare_genesis).unwrap(); + + assert_eq!(client.info().unwrap().chain.best_number, 0); + assert_eq!(client.authorities_at(&BlockId::Number(0)).unwrap(), vec![ + Keyring::Alice.to_raw_public(), + Keyring::Bob.to_raw_public(), + Keyring::Charlie.to_raw_public() + ]); + } + + #[test] + fn block_builder_works_with_no_transactions() { + let genesis_config = genesis_config(); + + let prepare_genesis = || { + let mut storage = genesis_config.genesis_map(); + let block = genesis::construct_genesis_block(&storage); + storage.extend(additional_storage_with_genesis(&block)); + (primitives::block::Header::decode(&mut block.header.encode().as_ref()).expect("to_vec() always gives a valid serialisation; qed"), storage.into_iter().collect()) + }; + let client = new_in_mem(Executor::new(), prepare_genesis).unwrap(); + + let builder = client.new_block().unwrap(); + let block = builder.bake().unwrap(); + + let justification = justify(&block.header); + let justified = client.check_justification(block.header, justification).unwrap(); + client.import_block(justified, Some(block.transactions)).unwrap(); + + assert_eq!(client.info().unwrap().chain.best_number, 1); + assert_eq!(client.using_environment(|| test_runtime::system::latest_block_hash()).unwrap(), client.block_hash(1).unwrap().unwrap()); + } + + trait Signable { + fn signed(self) -> PrimitiveTransaction; + } + impl Signable for Transaction { + fn signed(self) -> PrimitiveTransaction { + let signature = Keyring::from_raw_public(self.from.clone()).unwrap().sign(&self.encode()); + PrimitiveTransaction::decode(&mut UncheckedTransaction { signature, tx: self }.encode().as_ref()).unwrap() + } + } + + #[test] + fn block_builder_works_with_transactions() { + let genesis_config = GenesisConfig::new_simple(vec![ + Keyring::Alice.to_raw_public(), + Keyring::Bob.to_raw_public(), + Keyring::Charlie.to_raw_public() + ], 1000); + + let prepare_genesis = || { + let mut storage = genesis_config.genesis_map(); + let block = genesis::construct_genesis_block(&storage); + storage.extend(additional_storage_with_genesis(&block)); + (primitives::block::Header::decode(&mut block.header.encode().as_ref()).expect("to_vec() always gives a valid serialisation; qed"), storage.into_iter().collect()) + }; + let client = new_in_mem(Executor::new(), prepare_genesis).unwrap(); + + let mut builder = client.new_block().unwrap(); + + builder.push(Transaction { + from: Keyring::Alice.to_raw_public(), + to: Keyring::Ferdie.to_raw_public(), + amount: 42, + nonce: 0 + }.signed()).unwrap(); + let block = builder.bake().unwrap(); + + let justification = justify(&block.header); + let justified = client.check_justification(block.header, justification).unwrap(); + client.import_block(justified, Some(block.transactions)).unwrap(); + + assert_eq!(client.info().unwrap().chain.best_number, 1); + assert!(client.state_at(&BlockId::Number(1)).unwrap() != client.state_at(&BlockId::Number(0)).unwrap()); + assert_eq!(client.using_environment(|| test_runtime::system::balance_of(Keyring::Alice.to_raw_public())).unwrap(), 958); + assert_eq!(client.using_environment(|| test_runtime::system::balance_of(Keyring::Ferdie.to_raw_public())).unwrap(), 42); + } +} diff --git a/substrate/substrate/client/src/error.rs b/substrate/substrate/client/src/error.rs index 2ae07c870c5..179fa7d910a 100644 --- a/substrate/substrate/client/src/error.rs +++ b/substrate/substrate/client/src/error.rs @@ -18,6 +18,7 @@ use std; use state_machine; +use primitives::hexdisplay::HexDisplay; error_chain! { errors { @@ -45,23 +46,41 @@ error_chain! { display("Blockchain: {}", e), } - /// Bad justification for header. - BadJustification(h: ::primitives::block::Id) { - description("bad justification for header"), - display("bad justification for header: {}", h), + /// Attempt to read storage yet nothing set for that key. + NoValueForKey(key: Vec<u8>) { + description("storage doesn't contain key"), + display("Storage does not contain the key entry: {}", HexDisplay::from(key)), + } + + /// Invalid state data. + AuthLenEmpty { + description("authority count state error"), + display("Current state of blockchain has no authority count value"), + } + + /// Invalid state data. + AuthEmpty(i: u32) { + description("authority value state error"), + display("Current state of blockchain has no authority value for index {}", i), } /// Invalid state data. - AuthLen { + AuthLenInvalid { description("authority count state error"), display("Current state of blockchain has invalid authority count value"), } /// Invalid state data. - Auth(i: u32) { + AuthInvalid(i: u32) { description("authority value state error"), display("Current state of blockchain has invalid authority value for index {}", i), } + + /// Bad justification for header. + BadJustification(h: ::primitives::block::Id) { + description("bad justification for header"), + display("bad justification for header: {}", h), + } } } diff --git a/substrate/substrate/client/src/genesis.rs b/substrate/substrate/client/src/genesis.rs index fb3e228d03f..50086097772 100644 --- a/substrate/substrate/client/src/genesis.rs +++ b/substrate/substrate/client/src/genesis.rs @@ -114,7 +114,7 @@ mod tests { } #[test] - fn construct_genesis_should_work() { + fn construct_genesis_should_work_with_native() { let mut storage = GenesisConfig::new_simple( vec![Keyring::One.to_raw_public(), Keyring::Two.to_raw_public()], 1000 ).genesis_map(); @@ -133,6 +133,19 @@ mod tests { "execute_block", &b1data ).unwrap(); + } + + #[test] + fn construct_genesis_should_work_with_wasm() { + let mut storage = GenesisConfig::new_simple( + vec![Keyring::One.to_raw_public(), Keyring::Two.to_raw_public()], 1000 + ).genesis_map(); + let block = construct_genesis_block(&storage); + let genesis_hash = block.header.blake2_256().into(); + storage.extend(additional_storage_with_genesis(&block).into_iter()); + + let backend = InMemory::from(storage); + let (b1data, _b1hash) = block1(genesis_hash, &backend); let mut overlay = OverlayedChanges::default(); let _ = execute( diff --git a/substrate/substrate/client/src/in_mem.rs b/substrate/substrate/client/src/in_mem.rs index 62ef3b97155..b6a0341169b 100644 --- a/substrate/substrate/client/src/in_mem.rs +++ b/substrate/substrate/client/src/in_mem.rs @@ -180,7 +180,7 @@ impl backend::BlockImportOperation for BlockImportOperation { Ok(()) } - fn set_storage<I: Iterator<Item=(Vec<u8>, Vec<u8>)>>(&mut self, changes: I) -> error::Result<()> { + fn set_storage<I: Iterator<Item=(Vec<u8>, Option<Vec<u8>>)>>(&mut self, changes: I) -> error::Result<()> { self.pending_state.commit(changes); Ok(()) } diff --git a/substrate/substrate/client/src/lib.rs b/substrate/substrate/client/src/lib.rs index c86c06afef9..6054808f9b4 100644 --- a/substrate/substrate/client/src/lib.rs +++ b/substrate/substrate/client/src/lib.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see <http://www.gnu.org/licenses/>. -//! Substrate Client +//! Substrate Client and associated logic. #![warn(missing_docs)] @@ -41,485 +41,7 @@ pub mod backend; pub mod in_mem; pub mod genesis; pub mod block_builder; +mod client; +pub use client::{Client, ClientInfo, CallResult, ImportResult, BlockStatus, new_in_mem}; pub use blockchain::Info as ChainInfo; - -use primitives::{block, AuthorityId}; -use primitives::block::Id as BlockId; -use primitives::storage::{StorageKey, StorageData}; -use codec::{KeyedVec, Slicable}; - -use blockchain::Backend as BlockchainBackend; -use backend::BlockImportOperation; -use state_machine::backend::Backend as StateBackend; -use state_machine::{Ext, OverlayedChanges}; -use runtime_support::Hashable; - -/// Polkadot Client -#[derive(Debug)] -pub struct Client<B, E> where B: backend::Backend { - backend: B, - executor: E, -} - -/// Client info -// TODO: split queue info from chain info and amalgamate into single struct. -#[derive(Debug)] -pub struct ClientInfo { - /// Best block hash. - pub chain: ChainInfo, - /// Best block number in the queue. - pub best_queued_number: Option<block::Number>, - /// Best queued block hash. - pub best_queued_hash: Option<block::HeaderHash>, -} - -/// Information regarding the result of a call. -pub struct CallResult { - /// The data that was returned from the call. - pub return_data: Vec<u8>, - /// The changes made to the state by the call. - pub changes: state_machine::OverlayedChanges, -} - -/// Block import result. -#[derive(Debug)] -pub enum ImportResult { - /// Added to the import queue. - Queued, - /// Already in the import queue. - AlreadyQueued, - /// Already in the blockchain. - AlreadyInChain, - /// Block or parent is known to be bad. - KnownBad, - /// Block parent is not in the chain. - UnknownParent, -} - -/// Block status. -#[derive(Debug, PartialEq, Eq)] -pub enum BlockStatus { - /// Added to the import queue. - Queued, - /// Already in the blockchain. - InChain, - /// Block or parent is known to be bad. - KnownBad, - /// Not in the queue or the blockchain. - Unknown, -} - -/// A header paired with a justification which has already been checked. -#[derive(Debug, PartialEq, Eq, Clone)] -pub struct JustifiedHeader { - header: block::Header, - justification: bft::Justification, -} - -impl JustifiedHeader { - /// Deconstruct the justified header into parts. - pub fn into_inner(self) -> (block::Header, bft::Justification) { - (self.header, self.justification) - } -} - -/// Create an instance of in-memory client. -pub fn new_in_mem<E, F>( - executor: E, - build_genesis: F -) -> error::Result<Client<in_mem::Backend, E>> - where - E: state_machine::CodeExecutor, - F: FnOnce() -> (block::Header, Vec<(Vec<u8>, Vec<u8>)>) -{ - Client::new(in_mem::Backend::new(), executor, build_genesis) -} - -impl<B, E> Client<B, E> where - B: backend::Backend, - E: state_machine::CodeExecutor, - error::Error: From<<<B as backend::Backend>::State as state_machine::backend::Backend>::Error>, -{ - /// Creates new Polkadot Client with given blockchain and code executor. - pub fn new<F>( - backend: B, - executor: E, - build_genesis: F - ) -> error::Result<Self> - where - F: FnOnce() -> (block::Header, Vec<(Vec<u8>, Vec<u8>)>) - { - if backend.blockchain().header(BlockId::Number(0))?.is_none() { - trace!("Empty database, writing genesis block"); - let (genesis_header, genesis_store) = build_genesis(); - let mut op = backend.begin_operation(BlockId::Hash(block::HeaderHash::default()))?; - op.reset_storage(genesis_store.into_iter())?; - op.set_block_data(genesis_header, Some(vec![]), None, true)?; - backend.commit_operation(op)?; - } - Ok(Client { - backend, - executor, - }) - } - - /// Get a reference to the state at a given block. - pub fn state_at(&self, block: &BlockId) -> error::Result<B::State> { - self.backend.state_at(*block) - } - - /// Expose backend reference. To be used in tests only - pub fn backend(&self) -> &B { - &self.backend - } - - /// Return single storage entry of contract under given address in state in a block of given hash. - pub fn storage(&self, id: &BlockId, key: &StorageKey) -> error::Result<StorageData> { - Ok(self.state_at(id)? - .storage(&key.0) - .map(|x| StorageData(x.to_vec()))?) - } - - /// Get the code at a given block. - pub fn code_at(&self, id: &BlockId) -> error::Result<Vec<u8>> { - self.storage(id, &StorageKey(b":code".to_vec())).map(|data| data.0) - } - - /// Clone a new instance of Executor. - pub fn clone_executor(&self) -> E where E: Clone { - self.executor.clone() - } - - /// Get the current set of authorities from storage. - pub fn authorities_at(&self, id: &BlockId) -> error::Result<Vec<AuthorityId>> { - let state = self.state_at(id)?; - (0..u32::decode(&mut state.storage(b":auth:len")?).ok_or(error::ErrorKind::AuthLen)?) - .map(|i| state.storage(&i.to_keyed_vec(b":auth:")) - .map_err(|_| error::ErrorKind::Backend) - .and_then(|mut s| AuthorityId::decode(&mut s).ok_or(error::ErrorKind::Auth(i))) - .map_err(Into::into) - ).collect() - } - - /// Execute a call to a contract on top of state in a block of given hash. - /// - /// No changes are made. - pub fn call(&self, id: &BlockId, method: &str, call_data: &[u8]) -> error::Result<CallResult> { - let mut changes = state_machine::OverlayedChanges::default(); - let return_data = state_machine::execute( - &self.state_at(id)?, - &mut changes, - &self.executor, - method, - call_data, - )?; - Ok(CallResult { return_data, changes }) - } - - /// Set up the native execution environment to call into a native runtime code. - pub fn using_environment<F: FnOnce() -> T, T>( - &self, f: F - ) -> error::Result<T> { - self.using_environment_at(&BlockId::Number(self.info()?.chain.best_number), &mut Default::default(), f) - } - - /// Set up the native execution environment to call into a native runtime code. - pub fn using_environment_at<F: FnOnce() -> T, T>( - &self, - id: &BlockId, - overlay: &mut OverlayedChanges, - f: F - ) -> error::Result<T> { - Ok(runtime_io::with_externalities(&mut Ext { backend: &self.state_at(id)?, overlay }, f)) - } - - /// Create a new block, built on the head of the chain. - pub fn new_block(&self) -> error::Result<block_builder::BlockBuilder<B, E>> where E: Clone { - block_builder::BlockBuilder::new(self) - } - - /// Create a new block, built on top of `parent`. - pub fn new_block_at(&self, parent: &BlockId) -> error::Result<block_builder::BlockBuilder<B, E>> where E: Clone { - block_builder::BlockBuilder::at_block(parent, &self) - } - - /// Check a header's justification. - pub fn check_justification( - &self, - header: block::Header, - justification: bft::UncheckedJustification, - ) -> error::Result<JustifiedHeader> { - let authorities = self.authorities_at(&BlockId::Hash(header.parent_hash))?; - let just = bft::check_justification(&authorities[..], header.parent_hash, justification) - .map_err(|_| error::ErrorKind::BadJustification(BlockId::Hash(header.hash())))?; - Ok(JustifiedHeader { - header, - justification: just, - }) - } - - /// Queue a block for import. - pub fn import_block( - &self, - header: JustifiedHeader, - body: Option<block::Body>, - ) -> error::Result<ImportResult> { - // TODO: import lock - // TODO: validate block - // TODO: import justification. - let (header, justification) = header.into_inner(); - match self.backend.blockchain().status(BlockId::Hash(header.parent_hash))? { - blockchain::BlockStatus::InChain => (), - blockchain::BlockStatus::Unknown => return Ok(ImportResult::UnknownParent), - } - - let mut transaction = self.backend.begin_operation(BlockId::Hash(header.parent_hash))?; - let mut overlay = OverlayedChanges::default(); - - state_machine::execute( - transaction.state()?, - &mut overlay, - &self.executor, - "execute_block", - &block::Block { header: header.clone(), transactions: body.clone().unwrap_or_default().clone() }.encode() - )?; - - let is_new_best = header.number == self.backend.blockchain().info()?.best_number + 1; - trace!("Imported {}, (#{}), best={}", block::HeaderHash::from(header.blake2_256()), header.number, is_new_best); - transaction.set_block_data(header, body, Some(justification.uncheck().into()), is_new_best)?; - transaction.set_storage(overlay.drain())?; - self.backend.commit_operation(transaction)?; - Ok(ImportResult::Queued) - } - - /// Get blockchain info. - pub fn info(&self) -> error::Result<ClientInfo> { - let info = self.backend.blockchain().info().map_err(|e| error::Error::from_blockchain(Box::new(e)))?; - Ok(ClientInfo { - chain: info, - best_queued_hash: None, - best_queued_number: None, - }) - } - - /// Get block status. - pub fn block_status(&self, id: &BlockId) -> error::Result<BlockStatus> { - // TODO: more efficient implementation - match self.backend.blockchain().header(*id).map_err(|e| error::Error::from_blockchain(Box::new(e)))?.is_some() { - true => Ok(BlockStatus::InChain), - false => Ok(BlockStatus::Unknown), - } - } - - /// Get block hash by number. - pub fn block_hash(&self, block_number: block::Number) -> error::Result<Option<block::HeaderHash>> { - self.backend.blockchain().hash(block_number) - } - - /// Convert an arbitrary block ID into a block hash. - pub fn block_hash_from_id(&self, id: &BlockId) -> error::Result<Option<block::HeaderHash>> { - match *id { - BlockId::Hash(h) => Ok(Some(h)), - BlockId::Number(n) => self.block_hash(n), - } - } - - /// Convert an arbitrary block ID into a block hash. - pub fn block_number_from_id(&self, id: &BlockId) -> error::Result<Option<block::Number>> { - match *id { - BlockId::Hash(_) => Ok(self.header(id)?.map(|h| h.number)), - BlockId::Number(n) => Ok(Some(n)), - } - } - - /// Get block header by id. - pub fn header(&self, id: &BlockId) -> error::Result<Option<block::Header>> { - self.backend.blockchain().header(*id) - } - - /// Get block body by id. - pub fn body(&self, id: &BlockId) -> error::Result<Option<block::Body>> { - self.backend.blockchain().body(*id) - } - - /// Get block justification set by id. - pub fn justification(&self, id: &BlockId) -> error::Result<Option<primitives::bft::Justification>> { - self.backend.blockchain().justification(*id) - } -} - -impl<B, E> bft::BlockImport for Client<B, E> - where - B: backend::Backend, - E: state_machine::CodeExecutor, - error::Error: From<<B::State as state_machine::backend::Backend>::Error> -{ - fn import_block(&self, block: block::Block, justification: bft::Justification) { - let justified_header = JustifiedHeader { - header: block.header, - justification, - }; - - let _ = self.import_block(justified_header, Some(block.transactions)); - } -} - -impl<B, E> bft::Authorities for Client<B, E> - where - B: backend::Backend, - E: state_machine::CodeExecutor, - error::Error: From<<B::State as state_machine::backend::Backend>::Error> -{ - fn authorities(&self, at: &BlockId) -> Result<Vec<AuthorityId>, bft::Error> { - self.authorities_at(at).map_err(|_| bft::ErrorKind::StateUnavailable(*at).into()) - } -} - -#[cfg(test)] -mod tests { - use super::*; - use codec::Slicable; - use keyring::Keyring; - use primitives::block::Transaction as PrimitiveTransaction; - use test_runtime::genesismap::{GenesisConfig, additional_storage_with_genesis}; - use test_runtime::{UncheckedTransaction, Transaction}; - use test_runtime; - - native_executor_instance!(Executor, test_runtime::api::dispatch, include_bytes!("../../test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm")); - - fn genesis_config() -> GenesisConfig { - GenesisConfig::new_simple(vec![ - Keyring::Alice.to_raw_public(), - Keyring::Bob.to_raw_public(), - Keyring::Charlie.to_raw_public() - ], 1000) - } - - fn prepare_genesis() -> (primitives::block::Header, Vec<(Vec<u8>, Vec<u8>)>) { - let mut storage = genesis_config().genesis_map(); - let block = genesis::construct_genesis_block(&storage); - storage.extend(additional_storage_with_genesis(&block)); - (primitives::block::Header::decode(&mut block.header.encode().as_ref()).expect("to_vec() always gives a valid serialisation; qed"), storage.into_iter().collect()) - } - - // since we are in the client module we can create falsely justified - // headers. - // TODO: remove this in favor of custom verification pipelines for the - // client - fn justify(header: &block::Header) -> bft::UncheckedJustification { - let hash = header.hash(); - let authorities = vec![ - Keyring::Alice.into(), - Keyring::Bob.into(), - Keyring::Charlie.into(), - ]; - - bft::UncheckedJustification { - digest: hash, - signatures: authorities.iter().map(|key| { - bft::sign_message( - bft::generic::Message::Commit(1, hash), - key, - header.parent_hash - ).signature - }).collect(), - round_number: 1, - } - } - - #[test] - fn client_initialises_from_genesis_ok() { - let client = new_in_mem(Executor::new(), prepare_genesis).unwrap(); - let genesis_hash = client.block_hash(0).unwrap().unwrap(); - - assert_eq!(client.using_environment(|| test_runtime::system::latest_block_hash()).unwrap(), genesis_hash); - assert_eq!(client.using_environment(|| test_runtime::system::balance_of(Keyring::Alice.to_raw_public())).unwrap(), 1000); - assert_eq!(client.using_environment(|| test_runtime::system::balance_of(Keyring::Ferdie.to_raw_public())).unwrap(), 0); - } - - #[test] - fn authorities_call_works() { - let genesis_config = genesis_config(); - - let prepare_genesis = || { - let mut storage = genesis_config.genesis_map(); - let block = genesis::construct_genesis_block(&storage); - storage.extend(additional_storage_with_genesis(&block)); - (primitives::block::Header::decode(&mut block.header.encode().as_ref()).expect("to_vec() always gives a valid serialisation; qed"), storage.into_iter().collect()) - }; - let client = new_in_mem(Executor::new(), prepare_genesis).unwrap(); - - assert_eq!(client.info().unwrap().chain.best_number, 0); - assert_eq!(client.authorities_at(&BlockId::Number(0)).unwrap(), vec![ - Keyring::Alice.to_raw_public(), - Keyring::Bob.to_raw_public(), - Keyring::Charlie.to_raw_public() - ]); - } - - #[test] - fn block_builder_works_with_no_transactions() { - let genesis_config = genesis_config(); - - let prepare_genesis = || { - let mut storage = genesis_config.genesis_map(); - let block = genesis::construct_genesis_block(&storage); - storage.extend(additional_storage_with_genesis(&block)); - (primitives::block::Header::decode(&mut block.header.encode().as_ref()).expect("to_vec() always gives a valid serialisation; qed"), storage.into_iter().collect()) - }; - let client = new_in_mem(Executor::new(), prepare_genesis).unwrap(); - - let builder = client.new_block().unwrap(); - let block = builder.bake().unwrap(); - - let justification = justify(&block.header); - let justified = client.check_justification(block.header, justification).unwrap(); - client.import_block(justified, Some(block.transactions)).unwrap(); - - assert_eq!(client.info().unwrap().chain.best_number, 1); - assert_eq!(client.using_environment(|| test_runtime::system::latest_block_hash()).unwrap(), client.block_hash(1).unwrap().unwrap()); - } - - trait Signable { - fn signed(self) -> PrimitiveTransaction; - } - impl Signable for Transaction { - fn signed(self) -> PrimitiveTransaction { - let signature = Keyring::from_raw_public(self.from.clone()).unwrap().sign(&self.encode()); - PrimitiveTransaction::decode(&mut UncheckedTransaction { signature, tx: self }.encode().as_ref()).unwrap() - } - } - - #[test] - fn block_builder_works_with_transactions() { - let genesis_config = genesis_config(); - - let prepare_genesis = || { - let mut storage = genesis_config.genesis_map(); - let block = genesis::construct_genesis_block(&storage); - storage.extend(additional_storage_with_genesis(&block)); - (primitives::block::Header::decode(&mut block.header.encode().as_ref()).expect("to_vec() always gives a valid serialisation; qed"), storage.into_iter().collect()) - }; - let client = new_in_mem(Executor::new(), prepare_genesis).unwrap(); - - let mut builder = client.new_block().unwrap(); - - builder.push(Transaction { - from: Keyring::Alice.to_raw_public(), - to: Keyring::Ferdie.to_raw_public(), - amount: 42, - nonce: 0 - }.signed()).unwrap(); - let block = builder.bake().unwrap(); - - let justification = justify(&block.header); - let justified = client.check_justification(block.header, justification).unwrap(); - client.import_block(justified, Some(block.transactions)).unwrap(); - - assert_eq!(client.info().unwrap().chain.best_number, 1); - assert!(client.state_at(&BlockId::Number(1)).unwrap() != client.state_at(&BlockId::Number(0)).unwrap()); - assert_eq!(client.using_environment(|| test_runtime::system::balance_of(Keyring::Alice.to_raw_public())).unwrap(), 958); - assert_eq!(client.using_environment(|| test_runtime::system::balance_of(Keyring::Ferdie.to_raw_public())).unwrap(), 42); - } -} diff --git a/substrate/substrate/executor/src/wasm_executor.rs b/substrate/substrate/executor/src/wasm_executor.rs index 00bdb558656..4d525a59753 100644 --- a/substrate/substrate/executor/src/wasm_executor.rs +++ b/substrate/substrate/executor/src/wasm_executor.rs @@ -171,34 +171,53 @@ impl_function_executor!(this: FunctionExecutor<'e, E>, } this.ext.set_storage(key, value); }, + ext_clear_storage(key_data: *const u8, key_len: u32) => { + let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; + if let Some(preimage) = this.hash_lookup.get(&key) { + info!(target: "wasm-trace", "*** Clearing storage: %{} [k={}]", ascii_format(&preimage), HexDisplay::from(&key)); + } else { + info!(target: "wasm-trace", "*** Clearing storage: {} [k={}]", ascii_format(&key), HexDisplay::from(&key)); + } + this.ext.clear_storage(&key); + }, + // return 0 and place u32::max_value() into written_out if no value exists for the key. ext_get_allocated_storage(key_data: *const u8, key_len: u32, written_out: *mut u32) -> *mut u8 => { let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; - let value = this.ext.storage(&key).map_err(|_| DummyUserError)?; + let maybe_value = this.ext.storage(&key); if let Some(preimage) = this.hash_lookup.get(&key) { - info!(target: "wasm-trace", " Getting storage: %{} == {} [k={}]", ascii_format(&preimage), HexDisplay::from(&value), HexDisplay::from(&key)); + info!(target: "wasm-trace", " Getting storage: %{} == {} [k={}]", ascii_format(&preimage), if let Some(ref b) = maybe_value { format!("{}", HexDisplay::from(b)) } else { "<empty>".to_owned() }, HexDisplay::from(&key)); } else { - info!(target: "wasm-trace", " Getting storage: {} == {} [k={}]", ascii_format(&key), HexDisplay::from(&value), HexDisplay::from(&key)); + info!(target: "wasm-trace", " Getting storage: {} == {} [k={}]", ascii_format(&key), if let Some(ref b) = maybe_value { format!("{}", HexDisplay::from(b)) } else { "<empty>".to_owned() }, HexDisplay::from(&key)); } - let offset = this.heap.allocate(value.len() as u32) as u32; - this.memory.set(offset, &value).map_err(|_| DummyUserError)?; - - this.memory.write_primitive(written_out, value.len() as u32)?; - offset + if let Some(value) = maybe_value { + let offset = this.heap.allocate(value.len() as u32) as u32; + this.memory.set(offset, &value).map_err(|_| DummyUserError)?; + this.memory.write_primitive(written_out, value.len() as u32)?; + offset + } else { + this.memory.write_primitive(written_out, u32::max_value())?; + 0 + } }, + // return u32::max_value() if no value exists for the key. ext_get_storage_into(key_data: *const u8, key_len: u32, value_data: *mut u8, value_len: u32, value_offset: u32) -> u32 => { let key = this.memory.get(key_data, key_len as usize).map_err(|_| DummyUserError)?; - let value = this.ext.storage(&key).map_err(|_| DummyUserError)?; + let maybe_value = this.ext.storage(&key); if let Some(preimage) = this.hash_lookup.get(&key) { - info!(target: "wasm-trace", " Getting storage: %{} == {} [k={}]", ascii_format(&preimage), HexDisplay::from(&value), HexDisplay::from(&key)); + info!(target: "wasm-trace", " Getting storage: %{} == {} [k={}]", ascii_format(&preimage), if let Some(ref b) = maybe_value { format!("{}", HexDisplay::from(b)) } else { "<empty>".to_owned() }, HexDisplay::from(&key)); + } else { + info!(target: "wasm-trace", " Getting storage: {} == {} [k={}]", ascii_format(&key), if let Some(ref b) = maybe_value { format!("{}", HexDisplay::from(b)) } else { "<empty>".to_owned() }, HexDisplay::from(&key)); + } + if let Some(value) = maybe_value { + let value = &value[value_offset as usize..]; + let written = ::std::cmp::min(value_len as usize, value.len()); + this.memory.set(value_data, &value[..written]).map_err(|_| DummyUserError)?; + written as u32 } else { - info!(target: "wasm-trace", " Getting storage: {} == {} [k={}]", ascii_format(&key), HexDisplay::from(&value), HexDisplay::from(&key)); + u32::max_value() } - let value = &value[value_offset as usize..]; - let written = ::std::cmp::min(value_len as usize, value.len()); - this.memory.set(value_data, &value[..written]).map_err(|_| DummyUserError)?; - written as u32 }, ext_storage_root(result: *mut u8) => { let r = this.ext.storage_root(); @@ -369,7 +388,7 @@ mod tests { b"foo".to_vec() => b"bar".to_vec(), b"baz".to_vec() => b"bar".to_vec() ]; - assert_eq!(expected, ext.storage); + assert_eq!(expected, ext); } #[test] diff --git a/substrate/substrate/executor/wasm/src/lib.rs b/substrate/substrate/executor/wasm/src/lib.rs index 11401a39d7b..013ecca1ed7 100644 --- a/substrate/substrate/executor/wasm/src/lib.rs +++ b/substrate/substrate/executor/wasm/src/lib.rs @@ -19,7 +19,7 @@ impl_stubs!( set_storage(b"input", input); print("storage"); - let foo = storage(b"foo"); + let foo = storage(b"foo").unwrap(); print("set_storage"); set_storage(b"baz", &foo); diff --git a/substrate/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm b/substrate/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm index d5fd4dfb021bc0d9dc3253288694113321c46df3..cbc81694c0999d1af58aaad064d227df8200e417 100644 GIT binary patch literal 14298 zcmds8dvx4Yoxk_~p7Xmi$uE7RX_K~h#zLpGG?Uj%l7h{z(zK<87Fix5l7w~&nY2kW znHF$YGAU6(Ud2`6_`tf0@(`Bl@xdZWJqJ)+g}Mi1S6PW3JnJ93T32+>`XKxH-aC_| z7!c3yo;|zabiVg~@9TTN?|bhLHZZoIGsgI~c)vA1KF-Jch5n@q>$mYsI1O1p2Z~dj zU(cu?>t`DB>-#<Gi9bFrJ}eSee)v#L{@POCmHP&U@~wTX9a$y_xqy)QJ*^!bEnR(w z^2Ncu*D;G48g#?(!TtH-Kq<ecuT&h&_Z3G*O3bEapPKg;^Lge_btzS^%9r{E_U#+l ztp|*iMv4Ph<r$;)fZF%#M&`~U^80rmxNdHb{Qj|g$siIm<Unz7xYP$Km`9`Z77XrS zX>TX<30X@WF|4n;q9!m-*wQs4*Y>rvcACA;qRjTy%AopZGv+#+{(PG|!gqXMikR*2 z1Kjf*i?cfK2Rz~K&+i{8UME<*lpibg?HMQy^bHQPM4hhY_a7)-*H_G!4i<-5O`vfH z28IWBv)X!H**!A6XRtIlGCZ)a&oqR!x?zq`>Jl2G2`4HS%&F5x7B1B7uaVfIr3O2n zxE9wH4}#b$^H&WH_Z=L*W^i~9t9L81SZZq-E{i2Ni<tD*u54P7YFr*XcHYV#aUsU7 z>m%UP!j8hBl$8~>=uteuqLVBMe3DC)A{oY_-?7M1Oz|*?j_}9}W6FwHR<P(U9$Cr? z?IaUD7;L2lOYvyDS5Kmcew=!kp+|WX!(?9Qq{QX~#~dEkRF)E$%FO5kJV+~?p{x$! zCmjMTsR?^1<tlfRdf()|n-fg2(2^023JWxetsH8qmC<u7Je^6#q|G*Q>9goXPKe6{ zY-R3#v1nz#O3-F}B{uP##Zbep87L4$0jSdyU@bATmQ`8n6+QKx7I-;3_Y|9-nR<sz z5!k?1ncC^5hTRf!9f5AP-hgHUG6u95&}u-N0qq8K7?3p}XF#U`T?TX;u)%<{3^?0> zw;HgK#Dt<Mgv8h5tPnL6QoyWXojENaLWPACTGz15EXpsW1fkLzMJ1IZWx#O7*9c~M zh6TlDDt<wUY6SyC5Bi9nNI^9?Nf%UP#W_$7p4Br!K3fe<)MT_{YZAKCA$pQdL<6Rn zRs=`cMmW%b|9^ss8z%f;7tBli6l=^3rDm;h*86C?WFdhKY>}zeo7yr1nh12W6$Y$S zq`+jQp#)HcNUIrZNLi$Uf~uwj<zpdXm4fCP-3zO_hY7M`6&j#>XeZy0*3;o9G;Sen z+=5ElP(2Z4DlVwv7NB{L2w~5031vQ%a%TL^oE<t*Tw9sgq^(3(VPV#sDy++{R0+hD z6Ezp$w~w>1VHtT{(W7{@@;q3LPz;)}h8c@PC9GC#RQzfMu3YztW86#ZJa}T75<S2% z%(`S5>g0qCnrI67=596;aj=MOP6#xBHzkFMvf==00M`PXWCi^G9A1KhPfmxpHt7;L zko3SOCn|HzD9^ZY_-dtixSC1Wt|@?XKXQb84d>$I;Nwxc07_DBgh0hmJ*$xNs%1MX z)&X@3v?vXD1TX{mA;3=26U9NdMQ$ZdUM&fct9V+h(@{sch*`9Nr955o5&0bSOcy{k zCkZEA!)B{TcS-uD3cfqa9a3Io7bxz<c47rr#R@5@+-(U*No<*yQUMCV&c;*_jqgZ+ z9~Alm<@AD&K?rw+Sx{BMd5z%`tZavta#D6e#68S|>5?)oFa!2rZ%#NUCGle`x1f9# zBWX!+*@Jjfo)TLUOoDipWjzEouyahU*VN86U<ZM2cD?~S4cKMC1qQs`fC~-yGXpL% z;9>(VG2l`I-eJIH2E5aN%MEy!0aqB%2kI?k1zH-R0EF)*m*%SY8g?n!szJdLJVNc7 zMPZjQLT%M3Dj{_AqrXoxD7O++bR7}Ln_GwZ$EtOV6#Y2?QIbFyaa|&jq2S`AT+;D4 zg`hnuuH39%07`PTq06jBQ7GOau1+Qh^e1be;_<4A*Qi7#MK~(Lw?M<cASzi2RD2n< z9STD~Hc~0^P>8e#KWGY=0$z#Goh^FO1vYdHu#nPFpRh^ZCwa{{Jb}*O;6rPn#?k7e z)Gh%?mSWM7XV^9*W57atYa?DzvXJtl>&e{Fb|4jtUS<cNrqRoy(9EGQO!?7YfK$K^ zpNf~jCnW|>fBl8#?MdHEF`SAeF($#FrO-W=jDY|>d@J~Bmc)7~Y36**T6!5hL=TFc zJ3D3^nFfu?6uKFUb2(=&jh{=ij8-c)l#E4dqjLEP!{3yQ_-M*+gs+y7ID`rk22Bt7 zfT|78LXw9caaa)iVqBXv%uhk%YRE^*$RCATxT<Cd83$MVOqNMO6p_{27+Is>wdhU2 z&u&h@ev`1Tq!V|D6+Y<~kD6#kun(&=fOoazG}ozGWp%T45hoS`w+^mT$+U>qF_yp~ zrANW$nQrFLZ_J>R)9Q3H9f8oT2m!HE8<Pxv<iA3N9{pyhfV+AlDqM&IyW|n?W*LBt ziHC23JAcR-x5}C7it}*=3o<NNWptDQqmB6d>M$roMKFjf@j{Y|9;-(|6gwesu$^2v z><1#jM5H`gK4iR*4+H}NL*;GFb(+95B&@hiYsX1xp(=-x6tp=+dkC%@4W!DDep(wU zc>yTTG}{g}sa0^xX)vk=V~rh0<q&}-5^yj)=|;zSGKf|ty*ce=n>twNAkcv)5l^WT zL;R{uCbZ>XGYbwyCwY-(x6#u=Pl29g>dDb_V=_TxrQtJ+DuMp-L!&A{e`fk@OhUf8 z9fs_o-L1A8EW#0sHjbh*jj5=)t0honu}3TpDlCrA$70vaRilDg7L!+*)nBdU5XP)M zRpqM<39@^Q5fK};5mjYApQ=Dkt`;JZh^13L*&jS>l4*T#cEa*!^+9NTm?4%rLm8x2 zaIl+(;RlqM#E{Lp?8A=m#`*OmNsvXZASK|sD!WMwB&BtnR)!>JJyW%$v{UENHSmnl z3g}Dp3cL&^Vl^vcObDDq|M1TxlpB-L&&VVBWTY=Lcq%GPPg~oe-8`BKqczd-y66}V zzYC+MM7Rd|2bB2VX1o}OV})4|=a1J%$>_+E=p#Hj))4)aI`cTfCy$Q&Zc70_avRvi zqaWW~DnviJb=`K9KY1U@cQ;V+hd)L!L8Vuxr`c$9_sL)jD))c>U?EBq`tR;QDcC+r ze~84yR#%c5!*>*~B3JH>J+!HezY}Z{J|DV_Hp+@(o79c>Cb^2;oAiij5FSsmD*Fg3 z<d37cqTslqz<hAow0&z!!iQOq&3mH}0*@Wp+ktwKQL?A(8i(1AYmrpZNkqTLffI7t zoN(b>fpZb|fJYW*&`uoAhXxbr)Q0m2yqIYu??B3=yhaT2B2h{*fN>=CghCP*Wuh05 zFQZe_=%J{VVoR{CQ6cJ?83ecu4IxT?Tcv~}{DKpN`&AXERkD`OLaX&i;*%?H4Y-_1 z8`Mxrr`J%$5PpeL3B*g%v-v`#00(FP(*YBXQ-@3m9SEe7$Zknci^z<yuQ*-q#E}>w z8AIL;hibBSxIZ6_0E;MOa`adP2AD=9a+JV@iqiBZ9npIe<a5Tyj6srT#wbc5=jn?G z4n42<AX*jl=;&+0B_g6kuD2P%8r12jh(xiDG0M@;#k3afi9@h9EZqZVp#&hMffi*7 z>?Q31*a@Er$56n~=y7ECU?8~XYPF~oNfq=u0wn8ou;Q8Mzmd`r_-G{b(KH{0&qks~ z%!PNAG=CgQLHndZUS$MyLc4yDhV#Yj;FB~M6RjLg;w(Y)DO=C#mWp(H_Qtc4abZSq z#g5z(rddz|(@(O|BC;OLRjh~r#}J52i6ID&2EgW#Dr<Rbw~4jER;~q&_(FkB7=aP_ z$Fa#W??nO%Jgh=*j$~!Mp{$_RL|RqtAWb=h^OW|^Bo}?KBh`BID`KNi0L)U*2Y5bT zCdWxFg|ZPEp$6K$K>_B~Ca}S#*zOU~QQkHT)xN<T$LOR1VowS7;AJ->7ZISlZbq!F z1bYg~F$(rBg1s}Ry&CKTIDi;B>0nR1b`b1+bR-eY1bgyo0o+2Y8tf@Qa1iVf2gt;f zQ-ohK!QQO~dl&6+rn()$p8OC6d);oZu>x>!9PH`ZfbuE&&+38Jc=HE*y-GlgspeGr z7(w9}d2}Tl^Haky@}2p@adoQK3CB3l>FWnZ9#L5lEI34<zTM*fxK{9FtSTY$7`{#f z5Fi*THe4_1D=w^I_LP$A$bkM9xs6!F=&%zbW6?s;(u60UGaB}9Mq?f_2iU)_JS|&T z2?Z~*UR(KQ62mz&rST0A1m@$08p<cld`@LD+yP)Rn5YjmB(wJ^B2aA7v%54cCf6;e zOm2L~8&5tnaeQ`Sq_T9@O5%t_Uc;W_HM9pR;+#nxKr{TJmT)RY{6l;u0SqA`;PwPE zLBfqAAo`%$mY<JtcP2ia#AP~RX$XZ3yga}kVq2bqZIHa82|*`ZOgjW?E(?m-7TFrI ze9BiadBs1Ui(CS<j+3WA%8Meh0GK#Bz?-@d2e?WOi8Rpkpokfx8-PUs@WdemLf6e+ zV^%bwJcUayN7ot*Pq8jipY17}hbit*PLHi3$<i8uXAi3D<O4ukgc6#(o~^_tD+v<y zR+U0$VLDSX#X)0bV|pZQ3@YWC&_i3JrD=0`$S~;*i4@}Zap9%iG;tVPbt(S<o5-hW zK`0-)Nn<zP#5D}=BXPG!x=c01<Vp?P-vK1J-;Pl+#Ph7!1$ZNv)2T6OV73Bt5;vV0 zjcEYpQeZNAT77RvLoqSk>T5g}FnH?piW{DWusuTv)_gre(8)LJp%h06w4g*(VMUZ^ z?S8<Q={C~LGYR_xVG(W%v4`j$R6%)#Iv}wYs;{BW;HlFWd`%tLo+2(1zY)d2(Ub#~ z_J{Ba(wk!1HF#RuBpalf+BG28hHDVypM`$T!bKots#qg#y|kNvP9hvBw_?uvG!2J9 zS9>%R!pDMo8siRN10aR+TsnY~qoL?SL8vkVIEiB=jNZ{k4<f0CLm&>c7z~X>rlAK` zvkMSMeUT&2CIEU+5vLR~<t;cBKx<$udP=<=s*qQxD()&+4jCp!P*OrC87hZVwjz*< zne1(i#<F~^c;F)mbDiNnsbEDXDk@l!fl)zpB0mmILunOCM)IV6M)ITsr%E0jNgb{R z{FhmEcoB<}IzU}X9VX#sX4L`6dDX$-NgW;uNFAale7e|s-V-r8*D-S$cLH83Ag>kB zX7reV01)Iwkf}j5Hb{bxqU#_^-NFKr)YMF_s(VGa9O_ZQCOYes?VJ^&AI3Krpv-J( z04$a<bF9MQMVHJnXy`;0m*q~R%_)dJlps?MqDjE5(Q`FP9z8N%C7}VDjke>sBJ%({ z;ZCZKtqQFkld<EBz7-FD06Th-GY62YF-f{nSGe8KKe*~esd7;zpm7}HgNEXg07I~Q zNMR9`z$tWui`|5Duew%6>Gi1}I%pgxZrl<atKqU6%M;@iY!8ERHEaXWH5~52G&K++ zy>Gi)a37D7IoOa6v*?jp9pPijp`l`DBCdRtFwiRDmbo$vk!NO@kaI^u<2NDyf=N>f z4=RvOiHC6QtK=l!k>}Y)s2BWi-o~-lZX@w#w_!&9!8YimHoFZY0kFUv^H_A$tcSxc zu?>$N2&BX|L2NS~t|}Aa95lqp#Dl>a4S{3gu-qhv5CAH=LW4+aY<;k<+$KZ0wx;l0 zqIHa(O(-uT;}4=VF;iz1^g}wojxa{k=u`qf#33AVb@)O13G+hC=_3KHA>k?*@MAU^ zaP*)~F*IhjSmb;r6Tt;L;)o3j>gYrU;<fq0Xia=Uh$c<eU>(4HFs}x5GZd!*j{*~F z3^^+W%&M8OP@iun$f4ZGPhAt9klv<r2-9Cm(A$a90ae?xMP|JUJ<u_YrsryC5sk%T zF$&~n6kr(*xPk!x$S0YxsFE*j0K_&b^FfUnQSt>oCl5OgkA`@O?SsKcD9CVe)FsX% zXaRuBh*Tg9k2Z8-z|*5(^f`q_B1j@uV(lu@d<$SHatP$25Vo@7EOZ8W&;w_Ur5`bM z9R#`6I$m@vg?AeaKuLd>Kz&dJbHaKi$MCW|`&~;_X!!CV1l0gUHGPLbRL@*Fa0TZI zVUY+4UlHvSnwKO(3Lj85ycL6F_@0~vfdY?jCBUhhUL!LwlJpC+K(}ds6!qrF46e(( zFbgdmdR;bR(+#+apj=l0O9W6lH%De@tH?~u$V_+mc<uivDU)~<f3u`~C?rx&3hs@= z2ovN&s{c_|ON<nFTB1~yMdeqm(a6W?Il_%O>XhuzV-+sv3OHNvGZ}{uF*nCLWdR0h z74mergZMVMpFq)N9Tb30oET{mXG(>^e00XNI)BC`laiF*>sxy$9$ixgXpKR4af-o} z51pS*!Qcu_C(o4gR35*kt<lPbeiFM#CM>-<MdvVNdkv+i;UL{3?Erx|dFhOgE_6r- zD2Z1B9pR1W>eENwgrp1f;Tnz-MWGTAAH$O(Zg=QxLOCLQDx(7lqZ@iOkHUZ5)ksbY z1A{OP2oBIY`V?7gmD5!SmYVlzTN@y`WNSzv+|dCACkQZ(9;@lph{tL;bDY#0kuB)Q zYP|b!rGqB&Rb^Aab#VcO_(@|)eq{L?;o#xa0|#-E)kP$A^t6qC`e7THEgrTpA6<Sb zeG(?Z6eUL#jbX#c1ki$;9MTUwY-68Cn)K`GD|)+lR<Q6-esKBQF;v>SYC;A_BiHW6 zr-%7Hs(<GJ`u?uF8{fed2M(my^sA9!HK6*>9~sW~t3w0(4(4$U#bn*S!7F!<6!Xm^ zdcgYP7{g~{vH{bvwfNVAf4D?oJ2_*E0qN0A%DEpQ;)^)x3=SVSSi&<ZmtOVbM0^k@ zt-T{7Ec!SKR}Q=z@si8f-ofF)v8(fYk_;bKNDt(yks(x$bE&^1ROW-h=mhFx#of)I zPZRYbmkr0Uet>@`DsUy>3jD+6|2(ZJG}yZJ79s6-=Zhfah>#XI!0<hUwD9dAXcDq+ z_rQUH-Gim;)CfKd-Meq(8iq$|2`6awz6)?6Ci<3OET$(sA>=|3ra$v+E)HCS4@!4y zDqj}zn>>@rv}9T{ZJG8=M<$!eWjZrmEt!^<me!WGmiCs8mTXI|rL(20HPhPC+S=OI z+TPmHnr+RscD8o4W!hTWTHD&%+S@wXvTeDx&bF@hOnXavYkOOJdwWNFwmsM0+1}NW z>1gR_?P%+0@95~rcH}xbJG!!&Y)iH^+m>z5c4V{JT(&dYmCNK>a;>?xTzjq~m(AsJ zow=^gOlM1HYiC<$duK;ywlmk++1b?v61%W`7pCsQur8n=AzOwAu<Hfb^+xcLG=U*a zkPSzGCH*)Kc&dIpH)l*6#-#O_leSz?RkgkQOU?U7_GpG3asE`Db>`LCDMvc*T)%$( zyP%+sY&hV+I<RoR%UC_&3DhA)5Pzd9_vsQUiZJ+tDe1qtkowR+rCVOV5BC3teW07J z40mCDV&X%7RfQ&Ts?C798en?>NmF+LlHtu#dyglNa3X{Ll>U8vQmEe_>+{FRr8$TV zZ!{0A!=K&K=ddO04y=8`mkm=Wl3s+^%BgzsqA$}`v6Rv4bo4p~h~exwAO_6Y_+*Td zE}-a7>EHkTjT1d2r#GSphpAweIbWM$&WT{w0LDti83Q;ONO|RTrM$xD%K2**k^m`B zSA%0}c%%e}z5D8cqPlYA;P9S-;&mI;V2PRrhsOr@<k9z-l)g&S@G;bmOX;prBYRap zi%v+%0jA`iXkJI+^P1POxUA71R;#nlR{7yQDvjmh(xxgFi_370y5{Qquo~MpxO;H; zDk5PjF6)Wfk%J{7N^b%+O<p-6#rpLO2X7f3CCTHj3`pt;pPaxmu}4Mx;q)L^y%|kl zI5x;|3bT;neHdB{t-|=J#JpQ7*T^u$A_{#nfMlKs5H+$QiBrh#R;8=+Y9BU;4T0}9 za)G)M`y#9noW?(aIZt3N+R+qXO3(RRjokWXHb8yopQ2It!w&S{DKPqYtqhN0?nP*; zo7v>CTDhp|Ur7e}83j90E8VJYP1VX&RUXBG;j8j$??_S0EKh>L{;n!rjr~oAGR#1A z$#w1mOb{K>hk&iFykvIeP}b`eD~uQ`4HQdbYM_L9PJ}X{`2>}zpr%6kcE&Bo@m<Ta zeLofkjdE$cKCz&tz80UJEm*KHR?n9>4PvRa%v;V^)+=kRvre2T*Yk|kVzr8U`F-Mk z@qqnV|2N{d&hPD4t?3xFu}&Tn4_$lR&A0wl=8{YMZ@l@IBTdWysit=Oj`htOFMn6x z7k@l?>uq;@@cz#|`jsc2diq;GeEBDK-GVhO?YZs^XKy?AU6Z$==?jm3<*9Ey^X$t% zVRoWMw{~yX+`H}EEB53k@A%j!o_^+8J5jf0^R`P+zx9s$(f!G%UwZi`CxP9(ZBM>D zG5Pt&zV`U@FP!|v4ex#5O*h|i*U@`EbKm_BKKixCpZvx%&wl?0Tkrbncb<CY*=^_V zyyP8M^xbsZ?VtP7mmmN7Q{Q-@u71foFaPzwzdBt`>>vH%OEtAChew*0_r2%(zj^pK z^-ET)?A>zy&Py-5{EF+xzxd>H&%b!`7r!cw-CjEQkvpGm?mK;b^Suv$`SEW&`@%~f z?YZ-==FIIYryqWG`kCqTcV6~R&#w(vH~;MC!y~z~H*VT|<c?RTFTCpDH=jQ7-GBJU ze|~iu!E&K|3aMsa>hMeU;dA^($Ellmux5iZ)Ul$z{F1fQ=XS~p>~`C;xaWGI+*P~4 zyT})IQxLO!%d>=K;T7Mpq|0j-JKa{D=Q^Q(u_wI6iCy;FtTQcc*SWRvZhQG@33rFu zZx>E0f73a9%v$Ci{=M}MZ?RkwTNGauFSvob%)QiK>+}Ze?6}RX7P-z|=1QylAevT2 zJM1&9l7E&}Yn_$z{WILd({&AgbKRMi3X`?vTkOMkE|rVlf0<Rk)DFw9IL*!mPt-KT z$`52q@$&bU#hvoBQ~r{(D*myjg1=w8c=A>&7n`_zQTY+S{K&=*J8(PwUO(=Z<O=ID z`yH|J4Gm2}eXKVqf583hJ@F-W%cty#@1O3)9jE;1x{3Yawdph59d`LvyZkk)(W=Fr z?(urLiMgC(%L1A$0!xaJ*Vzl4g$ovm#bTM&<Se&W@q#rZ9uwac&&8jQeNVg~zR#ze zpNgNUllCw8e{eXVCGsOYzIwx3&)<3b-FJV|^<vqx-+J*cPkh&2)Nt`7U+sA2*{KEZ zzv;HSPu0@%ckanwcKMgSJo(;F#BxXOxX%kVymh4SXFtE}%8!0*b^4-D9R1W^-*fMM z4?X(W6ZnK=@$&ACn=kmxz2E-MQE%z8)M-yXWvjQGc6z$4vwQ2gJ9b@o(Z!^1{k!vf zhsLgb&-e%KdEnt=$4@kGgzsyRKNVM`{@k%3kG##B*Ow13w_0kO>{YQ9&RXXjyXK7Y z1MVt&m7Vt6B`+VD$i?adzkFAhwcC$n>Yb$3=<uFSd%KgiEj#ANydJgMj>ocAx3kQ% z<KC`qxwb@`=T7vmoR~P@UQzqDnx$Ugo)cdkJ193sXSf@jz`elbPG~vho3BW1^@H+f zu1IZ`fty&^=?B?m7F@|h|Alcr!M6GrF7KM~dV}TGmTft!#t#mE=7x{%Jt)gheBiOk z=G(t}c+02$_HdVXhAsL}4|;>Nv+#xkn`LuY*CSTk`L7EP|MJs`iIo>j+;WpW<Rq+^ z7ye~``PadiKfI*3{OBdI1?Af&wpj1oRJ-`SyVkz{`SJ^EwmX3>CXb%wa{D5uv0Y5m zth4vTFAfsc<@VWK%M<JD7&Ox@fAoguB~4h0U$i!EgKjtNuXuahKHF+q)R5-2OWwB> z|65U`Y&Zu0OG(uf;HgQ~vBp0!zE3sI8w_8;Dj`x)nmq$}>T%~t)4XS-V@>m(g8maM C);o&; literal 13451 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 diff --git a/substrate/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.wasm b/substrate/substrate/executor/wasm/target/wasm32-unknown-unknown/release/runtime_test.wasm index 2623dc31b8a59c862375e4abce3c9f6bf086602b..ab23e9b4f7a2a110b637faa5c07e1bf18823a350 100644 GIT binary patch literal 14394 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 literal 13576 zcmdU0dvsjId7t~fcjvBjCEKzrzh)hS*Z85;Yj-6B);RcujqSkU5g<siy*64~53g1R zrwv*elZ3ZPX`mz_PD^+Nib?Y-A>i}?fs}yhfk0Cld^pZ&{%DBv>}ejjzi;l{hrop7 zr2V6-vpX~2%zX3B_nx^|Y+!6iV~lBM^L}GuVnUnf*VQjISigy1f~k`AYXE7~)~;bR zj`cHDYS-xB(Cdxd@ZP%I)y2N8y9ajV+WXqO(o82{BLQ>U+q=5jy8HI#3WGcLF@rjq zRmbr7P_8gg%x&*076x;Dg^`gWGpXC9?j40(j#<>4Ma`YLV&A~--6Px7gt6jCVPI#D zG3t*||B&irb`_8t+BP&=I|6{weIbCWDY>Dck-bxp<c7v_#c)WRhKv>lhl_n6lsSZ0 z?J|Uo7k6ZtOTc;>h-rOgqSPLIf)=kDxw@~dJsYy43JN)t5V2Uy!xtYDvS7C5>YA(3 zFFuy;nU*%H*|ue9tidVi4farOXr!=DXMQm^R_xn8P#owR9A@<ms+k)aE$-_p<ci~k zVHU&`Y;<6Fa2soAQjKjR!`laogCoNOyZge9Y4xh3MsU;P3Zf_{GH2AZX(vt7RR24q zI&)SCJ(WnC8w%qfc580u;Bepg@KuAu+u1DI2}z?xRUoI?4j@V#a|lFYm}^Huoo6a# znD6--lZ@NT7bF*-u_X348^x2Fu21OKNS4%18SF|Jk_jWNn|iO%;!OGpj8AA>29gI{ z&XJa2LJNGEl1{({MyGWqv(gYoU?y~7By|jrMxP0=u0|hW(!+Eouo4WI+3Gk}5j0mA ztDKB(0@L#h{mX>WrMn4>3YJh*&{#b%I1wg;JZKZvD)Dh)9;oMxag(jmxW$4-#$6_V z$AZ%szf9L^_oQR0UfGjCGp)NqU!`RXbVy$^tgF+ypjWL+6QZ?18dk$v@^+1I-=zb& z5i#r-+m)D#y}~izXBj5KB1wy`V5zXxu1H`#A@FPgj-o2^0ajhivP6YE!t$~?FAPQE zVwOsn5irOLGXf^Tr*Nd37go5LYOOM`7LOq05mqXCrGQK{9nw~O7Frs0eU-@Q=Y+WN zD?;|H3)$0~Fco`_F(r!%e;|whOWxG|Kj+QkT8&bs-bZbMP*IvA)d=!IoVMSrR72z? zq#SBSwYHcA?~tvK!MkKj`WR&Ng(THHeu7Z6$xyT+5^d^TlHG6WX2qmR+OC8J9k41k zRn>Y66hYzO3P}H9UkVW9v4BwnaPv@TGXhZIVjwiCJmj@%^=P%4%!BIk5Hy-=8$oTu zEjMU%Qtzcdp~?B@kuwntGZ!;O9=s3?J!+U}xa9^sodUa<_XayJu7N_VnayJm$cv^Z zSc+hvvlf;l*t0b-)B!nC13?{-Y;~H#ovOAK-ejds1PN>hgpjjT^x((M2ioc$HX=20 zujE{H0pip8C>*7h(Tf;!0!vx)r*JA7ByM%-S0`*LMiUMRQkFC&a!1&avlH;!f^o<s ztiZY-we?uV^N|jaOXlQ{IWfl1CtTr51P?&vnfXLa#L6u*tuF=eA$XT0%EKsAD8GU- zD}9h{L?SZC3-P4B6zX9JOrtpACUxwF05Mf_X+$y+Q$jUqhAAgD#xWk4Tw%g3x^d0d zxzrLa!k5K`D`Mzvfm(9enFp4HLr78yJ6ssrVF`1Wa5fV*;V9~bxjqgqNv%jb1BRGz z*UwhFWb5LVuvSAUptx(na6RGq1}{$~G6<q$WzggaPtj9uKm{=kf9{6aAPQbQFcdZ} zJYnXAEu5gG1*D#-NVSO6Yz?WPWtXss)R?f8C5af3>Jq7ra6kt308&wxid2_Kb%aZ# zdI^(Ab<s;z&`5C^Q$iY}1}MRJ{5gt7S9qY2(9kAhM5Co>gn_YM!KqjWiV@|ugst<b zm1dWQz$-AzkOmsi`T$~B%q~gzXdVj#olm|3z%7Y*1VsFbN5FN7x(EozSEqpFW~MYM z!>I?6vy8BpR-qQOhKhcO+EF@#oB~;kp&}r5uQZQTt{?Ox{%sGJ#4iw12;^P*m4vKI z?@z=@^~+Wh7k+3pFcSH)$`a%eEm+EU3#<pqMn5LfCH>(bCJg*wU<{TjG)Ug5R_$ul ztyVp5V{BlBg~4ysG;JbG*lOYkbPCplEFny*bcrzG!`#V)blL(MNP?&_r&2>Ng@V_y zYbY%B`zUTli3mhF6XFE`CY%FO7}Nx6%_xEIKh59+jNdSY7z1pf>=CAl$yBKI!Q(11 zMlCT$g&2cKT?idHfSE2z6h4ZO7(@?6g#bz{kfb6ahVX$spyedj+=wwpk(hZP#v>|_ z+cM;_ixN)R*r|l;J@^7!k0cizMz8RsmnXxgAb^fxm@tDyop^L&cOE8c$>V_8a5aAk z<%glk+l_py27M>@a}C@ppr6Iqsa+0+!_b&K`R!L*HvqYt!1y>6<v3^p{^PJu@>PPt zS5;t}$j)de66bRxyTl^E1geGskEo^QDOSa-jfBAo=ajcb=FFzh=c_>zgm~(pRK5pF z3LrdhCkmfDwkJ!arvS*xMZ(#IIi%bm#!;C%Fz+EF^5hZ>!P**_Ngj<!eJ}cY*h-o} z**zShTnSY=N7b^Zf&YL};<2t)NT;roPhN|aG$=JuK(5rJ2#xT)M@2t#7g((=L*5Lk zAV(&RHM6C$hd8=AP9oOV#0|+3x{v7KkyApPTNtk+3Y*F60r?z4p49yYhE4kQwd3ON zJ+6*ps@8*KUy~_Pzbba0K>1~a?wwRo^g)hv3gS%gQEGb;x=`B-hfN+hp@Vi}F3D#j z5o0D8m<T;%8%PF%^{|an18dB<<=Z^$tB?BR$~|yig&uYujg<CYIe!ma762QiUYSGK zP8u5!SZPps%BJ#^G9bj^@0Im?<gpNkp>UYQTiA6(K5Bat29a+l^5K5V<ioa=CY@>r zHemrJpnWPKr=;EXBb961D^Dn5rVzhbwLt4s;=zD2V3VZ$0nq?-R#gCoPl}Nsm0?CN z+>eJGOc_121GxYMnomHvC}&{2R#o5wE1E<~NoZ_@Ptq}yCc{@EWs4Bo6~wBKG&Mr3 z12N(@i$qC+QF5+Q{znPMCIOH<{~QL{Q+N|?%7XMLe~WekD_1On%M5o}*@+Rd2<cCm z1sbv7Jtk7RUc&;8tOC}ED+w(DFG}tPnYVKDd_p%SwCHGl1QCD^st9e0J|6}I-qRUh zTdb4MFewlrc9;~MkoFtuK%k&VCKMDWg9u9J>nw5@b<9S#u-HH*j$BhAfI8^GEXIGK zYgQD1aFt?Xb-NsYNWFCxc68-L*C_X;JWN?B3<MBZvmcEL4cQiY5A(^8v1Kq=SB3z@ zsFhVVu39xl?2{2!#)q0xJE5*TVJe0i6ZR!cm^6i^l{LkmvTD6*)tFL+j55|bG9{7| zZXB>TpUlM!{VA*qo1sf5ctZ*rsJfwqkY0dU^aHt7EQfrsPEtofQn#b)8J!Q;+{Yjv z($I-a0*13#4}cK`$s7e7CJ;`~6O%E9u2GtWMkgeKzl_st0H}uKG3>_)TL7TbiHqR4 zph1%Hzn^{4%71e9b=)Fie&c9Pq;PZ<1$U}49<Ut#DnSOR$w_h?#1y*RE9sO38NKL1 zgrgG#qIZ5NWAe#~bK`UrkVpn_xCa6R@HGggMwk>?2=@p;2)jsD$na<c9j!cd4?r%3 z*ai|LGNIX&ydi6lN8swva7n3a|By{;p#wvn7l0gc00ayTgHnfxPQXGsb(MxyX{AX- zt%E{ML-M-@cI`mwbToq(rp*C@&C`tp&RJ{Y1_cOkp$3RdfD*6}_^t^mIrAu=ZN`qW z)kIn~pibzaeTONoI{vB#dZGr@@k|VO7S2GR1au*aV`wJ9Hcu&BmTKiR$fYz$bx~?W zc^8mB?~ufW1qMJs8Y#L;yCAG}V4WpTYJ0FrMd@^~q@>|UsA4BE0lcLHr1GU;6A4~| zp|%3R2H{L7pRkY!V63T-!P`-ZpuRp%tHH}9AV{)%LVzTgj{J5sn@+#dE((L@6ku!N z<P(@|U@|Eqw45fo(F`b$nt@nUgi}1h_7uWN1?(eqlQ^$(`MN_Fub>pzP4tn@f$8BU zH;36V>|Odrnpo2ZvN>EKY*>~8vH~0;6k-!+V-*G+B~_TW14hpQqeJ;df<psRRJRbG ze3?~5{d%<;N*xv)sQ|`DjY#Uh#1bTRKuPMKb<0wxt8688tWg#`xgI6>w7x~jpEThT zRjbj2qaJC(8(fQ5gH0VQye<lLE;+g+ykA^-Sn__A@KbApQ|pk0N~+^vXpD=v%79@0 zWI*ILRf0wdszy<sqVmL8A_mDq9h7>}Axed6h>DanPWS~*%A}rgrBOKBV`z*N2e&C$ zh!Rr_g5p(F5(n!@KYYOwJoNd#z||IrBK35IuaNm=q~Si$B1MH_6EdwrN`wq(qYD{Q zBfmiR47IfAzC%t8lM@~;3TP0LPSRw*f}eC5at`r(VOHWr_~Yb4d>rUV3r~$(K_lF5 zjm|6H(4=^j8h8~Jt&YP;;AnRVri>MS3+{}ZunQ-wl1Vtt+7y!lCG+9?)K!{Jf*@Om zcSkk^u3ID*VT2wNNB%t4)v=Xm8<4!(w&JBJ;<Q&Cgh66pe`T-qI0kw}XA76aLgzxb zQDC;okK4jf9zqzKaV@0_I|?xy<H#IsHPH<DjRg|qsEO4`*p>X0bV*GJ204`ZQ>!Xv z9f^hdK?)m+tm;bC{6a*U${ff=t&Zcjd~gi4FXR+yI;k_*p;CMp4{i4dXeeoGh)qhl z>CTM=00xWrF2TwF0HYxp8tW;9Qigv@p<tNGgn~sXekwVHQSVP&8k-dcmLrvj4!NZE z)kCi06y;SAh&t*b0YE+n;>c;!IgD;AP^i;@9R_?Z;6x~HV*~0msV0YMXdRs=DGeoi z4B_f533yE!O09RKq1EwW8d^J{PDB&R31eIV-jRk91_iICp|wcr%X6k8sX5V68VVJw z=8_O4$tb!&CWQren9&Q#)=`!U_R@)kTpZM%IBP>Mfg+~lr#gwVNHX4crln>QesCZB zqm#>fY6vB^bx~r=_&>yS7sr_@;q-t<5e|DzXdpnBi-ggjF>-q3o{?+GtMbSUpuwTj zid>f_=ONjWzr-CArfGHaZKmsneu|GtFw^GpEsUj9$(FCfvUO!CWt;%2ivh|3N^cu` zq>FnAc?kX#8}+CcsYsOafvqajfZJNeKsMYbn2PiZ#zj;LWE(Iiq@&(?T+BG~QGK&= zB<g`AZk+I3fe{jn7w($4UzUnSxt}I9B^d|H(!&o+{+zE3GXmh<5JzC2(nC^I#3Rd* zhwH#9E#U$?N)_jbD7rLnF3RTdgs1GtqlXI=7c|g{YcB>05YxzXbSQ!RbwIvOVL(nz z9+d`qxQPK{ioyZTLNp84dI)*tga+63V~A!NFpx(#$)h{+FpeRp;QBo{9VJog(A7sR zt4j^<WHoV!mj0vIj2v0sfvnmD{SljwHcVx+_daa?r-t`pGxbbi^NGekhs|_hq}cr0 zj6aFZh)_}9SYh*PGZbYIIbFPJdl0<fk{$VJ^{A_c;|G7YHZKqU4(^;Z{LLGSdHLqe zOT*UZ??>zN&0*t*Z=z8b*55u!0>Ar2OhrEVz?aAKa&g%8&$po-!?Q<PI`YDWof5aA z&e+4NO86XQ2M~M=5N5;dK>N?h{NO6kB*(K#eDXf1RqVb{Cn0S*;=$qXAxBWLaykZ) zOr^@RHEFDk<B^_p_Na3b{2=T>!YmvZHD%-&>(p7yvP}&k>GyQ7V3ZisS&1AA(ht&C zVwjD&cv8S3INj}$R}10D?8D)7y23VS=&#B{b>cFfA4$C^=j@?tLYNq$kMNL$13ZBf zIn|N4gSu1!Kd<6y&5^P7vm><XVP2TX|F(=4Iwmz-%9foV(XH`U49%!{22i;HGAWZ+ znYl@YFK}R>V>g`}=<x=Q{^4B%wxoP4?gwx%11vn(ns^om2yTohZ>JN|Q^?5Zn4*q< zrZjrkIy})PVV3A-0n9;uL;+QVMG|Y_Opqd1?PC>OA^{zp0m`*Vj!G=ZP{0*NaflYf z!(&>3s^ur(ioEhe@0x|x^$8dY!zKcbFqOHZO}8pEiE3sTHB4Mb11t~Xn1nv{WHh>< zdCygod3vUf?&@AK72Kc*gk>b|8wgqL!gNta3y1ghO0m=h9;HrTloGF&K>am5AHzjF za((RHEZ^*Dc(q4BF2Mp`tbO*SVUW7((PV>4Ttb<WB*O<^np{|^K~76S!Lv=FurY5s znn%&ZEf8uXi}0c+iJAZ;$je_g(NXIsnr2TxQCzi09H*lDYWUBoe-NdyOCW$jNd>$y zJ#fKoCkZ%uGOM1b;`B)mln_?Jo91%#MvETM+6f0%SH_?sy8>8vOpD-z6Bq^NsD)e` z)9`1h=d`A<@toE~l8eVT^3Y6r3MmiF3=hx(XHhT`)YF{}f(va);6zH{*MNL*joH$| z4NT>qYVO5AZXV+S!z&V;*S?@9=WuIqcyzqTWQsfG*Y;$V8#_ium^_mkTL(T$FFSB= z$Kdeb*p<2M2w2ZE?%*XuF@k6)kKqw0z49i)_vrA30*{Rqwzcja+`7ClMsITQ=6=Rl z3}3v2sLJ^$=i$rb?b^G07ofvby$@;J{AjKKN)Bt>7#YqnylTJ=ypl)xJa5=GFgmbp zu((g)<;B8|-6K~qJhtV{M=%)%$4=lo4d3tTjCm*-4kmmW2vcuJwiX7i!n>H;6qN^b z9`tLlON=U^Y*fQ<*ZDd$)JH@mn5sUtC5@r4P(65S@>HcfhO`~8{N=6|BjZIevO{bg z86Vz0)+35n=EUyYuoxT@OqLAZD7In%LBrt+e!Ib+)l#WcTdF<Pk?Kr!rP8TPDx2zV zOSQGNwYPP&b+&c2rQ0%X*|zTXRC`-{dwWNFXM0zBx;@jLZSU?#b+mP~cXV`gc64>5 zJ2D;Fj_%G>XIp1`XGdpeXIE#sGt-&v?Cwf+wRN?3b#!%hb#<k?GF{oO?sO{MmTpgX zq&w4H>2x}i&ZfIFsZ3j@J=2lt%yebanM@{|>CUFIZQ1s0N47KDl}%?e*=)AE8zgpP z`EH=@#<XsL7#>yg;1J|ugH?x7lF%8RMf0G9)^s!)z(q?zOBSCFscjo6<XXpe4{pn~ z4vlPAVmpL~=^>AxA{Jjz=4@eLcxO)R7%2!fo|p{=?<`&k2ES~<5`eo2xCP3%TH`pN z<&|evSGIXmh#_2MtT<38j)?)fQ#fSvxDr$jLJUENZLal0HEnKPwtV^WkKn~2n>W)g zV8twjA6hg8^h&F6b;x(C8j*r8ebA{swIz+AuTVYjJqDcngJWR24iApOxJbVrcFSh* zy2G1~!9bS)8h}bNp3PWr21=YZ9G)!iA;4Zv2e20<rn4<5Nrcrseb(h)(TG_32=)8k z1k<?p8}ojfA{@l5_rpUj<qwU)n_pg)IZt4B*c-Ng%;Sv}?JE{4x>t&EzI9)*Y@`Uj zF@8GP@bE}c42W%44irKQA1LfwAqI=oH8?yrxIG8uITGWpNYZq&`J*vzFD51J$17<u z9*kmTl28^jClwJVVpSq`3>7Ox9OPVIz8uQP`T0yUEX%bG$8=pUh|T7+{HAzgT~oao z7>$k7ye4g?)vV7lTAaDs{3c;6v6kw~_;M{}v>EOCecJu{1NwvJm)zgzzqNjEzHOZJ z;EjBKSbzBHeK+3xx2cOS>Hp-7HyxZa_uuR4H*8$qy7Kam^nLZs12^At+ov9Q^s#R~ z{mgUU{o(N+nGKDL+d4BnE6!Sf?ne&Xg08PT_RVL$`@)OIf5gmqo$Bpbv3kw=bFbK* zJ8;`)KKI-UFPia&#jDp}jP}j9J%Hg)KljG*ADsYn_4@6((&T|JKmNp%ue^HVXV+f$ z@#}BA>CQv<+<X564?Xt8lTUx=g%^MDZ|m;-*7u%y;l=fvHedYVEBda#<<>{P_Vp*f z{mge>ZD^W#+2z0fueVQ@;zN6W_(om*{Na%~bNfDa&EG%ro2Hrb=C4`1Y4atQUVg<j z6JLG$<yT%m@v~nQ#%?W+fBKH+TKi64-g@67Uw`sDFTVQ5UA=eQ*_yg_{>ew)KKa7Q zO`9*h%yH|3MXhiBba*6l*2-0@58n3n$qROlKl|L#mtOnV|9JZ(ok;mJ2*!O2_P=57 zKgXSISq+m9)vd60b<Jxky<yC9HFJRxGdoSk&>S0YU~j2!bS`vtb56`NT*EPR!$1md z8Qj+DW>`H&gJWBPdy%6%GvZs!4;sr1&1|si{T_4fX>og_7&7yxm7cZsA2wR-{l7Op z?9AXZz3KjRKX1qE7W)!+iM1xS)bvfwXyZ%G7MmNThtM@&ZZww}MfXgj-Z(Skx@Xw? zPc}5Wtqscz5hUtMH<|nIn8jy&;!>k&mKl_OX|-A_9KEjDD?OMl`lau;_*UtpRr;E> z(ErRcv42@I<G{^E#+$r+dg&W(=^HD%%$S{Z*SNl2<nxS6%@2E}Yn$i9n!Gi!(hc^P z?(t`uZC@}ae{j0vTUP0d4U<E`)yXsLjb`a)v-E^9+o;D`tJHwE(rit`mUU>h9y7Qe zXbongHLY>FK0|LY=2&yhg<9U&r9ZB}q`&OH;(cF#RsVr@%=)qZmN;SlO#5#QR@T5j zt@(>qoV{uDt#{x3dE4>QXPte~FOI%sPH(>G;%{}m@Zzz?Ph5Y?-BY!6)8_5DOE3T0 z*AHCxIWKeYw)>sfinB-h-umgKTkrbJqU432JM@LWyXU_9AAaodr)=)enA@{*^@r}g z@A>Z?a%QzGIPK|YO!0x!PEU4Zd)A%1amxi4UPSuVzb&_8*Vxq`o4Dbg2Ol|n<Y?<k zWG0RL$NCiu{=zaKkDRHsE-&q$YqZtRF&BFCtR>btX5AU32knLCLNn=ha;<c5GUGMH z+|r%h#x~bWHR0XM*_PIuH8)sE(=a{Pb9%)h)A!OwkJaMfns&?jOh>%Ku_ycIPfl(! z=hc6(Zk7|X&+!*|<9ww&!(L&<><`(R6&P0O#w!-Ab7Q4@uUN2}$L#pDtQ$+W7;q(% z{TKM!BwOcRFt>ZsSreOUtX-cm>fG4=d#}A~$2c!Nb;IKaT5o-6|JpD7<Nj{v3{&qv zJ+>y6w5DA<x|+8J4ZZrjJAN{4|1Z86pPc`p$(yb>cUf`6bArF>Fa0_;<_^zXQ+n)T zud#H?<XYppRrNEj+p^>nuasV0yupf@`hi1d+M0QxHM>)vtXpbs_b-aYjmyomy6481 znjSRMF5PwQE1VD({R@})Cg`@4?!5DT^DJY|^yZ{iKl9_W;M8aECEJh&=C+Ie&7<_6 zAU!?!kBq{=XmWAC7#W5G@85)kvtR5T*gcNC^I#KiC`W-2H9;jHhnsj4Irb?TUF6B1 zZQ`y^-kUx+pzwths^}xs@2SHg;%yTT%2D{Q5!u2pbYLcLJ`}~~BPgdPwufe(G8;ZJ c^VIonV=y){Uf7m9Z(wwEaCqm1=Wk^H1FU!AaR2}S diff --git a/substrate/substrate/rpc/src/state/tests.rs b/substrate/substrate/rpc/src/state/tests.rs index 469b794b058..9bae8b1cd56 100644 --- a/substrate/substrate/rpc/src/state/tests.rs +++ b/substrate/substrate/rpc/src/state/tests.rs @@ -35,7 +35,7 @@ fn should_return_storage() { assert_matches!( StateApi::storage(&client, StorageKey(vec![10]), genesis_hash), - Ok(ref x) if x.0.is_empty() + Err(Error(ErrorKind::Client(client::error::ErrorKind::NoValueForKey(ref k)), _)) if *k == vec![10] ) } diff --git a/substrate/substrate/runtime-io/with_std.rs b/substrate/substrate/runtime-io/with_std.rs index 98864baa63b..5d785119c56 100644 --- a/substrate/substrate/runtime-io/with_std.rs +++ b/substrate/substrate/runtime-io/with_std.rs @@ -27,45 +27,45 @@ pub extern crate substrate_codec as codec; // re-export hashing functions. pub use primitives::{blake2_256, twox_128, twox_256}; -pub use substrate_state_machine::{Externalities, ExternalitiesError, TestExternalities}; +pub use substrate_state_machine::{Externalities, TestExternalities}; use primitives::hexdisplay::HexDisplay; // TODO: use the real error, not NoError. -environmental!(ext : trait Externalities); +environmental!(ext: trait Externalities); /// Get `key` from storage and return a `Vec`, empty if there's a problem. -pub fn storage(key: &[u8]) -> Vec<u8> { - ext::with(|ext| ext.storage(key).ok().map(|s| s.to_vec())) +pub fn storage(key: &[u8]) -> Option<Vec<u8>> { + ext::with(|ext| ext.storage(key).map(|s| s.to_vec())) .expect("read_storage cannot be called outside of an Externalities-provided environment.") - .unwrap_or_else(Vec::new) } /// Get `key` from storage, placing the value into `value_out` (as much as possible) and return -/// the number of bytes that the key in storage was beyond the offset. -pub fn read_storage(key: &[u8], value_out: &mut [u8], value_offset: usize) -> usize { - ext::with(|ext| { - if let Ok(value) = ext.storage(key) { - let value = &value[value_offset..]; - let written = ::std::cmp::min(value.len(), value_out.len()); - value_out[0..written].copy_from_slice(&value[0..written]); - value.len() - } else { - // no-entry is treated as an empty vector of bytes. - // TODO: consider allowing empty-vector to exist separately to no-entry (i.e. return - // Option<usize>) - 0 - } - }).expect("read_storage cannot be called outside of an Externalities-provided environment.") +/// the number of bytes that the key in storage was beyond the offset or None if the storage entry +/// doesn't exist at all. +pub fn read_storage(key: &[u8], value_out: &mut [u8], value_offset: usize) -> Option<usize> { + ext::with(|ext| ext.storage(key).map(|value| { + let value = &value[value_offset..]; + let written = ::std::cmp::min(value.len(), value_out.len()); + value_out[0..written].copy_from_slice(&value[0..written]); + value.len() + })).expect("read_storage cannot be called outside of an Externalities-provided environment.") } -/// Set the storage to some particular key. +/// Set the storage of some particular key to Some value. pub fn set_storage(key: &[u8], value: &[u8]) { ext::with(|ext| ext.set_storage(key.to_vec(), value.to_vec()) ); } +/// Clear the storage of some particular key. +pub fn clear_storage(key: &[u8]) { + ext::with(|ext| + ext.clear_storage(key) + ); +} + /// The current relay chain identifier. pub fn chain_id() -> u64 { ext::with(|ext| @@ -164,37 +164,37 @@ mod std_tests { #[test] fn storage_works() { - let mut t = TestExternalities { storage: map![], }; + let mut t = TestExternalities::new(); assert!(with_externalities(&mut t, || { - assert_eq!(storage(b"hello"), b"".to_vec()); + assert_eq!(storage(b"hello"), None); set_storage(b"hello", b"world"); - assert_eq!(storage(b"hello"), b"world".to_vec()); - assert_eq!(storage(b"foo"), b"".to_vec()); + assert_eq!(storage(b"hello"), Some(b"world".to_vec())); + assert_eq!(storage(b"foo"), None); set_storage(b"foo", &[1, 2, 3][..]); true })); - t.storage = map![b"foo".to_vec() => b"bar".to_vec()]; + t = map![b"foo".to_vec() => b"bar".to_vec()]; assert!(!with_externalities(&mut t, || { - assert_eq!(storage(b"hello"), b"".to_vec()); - assert_eq!(storage(b"foo"), b"bar".to_vec()); + assert_eq!(storage(b"hello"), None); + assert_eq!(storage(b"foo"), Some(b"bar".to_vec())); false })); } #[test] fn read_storage_works() { - let mut t = TestExternalities { storage: map![ + let mut t: TestExternalities = map![ b":test".to_vec() => b"\x0b\0\0\0Hello world".to_vec() - ], }; + ]; with_externalities(&mut t, || { let mut v = [0u8; 4]; - assert!(read_storage(b":test", &mut v[..], 0) >= 4); + assert!(read_storage(b":test", &mut v[..], 0).unwrap() >= 4); assert_eq!(v, [11u8, 0, 0, 0]); let mut w = [0u8; 11]; - assert!(read_storage(b":test", &mut w[..], 4) >= 11); + assert!(read_storage(b":test", &mut w[..], 4).unwrap() >= 11); assert_eq!(&w, b"Hello world"); }); } diff --git a/substrate/substrate/runtime-io/without_std.rs b/substrate/substrate/runtime-io/without_std.rs index cac6b6dff21..ad31020cc49 100644 --- a/substrate/substrate/runtime-io/without_std.rs +++ b/substrate/substrate/runtime-io/without_std.rs @@ -43,6 +43,7 @@ extern "C" { fn ext_print_hex(data: *const u8, len: u32); fn ext_print_num(value: u64); fn ext_set_storage(key_data: *const u8, key_len: u32, value_data: *const u8, value_len: u32); + fn ext_clear_storage(key_data: *const u8, key_len: u32); fn ext_get_allocated_storage(key_data: *const u8, key_len: u32, written_out: *mut u32) -> *mut u8; fn ext_get_storage_into(key_data: *const u8, key_len: u32, value_data: *mut u8, value_len: u32, value_offset: u32) -> u32; fn ext_storage_root(result: *mut u8); @@ -55,11 +56,15 @@ extern "C" { } /// Get `key` from storage and return a `Vec`, empty if there's a problem. -pub fn storage(key: &[u8]) -> Vec<u8> { +pub fn storage(key: &[u8]) -> Option<Vec<u8>> { let mut length: u32 = 0; unsafe { let ptr = ext_get_allocated_storage(key.as_ptr(), key.len() as u32, &mut length); - Vec::from_raw_parts(ptr, length as usize, length as usize) + if length == u32::max_value() { + None + } else { + Some(Vec::from_raw_parts(ptr, length as usize, length as usize)) + } } } @@ -73,15 +78,27 @@ pub fn set_storage(key: &[u8], value: &[u8]) { } } +/// Set the storage to some particular key. +pub fn clear_storage(key: &[u8]) { + unsafe { + ext_clear_storage( + key.as_ptr(), key.len() as u32 + ); + } +} + /// Get `key` from storage, placing the value into `value_out` (as much as possible) and return /// the number of bytes that the key in storage was beyond the offset. -pub fn read_storage(key: &[u8], value_out: &mut [u8], value_offset: usize) -> usize { +pub fn read_storage(key: &[u8], value_out: &mut [u8], value_offset: usize) -> Option<usize> { unsafe { - ext_get_storage_into( + match ext_get_storage_into( key.as_ptr(), key.len() as u32, value_out.as_mut_ptr(), value_out.len() as u32, value_offset as u32 - ) as usize + ) { + none if none == u32::max_value() => None, + length => Some(length as usize), + } } } diff --git a/substrate/substrate/runtime-support/src/storage.rs b/substrate/substrate/runtime-support/src/storage.rs index 9896cb07c61..7dbfd8013b3 100644 --- a/substrate/substrate/runtime-support/src/storage.rs +++ b/substrate/substrate/runtime-support/src/storage.rs @@ -18,14 +18,34 @@ use rstd::prelude::*; use runtime_io::{self, twox_128}; -use codec::{Slicable, KeyedVec}; +use codec::{Slicable, KeyedVec, Input}; // TODO: consider using blake256 to avoid possible preimage attack. -/// Return the value of the item in storage under `key`, or `None` if there is no explicit entry. +struct IncrementalInput<'a> { + key: &'a [u8], + pos: usize, +} + +impl<'a> Input for IncrementalInput<'a> { + fn read(&mut self, into: &mut [u8]) -> usize { + let len = runtime_io::read_storage(self.key, into, self.pos).unwrap_or(0); + let read = ::rstd::cmp::min(len, into.len()); + self.pos += read; + read + } +} + + /// Return the value of the item in storage under `key`, or `None` if there is no explicit entry. pub fn get<T: Slicable + Sized>(key: &[u8]) -> Option<T> { - let raw = runtime_io::storage(&twox_128(key)[..]); - Slicable::decode(&mut &raw[..]) + let key = twox_128(key); + runtime_io::read_storage(&key[..], &mut [0; 0][..], 0).map(|_| { + let mut input = IncrementalInput { + key: &key[..], + pos: 0, + }; + Slicable::decode(&mut input).expect("stroage is not null, therefore must be a valid type") + }) } /// Return the value of the item in storage under `key`, or the type's default if there is no @@ -85,17 +105,17 @@ pub fn take_or_else<T: Slicable + Sized, F: FnOnce() -> T>(key: &[u8], default_v /// Check to see if `key` has an explicit entry in storage. pub fn exists(key: &[u8]) -> bool { - let mut x = [0u8; 1]; - runtime_io::read_storage(&twox_128(key)[..], &mut x[..], 0) >= 1 + let mut x = [0u8; 0]; + runtime_io::read_storage(&twox_128(key)[..], &mut x[..], 0).is_some() } /// Ensure `key` has no explicit entry in storage. pub fn kill(key: &[u8]) { - runtime_io::set_storage(&twox_128(key)[..], b""); + runtime_io::clear_storage(&twox_128(key)[..]); } /// Get a Vec of bytes from storage. -pub fn get_raw(key: &[u8]) -> Vec<u8> { +pub fn get_raw(key: &[u8]) -> Option<Vec<u8>> { runtime_io::storage(&twox_128(key)[..]) } @@ -127,12 +147,18 @@ pub trait StorageVec { } } + fn clear_item(index: u32) { + if index < Self::count() { + kill(&index.to_keyed_vec(Self::PREFIX)); + } + } + fn item(index: u32) -> Self::Item { get_or_default(&index.to_keyed_vec(Self::PREFIX)) } fn set_count(count: u32) { - (count..Self::count()).for_each(|i| Self::set_item(i, &Self::Item::default())); + (count..Self::count()).for_each(Self::clear_item); put(&b"len".to_keyed_vec(Self::PREFIX), &count); } @@ -142,12 +168,17 @@ pub trait StorageVec { } pub mod unhashed { - use super::{runtime_io, Slicable, KeyedVec, Vec}; + use super::{runtime_io, Slicable, KeyedVec, Vec, IncrementalInput}; /// Return the value of the item in storage under `key`, or `None` if there is no explicit entry. pub fn get<T: Slicable + Sized>(key: &[u8]) -> Option<T> { - let raw = runtime_io::storage(key); - T::decode(&mut &raw[..]) + runtime_io::read_storage(key, &mut [0; 0][..], 0).map(|_| { + let mut input = IncrementalInput { + key, + pos: 0, + }; + Slicable::decode(&mut input).expect("stroage is not null, therefore must be a valid type") + }) } /// Return the value of the item in storage under `key`, or the type's default if there is no @@ -207,17 +238,16 @@ pub mod unhashed { /// Check to see if `key` has an explicit entry in storage. pub fn exists(key: &[u8]) -> bool { - let mut x = [0u8; 1]; - runtime_io::read_storage(key, &mut x[..], 0) >= 1 + runtime_io::read_storage(key, &mut [0;0][..], 0).is_some() } /// Ensure `key` has no explicit entry in storage. pub fn kill(key: &[u8]) { - runtime_io::set_storage(key, b""); + runtime_io::clear_storage(key); } /// Get a Vec of bytes from storage. - pub fn get_raw(key: &[u8]) -> Vec<u8> { + pub fn get_raw(key: &[u8]) -> Option<Vec<u8>> { runtime_io::storage(key) } @@ -249,12 +279,18 @@ pub mod unhashed { } } + fn clear_item(index: u32) { + if index < Self::count() { + kill(&index.to_keyed_vec(Self::PREFIX)); + } + } + fn item(index: u32) -> Self::Item { get_or_default(&index.to_keyed_vec(Self::PREFIX)) } fn set_count(count: u32) { - (count..Self::count()).for_each(|i| Self::set_item(i, &Self::Item::default())); + (count..Self::count()).for_each(Self::clear_item); put(&b"len".to_keyed_vec(Self::PREFIX), &count); } @@ -267,13 +303,12 @@ pub mod unhashed { #[cfg(test)] mod tests { use super::*; - use std::collections::HashMap; use primitives::hexdisplay::HexDisplay; use runtime_io::{storage, twox_128, TestExternalities, with_externalities}; #[test] fn integers_can_be_stored() { - let mut t = TestExternalities { storage: HashMap::new(), }; + let mut t = TestExternalities::new(); with_externalities(&mut t, || { let x = 69u32; put(b":test", &x); @@ -290,7 +325,7 @@ mod tests { #[test] fn bools_can_be_stored() { - let mut t = TestExternalities { storage: HashMap::new(), }; + let mut t = TestExternalities::new(); with_externalities(&mut t, || { let x = true; put(b":test", &x); @@ -308,11 +343,11 @@ mod tests { #[test] fn vecs_can_be_retrieved() { - let mut t = TestExternalities { storage: HashMap::new(), }; + let mut t = TestExternalities::new(); with_externalities(&mut t, || { runtime_io::set_storage(&twox_128(b":test"), b"\x0b\0\0\0Hello world"); let x = b"Hello world".to_vec(); - println!("Hex: {}", HexDisplay::from(&storage(&twox_128(b":test")))); + println!("Hex: {}", HexDisplay::from(&storage(&twox_128(b":test")).unwrap())); let y = get::<Vec<u8>>(b":test").unwrap(); assert_eq!(x, y); @@ -321,7 +356,7 @@ mod tests { #[test] fn vecs_can_be_stored() { - let mut t = TestExternalities { storage: HashMap::new(), }; + let mut t = TestExternalities::new(); let x = b"Hello world".to_vec(); with_externalities(&mut t, || { @@ -330,7 +365,7 @@ mod tests { println!("Ext is {:?}", t); with_externalities(&mut t, || { - println!("Hex: {}", HexDisplay::from(&storage(&twox_128(b":test")))); + println!("Hex: {}", HexDisplay::from(&storage(&twox_128(b":test")).unwrap())); let y: Vec<u8> = get(b":test").unwrap(); assert_eq!(x, y); }); diff --git a/substrate/substrate/state-machine/src/backend.rs b/substrate/substrate/state-machine/src/backend.rs index f77e9a59d81..2c019510ffc 100644 --- a/substrate/substrate/state-machine/src/backend.rs +++ b/substrate/substrate/state-machine/src/backend.rs @@ -17,11 +17,7 @@ //! State machine backends. These manage the code and storage of contracts. use std::{error, fmt}; - -use super::{Update, MemoryState}; - -/// Output of a commit. -pub struct Committed {} +use std::collections::HashMap; /// A state backend is used to read state data and can have changes committed /// to it. @@ -29,12 +25,12 @@ pub trait Backend { /// An error type when fetching data is not possible. type Error: super::Error; - /// Get keyed storage associated with specific address. - fn storage(&self, key: &[u8]) -> Result<&[u8], Self::Error>; + /// Get keyed storage associated with specific address, or None if there is nothing associated. + fn storage(&self, key: &[u8]) -> Result<Option<&[u8]>, Self::Error>; /// Commit updates to the backend and get new state. - fn commit<I>(&mut self, changes: I) -> Committed - where I: IntoIterator<Item=Update>; + fn commit<I>(&mut self, changes: I) + where I: IntoIterator<Item=(Vec<u8>, Option<Vec<u8>>)>; /// Get all key/value pairs into a Vec. fn pairs(&self) -> Vec<(&[u8], &[u8])>; @@ -57,38 +53,28 @@ impl error::Error for Void { /// In-memory backend. Fully recomputes tries on each commit but useful for /// tests. -#[derive(Debug, PartialEq, Default, Clone)] -pub struct InMemory { - inner: MemoryState, // keeps all the state in memory. -} - -impl InMemory { - /// Create a new instance from a given storage map. - pub fn from(storage: ::std::collections::HashMap<Vec<u8>, Vec<u8>>) -> Self { - InMemory { - inner: MemoryState { - storage - } - } - } -} +pub type InMemory = HashMap<Vec<u8>, Vec<u8>>; impl Backend for InMemory { type Error = Void; - fn storage(&self, key: &[u8]) -> Result<&[u8], Self::Error> { - Ok(self.inner.storage(key).unwrap_or(&[])) + fn storage(&self, key: &[u8]) -> Result<Option<&[u8]>, Self::Error> { + Ok(self.get(key).map(AsRef::as_ref)) } - fn commit<I>(&mut self, changes: I) -> Committed - where I: IntoIterator<Item=Update> + fn commit<I>(&mut self, changes: I) + where I: IntoIterator<Item=(Vec<u8>, Option<Vec<u8>>)> { - self.inner.update(changes); - Committed {} + for (key, val) in changes { + match val { + Some(v) => { self.insert(key, v); }, + None => { self.remove(&key); }, + } + } } fn pairs(&self) -> Vec<(&[u8], &[u8])> { - self.inner.storage.iter().map(|(k, v)| (&k[..], &v[..])).collect() + self.iter().map(|(k, v)| (&k[..], &v[..])).collect() } } diff --git a/substrate/substrate/state-machine/src/ext.rs b/substrate/substrate/state-machine/src/ext.rs index e0176ad41ca..ac047a31c30 100644 --- a/substrate/substrate/state-machine/src/ext.rs +++ b/substrate/substrate/state-machine/src/ext.rs @@ -17,9 +17,10 @@ //! Conrete externalities implementation. use std::{error, fmt}; +use std::collections::HashMap; use triehash::trie_root; use backend::Backend; -use {Externalities, ExternalitiesError, OverlayedChanges}; +use {Externalities, OverlayedChanges}; /// Errors that can occur when interacting with the externalities. #[derive(Debug, Copy, Clone)] @@ -58,17 +59,29 @@ pub struct Ext<'a, B: 'a> { pub backend: &'a B, } +#[cfg(test)] +impl<'a, B: 'a + Backend> Ext<'a, B> { + pub fn storage_pairs(&self) -> Vec<(Vec<u8>, Vec<u8>)> { + self.backend.pairs().iter() + .map(|&(ref k, ref v)| (k.to_vec(), Some(v.to_vec()))) + .chain(self.overlay.committed.clone().into_iter()) + .chain(self.overlay.prospective.clone().into_iter()) + .collect::<HashMap<_, _>>() + .into_iter() + .filter_map(|(k, maybe_val)| maybe_val.map(|val| (k, val))) + .collect() + } +} + impl<'a, B: 'a> Externalities for Ext<'a, B> where B: Backend { - fn storage(&self, key: &[u8]) -> Result<&[u8], ExternalitiesError> { - match self.overlay.storage(key) { - Some(x) => Ok(x), - None => self.backend.storage(key).map_err(|_| ExternalitiesError), - } + fn storage(&self, key: &[u8]) -> Option<&[u8]> { + self.overlay.storage(key).unwrap_or_else(|| + self.backend.storage(key).expect("Externalities not allowed to fail within runtime")) } - fn set_storage(&mut self, key: Vec<u8>, value: Vec<u8>) { + fn place_storage(&mut self, key: Vec<u8>, value: Option<Vec<u8>>) { self.overlay.set_storage(key, value); } @@ -77,13 +90,12 @@ impl<'a, B: 'a> Externalities for Ext<'a, B> } fn storage_root(&self) -> [u8; 32] { - let mut all_pairs = self.backend.pairs(); - all_pairs.extend( - self.overlay.committed.storage.iter() - .chain(self.overlay.prospective.storage.iter()) - .map(|(k, v)| (&k[..], &v[..])) - ); - - trie_root(all_pairs.into_iter().map(|(k, v)| (k.to_vec(), v.to_vec()))).0 + trie_root(self.backend.pairs().iter() + .map(|&(ref k, ref v)| (k.to_vec(), Some(v.to_vec()))) + .chain(self.overlay.committed.clone().into_iter()) + .chain(self.overlay.prospective.clone().into_iter()) + .collect::<HashMap<_, _>>() + .into_iter() + .filter_map(|(k, maybe_val)| maybe_val.map(|val| (k, val)))).0 } } diff --git a/substrate/substrate/state-machine/src/lib.rs b/substrate/substrate/state-machine/src/lib.rs index a3f2e3dc4b8..363f2938303 100644 --- a/substrate/substrate/state-machine/src/lib.rs +++ b/substrate/substrate/state-machine/src/lib.rs @@ -32,6 +32,7 @@ extern crate triehash; extern crate byteorder; use std::collections::HashMap; +use std::collections::hash_map::Drain; use std::fmt; pub mod backend; @@ -40,35 +41,7 @@ mod testing; pub use testing::TestExternalities; pub use ext::Ext; - -/// Updates to be committed to the state. -pub type Update = (Vec<u8>, Vec<u8>); - -// in-memory section of the state. -#[derive(Debug, PartialEq, Default, Clone)] -struct MemoryState { - storage: HashMap<Vec<u8>, Vec<u8>>, -} - -impl MemoryState { - fn storage(&self, key: &[u8]) -> Option<&[u8]> { - self.storage.get(key).map(|v| &v[..]) - } - - fn set_storage(&mut self, key: Vec<u8>, val: Vec<u8>) { - self.storage.insert(key, val); - } - - fn update<I>(&mut self, changes: I) where I: IntoIterator<Item=Update> { - for (key, val) in changes { - if val.is_empty() { - self.storage.remove(&key); - } else { - self.storage.insert(key, val); - } - } - } -} +pub use backend::Backend; /// The overlayed changes to state to be queried on top of the backend. /// @@ -76,34 +49,41 @@ impl MemoryState { /// that can be cleared. #[derive(Default)] pub struct OverlayedChanges { - prospective: MemoryState, - committed: MemoryState, + prospective: HashMap<Vec<u8>, Option<Vec<u8>>>, + committed: HashMap<Vec<u8>, Option<Vec<u8>>>, } impl OverlayedChanges { - fn storage(&self, key: &[u8]) -> Option<&[u8]> { - self.prospective.storage(key) - .or_else(|| self.committed.storage(key)) - .and_then(|v| if v.is_empty() { None } else { Some(v) }) + /// Returns a double-Option: None if the key is unknown (i.e. and the query should be refered + /// to the backend); Some(None) if the key has been deleted. Some(Some(...)) for a key whose + /// value has been set. + pub fn storage(&self, key: &[u8]) -> Option<Option<&[u8]>> { + self.prospective.get(key) + .or_else(|| self.committed.get(key)) + .map(|x| x.as_ref().map(AsRef::as_ref)) } - fn set_storage(&mut self, key: Vec<u8>, val: Vec<u8>) { - self.prospective.set_storage(key, val); + fn set_storage(&mut self, key: Vec<u8>, val: Option<Vec<u8>>) { + self.prospective.insert(key, val); } /// Discard prospective changes to state. pub fn discard_prospective(&mut self) { - self.prospective.storage.clear(); + self.prospective.clear(); } /// Commit prospective changes to state. pub fn commit_prospective(&mut self) { - self.committed.update(self.prospective.storage.drain()); + if self.committed.is_empty() { + ::std::mem::swap(&mut self.prospective, &mut self.committed); + } else { + self.committed.extend(self.prospective.drain()); + } } /// Drain prospective changes to an iterator. - pub fn drain(&mut self) -> ::std::collections::hash_map::Drain<std::vec::Vec<u8>, std::vec::Vec<u8>> { - self.committed.storage.drain() + pub fn drain(&mut self) -> Drain<Vec<u8>, Option<Vec<u8>>> { + self.committed.drain() } } @@ -119,19 +99,32 @@ impl<E> Error for E where E: 'static + fmt::Debug + fmt::Display + Send {} /// would not be executed unless externalities were available. This is included for completeness, /// and as a transition away from the pre-existing framework. #[derive(Debug, Eq, PartialEq)] -pub struct ExternalitiesError; +pub enum ExecutionError { + /// The entry `:code` doesn't exist in storage so there's no way we can execute anything. + CodeEntryDoesNotExist +} -impl fmt::Display for ExternalitiesError { +impl fmt::Display for ExecutionError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "Externalities Error") } } /// Externalities: pinned to specific active address. pub trait Externalities { /// Read storage of current contract being called. - fn storage(&self, key: &[u8]) -> Result<&[u8], ExternalitiesError>; + fn storage(&self, key: &[u8]) -> Option<&[u8]>; + + /// Set storage entry `key` of current contract being called (effective immediately). + fn set_storage(&mut self, key: Vec<u8>, value: Vec<u8>) { + self.place_storage(key, Some(value)); + } - /// Set storage of current contract being called (effective immediately). - fn set_storage(&mut self, key: Vec<u8>, value: Vec<u8>); + /// Clear a storage entry (`key`) of current contract being called (effective immediately). + fn clear_storage(&mut self, key: &[u8]) { + self.place_storage(key.to_vec(), None); + } + + /// Set or clear a storage entry (`key`) of current contract being called (effective immediately). + fn place_storage(&mut self, key: Vec<u8>, value: Option<Vec<u8>>); /// Get the identity of the chain. fn chain_id(&self) -> u64; @@ -167,7 +160,8 @@ pub fn execute<B: backend::Backend, Exec: CodeExecutor>( exec: &Exec, method: &str, call_data: &[u8], -) -> Result<Vec<u8>, Box<Error>> { +) -> Result<Vec<u8>, Box<Error>> +{ let result = { let mut externalities = ext::Ext { @@ -175,7 +169,9 @@ pub fn execute<B: backend::Backend, Exec: CodeExecutor>( overlay: &mut *overlay }; // make a copy. - let code = externalities.storage(b":code").unwrap_or(&[]).to_vec(); + let code = externalities.storage(b":code") + .ok_or(Box::new(ExecutionError::CodeEntryDoesNotExist) as Box<Error>)? + .to_vec(); exec.call( &mut externalities, @@ -211,21 +207,24 @@ mod tests { assert!(overlayed.storage(&key).is_none()); - overlayed.set_storage(key.clone(), vec![1, 2, 3]); - assert_eq!(overlayed.storage(&key).unwrap(), &[1, 2, 3]); + overlayed.set_storage(key.clone(), Some(vec![1, 2, 3])); + assert_eq!(overlayed.storage(&key).unwrap(), Some(&[1, 2, 3][..])); overlayed.commit_prospective(); - assert_eq!(overlayed.storage(&key).unwrap(), &[1, 2, 3]); + assert_eq!(overlayed.storage(&key).unwrap(), Some(&[1, 2, 3][..])); - overlayed.set_storage(key.clone(), vec![]); - assert!(overlayed.storage(&key).is_none()); + overlayed.set_storage(key.clone(), Some(vec![])); + assert_eq!(overlayed.storage(&key).unwrap(), Some(&[][..])); + + overlayed.set_storage(key.clone(), None); + assert!(overlayed.storage(&key).unwrap().is_none()); overlayed.discard_prospective(); - assert_eq!(overlayed.storage(&key).unwrap(), &[1, 2, 3]); + assert_eq!(overlayed.storage(&key).unwrap(), Some(&[1, 2, 3][..])); - overlayed.set_storage(key.clone(), vec![]); + overlayed.set_storage(key.clone(), None); overlayed.commit_prospective(); - assert!(overlayed.storage(&key).is_none()); + assert!(overlayed.storage(&key).unwrap().is_none()); } macro_rules! map { @@ -239,16 +238,19 @@ mod tests { let mut backend = InMemory::from(map![ b"doe".to_vec() => b"reindeer".to_vec(), b"dog".to_vec() => b"puppyXXX".to_vec(), - b"dogglesworth".to_vec() => b"catXXX".to_vec() + b"dogglesworth".to_vec() => b"catXXX".to_vec(), + b"doug".to_vec() => b"notadog".to_vec() ]); let mut overlay = OverlayedChanges { - committed: MemoryState { storage: map![ - b"dog".to_vec() => b"puppy".to_vec(), - b"dogglesworth".to_vec() => b"catYYY".to_vec() - ], }, - prospective: MemoryState { storage: map![ - b"dogglesworth".to_vec() => b"cat".to_vec() - ], }, + committed: map![ + b"dog".to_vec() => Some(b"puppy".to_vec()), + b"dogglesworth".to_vec() => Some(b"catYYY".to_vec()), + b"doug".to_vec() => Some(vec![]) + ], + prospective: map![ + b"dogglesworth".to_vec() => Some(b"cat".to_vec()), + b"doug".to_vec() => None + ], }; let ext = Ext { backend: &mut backend, diff --git a/substrate/substrate/state-machine/src/testing.rs b/substrate/substrate/state-machine/src/testing.rs index a85e1d3f4a2..6d991a9acab 100644 --- a/substrate/substrate/state-machine/src/testing.rs +++ b/substrate/substrate/state-machine/src/testing.rs @@ -17,38 +17,28 @@ //! Test implementation for Externalities. use std::collections::HashMap; -use super::{Externalities, ExternalitiesError}; +use super::Externalities; use triehash::trie_root; /// Simple HashMap based Externalities impl. -#[derive(Debug, Default)] -pub struct TestExternalities { - /// The storage. - pub storage: HashMap<Vec<u8>, Vec<u8>>, -} - -impl TestExternalities { - /// Create a new instance with empty storage. - pub fn new() -> Self { - TestExternalities { - storage: HashMap::new(), - } - } -} +pub type TestExternalities = HashMap<Vec<u8>, Vec<u8>>; impl Externalities for TestExternalities { - fn storage(&self, key: &[u8]) -> Result<&[u8], ExternalitiesError> { - Ok(self.storage.get(&key.to_vec()).map_or(&[] as &[u8], Vec::as_slice)) + fn storage(&self, key: &[u8]) -> Option<&[u8]> { + self.get(key).map(AsRef::as_ref) } - fn set_storage(&mut self, key: Vec<u8>, value: Vec<u8>) { - self.storage.insert(key, value); + fn place_storage(&mut self, key: Vec<u8>, maybe_value: Option<Vec<u8>>) { + match maybe_value { + Some(value) => { self.insert(key, value); } + None => { self.remove(&key); } + } } fn chain_id(&self) -> u64 { 42 } fn storage_root(&self) -> [u8; 32] { - trie_root(self.storage.clone()).0 + trie_root(self.clone()).0 } } diff --git a/substrate/substrate/test-runtime/src/system.rs b/substrate/substrate/test-runtime/src/system.rs index 4c98e16003c..a6de75760a4 100644 --- a/substrate/substrate/test-runtime/src/system.rs +++ b/substrate/substrate/test-runtime/src/system.rs @@ -136,14 +136,14 @@ mod tests { use ::{Header, Digest, Transaction, UncheckedTransaction}; fn new_test_ext() -> TestExternalities { - TestExternalities { storage: map![ + map![ twox_128(b"latest").to_vec() => vec![69u8; 32], twox_128(b":auth:len").to_vec() => vec![].and(&3u32), twox_128(&0u32.to_keyed_vec(b":auth:")).to_vec() => Keyring::Alice.to_raw_public().to_vec(), twox_128(&1u32.to_keyed_vec(b":auth:")).to_vec() => Keyring::Bob.to_raw_public().to_vec(), twox_128(&2u32.to_keyed_vec(b":auth:")).to_vec() => Keyring::Charlie.to_raw_public().to_vec(), twox_128(&Keyring::Alice.to_raw_public().to_keyed_vec(b"balance:")).to_vec() => vec![111u8, 0, 0, 0, 0, 0, 0, 0] - ], } + ] } fn construct_signed_tx(tx: Transaction) -> UncheckedTransaction { diff --git a/substrate/substrate/test-runtime/wasm/genesis.wasm b/substrate/substrate/test-runtime/wasm/genesis.wasm index 3eca5047352e7efbcf6808672b0454858e410327..7daba8a15c5866dd375c889a8eeb5f9cec8e7dbe 100644 GIT binary patch literal 32296 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 literal 31744 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 diff --git a/substrate/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm b/substrate/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.compact.wasm index c8ac9359ef120148ebdf8776a28426eea8086d98..5007dd36a299a2003b715f43d1551870e737ebf6 100644 GIT binary patch delta 1883 zcmZuxO>7%Q6rR~#d&i!vcaylKjZ^x(R3S<K(ne~4HmS#{lcq`k`4dGHH+88usolmd zDhO~6sNzteNP{>bQBH+JXo8VI0;))G>H+lt2S7k1kU%IB+)yPXc(ZG75(!y;GyCTK z&G+7XH}BK;|Dg*Dlt(D%+%zK*jmyvI#Qxs)!nMNW)oS5vbtYe`<R`1ea*1qDTqu_E z)5S{R?78Xk<P_NvOHd*RXZ>3?cfzKQp7=-K*0b7^+vEpbeRPlfzUz0CUp~Boa-qA3 zvZLoL-78=2`4nY;?+&`R{(SEZ+U^jbK)N-egyE$4*Sn=WkfFQeHwVV$mcb#)>dy}L zP`XoIA9|YZuKzr=nNlY2AMB^5+?jcR#$+xt5`nfJ;>fv^z4A^b)#6f78?hK@Ig803 zGMj6zo+SgAq)jYGJ;6LT*7#P-ax~C`CIINXn}lQ*uD|Z0eB+i&fr_o;E=@Vf4xl+J zj>gOrn>;*mdbCDZ)Ht3?KwqoDJT}Bo!~NV?Bj%Dr6R^<&5*q$R{E7^)<$I#D*cu+p znto6Q);bkNje^lssi2n!v{@6&x`}tgx+0Khp86^*EDmg)3S)4&B@4Aks9r*6w2VM} zoeC}Ez?&+S?Phd9TZ&@aS{hmc%_#P&v$9-5O9ly`4MP^*ItsS0L&VyYCG&648WwJa z^&0Z0?8XgEQ1lRs7#K1(+<A(HkVk!}*C6f3q+v`F#<U^2_Cm9!Dzmj&ro1w|q1LSG zGC1(R$=3!z{FkFz29mdO76HxCIW|Le&mWRt=5V{(@<wOvVD1#`%^ZOrJK?!j;}9FL zuGz~7s^9Hk2v^bd#}Y%)2DWP2(FXl(uw>sv>bMnR(I(W?q48Sx#vrcoZ?xtzkN|g` zAWZ&n;m(k^hdWGDfD^T1^4{>H+(HCgThu13giIb9!Do8r(4xHuEU@r}yF?hC%Va9I z2l?P=?oX71BZ?=wM$0JQ9_?$#32{RE1Q2Ea-Dp>oi6uOck;9A0c9n#vBuO-mxO&do zAnzW2^$`<0&?@vQK7MmX*kjlVD%d60oX=|4gU4(oLTB4|j^!*z*2W%BGB5=7(i|*{ z3X--3O*8r1*mDC6Y@A^HA4LL4+rS(hY?oPDOPu2yX!X)oi^d^=l`v!*+@);}Oull& z#rwZ|<QB@&@wXWIaV*fR|1zGUNLv3+bkpv7_tA=Cvv-d5qr7+Q3mTVi9`|s6|M*wP zZ+A`{K^Z$)LKeJs@(fMRrNl!{nsD)P%Grj?Tv{BIf1H{{zMMLJh3>5Xc=`s#xZV?s zl<ul`KJ}qqU)g@!uHSuTh10(JCl~%UYO|WA)wI_H5sGs~-;}HG(+toB*+(3;>?g_K zYh&=$5iFf*d5k<5EL(9XC~h6kN#Fu%((o;kO|GHdpsqfHozgl=3!tN_=AV*%>QktE z;5kN`Y8mwdy;}p--Vtn{B5hq+fu~xD35hVrUCpOr<aP}s>yS2p%p-3_6lvoNM8bCT z7Rs|EZE%56M4zYbXV?K=Z3;l05Y89eb2yXSxL5yt>Q^U65KexuQZ3KqUnoH3V)^Ry vd6+Dhs`+9G@^HQ|Sw5dXH(h`i^V3%gP`m)ui-j57RG?D6RDeRMI`h(ho6KRR delta 1596 zcmaJ>U1%It6u#%q?9OZ^voo74=4WGjW?Eu4Ki&K_o4?xJty|HwC@Mv$7-HCBrXh(Y zLLZ`=C+S0x!Yvd;H24yIXiXd+T1p`gzWCZ_g`j;9EVM#F#fqLgyR)_k?y~3J`<>tK z+`H$CN3it=?CgLA3B#g~kw|cP3r<b-w^lAx7T#O0%&osWzq~fTu)esm%m&iu7MJIj z7S}3sZ!N7XoM%T;X<&j`=E&0>UD)2)({%q%SmI|6yDmdO*29?+x|@?%yN6&{e%Jjo z$*-TeNAk0tMUtuf9Q4V>{0)+RZ$I>fFZEu6@QvB8oa#g1P~{&8N<l%y;CY{qaUHo} zW6V{{6wB65Pt{JHwWUiflk7lkIf$wjF5JLP(}IC81LS$u?rTM=kE>&Cr%+d+h@7Bm zq-A63C{#WST-~EkJsdq&VxES)#EP0yV}Kw`%EW{*n{%_Bd`5lgXue=mlDvkVUII^R z1`Ao)CJC-)2~vr{K(W$G47Cz_C1+h7;2A|*KJ1%>f-LmU%8mYMFv6Std4OK|)4=O6 z7)~GQ05Ig4!bnE~Tf|*0z*fbl1)VXzuVMCO+mxRdPPX}gEs9q*(u%F5YJhLbKMO_f zG5PFZN0nG8PqAOqQ5n%$E&ItDt~f^Y4$k_HB8X1ePLa+GM0?;fbo0C(g%CIJoq9al zrXE*O?hI-%LZ$KjYO=^pGJn9LST?d)9YGX9N2d+}W@4rCHH&<eJU5NVGmUnvj3Dwf zP=5lV^htymQXy80^6eq}Koh28H0lxgT4>ZEQ+_gp)ux8Q9yN*#n$UUzqTm*qF{FZT z5w*P}HLkgiIv7XE{OhbN_o61G8{CZs<z$`mX?3|Z&YK3>je7M)nSja1lW!WTJ8q*X zsYWj}1bK0|%Qi5+n<Q#-ceu66U5%=ZTj4Z9XZ{=7q#ELz`u_{6m!L7Mmq0rzLDfpT zh}3FPQ%|i~y+KR}bd&UaE29%uGiJAaM^sPQw)}GRBt7{Dqr1*9<+f?O_)O?@$#UnY z8ZSQ{y-)Jam>M#-iYp}h#s^ysWNyQr8m#P>$Gek;*dvAfczie8qLMI`q?L>lzE-xg za&F>%Fy#*uZD?LA@eloM2`_HjcEglHk!h-IJ2E@@T9#g#fWWiRwm~q@5#SkeWAe>5 zx=Bo{-)Z{ac+^sAu|qZdI+<-Y%C>1?+H>fw$;^~b^hT$)Nq#?d#Uw+E&!8Dzn9c!} za^+YL<ip#?*3=(===cc9%JJKfl80sj+J7|jEg8KkUL^UcSf+ttm(D`lH#zq(Q*mhQ z(6~`k=W<RQk{c&BX}bJ%;vMJ>SDw2B6#7wl7oZScfBw1_T4(QBFckiN?l(QHF=ko6 Qc=Ob3OTQfcy>!?82fd*jGynhq diff --git a/substrate/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.wasm b/substrate/substrate/test-runtime/wasm/target/wasm32-unknown-unknown/release/substrate_test_runtime.wasm index 3329885da9a60eb0dbabb75aadba95405ccefe2a..a57d2f1fd4eadc2f17d3e74e3fccab8997e96901 100644 GIT binary patch delta 1882 zcmZuxU2GIp6ux(6cIWQi&d#*mB6KU99UADCzha?PetTQC&>t)nh!PUX(k`&Wb{D$~ z!9?698sY;Q;??+M!W$2Y(yR|gV^R|yh%w@eKAI*P;{yr!q$DPK?#%AcCT6qeo;mmY z-S7N7enS8Lhu*zMd4zJ#O*0bFxO_n8_ik&?U(L^4uIA5F=X0e>Zl+o&m&o?Sxk4#d zEL8Gm&KAov7s-xTf)YVE8-T728&l72jo<&N{)SfUmQObI(Ot54^B+jtdmhqV?`I0g zdYLnHxBM>iCDONgx6<A9yS+DPyF-8i>CuQHhO?gkutWa3Z;0-c-TNox-2MZU)j!>z zp|nr_eBc%OTz$vEb(AtWHq=i|d2Q$!8j~LmjYgm?Lmat0-76C!)#6f78?_i{S&PXn zVqMMEhshuYX%ov)PcYAoHNMrc91Y~42>^P>O+s=QuD|Ufedo4Ifr<?iE=@Tdoj|iz z9F>_T)_Qp3WVD7`lsKMCKwl}rI5xyk!u{BoBgT^NO~M)rNT~Rj_!${s%Rfa|p*6f% zFny;CtW_fP8U>>%Qcf=oY6~W&bqn8yc|{=6y!AzxSRB|Y5&GbAZWwBjP`rf3s2PFy zDiLbNfj31e+O6oIwiLy(wKSvznqKUu#!7PuH5nv;HWXR->L}R03=wNnn#_MeYnZqd z=4;69BWpUEpy(kMF)-w*k*=3m2zk_pdIi$HPa66pp-&s4D<8CAsx(`hY07U$I%>_V zE`bC88+@e$#D6)e4MFmD)*_%eI>%zD>iJC)^c=EJOWvrg9rT@oy%{60W5+z#YFuIg zRuy|0LG`O0G~rWp{kB9`w1KVacGN+88!WjnnVPafEZT(XI#gb1-e|-X_Knh90utb^ z6NJfcF60dP??|U<3UH!UOv0fTxP=I~wx~^72|0Uc6vy<FLyPt<u)x9zcZo1Om&uFS zowyG^&OSo=?x<Q5R}Pnv{(iWx9XrGc^%Fppe&)!gC=*L~Ax|DzOtz~aL<LEra>UiM zR)_2yyY{?^6=)TD6^GxP7xoyIf(kb0ns<h^>%lNviO|^gjbmBMkq^dBBpDcjdT9=p zMFmOQf~J`q9Dj9?fsGxE|D(77(l#(h2is+q))MD91Fc@#YSB0(FcXH`2D!A&fywX3 zU3~we@!Lp0n)raB9mfRCdjDjK;?kNr+C#V0uO6+aZT9fRexxw<4UNlRraa`wj@`rk zmY5z#dTP3aTk!t$X_~y55*wXv!o?RUXEPo*)8e4qb9@2!<=4kwqkZ*lCvH&m`_;)s zN_W<aFMp=j_ig>$u6Le($Z3DwJpY$bThKJEroAbMP&-%jU3B#U%>Z4H0ph4*FG&Vp zYl5%N;OJ7v9<n|-HegdwWF613@c`9nIE!ShYp5C2)n~vdsiUL-I*MxkEg4XsLd65m zG162UQa{jpG*IOo#qz18tt&0?R4Fka5$1%e`KuUryM~^1NE<-z;NFU;rHvDa3)|6K zC?6(igA4Q``aJbM!w&FjQvm9OaDLZ4i#^GWAL}i}-<&K#IQhX!wLG6YpNGnY^5x<z t%#=&jT%iOxn9a|WXLDzZdAO1*Ud}_|98@pl=aH#Er9791e5pGB`hN!)UpD{% delta 1595 zcmaJ>O-v+36s}j@Gu=be(+!NW>>#}EHM`6@!0<Q20=m=)_`?#7@t`3}5Yf<!fPjgK zKZA)H55#ON6OV4PiCol`w41C4mBSu9ka+Oo$#5XiC~-H&L^m<US3T3?ZcLoXysG-% z@As<a{rMN%xCx(K0}B#{MIR%P;PP8oAMI^fe0g!<rOm~;&Gq?}jroPmrPUQyNI$o< zGQYgEu{ih4^6J8Q)|W~H6U;J;*xq>}d)GY;Z+#cO%9rnUU50?Hi!&v3w?qDTvJZx2 z+o_*O@~$J2*SnTTKAD??9{EM?D#`WJdFTm0JiQI!$J3Xc%J0CT!e1AZf`W*`d7l@# zj$E)JbJa4+GS$<a)zk6n(yo>f)=^zLQPskQ8@LWF7zi^!o@2*+twi;4b*%0b>M9hG z6I6+`tf-Dc<-@?$Jqp#u(PL%iX~@g0q$xE92*RXHOc>Ky_m1OyTz%<iK4eppoQ9rW z22X1Q3)!Si5?sv^q!NWdvC_*7wK97wYkknon-pz1kspD6S;<e!{rnghVX8X^&@Bgg zo`8XHyQdAnkRSC9v?Z`v9BKi!C_c^T6#0RMnMZ9?{?<Fy>H{__UYSTME+$n2d{a&r zO59`e-9lT1SSU|%P}NZx(OE4A$ttcmM)W$TeMb>QXVOlQ&J4t{z-Q>@cr6McZs0q$ zc(hI3s-oOYsKp4C#t$mV5;w{G28&|Z$YON_Q3M^G8U)xBE0wQV;%nr&WkjB7v}0ui zk*9(BZ4jkTBE*miu~w2-`|OSeOvh-{Bl5M-s6nPY>cdJy-C&OzMFtIM-3C!`3(Xi( z!7mcEy(BfRv4%PrM``-kSy}EyO-R?d8+FRb8s!;vxmC_v2HN#{^?I3r$y<|e8LB&O zy(y`BFEj-CeSf=cV0<@8)FceFRJf~AwQ(z)dg!MAhBm2&_@@5<f@&pb3~MFOj!ICq z(k>#kR?^f{YgBI#69U~NJ>M&XXRJod?D&qToU?6tb8w2D{P@tWGeo&<8ZSN*I$iR6 zMKxXei`Pl|B{gHL;Z>5a3>R7qWNzJ@`b*~WtKpMLL+p`4{ye;!X;wLy%F#l`316GE zGxGA8*T9tBBdutDQs!^_nKHh!W7~C83Pq-=N!yXnjy#^BhbAEKEVOM9%yR^IhTI={ zx|J>x)9N=ve;bcFN*#8n1~HmxG$w7+!nEhmQ<L+fKCydqbcbYq?0u6AEk2HB_{~@r zsFcHdyC5Ih_id>E{TpWoNM1SnC8XrWctHCf#;=jlCGjxHU&RW|i>J!7(E54SJ;hWU znmROX)X=$*6({8W{aZ9#W+q;Q?(pl0ZJ^NSrgj1P!@nQ+R10Tkk1QArAAJ4~J*_cj SS-*Jm)N4z>5I*w4q5BVG!yEhn -- GitLab