From f0224fcafb21bdfabea3859cd054d18ccbd3f0ea Mon Sep 17 00:00:00 2001 From: Alexandru Vasile Date: Mon, 9 Jan 2023 18:45:11 +0000 Subject: [PATCH] blocks: Fetch block's events Signed-off-by: Alexandru Vasile --- subxt/src/blocks/block_types.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/subxt/src/blocks/block_types.rs b/subxt/src/blocks/block_types.rs index 99b6e6eb90..69d2df0684 100644 --- a/subxt/src/blocks/block_types.rs +++ b/subxt/src/blocks/block_types.rs @@ -11,7 +11,7 @@ use crate::{ BlockError, Error, }, - events, + events::{self, Events}, metadata::DecodeWithMetadata, rpc::{ types::{ @@ -30,6 +30,7 @@ use crate::{ use codec::Decode; use derivative::Derivative; use futures::lock::Mutex as AsyncMutex; +use sp_core::twox_128; use sp_runtime::traits::{ Hash, Header, @@ -209,6 +210,23 @@ where Ok(()) } + /// Fetch the block's events. + pub async fn events(&self) -> Result, ChainHeadError> { + let mut storage_key = twox_128(b"System").to_vec(); + storage_key.extend(twox_128(b"Events").to_vec()); + let Some(event_bytes) = self.storage_raw(&storage_key).await? else { + return Err(ChainHeadError::Other( + "Failed to fetch System::Events storage".into() + )) + }; + + Ok(Events::new( + self.client.metadata(), + self.hash.clone(), + event_bytes, + )) + } + /// Wrapper to fetch the block's body from the `chainHead_body` subscription. async fn fetch_body( &self,