mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-16 20:11:03 +00:00
Insipx/add block method (#18)
* Fix compile errors * Fix tests, close #13 BTW * add block method * add block_hash method * add tests for block and block_hash
This commit is contained in:
committed by
Andrew Jones
parent
650c6d3bb0
commit
e9070e2786
+30
@@ -55,6 +55,8 @@ use crate::{
|
|||||||
rpc::{
|
rpc::{
|
||||||
MapStream,
|
MapStream,
|
||||||
Rpc,
|
Rpc,
|
||||||
|
ChainBlock,
|
||||||
|
BlockNumber
|
||||||
},
|
},
|
||||||
srml::{
|
srml::{
|
||||||
system::{
|
system::{
|
||||||
@@ -183,6 +185,18 @@ impl<T: System + 'static> Client<T> {
|
|||||||
self.fetch(key).map(|value| value.unwrap_or_default())
|
self.fetch(key).map(|value| value.unwrap_or_default())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get a block hash. By default returns the latest block hash
|
||||||
|
pub fn block_hash(&self, hash: Option<BlockNumber<T>>) -> impl Future<Item = Option<T::Hash>, Error = Error> {
|
||||||
|
self.connect().and_then(|rpc| rpc.block_hash(hash.map(|h| h)))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get a block
|
||||||
|
pub fn block<H>(&self, hash: Option<H>) -> impl Future<Item = Option<ChainBlock<T>>, Error = Error>
|
||||||
|
where H: Into<T::Hash> + 'static
|
||||||
|
{
|
||||||
|
self.connect().and_then(|rpc| rpc.block(hash.map(|h| h.into())))
|
||||||
|
}
|
||||||
|
|
||||||
/// Subscribe to events.
|
/// Subscribe to events.
|
||||||
pub fn subscribe_events(
|
pub fn subscribe_events(
|
||||||
&self,
|
&self,
|
||||||
@@ -504,6 +518,22 @@ mod tests {
|
|||||||
.expect("Extrinsic should be included in a block");
|
.expect("Extrinsic should be included in a block");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore] // requires locally running substrate node
|
||||||
|
fn test_getting_hash() {
|
||||||
|
let (mut rt, client) = test_setup();
|
||||||
|
rt.block_on(client.block_hash(None)).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore] // requires locally running substrate node
|
||||||
|
fn test_getting_block() {
|
||||||
|
let (mut rt, client) = test_setup();
|
||||||
|
rt.block_on(client.block_hash(None).and_then(move |h| {
|
||||||
|
client.block(h)
|
||||||
|
})).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
#[ignore] // requires locally running substrate node
|
#[ignore] // requires locally running substrate node
|
||||||
fn test_state_read_free_balance() {
|
fn test_state_read_free_balance() {
|
||||||
|
|||||||
+12
-1
@@ -51,7 +51,8 @@ use substrate_rpc_api::{
|
|||||||
state::StateClient,
|
state::StateClient,
|
||||||
};
|
};
|
||||||
|
|
||||||
type ChainBlock<T> = SignedBlock<Block<<T as System>::Header, OpaqueExtrinsic>>;
|
pub type ChainBlock<T> = SignedBlock<Block<<T as System>::Header, OpaqueExtrinsic>>;
|
||||||
|
pub type BlockNumber<T> = NumberOrHex<<T as System>::BlockNumber>;
|
||||||
|
|
||||||
/// Client for substrate rpc interfaces
|
/// Client for substrate rpc interfaces
|
||||||
pub struct Rpc<T: System> {
|
pub struct Rpc<T: System> {
|
||||||
@@ -107,6 +108,16 @@ impl<T: System> Rpc<T> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get a block hash, returns hash of latest block by default
|
||||||
|
pub fn block_hash(&self, hash: Option<BlockNumber<T>>) -> impl Future<Item = Option<T::Hash>, Error = Error> {
|
||||||
|
self.chain.block_hash(hash).map_err(Into::into)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get a Block
|
||||||
|
pub fn block(&self, hash: Option<T::Hash>) -> impl Future<Item = Option<ChainBlock<T>>, Error = Error> {
|
||||||
|
self.chain.block(hash).map_err(Into::into)
|
||||||
|
}
|
||||||
|
|
||||||
/// Fetch the runtime version
|
/// Fetch the runtime version
|
||||||
pub fn runtime_version(&self, at: Option<T::Hash>) -> impl Future<Item = RuntimeVersion, Error = Error> {
|
pub fn runtime_version(&self, at: Option<T::Hash>) -> impl Future<Item = RuntimeVersion, Error = Error> {
|
||||||
self.state.runtime_version(at).map_err(Into::into)
|
self.state.runtime_version(at).map_err(Into::into)
|
||||||
|
|||||||
Reference in New Issue
Block a user