Allow batch query for block hash. (#4210)

This commit is contained in:
Tomasz Drwięga
2019-11-26 18:07:31 +01:00
committed by Gavin Wood
parent 70bc6eaed6
commit cfb590ac4b
8 changed files with 159 additions and 20 deletions
+15 -4
View File
@@ -37,7 +37,7 @@ use client::{
};
use jsonrpc_pubsub::{typed::Subscriber, SubscriptionId};
use primitives::{H256, Blake2Hasher};
use rpc_primitives::number;
use rpc_primitives::{number::NumberOrHex, list::ListOrValue};
use sr_primitives::{
generic::{BlockId, SignedBlock},
traits::{Block as BlockT, Header, NumberFor},
@@ -79,7 +79,7 @@ trait ChainBackend<B, E, Block: BlockT, RA>: Send + Sync + 'static
/// By default returns latest block hash.
fn block_hash(
&self,
number: Option<number::NumberOrHex<NumberFor<Block>>>,
number: Option<NumberOrHex<NumberFor<Block>>>,
) -> Result<Option<Block::Hash>> {
Ok(match number {
None => Some(self.client().info().chain.best_hash),
@@ -211,8 +211,19 @@ impl<B, E, Block, RA> ChainApi<NumberFor<Block>, Block::Hash, Block::Header, Sig
self.backend.block(hash)
}
fn block_hash(&self, number: Option<number::NumberOrHex<NumberFor<Block>>>) -> Result<Option<Block::Hash>> {
self.backend.block_hash(number)
fn block_hash(
&self,
number: Option<ListOrValue<NumberOrHex<NumberFor<Block>>>>
) -> Result<ListOrValue<Option<Block::Hash>>> {
match number {
None => self.backend.block_hash(None).map(ListOrValue::Value),
Some(ListOrValue::Value(number)) => self.backend.block_hash(Some(number)).map(ListOrValue::Value),
Some(ListOrValue::List(list)) => Ok(ListOrValue::List(list
.into_iter()
.map(|number| self.backend.block_hash(Some(number)))
.collect::<Result<_>>()?
))
}
}
fn finalized_head(&self) -> Result<Block::Hash> {