Skip to content

Commit 8094ab1

Browse files
authored
feat: add BlockProvider::ommers (#1509)
1 parent 1da439b commit 8094ab1

File tree

4 files changed

+31
-4
lines changed

4 files changed

+31
-4
lines changed

crates/storage/provider/src/providers/mod.rs

+12
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,18 @@ impl<DB: Database> BlockProvider for ShareableDatabase<DB> {
135135

136136
Ok(None)
137137
}
138+
139+
fn ommers(&self, id: BlockId) -> Result<Option<Vec<Header>>> {
140+
if let Some(number) = self.block_number_for_id(id)? {
141+
let tx = self.db.tx()?;
142+
// TODO: this can be optimized to return empty Vec post-merge
143+
let ommers =
144+
tx.get::<tables::BlockOmmers>(number)?.map(|o| o.ommers).unwrap_or_default();
145+
return Ok(Some(ommers))
146+
}
147+
148+
Ok(None)
149+
}
138150
}
139151

140152
impl<DB: Database> TransactionsProvider for ShareableDatabase<DB> {

crates/storage/provider/src/test_utils/mock.rs

+4
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,10 @@ impl BlockProvider for MockEthProvider {
198198
}
199199
}
200200
}
201+
202+
fn ommers(&self, _id: BlockId) -> Result<Option<Vec<Header>>> {
203+
Ok(None)
204+
}
201205
}
202206

203207
impl AccountProvider for MockEthProvider {

crates/storage/provider/src/test_utils/noop.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,18 @@ impl BlockProvider for NoopProvider {
3535
fn block(&self, _id: BlockId) -> Result<Option<Block>> {
3636
Ok(None)
3737
}
38+
39+
fn ommers(&self, _id: BlockId) -> Result<Option<Vec<Header>>> {
40+
Ok(None)
41+
}
3842
}
3943

4044
impl TransactionsProvider for NoopProvider {
41-
fn transaction_by_hash(&self, _hash: TxHash) -> Result<Option<TransactionSigned>> {
45+
fn transaction_by_id(&self, _id: TxNumber) -> Result<Option<TransactionSigned>> {
4246
Ok(None)
4347
}
4448

45-
fn transaction_by_id(&self, _id: TxNumber) -> Result<Option<TransactionSigned>> {
49+
fn transaction_by_hash(&self, _hash: TxHash) -> Result<Option<TransactionSigned>> {
4650
Ok(None)
4751
}
4852

crates/storage/provider/src/traits/block.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
use crate::{BlockIdProvider, HeaderProvider, TransactionsProvider};
22
use reth_interfaces::Result;
3-
use reth_primitives::{Block, BlockId, BlockNumberOrTag, H256};
3+
use reth_primitives::{Block, BlockId, BlockNumberOrTag, Header, H256};
44

55
/// Api trait for fetching `Block` related data.
66
#[auto_impl::auto_impl(&, Arc)]
77
pub trait BlockProvider:
88
BlockIdProvider + HeaderProvider + TransactionsProvider + Send + Sync
99
{
10-
/// Returns the block. Returns `None` if block is not found.
10+
/// Returns the block.
11+
///
12+
/// Returns `None` if block is not found.
1113
fn block(&self, id: BlockId) -> Result<Option<Block>>;
1214

15+
/// Returns the ommers/uncle headers of the given block.
16+
///
17+
/// Returns `None` if block is not found.
18+
fn ommers(&self, id: BlockId) -> Result<Option<Vec<Header>>>;
19+
1320
/// Returns the block. Returns `None` if block is not found.
1421
fn block_by_hash(&self, hash: H256) -> Result<Option<Block>> {
1522
self.block(hash.into())

0 commit comments

Comments
 (0)