From 3b471704d9ec1e8ca43bbfcea528b4b764e5d05d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 3 Aug 2021 13:12:21 +0200 Subject: [PATCH] Use correct `ExecutionContext` for `check_inherents` (#9483) Before we used the `other` context, while we are actually either in the import or sync context. --- substrate/client/consensus/aura/src/import_queue.rs | 6 ++++-- substrate/client/consensus/babe/src/lib.rs | 6 ++++-- substrate/client/consensus/pow/src/lib.rs | 5 ++++- substrate/client/service/src/client/client.rs | 8 ++------ substrate/primitives/consensus/common/Cargo.toml | 2 +- substrate/primitives/consensus/common/src/lib.rs | 10 ++++++++++ 6 files changed, 25 insertions(+), 12 deletions(-) diff --git a/substrate/client/consensus/aura/src/import_queue.rs b/substrate/client/consensus/aura/src/import_queue.rs index a8b0462709..a4dbe5012e 100644 --- a/substrate/client/consensus/aura/src/import_queue.rs +++ b/substrate/client/consensus/aura/src/import_queue.rs @@ -41,7 +41,7 @@ use sp_consensus_aura::{ AURA_ENGINE_ID, }; use sp_consensus_slots::Slot; -use sp_core::crypto::Pair; +use sp_core::{crypto::Pair, ExecutionContext}; use sp_inherents::{CreateInherentDataProviders, InherentDataProvider as _}; use sp_runtime::{ generic::{BlockId, OpaqueDigestItemId}, @@ -149,6 +149,7 @@ where block_id: BlockId, inherent_data: sp_inherents::InherentData, create_inherent_data_providers: CIDP::InherentDataProviders, + execution_context: ExecutionContext, ) -> Result<(), Error> where C: ProvideRuntimeApi, @@ -169,7 +170,7 @@ where let inherent_res = self .client .runtime_api() - .check_inherents(&block_id, block, inherent_data) + .check_inherents_with_context(&block_id, execution_context, block, inherent_data) .map_err(|e| Error::Client(e.into()))?; if !inherent_res.ok() { @@ -261,6 +262,7 @@ where BlockId::Hash(parent_hash), inherent_data, create_inherent_data_providers, + block.origin.into(), ) .await .map_err(|e| e.to_string())?; diff --git a/substrate/client/consensus/babe/src/lib.rs b/substrate/client/consensus/babe/src/lib.rs index 172bad669d..2828c345c4 100644 --- a/substrate/client/consensus/babe/src/lib.rs +++ b/substrate/client/consensus/babe/src/lib.rs @@ -112,7 +112,7 @@ use sp_consensus::{ }; use sp_consensus_babe::inherents::BabeInherentData; use sp_consensus_slots::Slot; -use sp_core::crypto::Public; +use sp_core::{crypto::Public, ExecutionContext}; use sp_inherents::{CreateInherentDataProviders, InherentData, InherentDataProvider}; use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr}; use sp_runtime::{ @@ -1006,6 +1006,7 @@ where block_id: BlockId, inherent_data: InherentData, create_inherent_data_providers: CIDP::InherentDataProviders, + execution_context: ExecutionContext, ) -> Result<(), Error> { if let Err(e) = self.can_author_with.can_author_with(&block_id) { debug!( @@ -1020,7 +1021,7 @@ where let inherent_res = self .client .runtime_api() - .check_inherents(&block_id, block, inherent_data) + .check_inherents_with_context(&block_id, execution_context, block, inherent_data) .map_err(Error::RuntimeApi)?; if !inherent_res.ok() { @@ -1244,6 +1245,7 @@ where BlockId::Hash(parent_hash), inherent_data, create_inherent_data_providers, + block.origin.into(), ) .await?; diff --git a/substrate/client/consensus/pow/src/lib.rs b/substrate/client/consensus/pow/src/lib.rs index 17bd02f6a5..c2305180ca 100644 --- a/substrate/client/consensus/pow/src/lib.rs +++ b/substrate/client/consensus/pow/src/lib.rs @@ -61,6 +61,7 @@ use sp_consensus::{ CanAuthorWith, Environment, Error as ConsensusError, Proposer, SelectChain, SyncOracle, }; use sp_consensus_pow::{Seal, TotalDifficulty, POW_ENGINE_ID}; +use sp_core::ExecutionContext; use sp_inherents::{CreateInherentDataProviders, InherentDataProvider}; use sp_runtime::{ generic::{BlockId, Digest, DigestItem}, @@ -272,6 +273,7 @@ where block: B, block_id: BlockId, inherent_data_providers: CIDP::InherentDataProviders, + execution_context: ExecutionContext, ) -> Result<(), Error> { if *block.header().number() < self.check_inherents_after { return Ok(()) @@ -294,7 +296,7 @@ where let inherent_res = self .client .runtime_api() - .check_inherents(&block_id, block, inherent_data) + .check_inherents_with_context(&block_id, execution_context, block, inherent_data) .map_err(|e| Error::Client(e.into()))?; if !inherent_res.ok() { @@ -360,6 +362,7 @@ where self.create_inherent_data_providers .create_inherent_data_providers(parent_hash, ()) .await?, + block.origin.into(), ) .await?; diff --git a/substrate/client/service/src/client/client.rs b/substrate/client/service/src/client/client.rs index 01688f0c8e..17fbe6988d 100644 --- a/substrate/client/service/src/client/client.rs +++ b/substrate/client/service/src/client/client.rs @@ -64,7 +64,7 @@ use sp_consensus::{BlockOrigin, BlockStatus, Error as ConsensusError}; use sp_core::{ convert_hash, storage::{well_known_keys, ChildInfo, PrefixedStorageKey, StorageData, StorageKey}, - ChangesTrieConfiguration, ExecutionContext, NativeOrEncoded, + ChangesTrieConfiguration, NativeOrEncoded, }; #[cfg(feature = "test-helpers")] use sp_keystore::SyncCryptoStorePtr; @@ -958,11 +958,7 @@ where // block. (true, None, Some(ref body)) => { let runtime_api = self.runtime_api(); - let execution_context = if import_block.origin == BlockOrigin::NetworkInitialSync { - ExecutionContext::Syncing - } else { - ExecutionContext::Importing - }; + let execution_context = import_block.origin.into(); runtime_api.execute_block_with_context( &at, diff --git a/substrate/primitives/consensus/common/Cargo.toml b/substrate/primitives/consensus/common/Cargo.toml index ab4f5a24f5..d2bdc9cd7e 100644 --- a/substrate/primitives/consensus/common/Cargo.toml +++ b/substrate/primitives/consensus/common/Cargo.toml @@ -18,7 +18,7 @@ async-trait = "0.1.42" codec = { package = "parity-scale-codec", version = "2.0.0", features = ["derive"] } futures = { version = "0.3.1", features = ["thread-pool"] } log = "0.4.8" -sp-core = { path= "../../core", version = "4.0.0-dev"} +sp-core = { path = "../../core", version = "4.0.0-dev"} sp-inherents = { version = "4.0.0-dev", path = "../../inherents" } sp-state-machine = { version = "0.10.0-dev", path = "../../state-machine" } futures-timer = "3.0.1" diff --git a/substrate/primitives/consensus/common/src/lib.rs b/substrate/primitives/consensus/common/src/lib.rs index f6c1e028b9..c72024e112 100644 --- a/substrate/primitives/consensus/common/src/lib.rs +++ b/substrate/primitives/consensus/common/src/lib.rs @@ -75,6 +75,16 @@ pub enum BlockOrigin { File, } +impl From for sp_core::ExecutionContext { + fn from(origin: BlockOrigin) -> Self { + if origin == BlockOrigin::NetworkInitialSync { + sp_core::ExecutionContext::Syncing + } else { + sp_core::ExecutionContext::Importing + } + } +} + /// Environment for a Consensus instance. /// /// Creates proposer instance.