From 9ec65c94d7798e8ac63e0f1e08a39a049ba3846e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 15 Jan 2020 14:17:55 +0100 Subject: [PATCH] Some fixes required for Cumulus (#766) * Add some more bounds * More bounds * More fixes * More fixes --- polkadot/collator/src/lib.rs | 13 +++++++++---- polkadot/parachain/src/wasm_executor/mod.rs | 6 +++++- polkadot/validation/src/collation.rs | 2 +- polkadot/validation/src/lib.rs | 18 +++++++++++------- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/polkadot/collator/src/lib.rs b/polkadot/collator/src/lib.rs index 12e51573f5..afcb4e75b8 100644 --- a/polkadot/collator/src/lib.rs +++ b/polkadot/collator/src/lib.rs @@ -72,6 +72,7 @@ pub use polkadot_network::validation::Incoming; pub use polkadot_validation::SignedStatement; pub use polkadot_primitives::parachain::CollatorId; pub use sc_network::PeerId; +pub use service::RuntimeApiCollection; const COLLATION_TIMEOUT: Duration = Duration::from_secs(30); @@ -144,13 +145,17 @@ pub trait BuildParachainContext { ) -> Result where PolkadotClient: ProvideRuntimeApi, - as ProvideRuntimeApi>::Api: service::RuntimeApiCollection, + as ProvideRuntimeApi>::Api: RuntimeApiCollection, // Rust bug: https://github.com/rust-lang/rust/issues/24159 < as ProvideRuntimeApi>::Api as sp_api::ApiExt>::StateBackend: sp_api::StateBackend, Extrinsic: codec::Codec + Send + Sync + 'static, E: sc_client::CallExecutor + Clone + Send + Sync + 'static, - SP: Spawn + Clone + Send + Sync + 'static; + SP: Spawn + Clone + Send + Sync + 'static, + R: Send + Sync + 'static, + B: sc_client_api::Backend + 'static, + // Rust bug: https://github.com/rust-lang/rust/issues/24159 + B::State: sp_api::StateBackend; } /// Parachain context needed for collation. @@ -282,7 +287,7 @@ fn run_collator_node( S: AbstractService, sc_client::Client: ProvideRuntimeApi, as ProvideRuntimeApi>::Api: - service::RuntimeApiCollection< + RuntimeApiCollection< Extrinsic, Error = sp_blockchain::Error, StateBackend = sc_client_api::StateBackendFor @@ -428,7 +433,7 @@ fn run_collator_node( }); let deadlined = future::select( - work, + work.then(|f| f).boxed(), futures_timer::Delay::new(COLLATION_TIMEOUT) ); diff --git a/polkadot/parachain/src/wasm_executor/mod.rs b/polkadot/parachain/src/wasm_executor/mod.rs index 08b61e5c77..8e4e1c8dcb 100644 --- a/polkadot/parachain/src/wasm_executor/mod.rs +++ b/polkadot/parachain/src/wasm_executor/mod.rs @@ -140,7 +140,11 @@ pub fn validate_candidate( } /// The host functions provided by the wasm executor to the parachain wasm blob. -type HostFunctions = (sp_io::SubstrateHostFunctions, crate::wasm_api::parachain::HostFunctions); +type HostFunctions = ( + sp_io::SubstrateHostFunctions, + sc_executor::deprecated_host_interface::SubstrateExternals, + crate::wasm_api::parachain::HostFunctions, +); /// Validate a candidate under the given validation code. /// diff --git a/polkadot/validation/src/collation.rs b/polkadot/validation/src/collation.rs index 6adc87db71..8b8e45cc1f 100644 --- a/polkadot/validation/src/collation.rs +++ b/polkadot/validation/src/collation.rs @@ -461,7 +461,7 @@ fn do_validation

( &validation_code, params, ext.clone(), - ExecutionMode::Remote, + ExecutionMode::Local, ) { Ok(result) => { if result.head_data == head_data.0 { diff --git a/polkadot/validation/src/lib.rs b/polkadot/validation/src/lib.rs index 87d9e64de8..f6ef7b2377 100644 --- a/polkadot/validation/src/lib.rs +++ b/polkadot/validation/src/lib.rs @@ -275,7 +275,7 @@ struct ParachainValidation { } impl ParachainValidation where - C: Collators + Send + Unpin + 'static, + C: Collators + Send + Unpin + 'static + Sync, N: Network, P: ProvideRuntimeApi + HeaderBackend + BlockBody + Send + Sync + 'static, P::Api: ParachainHost + BlockBuilderApi + ApiExt, @@ -436,18 +436,17 @@ impl ParachainValidation where ready(()) }); - - Some(res) + Ok(Some(res)) } Err(e) => { warn!(target: "validation", "Failed to produce a receipt: {:?}", e); - None + Ok(None) } } } Err(e) => { warn!(target: "validation", "Failed to collate candidate: {:?}", e); - None + Ok(None) } }) }; @@ -456,7 +455,12 @@ impl ParachainValidation where .map_ok(with_router) .map_err(|e| { warn!(target: "validation" , "Failed to build table router: {:?}", e); - }); + }) + .and_then(|f| f) + .and_then(|f| match f { + Some(f) => f.map(Ok).boxed(), + None => ready(Ok(())).boxed(), + }).boxed(); let cancellable_work = select(exit, router).map(drop); @@ -549,7 +553,7 @@ impl ProposerFactory where } impl consensus::Environment for ProposerFactory where - C: Collators + Send + Unpin + 'static, + C: Collators + Send + Unpin + 'static + Sync, N: Network, TxPool: TransactionPool + 'static, P: ProvideRuntimeApi + HeaderBackend + BlockBody + Send + Sync + 'static,