diff --git a/substrate/executor/src/native_executor.rs b/substrate/executor/src/native_executor.rs index 5e588d559c..28146a46ea 100644 --- a/substrate/executor/src/native_executor.rs +++ b/substrate/executor/src/native_executor.rs @@ -1,6 +1,7 @@ use primitives::contract::CallData; use state_machine::{Externalities, CodeExecutor}; use error::{Error, ErrorKind, Result}; +use wasm_executor::WasmExecutor; use native_runtime as runtime; use runtime_support; @@ -22,13 +23,13 @@ impl CodeExecutor for NativeExecutor { if code == &native_equivalent[..] { runtime_support::with_externalities(ext, || match method { // TODO: Panic handler that comes back with error. - "execute_block" => Ok(runtime::execute_block(data.0)), - "execute_transaction" => Ok(runtime::execute_transaction(data.0)), + "execute_block" => Ok(runtime::execute_block(&data.0)), + "execute_transaction" => Ok(runtime::execute_transaction(&data.0)), _ => Err(ErrorKind::MethodNotFound(method.to_owned()).into()), }) } else { // call into wasm. - unimplemented!() + WasmExecutor.call(ext, code, method, data) } } } diff --git a/substrate/native-runtime/support/src/lib.rs b/substrate/native-runtime/support/src/lib.rs index 68914423b5..448cb6ce20 100644 --- a/substrate/native-runtime/support/src/lib.rs +++ b/substrate/native-runtime/support/src/lib.rs @@ -42,7 +42,7 @@ impl fmt::Display for NoError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "") } } -environmental!(ext : Externalities + 'static); +environmental!(ext : trait Externalities); /// Get `key` from storage and return a `Vec`, empty if there's a problem. pub fn storage(key: &[u8]) -> Vec { @@ -93,7 +93,7 @@ pub fn ed25519_verify(sig: &[u8; 64], msg: &[u8], pubkey: &[u8; 32]) -> bool { /// Execute the given closure with global function available whose functionality routes into the /// externalities `ext`. Forwards the value that the closure returns. -pub fn with_externalities R>(ext: &mut (Externalities + 'static), f: F) -> R { +pub fn with_externalities R>(ext: &mut Externalities, f: F) -> R { ext::using(ext, f) } diff --git a/substrate/wasm-runtime/polkadot/src/lib.rs b/substrate/wasm-runtime/polkadot/src/lib.rs index 713d8eb091..66c5c866f6 100644 --- a/substrate/wasm-runtime/polkadot/src/lib.rs +++ b/substrate/wasm-runtime/polkadot/src/lib.rs @@ -40,14 +40,14 @@ use primitives::{Block, UncheckedTransaction}; /// Execute a block, with `input` being the canonical serialisation of the block. Returns the /// empty vector. -pub fn execute_block(input: Vec) -> Vec { - runtime::system::execute_block(Block::from_slice(&input).unwrap()); +pub fn execute_block(input: &[u8]) -> Vec { + runtime::system::execute_block(Block::from_slice(input).unwrap()); Vec::new() } /// Execute a given, serialised, transaction. Returns the empty vector. -pub fn execute_transaction(input: Vec) -> Vec { - runtime::system::execute_transaction(&UncheckedTransaction::from_slice(&input).unwrap()); +pub fn execute_transaction(input: &[u8]) -> Vec { + runtime::system::execute_transaction(&UncheckedTransaction::from_slice(input).unwrap()); Vec::new() } diff --git a/substrate/wasm-runtime/support/src/lib.rs b/substrate/wasm-runtime/support/src/lib.rs index 4d96617a8a..a01fe17c26 100644 --- a/substrate/wasm-runtime/support/src/lib.rs +++ b/substrate/wasm-runtime/support/src/lib.rs @@ -135,7 +135,7 @@ macro_rules! impl_stubs { $crate::Vec::from_raw_parts(input_data, input_len, input_len) }; - let output = super::$name(input); + let output = super::$name(&input[..]); &output[0] as *const u8 as u64 + ((output.len() as u64) << 32) } )* diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm index ceac1b036e..fbac14afd6 100644 Binary files a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm and b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.compact.wasm differ diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm index 4a56fe2760..2af80d0b4a 100644 Binary files a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm and b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_polkadot.wasm differ diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm index 5c717847a5..34ed540db2 100644 Binary files a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm and b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.compact.wasm differ diff --git a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm index 64fb6a48bf..4ec976b958 100644 Binary files a/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm and b/substrate/wasm-runtime/target/wasm32-unknown-unknown/release/runtime_test.wasm differ diff --git a/substrate/wasm-runtime/test/src/lib.rs b/substrate/wasm-runtime/test/src/lib.rs index 1cf1934976..6e257a091f 100644 --- a/substrate/wasm-runtime/test/src/lib.rs +++ b/substrate/wasm-runtime/test/src/lib.rs @@ -10,26 +10,26 @@ use alloc::vec::Vec; extern crate runtime_support; use runtime_support::{set_storage, storage, print, blake2_256, twox_128, twox_256, ed25519_verify}; -fn test_blake2_256(input: Vec) -> Vec { +fn test_blake2_256(input: &[u8]) -> Vec { blake2_256(&input).to_vec() } -fn test_twox_256(input: Vec) -> Vec { +fn test_twox_256(input: &[u8]) -> Vec { twox_256(&input).to_vec() } -fn test_twox_128(input: Vec) -> Vec { +fn test_twox_128(input: &[u8]) -> Vec { twox_128(&input).to_vec() } -fn test_ed25519_verify(input: Vec) -> Vec { +fn test_ed25519_verify(input: &[u8]) -> Vec { let sig = &input[0..64]; let pubkey = &input[64..96]; let msg = b"all ok!"; [ed25519_verify(sig, &msg[..], pubkey) as u8].to_vec() } -fn test_data_in(input: Vec) -> Vec { +fn test_data_in(input: &[u8]) -> Vec { print(b"set_storage" as &[u8]); set_storage(b"input", &input);