chore(db): remove block numhash key (#1242)

This commit is contained in:
Roman Krasiuk
2023-02-10 23:43:00 +02:00
committed by GitHub
parent 23848df73a
commit 00a49f5ee7
20 changed files with 175 additions and 271 deletions

View File

@@ -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)?

View File

@@ -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 },
)?;