Skip to content

Commit c155768

Browse files
authored
feat(lazy-loading): Support querying old blocks by number (#3035)
* feat(lazy-loading): support querying old ethereum blocks by number when using lazy-loading * format code
1 parent 40129ec commit c155768

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

node/service/src/lazy_loading/backend.rs

+19-4
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,22 @@ impl<Block: BlockT + DeserializeOwned> Blockchain<Block> {
142142
pub fn id(&self, id: BlockId<Block>) -> Option<Block::Hash> {
143143
match id {
144144
BlockId::Hash(h) => Some(h),
145-
BlockId::Number(n) => self.storage.read().hashes.get(&n).cloned(),
145+
BlockId::Number(n) => {
146+
let block_hash = self.storage.read().hashes.get(&n).cloned();
147+
match block_hash {
148+
None => {
149+
let block_hash =
150+
self.rpc_client.block_hash::<Block>(Some(n)).ok().flatten();
151+
152+
block_hash.clone().map(|h| {
153+
self.storage.write().hashes.insert(n, h);
154+
});
155+
156+
block_hash
157+
}
158+
block_hash => block_hash,
159+
}
160+
}
146161
}
147162
}
148163

@@ -1506,17 +1521,17 @@ impl RPC {
15061521

15071522
pub fn block_hash<Block: BlockT + DeserializeOwned>(
15081523
&self,
1509-
block_number: Option<BlockNumber>,
1524+
block_number: Option<<Block::Header as HeaderT>::Number>,
15101525
) -> Result<Option<Block::Hash>, jsonrpsee::core::ClientError> {
15111526
let request = &|| {
15121527
substrate_rpc_client::ChainApi::<
1513-
BlockNumber,
1528+
<Block::Header as HeaderT>::Number,
15141529
Block::Hash,
15151530
Block::Header,
15161531
SignedBlock<Block>,
15171532
>::block_hash(
15181533
&self.http_client,
1519-
block_number.map(|n| ListOrValue::Value(NumberOrHex::Number(n.into()))),
1534+
block_number.map(|n| ListOrValue::Value(NumberOrHex::Hex(n.into()))),
15201535
)
15211536
};
15221537

node/service/src/lazy_loading/helpers.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub fn produce_genesis_block<TBl: BlockT + sp_runtime::DeserializeOwned>(
3333

3434
let genesis_block_hash: TBl::Hash = backend
3535
.rpc_client
36-
.block_hash::<TBl>(Some(0))
36+
.block_hash::<TBl>(Some(Default::default()))
3737
.unwrap()
3838
.expect("Not able to obtain genesis block hash");
3939

0 commit comments

Comments
 (0)