From d4364c8ab1b007ac31e2d181ce70515f0fb1422f Mon Sep 17 00:00:00 2001 From: linning Date: Tue, 14 May 2024 00:36:30 +0800 Subject: [PATCH] Fix how domain stateless runtime getting runtime version The previous way to get runtime version is wrong and will failed in test Signed-off-by: linning --- Cargo.lock | 1 - domains/client/block-preprocessor/Cargo.toml | 1 - .../src/stateless_runtime.rs | 25 ++++++++++++++----- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index be912c999d..e21525cd61 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2674,7 +2674,6 @@ dependencies = [ "sp-executive", "sp-externalities", "sp-inherents", - "sp-io", "sp-keyring", "sp-messenger", "sp-runtime", diff --git a/domains/client/block-preprocessor/Cargo.toml b/domains/client/block-preprocessor/Cargo.toml index 6870c6ed9e..0cfe91a2b2 100644 --- a/domains/client/block-preprocessor/Cargo.toml +++ b/domains/client/block-preprocessor/Cargo.toml @@ -26,7 +26,6 @@ sp-domains = { version = "0.1.0", path = "../../../crates/sp-domains" } sp-executive = { version = "0.1.0", path = "../../primitives/executive" } sp-externalities = { default-features = false, git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d" } sp-inherents = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d" } -sp-io = { default-features = false, git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d" } sp-messenger = { version = "0.1.0", path = "../../primitives/messenger" } sp-runtime = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d" } sp-state-machine = { git = "https://github.com/subspace/polkadot-sdk", rev = "808269708cf5375526755797e8f9a9986016727d" } diff --git a/domains/client/block-preprocessor/src/stateless_runtime.rs b/domains/client/block-preprocessor/src/stateless_runtime.rs index e7b0148856..7e0efb8d98 100644 --- a/domains/client/block-preprocessor/src/stateless_runtime.rs +++ b/domains/client/block-preprocessor/src/stateless_runtime.rs @@ -5,7 +5,7 @@ use sc_client_api::execution_extensions::ExtensionsFactory; use sc_executor::RuntimeVersionOf; use sp_api::{ApiError, Core, RuntimeApiInfo}; use sp_core::traits::{CallContext, CodeExecutor, FetchRuntimeCode, RuntimeCode}; -use sp_core::{Decode, Hasher}; +use sp_core::Hasher; use sp_domains::core_api::DomainCoreApi; use sp_domains::DomainAllowlistUpdates; use sp_messenger::messages::MessageKey; @@ -284,11 +284,24 @@ where } pub fn block_fees_storage_key(&self) -> Result, ApiError> { - let has_runtime_api = sp_io::misc::runtime_version(&self.runtime_code) - .and_then(|v| RuntimeVersion::decode(&mut &v[..]).ok()) - .and_then(|runtime_version| { - runtime_version.api_version(&>::ID) - }) + let runtime_version = { + let mut ext = BasicExternalities::new(self.storage.clone()); + let ext_extensions = ext.extensions(); + ext_extensions.merge( + self.extension_factory + .extensions_for(Default::default(), Default::default()), + ); + let runtime_code = self.runtime_code(); + self.executor + .runtime_version(&mut ext, &runtime_code) + .map_err(|err| { + ApiError::Application(Box::from(format!( + "failed to read domain runtime version: {err}" + ))) + })? + }; + let has_runtime_api = runtime_version + .api_version(&>::ID) .map_or(false, |runtime_api_version| runtime_api_version >= 2); if has_runtime_api {