mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 18:41:05 +00:00
Fix a bug about rpc call panic (#2320)
* Fix a bug about rpc call panic * Update code from review * Add database block number limit issue
This commit is contained in:
@@ -187,7 +187,6 @@ impl<B, E, Block, RA> ChainApi<NumberFor<Block>, Block::Hash, Block::Header, Sig
|
||||
}
|
||||
|
||||
fn block_hash(&self, number: Option<number::NumberOrHex<NumberFor<Block>>>) -> Result<Option<Block::Hash>> {
|
||||
let number: Option<number::NumberOrHex<NumberFor<Block>>> = number.into();
|
||||
Ok(match number {
|
||||
None => Some(self.client.info()?.chain.best_hash),
|
||||
Some(num_or_hex) => self.client.header(&BlockId::number(num_or_hex.to_number()?))?.map(|h| h.hash()),
|
||||
|
||||
@@ -39,18 +39,24 @@ impl<Number: traits::As<u64>> NumberOrHex<Number> {
|
||||
///
|
||||
/// Fails in case hex number is too big.
|
||||
pub fn to_number(self) -> Result<Number, String> {
|
||||
match self {
|
||||
NumberOrHex::Number(n) => Ok(n),
|
||||
let num: u64 = match self {
|
||||
NumberOrHex::Number(n) => n.as_(),
|
||||
NumberOrHex::Hex(h) => {
|
||||
// FIXME #1377 this only supports `u64` since `BlockNumber`
|
||||
// is `As<u64>` we could possibly go with `u128`.
|
||||
let l = h.low_u64();
|
||||
if U256::from(l) != h {
|
||||
Err(format!("`{}` does not fit into the block number type.", h))
|
||||
return Err(format!("`{}` does not fit into the block number type.", h));
|
||||
} else {
|
||||
Ok(traits::As::sa(l))
|
||||
l
|
||||
}
|
||||
},
|
||||
};
|
||||
// FIXME <2329>: Database seems to limit the block number to u32 for no reason
|
||||
if num > u32::max_value() as u64 {
|
||||
Err(format!("`{}` > u32::max_value(), the max block number is u32.", num))
|
||||
} else {
|
||||
Ok(traits::As::sa(num))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user