diff --git a/examples/examples/rpc_call_subscribe_blocks.rs b/examples/examples/rpc_call_subscribe_blocks.rs index a39af4fea2c..f22b1dcb079 100644 --- a/examples/examples/rpc_call_subscribe_blocks.rs +++ b/examples/examples/rpc_call_subscribe_blocks.rs @@ -27,7 +27,7 @@ async fn main() -> Result<(), Box> { let api = OnlineClient::::from_url("wss://rpc.polkadot.io:443").await?; - // For non-finalised blocks use `.subscribe_blocks()` + // For non-finalised blocks use `.subscribe_new_blocks()` let mut blocks: Subscription> = api.rpc().subscribe_finalized_blocks().await?; diff --git a/subxt/src/events/events_client.rs b/subxt/src/events/events_client.rs index 27afcc5fd5d..25802862bf7 100644 --- a/subxt/src/events/events_client.rs +++ b/subxt/src/events/events_client.rs @@ -157,7 +157,7 @@ where T: Config, Client: OnlineClientT, { - let block_subscription = client.rpc().subscribe_blocks().await?; + let block_subscription = client.rpc().subscribe_new_blocks().await?; Ok(EventSubscription::new(client, block_subscription)) } diff --git a/subxt/src/rpc.rs b/subxt/src/rpc.rs index 49a49794131..0426a90ccdf 100644 --- a/subxt/src/rpc.rs +++ b/subxt/src/rpc.rs @@ -560,8 +560,22 @@ impl Rpc { Ok(version) } - /// Subscribe to blocks. - pub async fn subscribe_blocks(&self) -> Result, Error> { + /// Subscribe to all blocks. + pub async fn subscribe_all_blocks(&self) -> Result, Error> { + let subscription = self + .client + .subscribe( + "chain_subscribeAllHeads", + rpc_params![], + "chain_unsubscribeAllHeads", + ) + .await?; + + Ok(subscription) + } + + /// Subscribe to new blocks. + pub async fn subscribe_new_blocks(&self) -> Result, Error> { let subscription = self .client .subscribe( diff --git a/testing/integration-tests/src/client/mod.rs b/testing/integration-tests/src/client/mod.rs index 25a9bf86155..6656228d876 100644 --- a/testing/integration-tests/src/client/mod.rs +++ b/testing/integration-tests/src/client/mod.rs @@ -74,11 +74,20 @@ async fn fetch_read_proof() { } #[tokio::test] -async fn chain_subscribe_blocks() { +async fn subscribe_all_blocks() { let ctx = test_context().await; let api = ctx.client(); - let mut blocks = api.rpc().subscribe_blocks().await.unwrap(); + let mut blocks = api.rpc().subscribe_all_blocks().await.unwrap(); + blocks.next().await.unwrap().unwrap(); +} + +#[tokio::test] +async fn subscribe_new_blocks() { + let ctx = test_context().await; + let api = ctx.client(); + + let mut blocks = api.rpc().subscribe_new_blocks().await.unwrap(); blocks.next().await.unwrap().unwrap(); } diff --git a/testing/integration-tests/src/utils/wait_for_blocks.rs b/testing/integration-tests/src/utils/wait_for_blocks.rs index 0d190ec8ec3..7ff4d64e1a5 100644 --- a/testing/integration-tests/src/utils/wait_for_blocks.rs +++ b/testing/integration-tests/src/utils/wait_for_blocks.rs @@ -11,7 +11,7 @@ use subxt::{ /// (the genesis block and another one) seems to be enough to allow tests /// like `dry_run_passes` to work properly. pub async fn wait_for_blocks(api: &impl OnlineClientT) { - let mut sub = api.rpc().subscribe_blocks().await.unwrap(); + let mut sub = api.rpc().subscribe_new_blocks().await.unwrap(); sub.next().await; sub.next().await; }