Downward & Upward messages (#1266)

* Downward messages, the front-end.

* Move types around to make them accessible from Parachains

* Fix compilation

* Fix branch

* Make it compile for Cumulus

* Update the branch names

* Add default generic parameter

* Implement `Partialeq`

* Move upward messages into the `ValidationResult`

* Support disabling of the runtime api

* Update branch

* Adds support for handling downward messages

* Implement sending XCMP messages as up/downward messages

* service: update to latest ServiceBuilder changes

* Make it compile

* Initial commit

Forked at: ef2aa428d7
Parent branch: origin/master

* Update substrate branch to cecton-update-polkadot-substrate

* Update substrate & polkadot to cumulus-branch

* Reset branch

* Update primitives/src/parachain.rs

Co-authored-by: Robert Habermeier <rphmeier@gmail.com>

* Update runtime/common/src/parachains.rs

Co-authored-by: Robert Habermeier <rphmeier@gmail.com>

* Update runtime/common/src/parachains.rs

Co-authored-by: Robert Habermeier <rphmeier@gmail.com>

* Minor fixes

* Fix wasm build

Co-authored-by: Gav Wood <gavin@parity.io>
Co-authored-by: André Silva <andre.beat@gmail.com>
Co-authored-by: Cecile Tonglet <cecile.tonglet@cecton.com>
Co-authored-by: Robert Habermeier <rphmeier@gmail.com>
This commit is contained in:
Bastian Köcher
2020-07-01 16:20:38 +02:00
committed by GitHub
parent 3b357fadd5
commit 934f27d92b
37 changed files with 460 additions and 377 deletions
@@ -9,6 +9,7 @@ build = "build.rs"
[dependencies]
parachain = { package = "polkadot-parachain", path = "../../", default-features = false, features = [ "wasm-api" ] }
codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] }
sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false }
tiny-keccak = "1.5.0"
dlmalloc = { version = "0.1.3", features = [ "global" ] }
@@ -20,4 +21,7 @@ wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "1.
[features]
default = [ "std" ]
std = ["parachain/std"]
std = [
"parachain/std",
"sp-std/std",
]
@@ -23,7 +23,7 @@ use adder::{HeadData as AdderHead, BlockData as AdderBody};
use sp_core::Pair;
use codec::{Encode, Decode};
use primitives::{
Hash,
Hash, DownwardMessage,
parachain::{HeadData, BlockData, Id as ParaId, LocalValidationData, GlobalValidationSchedule},
};
use collator::{ParachainContext, Network, BuildParachainContext, Cli, SubstrateCli};
@@ -60,6 +60,7 @@ impl ParachainContext for AdderContext {
_relay_parent: Hash,
_global_validation: GlobalValidationSchedule,
local_validation: LocalValidationData,
_: Vec<DownwardMessage>,
) -> Self::ProduceCandidate
{
let adder_head = match AdderHead::decode(&mut &local_validation.parent_head.0[..]).ok() {
@@ -21,22 +21,6 @@ use core::{intrinsics, panic};
use parachain::primitives::{ValidationResult, HeadData as GenericHeadData};
use codec::{Encode, Decode};
#[panic_handler]
#[no_mangle]
pub fn panic(_info: &panic::PanicInfo) -> ! {
unsafe {
intrinsics::abort()
}
}
#[alloc_error_handler]
#[no_mangle]
pub fn oom(_: core::alloc::Layout) -> ! {
unsafe {
intrinsics::abort();
}
}
#[no_mangle]
pub extern fn validate_block(params: *const u8, len: usize) -> u64 {
let params = unsafe { parachain::load_params(params, len) };
@@ -53,6 +37,8 @@ pub extern fn validate_block(params: *const u8, len: usize) -> u64 {
&ValidationResult {
head_data: GenericHeadData(new_head.encode()),
new_validation_code: None,
upward_messages: sp_std::vec::Vec::new(),
processed_downward_messages: 0,
}
),
Err(_) => panic!("execution failure"),
@@ -9,6 +9,7 @@ build = "build.rs"
[dependencies]
parachain = { package = "polkadot-parachain", path = "../../", default-features = false, features = [ "wasm-api" ] }
codec = { package = "parity-scale-codec", version = "1.1.0", default-features = false, features = ["derive"] }
sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false }
tiny-keccak = "1.5.0"
dlmalloc = { version = "0.1.3", features = [ "global" ] }
@@ -20,4 +21,7 @@ wasm-builder-runner = { package = "substrate-wasm-builder-runner", version = "1.
[features]
default = [ "std" ]
std = ["parachain/std"]
std = [
"parachain/std",
"sp-std/std",
]
@@ -21,22 +21,6 @@ use core::{intrinsics, panic};
use parachain::primitives::{ValidationResult, HeadData as GenericHeadData};
use codec::{Encode, Decode};
#[panic_handler]
#[no_mangle]
pub fn panic(_info: &panic::PanicInfo) -> ! {
unsafe {
intrinsics::abort()
}
}
#[alloc_error_handler]
#[no_mangle]
pub fn oom(_: core::alloc::Layout) -> ! {
unsafe {
intrinsics::abort();
}
}
#[no_mangle]
pub extern fn validate_block(params: *const u8, len: usize) -> u64 {
let params = unsafe { parachain::load_params(params, len) };
@@ -64,6 +48,8 @@ pub extern fn validate_block(params: *const u8, len: usize) -> u64 {
&ValidationResult {
head_data: GenericHeadData(output.head_data.encode()),
new_validation_code: output.new_validation_code,
upward_messages: sp_std::vec::Vec::new(),
processed_downward_messages: 0,
}
),
Err(_) => panic!("execution failure"),
@@ -16,15 +16,11 @@
//! Basic parachain that adds a number as part of its state.
use crate::{
DummyExt,
parachain,
parachain::primitives::{
RelayChainBlockNumber,
BlockData as GenericBlockData,
HeadData as GenericHeadData,
ValidationParams,
},
use parachain::primitives::{
RelayChainBlockNumber,
BlockData as GenericBlockData,
HeadData as GenericHeadData,
ValidationParams,
};
use codec::{Decode, Encode};
@@ -83,7 +79,6 @@ pub fn execute_good_on_parent() {
relay_chain_height: 1,
code_upgrade_allowed: None,
},
DummyExt,
parachain::wasm_executor::ExecutionMode::RemoteTest(&pool),
).unwrap();
@@ -123,7 +118,6 @@ fn execute_good_chain_on_parent() {
relay_chain_height: number as RelayChainBlockNumber + 1,
code_upgrade_allowed: None,
},
DummyExt,
parachain::wasm_executor::ExecutionMode::RemoteTest(&pool),
).unwrap();
@@ -164,7 +158,6 @@ fn execute_bad_on_parent() {
relay_chain_height: 1,
code_upgrade_allowed: None,
},
DummyExt,
parachain::wasm_executor::ExecutionMode::RemoteTest(&pool),
).unwrap_err();
}
@@ -16,15 +16,10 @@
//! Basic parachain that adds a number as part of its state.
use parachain;
use crate::{
DummyExt,
parachain::primitives::{
BlockData as GenericBlockData,
HeadData as GenericHeadData,
ValidationParams, ValidationCode,
},
use parachain::primitives::{
BlockData as GenericBlockData,
HeadData as GenericHeadData,
ValidationParams, ValidationCode,
};
use codec::{Decode, Encode};
use code_upgrader::{hash_state, HeadData, BlockData, State};
@@ -56,7 +51,6 @@ pub fn execute_good_no_upgrade() {
relay_chain_height: 1,
code_upgrade_allowed: None,
},
DummyExt,
parachain::wasm_executor::ExecutionMode::RemoteTest(&pool),
).unwrap();
@@ -93,7 +87,6 @@ pub fn execute_good_with_upgrade() {
relay_chain_height: 1,
code_upgrade_allowed: Some(20),
},
DummyExt,
parachain::wasm_executor::ExecutionMode::RemoteTest(&pool),
).unwrap();
@@ -137,7 +130,6 @@ pub fn code_upgrade_not_allowed() {
relay_chain_height: 1,
code_upgrade_allowed: None,
},
DummyExt,
parachain::wasm_executor::ExecutionMode::RemoteTest(&pool),
).unwrap();
}
@@ -168,7 +160,6 @@ pub fn applies_code_upgrade_after_delay() {
relay_chain_height: 1,
code_upgrade_allowed: Some(2),
},
DummyExt,
parachain::wasm_executor::ExecutionMode::RemoteTest(&pool),
).unwrap();
@@ -204,7 +195,6 @@ pub fn applies_code_upgrade_after_delay() {
relay_chain_height: 2,
code_upgrade_allowed: None,
},
DummyExt,
parachain::wasm_executor::ExecutionMode::RemoteTest(&pool),
).unwrap();
@@ -18,16 +18,7 @@ mod adder;
mod code_upgrader;
mod wasm_executor;
use parachain::{
self, primitives::UpwardMessage, wasm_executor::{Externalities, run_worker},
};
struct DummyExt;
impl Externalities for DummyExt {
fn post_upward_message(&mut self, _: UpwardMessage) -> Result<(), String> {
Ok(())
}
}
use parachain::wasm_executor::run_worker;
// This is not an actual test, but rather an entry point for out-of process WASM executor.
// When executing tests the executor spawns currently executing binary, which happens to be test binary.
@@ -16,9 +16,8 @@
//! Basic parachain that adds a number as part of its state.
use parachain;
use crate::{adder, DummyExt};
use crate::parachain::{
use crate::adder;
use parachain::{
primitives::{BlockData, ValidationParams},
wasm_executor::EXECUTION_TIMEOUT_SEC,
};
@@ -40,7 +39,6 @@ fn terminates_on_timeout() {
relay_chain_height: 1,
code_upgrade_allowed: None,
},
DummyExt,
parachain::wasm_executor::ExecutionMode::RemoteTest(&pool),
);
match result {
@@ -70,7 +68,6 @@ fn parallel_execution() {
relay_chain_height: 1,
code_upgrade_allowed: None,
},
DummyExt,
parachain::wasm_executor::ExecutionMode::RemoteTest(&pool2),
).ok());
let _ = parachain::wasm_executor::validate_candidate(
@@ -83,7 +80,6 @@ fn parallel_execution() {
relay_chain_height: 1,
code_upgrade_allowed: None,
},
DummyExt,
parachain::wasm_executor::ExecutionMode::RemoteTest(&pool),
);
thread.join().unwrap();