mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-04-08 03:01:12 -04:00
chore(db): remove block numhash key (#1242)
This commit is contained in:
@@ -37,7 +37,13 @@ impl<DB: Clone> Clone for ShareableDatabase<DB> {
|
||||
|
||||
impl<DB: Database> HeaderProvider for ShareableDatabase<DB> {
|
||||
fn header(&self, block_hash: &BlockHash) -> Result<Option<Header>> {
|
||||
self.db.view(|tx| tx.get::<tables::Headers>((0, *block_hash).into()))?.map_err(Into::into)
|
||||
self.db.view(|tx| {
|
||||
if let Some(num) = tx.get::<tables::HeaderNumbers>(*block_hash)? {
|
||||
Ok(tx.get::<tables::Headers>(num)?)
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
})?
|
||||
}
|
||||
|
||||
fn header_by_number(&self, num: BlockNumber) -> Result<Option<Header>> {
|
||||
@@ -49,12 +55,13 @@ impl<DB: Database> HeaderProvider for ShareableDatabase<DB> {
|
||||
}
|
||||
|
||||
fn header_td(&self, hash: &BlockHash) -> Result<Option<U256>> {
|
||||
if let Some(num) = self.db.view(|tx| tx.get::<tables::HeaderNumbers>(*hash))?? {
|
||||
let td = self.db.view(|tx| tx.get::<tables::HeaderTD>((num, *hash).into()))??;
|
||||
Ok(td.map(|v| v.0))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
self.db.view(|tx| {
|
||||
if let Some(num) = tx.get::<tables::HeaderNumbers>(*hash)? {
|
||||
Ok(tx.get::<tables::HeaderTD>(num)?.map(|td| td.0))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
})?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,19 +119,6 @@ impl<DB: Database> StateProviderFactory for ShareableDatabase<DB> {
|
||||
let block_number =
|
||||
tx.get::<tables::HeaderNumbers>(block_hash)?.ok_or(Error::BlockHash { block_hash })?;
|
||||
|
||||
// check if block is canonical or not. Only canonical blocks have changesets.
|
||||
let canonical_block_hash = tx
|
||||
.get::<tables::CanonicalHeaders>(block_number)?
|
||||
.ok_or(Error::BlockCanonical { block_number, block_hash })?;
|
||||
if canonical_block_hash != block_hash {
|
||||
return Err(Error::NonCanonicalBlock {
|
||||
block_number,
|
||||
received_hash: block_hash,
|
||||
expected_hash: canonical_block_hash,
|
||||
}
|
||||
.into())
|
||||
}
|
||||
|
||||
// get transition id
|
||||
let transition = tx
|
||||
.get::<tables::BlockTransitionIndex>(block_number)?
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use reth_db::{
|
||||
models::{BlockNumHash, StoredBlockBody, StoredBlockOmmers},
|
||||
models::{StoredBlockBody, StoredBlockOmmers},
|
||||
tables,
|
||||
transaction::{DbTx, DbTxMut},
|
||||
};
|
||||
@@ -19,20 +19,19 @@ pub fn insert_block<'a, TX: DbTxMut<'a> + DbTx<'a>>(
|
||||
has_block_reward: bool,
|
||||
parent_tx_num_transition_id: Option<(u64, u64)>,
|
||||
) -> Result<()> {
|
||||
let block_num_hash = BlockNumHash((block.number, block.hash()));
|
||||
tx.put::<tables::CanonicalHeaders>(block.number, block.hash())?;
|
||||
// Put header with canonical hashes.
|
||||
tx.put::<tables::Headers>(block_num_hash, block.header.as_ref().clone())?;
|
||||
tx.put::<tables::Headers>(block.number, block.header.as_ref().clone())?;
|
||||
tx.put::<tables::HeaderNumbers>(block.hash(), block.number)?;
|
||||
tx.put::<tables::HeaderTD>(
|
||||
block_num_hash,
|
||||
block.number,
|
||||
if has_block_reward { U256::ZERO } else { U256::from(58_750_000_000_000_000_000_000u128) }
|
||||
.into(),
|
||||
)?;
|
||||
|
||||
// insert body ommers data
|
||||
tx.put::<tables::BlockOmmers>(
|
||||
block_num_hash,
|
||||
block.number,
|
||||
StoredBlockOmmers { ommers: block.ommers.iter().map(|h| h.as_ref().clone()).collect() },
|
||||
)?;
|
||||
|
||||
@@ -43,15 +42,9 @@ pub fn insert_block<'a, TX: DbTxMut<'a> + DbTx<'a>>(
|
||||
(0, 0)
|
||||
} else {
|
||||
let prev_block_num = block.number - 1;
|
||||
let prev_block_hash = tx
|
||||
.get::<tables::CanonicalHeaders>(prev_block_num)?
|
||||
.ok_or(ProviderError::BlockNumber { block_number: prev_block_num })?;
|
||||
let prev_body = tx
|
||||
.get::<tables::BlockBodies>((prev_block_num, prev_block_hash).into())?
|
||||
.ok_or(ProviderError::BlockBody {
|
||||
block_number: prev_block_num,
|
||||
block_hash: prev_block_hash,
|
||||
})?;
|
||||
.get::<tables::BlockBodies>(prev_block_num)?
|
||||
.ok_or(ProviderError::BlockBody { block_number: prev_block_num })?;
|
||||
let last_transition_id = tx
|
||||
.get::<tables::BlockTransitionIndex>(prev_block_num)?
|
||||
.ok_or(ProviderError::BlockTransition { block_number: prev_block_num })?;
|
||||
@@ -60,7 +53,7 @@ pub fn insert_block<'a, TX: DbTxMut<'a> + DbTx<'a>>(
|
||||
|
||||
// insert body data
|
||||
tx.put::<tables::BlockBodies>(
|
||||
block_num_hash,
|
||||
block.number,
|
||||
StoredBlockBody { start_tx_id: current_tx_id, tx_count: block.body.len() as u64 },
|
||||
)?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user