diff --git a/runtime/src/validate_block/implementation.rs b/runtime/src/validate_block/implementation.rs index a1f21241f9..d616419265 100644 --- a/runtime/src/validate_block/implementation.rs +++ b/runtime/src/validate_block/implementation.rs @@ -23,7 +23,6 @@ use runtime_primitives::traits::{ use executive::ExecuteBlock; use substrate_trie::{MemoryDB, read_trie_value, delta_trie_root}; -use codec::Decode; use rstd::{slice, ptr, cmp, vec::Vec, boxed::Box, mem}; @@ -59,6 +58,8 @@ trait Storage { pub fn validate_block>( mut arguments: &[u8], ) { + use codec::Decode; + let (parent_hash, block_data): (B::Hash, crate::ParachainBlockData::) = Decode::decode(&mut arguments) .expect("Could not decode parachain block."); // TODO: Add `PolkadotInherent`. diff --git a/runtime/src/validate_block/mod.rs b/runtime/src/validate_block/mod.rs index c973a6798e..99adf3a086 100644 --- a/runtime/src/validate_block/mod.rs +++ b/runtime/src/validate_block/mod.rs @@ -57,17 +57,17 @@ macro_rules! register_validate_block_impl { #[no_mangle] unsafe fn validate_block( - block_data: *const u8, - block_data_len: u64, + arguments: *const u8, + arguments_len: u64, ) { - let block_data = $crate::slice::from_raw_parts( - block_data, - block_data_len as usize, + let arguments = $crate::slice::from_raw_parts( + arguments, + arguments_len as usize, ); $crate::validate_block::implementation::validate_block::< $block, $block_executor - >(block_data); + >(arguments); } } }; diff --git a/runtime/src/validate_block/tests.rs b/runtime/src/validate_block/tests.rs index ef4c81b928..4d1d336a67 100644 --- a/runtime/src/validate_block/tests.rs +++ b/runtime/src/validate_block/tests.rs @@ -23,7 +23,8 @@ use runtime_primitives::traits::{Block as BlockT, Header as HeaderT}; use executor::{WasmExecutor, error::Result, wasmi::RuntimeValue::{I64, I32}}; use test_client::{ TestClientBuilder, TestClient, - runtime::{Block, Transfer}, TestClientBuilderExt, + runtime::{Block, Transfer, Hash}, TestClientBuilderExt, + client_ext::TestClient as _, }; use std::collections::HashMap; @@ -33,7 +34,7 @@ use codec::Encode; const WASM_CODE: &[u8] = include_bytes!("../../../test/runtime/wasm/target/wasm32-unknown-unknown/release/cumulus_test_runtime.compact.wasm"); -fn call_validate_block(block_data: ParachainBlockData) -> Result<()> { +fn call_validate_block(parent_hash: Hash, block_data: ParachainBlockData) -> Result<()> { let mut ext = TestExternalities::default(); WasmExecutor::new().call_with_custom_signature( &mut ext, @@ -41,13 +42,13 @@ fn call_validate_block(block_data: ParachainBlockData) -> Result<()> { &WASM_CODE, "validate_block", |alloc| { - let block_data = block_data.encode(); - let block_data_offset = alloc(&block_data)?; + let arguments = (parent_hash, block_data).encode(); + let arguments_offset = alloc(&arguments)?; Ok( vec![ - I32(block_data_offset as i32), - I64(block_data.len() as i64), + I32(arguments_offset as i32), + I64(arguments.len() as i64), ] ) }, @@ -131,7 +132,7 @@ fn validate_block_with_no_extrinsics() { witness_data, witness_data_storage_root ); - call_validate_block(block_data).expect("Calls `validate_block`"); + call_validate_block(client.genesis_hash(), block_data).expect("Calls `validate_block`"); } #[test] @@ -150,5 +151,5 @@ fn validate_block_with_extrinsics() { witness_data, witness_data_storage_root ); - call_validate_block(block_data).expect("Calls `validate_block`"); + call_validate_block(client.genesis_hash(), block_data).expect("Calls `validate_block`"); } \ No newline at end of file