Parachain execution yields messages to send (#96)

* read head-data directly out of WASM memory

* implement ext_post_message for parachain WASM

* further refactoring of the parachain module

* add externalities error type

* accumulate posted messages when validating parachain candidate

* define Extrinsic type in primitives

* availability-store: store extrinsic data

* compute extrinsic and check against candidate

* add some egress queue tests

* grumbles & substrate update

* ensure everything builds
This commit is contained in:
Robert Habermeier
2019-01-22 08:32:32 -03:00
committed by Gav Wood
parent 152bb30889
commit fe6351ca65
20 changed files with 876 additions and 219 deletions
+33 -13
View File
@@ -22,7 +22,8 @@ extern crate parity_codec as codec;
extern crate polkadot_parachain as parachain;
extern crate tiny_keccak;
use parachain::ValidationParams;
use parachain::{MessageRef, ValidationParams};
use parachain::wasm_executor::{Externalities, ExternalitiesError};
use codec::{Decode, Encode};
/// Head data for this parachain.
@@ -45,6 +46,13 @@ struct BlockData {
add: u64,
}
struct DummyExt;
impl Externalities for DummyExt {
fn post_message(&mut self, _message: MessageRef) -> Result<(), ExternalitiesError> {
Ok(())
}
}
const TEST_CODE: &[u8] = include_bytes!("res/adder.wasm");
fn hash_state(state: u64) -> [u8; 32] {
@@ -68,10 +76,14 @@ fn execute_good_on_parent() {
add: 512,
};
let ret = parachain::wasm::validate_candidate(TEST_CODE, ValidationParams {
parent_head: parent_head.encode(),
block_data: block_data.encode(),
}).unwrap();
let ret = parachain::wasm_executor::validate_candidate(
TEST_CODE,
ValidationParams {
parent_head: parent_head.encode(),
block_data: block_data.encode(),
},
&mut DummyExt,
).unwrap();
let new_head = HeadData::decode(&mut &ret.head_data[..]).unwrap();
@@ -98,10 +110,14 @@ fn execute_good_chain_on_parent() {
add,
};
let ret = parachain::wasm::validate_candidate(TEST_CODE, ValidationParams {
parent_head: parent_head.encode(),
block_data: block_data.encode(),
}).unwrap();
let ret = parachain::wasm_executor::validate_candidate(
TEST_CODE,
ValidationParams {
parent_head: parent_head.encode(),
block_data: block_data.encode(),
},
&mut DummyExt,
).unwrap();
let new_head = HeadData::decode(&mut &ret.head_data[..]).unwrap();
@@ -128,8 +144,12 @@ fn execute_bad_on_parent() {
add: 256,
};
let _ret = parachain::wasm::validate_candidate(TEST_CODE, ValidationParams {
parent_head: parent_head.encode(),
block_data: block_data.encode(),
}).unwrap_err();
let _ret = parachain::wasm_executor::validate_candidate(
TEST_CODE,
ValidationParams {
parent_head: parent_head.encode(),
block_data: block_data.encode(),
},
&mut DummyExt,
).unwrap_err();
}
Binary file not shown.