mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 19:09:54 +00:00
feat: add sealed_header to HeaderProvider for single headers (#2801)
This commit is contained in:
@ -474,6 +474,10 @@ mod tests {
|
||||
) -> Result<Vec<SealedHeader>> {
|
||||
Ok(vec![])
|
||||
}
|
||||
|
||||
fn sealed_header(&self, _block_number: BlockNumber) -> Result<Option<SealedHeader>> {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
|
||||
impl WithdrawalsProvider for Provider {
|
||||
|
||||
@ -146,6 +146,19 @@ impl<DB: Database> HeaderProvider for ShareableDatabase<DB> {
|
||||
})?
|
||||
.map_err(Into::into)
|
||||
}
|
||||
|
||||
fn sealed_header(&self, number: BlockNumber) -> Result<Option<SealedHeader>> {
|
||||
self.db
|
||||
.view(|tx| -> Result<_> {
|
||||
if let Some(header) = tx.get::<tables::Headers>(number)? {
|
||||
let hash = read_header_hash(tx, number)?;
|
||||
Ok(Some(header.seal(hash)))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
})?
|
||||
.map_err(Into::into)
|
||||
}
|
||||
}
|
||||
|
||||
impl<DB: Database> BlockHashProvider for ShareableDatabase<DB> {
|
||||
|
||||
@ -106,6 +106,10 @@ where
|
||||
) -> Result<Vec<SealedHeader>> {
|
||||
self.database.sealed_headers_range(range)
|
||||
}
|
||||
|
||||
fn sealed_header(&self, number: BlockNumber) -> Result<Option<SealedHeader>> {
|
||||
self.database.sealed_header(number)
|
||||
}
|
||||
}
|
||||
|
||||
impl<DB, Tree> BlockHashProvider for BlockchainProvider<DB, Tree>
|
||||
|
||||
@ -151,6 +151,10 @@ impl HeaderProvider for MockEthProvider {
|
||||
) -> Result<Vec<SealedHeader>> {
|
||||
Ok(self.headers_range(range)?.into_iter().map(|h| h.seal_slow()).collect())
|
||||
}
|
||||
|
||||
fn sealed_header(&self, number: BlockNumber) -> Result<Option<SealedHeader>> {
|
||||
Ok(self.header_by_number(number)?.map(|h| h.seal_slow()))
|
||||
}
|
||||
}
|
||||
|
||||
impl TransactionsProvider for MockEthProvider {
|
||||
|
||||
@ -173,6 +173,10 @@ impl HeaderProvider for NoopProvider {
|
||||
) -> Result<Vec<SealedHeader>> {
|
||||
Ok(vec![])
|
||||
}
|
||||
|
||||
fn sealed_header(&self, _number: BlockNumber) -> Result<Option<SealedHeader>> {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
|
||||
impl AccountProvider for NoopProvider {
|
||||
|
||||
@ -39,4 +39,7 @@ pub trait HeaderProvider: Send + Sync {
|
||||
&self,
|
||||
range: impl RangeBounds<BlockNumber>,
|
||||
) -> Result<Vec<SealedHeader>>;
|
||||
|
||||
/// Get a single sealed header by block number
|
||||
fn sealed_header(&self, number: BlockNumber) -> Result<Option<SealedHeader>>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user