diff --git a/prdoc/pr_10252.prdoc b/prdoc/pr_10252.prdoc new file mode 100644 index 0000000000000..6490d56bcf326 --- /dev/null +++ b/prdoc/pr_10252.prdoc @@ -0,0 +1,7 @@ +title: '[pallet-revive] use run_instant_seal_and_finalize in dev-node' +doc: +- audience: Runtime Dev + description: Fix finalized block in revive-dev-node with instant-seal +crates: +- name: pallet-revive-eth-rpc + bump: patch diff --git a/substrate/frame/revive/dev-node/node/src/service.rs b/substrate/frame/revive/dev-node/node/src/service.rs index 3e06fff574bb4..efd578dbea2ef 100644 --- a/substrate/frame/revive/dev-node/node/src/service.rs +++ b/substrate/frame/revive/dev-node/node/src/service.rs @@ -221,7 +221,7 @@ pub fn new_full::Ha create_inherent_data_providers: timestamp_provider, }; - let authorship_future = sc_consensus_manual_seal::run_instant_seal(params); + let authorship_future = sc_consensus_manual_seal::run_instant_seal_and_finalize(params); task_manager.spawn_essential_handle().spawn_blocking( "instant-seal", diff --git a/substrate/frame/revive/rpc/src/block_info_provider.rs b/substrate/frame/revive/rpc/src/block_info_provider.rs index 808cd8c8a16d6..5c0689b84a5d0 100644 --- a/substrate/frame/revive/rpc/src/block_info_provider.rs +++ b/substrate/frame/revive/rpc/src/block_info_provider.rs @@ -30,7 +30,7 @@ use tokio::sync::RwLock; #[async_trait] pub trait BlockInfoProvider: Send + Sync { /// Update the latest block - async fn update_latest(&self, block: SubstrateBlock, subscription_type: SubscriptionType); + async fn update_latest(&self, block: Arc, subscription_type: SubscriptionType); /// Return the latest finalized block. async fn latest_finalized_block(&self) -> Arc; @@ -86,12 +86,12 @@ impl SubxtBlockInfoProvider { #[async_trait] impl BlockInfoProvider for SubxtBlockInfoProvider { - async fn update_latest(&self, block: SubstrateBlock, subscription_type: SubscriptionType) { + async fn update_latest(&self, block: Arc, subscription_type: SubscriptionType) { let mut latest = match subscription_type { SubscriptionType::FinalizedBlocks => self.latest_finalized_block.write().await, SubscriptionType::BestBlocks => self.latest_block.write().await, }; - *latest = Arc::new(block); + *latest = block; } async fn latest_block(&self) -> Arc { @@ -172,7 +172,7 @@ pub mod test { impl BlockInfoProvider for MockBlockInfoProvider { async fn update_latest( &self, - _block: SubstrateBlock, + _block: Arc, _subscription_type: SubscriptionType, ) { } diff --git a/substrate/frame/revive/rpc/src/cli.rs b/substrate/frame/revive/rpc/src/cli.rs index 7a077f3eba94a..6016215a32f2d 100644 --- a/substrate/frame/revive/rpc/src/cli.rs +++ b/substrate/frame/revive/rpc/src/cli.rs @@ -22,7 +22,7 @@ use crate::{ LOG_TARGET, }; use clap::Parser; -use futures::{pin_mut, FutureExt}; +use futures::{future::BoxFuture, pin_mut, FutureExt}; use jsonrpsee::server::RpcModule; use sc_cli::{PrometheusParams, RpcParams, SharedParams, Signals}; use sc_service::{ @@ -229,17 +229,16 @@ pub fn run(cmd: CliCommand) -> anyhow::Result<()> { task_manager .spawn_essential_handle() .spawn("block-subscription", None, async move { - let fut1 = client.subscribe_and_cache_new_blocks(SubscriptionType::BestBlocks); - let fut2 = client.subscribe_and_cache_new_blocks(SubscriptionType::FinalizedBlocks); + let mut futures: Vec>> = vec![ + Box::pin(client.subscribe_and_cache_new_blocks(SubscriptionType::BestBlocks)), + Box::pin(client.subscribe_and_cache_new_blocks(SubscriptionType::FinalizedBlocks)), + ]; - let res = if let Some(index_last_n_blocks) = index_last_n_blocks { - let fut3 = client.subscribe_and_cache_blocks(index_last_n_blocks); - tokio::try_join!(fut1, fut2, fut3).map(|_| ()) - } else { - tokio::try_join!(fut1, fut2).map(|_| ()) - }; + if let Some(index_last_n_blocks) = index_last_n_blocks { + futures.push(Box::pin(client.subscribe_and_cache_blocks(index_last_n_blocks))); + } - if let Err(err) = res { + if let Err(err) = futures::future::try_join_all(futures).await { panic!("Block subscription task failed: {err:?}",) } }); diff --git a/substrate/frame/revive/rpc/src/client.rs b/substrate/frame/revive/rpc/src/client.rs index 66d6ae09d47b4..2557e9b97d16b 100644 --- a/substrate/frame/revive/rpc/src/client.rs +++ b/substrate/frame/revive/rpc/src/client.rs @@ -365,7 +365,7 @@ impl Client { .into_iter() .unzip(); - self.block_provider.update_latest(block, subscription_type).await; + self.block_provider.update_latest(Arc::new(block), subscription_type).await; self.fee_history_provider.update_fee_history(&evm_block, &receipts).await; // Only broadcast for best blocks to avoid duplicate notifications.