From 11061faa71f07f0f46b16c6e50c84943377129ba Mon Sep 17 00:00:00 2001 From: Liu-Cheng Xu Date: Thu, 11 Nov 2021 22:17:45 +0800 Subject: [PATCH] Optimize the extraction of root block from Extrinsic (#126) --- Cargo.lock | 1 + crates/sc-consensus-subspace/src/archiver.rs | 2 +- crates/sc-consensus-subspace/src/lib.rs | 2 +- crates/sp-consensus-subspace/src/lib.rs | 4 ++-- crates/subspace-runtime/src/lib.rs | 19 +++++++------------ substrate/substrate-test-runtime/src/lib.rs | 4 ++-- 6 files changed, 14 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e49b855de979d..ed197ecf83554 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6587,6 +6587,7 @@ source = "git+https://github.com/paritytech/substrate?rev=26d69bcbe26f6b463e9374 dependencies = [ "parity-scale-codec", "scale-info", + "serde", "sp-arithmetic", "sp-runtime", ] diff --git a/crates/sc-consensus-subspace/src/archiver.rs b/crates/sc-consensus-subspace/src/archiver.rs index 68d04b79784c1..e70d720e58f26 100644 --- a/crates/sc-consensus-subspace/src/archiver.rs +++ b/crates/sc-consensus-subspace/src/archiver.rs @@ -32,7 +32,7 @@ where for extrinsic in block.block.extrinsics() { match client .runtime_api() - .extract_root_block(&block_to_check, extrinsic.encode()) + .extract_root_block(&block_to_check, extrinsic) { Ok(Some(root_block)) => match &mut latest_root_block { Some(latest_root_block) => { diff --git a/crates/sc-consensus-subspace/src/lib.rs b/crates/sc-consensus-subspace/src/lib.rs index c0104acb05a8b..78e221c0fa981 100644 --- a/crates/sc-consensus-subspace/src/lib.rs +++ b/crates/sc-consensus-subspace/src/lib.rs @@ -1495,7 +1495,7 @@ where match self .client .runtime_api() - .extract_root_block(&BlockId::Hash(parent_hash), extrinsic.encode()) + .extract_root_block(&BlockId::Hash(parent_hash), extrinsic) { Ok(Some(root_block)) => { if !root_blocks_set.remove(&root_block) { diff --git a/crates/sp-consensus-subspace/src/lib.rs b/crates/sp-consensus-subspace/src/lib.rs index 95b7ba466739c..272a7ffe155f2 100644 --- a/crates/sp-consensus-subspace/src/lib.rs +++ b/crates/sp-consensus-subspace/src/lib.rs @@ -306,8 +306,8 @@ sp_api::decl_runtime_apis! { /// Get the merkle tree root of records for specified segment index fn records_root(segment_index: u64) -> Option; - /// Try to decode an extrinsic as `store_root_block` extrinsic and get root block out of it - fn extract_root_block(encoded_extrinsic: Vec) -> Option; + /// Returns `RootBlock` if the given extrinsic has one. + fn extract_root_block(ext: &Block::Extrinsic) -> Option; /// Extract block object mapping for a given block fn extract_block_object_mapping(block: Block) -> BlockObjectMapping; diff --git a/crates/subspace-runtime/src/lib.rs b/crates/subspace-runtime/src/lib.rs index dc439dcc16b5d..2a8c7008ea961 100644 --- a/crates/subspace-runtime/src/lib.rs +++ b/crates/subspace-runtime/src/lib.rs @@ -23,7 +23,7 @@ #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); -use codec::{Compact, CompactLen, Decode, Encode}; +use codec::{Compact, CompactLen, Encode}; use frame_support::{ construct_runtime, parameter_types, weights::{ @@ -453,16 +453,11 @@ pub type Executive = frame_executive::Executive< AllPallets, >; -fn extract_root_block(encoded_extrinsic: Vec) -> Option { - if let Ok(extrinsic) = UncheckedExtrinsic::decode(&mut encoded_extrinsic.as_slice()) { - if let Call::Subspace(pallet_subspace::Call::store_root_block { root_block }) = - extrinsic.function - { - return Some(root_block); - } +fn extract_root_block(ext: &UncheckedExtrinsic) -> Option { + match ext.function { + Call::Subspace(pallet_subspace::Call::store_root_block { root_block }) => Some(root_block), + _ => None, } - - None } fn extract_feeds_block_object_mapping( @@ -697,8 +692,8 @@ impl_runtime_apis! { Subspace::records_root(segment_index) } - fn extract_root_block(encoded_extrinsic: Vec) -> Option { - extract_root_block(encoded_extrinsic) + fn extract_root_block(ext: &::Extrinsic) -> Option { + extract_root_block(ext) } fn extract_block_object_mapping(block: Block) -> BlockObjectMapping { diff --git a/substrate/substrate-test-runtime/src/lib.rs b/substrate/substrate-test-runtime/src/lib.rs index f00efa0c63f24..9ced9c92a11f7 100644 --- a/substrate/substrate-test-runtime/src/lib.rs +++ b/substrate/substrate-test-runtime/src/lib.rs @@ -1010,7 +1010,7 @@ cfg_if! { } fn extract_root_block( - _encoded_extrinsic: Vec, + _ext: &::Extrinsic ) -> Option { panic!("Not needed in tests") } @@ -1352,7 +1352,7 @@ cfg_if! { } fn extract_root_block( - _encoded_extrinsic: Vec, + _ext: &::Extrinsic ) -> Option { panic!("Not needed in tests") }