pub struct DatabaseProvider<TX, N>where
N: NodeTypes,{ /* private fields */ }
Expand description
A provider struct that fetches data from the database.
Wrapper around [DbTx
] and [DbTxMut
]. Example: HeaderProvider
BlockHashReader
Implementations§
Source§impl<TX, N> DatabaseProvider<TX, N>where
N: NodeTypes,
impl<TX, N> DatabaseProvider<TX, N>where
N: NodeTypes,
Sourcepub const fn prune_modes_ref(&self) -> &PruneModes
pub const fn prune_modes_ref(&self) -> &PruneModes
Returns reference to prune modes.
Source§impl<TX, N> DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
impl<TX, N> DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
Sourcepub fn latest<'a>(
&'a self,
) -> Result<Box<dyn StateProvider + 'a>, ProviderError>
pub fn latest<'a>( &'a self, ) -> Result<Box<dyn StateProvider + 'a>, ProviderError>
State provider for latest block
Sourcepub fn history_by_block_hash<'a>(
&'a self,
block_hash: FixedBytes<32>,
) -> Result<Box<dyn StateProvider + 'a>, ProviderError>
pub fn history_by_block_hash<'a>( &'a self, block_hash: FixedBytes<32>, ) -> Result<Box<dyn StateProvider + 'a>, ProviderError>
Storage provider for state at that given block hash
Source§impl<TX, N> DatabaseProvider<TX, N>where
TX: DbTxMut,
N: NodeTypes,
impl<TX, N> DatabaseProvider<TX, N>where
TX: DbTxMut,
N: NodeTypes,
Sourcepub const fn new_rw(
tx: TX,
chain_spec: Arc<<N as NodeTypes>::ChainSpec>,
static_file_provider: StaticFileProvider,
prune_modes: PruneModes,
) -> DatabaseProvider<TX, N>
pub const fn new_rw( tx: TX, chain_spec: Arc<<N as NodeTypes>::ChainSpec>, static_file_provider: StaticFileProvider, prune_modes: PruneModes, ) -> DatabaseProvider<TX, N>
Creates a provider with an inner read-write transaction.
Source§impl<Tx, N> DatabaseProvider<Tx, N>where
Tx: DbTx + DbTxMut + 'static,
N: NodeTypes + 'static,
<N as NodeTypes>::ChainSpec: EthereumHardforks,
impl<Tx, N> DatabaseProvider<Tx, N>where
Tx: DbTx + DbTxMut + 'static,
N: NodeTypes + 'static,
<N as NodeTypes>::ChainSpec: EthereumHardforks,
Sourcepub fn insert_historical_block(
&self,
block: SealedBlockWithSenders,
) -> Result<StoredBlockBodyIndices, ProviderError>
pub fn insert_historical_block( &self, block: SealedBlockWithSenders, ) -> Result<StoredBlockBodyIndices, ProviderError>
Inserts an historical block. Used for setting up test environments
Source§impl<TX, N> DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
impl<TX, N> DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
Sourcepub const fn new(
tx: TX,
chain_spec: Arc<<N as NodeTypes>::ChainSpec>,
static_file_provider: StaticFileProvider,
prune_modes: PruneModes,
) -> DatabaseProvider<TX, N>
pub const fn new( tx: TX, chain_spec: Arc<<N as NodeTypes>::ChainSpec>, static_file_provider: StaticFileProvider, prune_modes: PruneModes, ) -> DatabaseProvider<TX, N>
Creates a provider with an inner read-only transaction.
Sourcepub fn chain_spec(&self) -> &<N as NodeTypes>::ChainSpec
pub fn chain_spec(&self) -> &<N as NodeTypes>::ChainSpec
Returns a reference to the chain specification.
Sourcepub fn get_state(
&self,
range: RangeInclusive<u64>,
) -> Result<Option<ExecutionOutcome>, ProviderError>
pub fn get_state( &self, range: RangeInclusive<u64>, ) -> Result<Option<ExecutionOutcome>, ProviderError>
Return the last N blocks of state, recreating the ExecutionOutcome
.
- Iterate over the
BlockBodyIndices
table to get all the transaction ids. - Iterate over the
StorageChangeSets
table and theAccountChangeSets
tables in reverse order to reconstruct the changesets.- In order to have both the old and new values in the changesets, we also access the plain state tables.
- While iterating over the changeset tables, if we encounter a new account or storage slot,
we:
- Take the old value from the changeset
- Take the new value from the plain state
- Save the old value to the local state
- While iterating over the changeset tables, if we encounter an account/storage slot we
have seen before we:
- Take the old value from the changeset
- Take the new value from the local state
- Set the local state to the value in the changeset
If the range is empty, or there are no blocks for the given range, then this returns None
.
Source§impl<TX, N> DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
impl<TX, N> DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
Sourcepub fn commit(self) -> Result<bool, ProviderError>
pub fn commit(self) -> Result<bool, ProviderError>
Commit database transaction.
Sourcepub fn remove_block_transaction_range(
&self,
range: impl RangeBounds<u64> + Clone,
) -> Result<(), ProviderError>
pub fn remove_block_transaction_range( &self, range: impl RangeBounds<u64> + Clone, ) -> Result<(), ProviderError>
Remove requested block transactions, without returning them.
This will remove block data for the given range from the following tables:
Sourcepub fn take_block_transaction_range(
&self,
range: impl RangeBounds<u64> + Clone,
) -> Result<Vec<(u64, Vec<TransactionSignedEcRecovered>)>, ProviderError>
pub fn take_block_transaction_range( &self, range: impl RangeBounds<u64> + Clone, ) -> Result<Vec<(u64, Vec<TransactionSignedEcRecovered>)>, ProviderError>
Get requested blocks transaction with senders, also removing them from the database
This will remove block data for the given range from the following tables:
Sourcepub fn remove_block_range(
&self,
range: impl RangeBounds<u64> + Clone,
) -> Result<(), ProviderError>
pub fn remove_block_range( &self, range: impl RangeBounds<u64> + Clone, ) -> Result<(), ProviderError>
Remove the given range of blocks, without returning any of the blocks.
This will remove block data for the given range from the following tables:
This will also remove transaction data according to
remove_block_transaction_range
.
Sourcepub fn take_block_range(
&self,
range: impl RangeBounds<u64> + Clone,
) -> Result<Vec<SealedBlockWithSenders>, ProviderError>
pub fn take_block_range( &self, range: impl RangeBounds<u64> + Clone, ) -> Result<Vec<SealedBlockWithSenders>, ProviderError>
Remove the given range of blocks, and return them.
This will remove block data for the given range from the following tables:
This will also remove transaction data according to
take_block_transaction_range
.
Trait Implementations§
Source§impl<TX, N> AccountExtReader for DatabaseProvider<TX, N>where
TX: DbTx,
N: NodeTypes,
impl<TX, N> AccountExtReader for DatabaseProvider<TX, N>where
TX: DbTx,
N: NodeTypes,
Source§fn changed_accounts_with_range(
&self,
range: impl RangeBounds<u64>,
) -> Result<BTreeSet<Address>, ProviderError>
fn changed_accounts_with_range( &self, range: impl RangeBounds<u64>, ) -> Result<BTreeSet<Address>, ProviderError>
Source§fn basic_accounts(
&self,
iter: impl IntoIterator<Item = Address>,
) -> Result<Vec<(Address, Option<Account>)>, ProviderError>
fn basic_accounts( &self, iter: impl IntoIterator<Item = Address>, ) -> Result<Vec<(Address, Option<Account>)>, ProviderError>
AccountReader::basic_account
repeatedly. Read moreSource§fn changed_accounts_and_blocks_with_range(
&self,
range: RangeInclusive<u64>,
) -> Result<BTreeMap<Address, Vec<u64>>, ProviderError>
fn changed_accounts_and_blocks_with_range( &self, range: RangeInclusive<u64>, ) -> Result<BTreeMap<Address, Vec<u64>>, ProviderError>
Source§impl<TX, N> AccountReader for DatabaseProvider<TX, N>where
TX: DbTx,
N: NodeTypes,
impl<TX, N> AccountReader for DatabaseProvider<TX, N>where
TX: DbTx,
N: NodeTypes,
Source§fn basic_account(
&self,
address: Address,
) -> Result<Option<Account>, ProviderError>
fn basic_account( &self, address: Address, ) -> Result<Option<Account>, ProviderError>
Source§impl<DB, N> AsRef<DatabaseProvider<<DB as Database>::TXMut, N>> for DatabaseProviderRW<DB, N>where
DB: Database,
N: NodeTypes,
impl<DB, N> AsRef<DatabaseProvider<<DB as Database>::TXMut, N>> for DatabaseProviderRW<DB, N>where
DB: Database,
N: NodeTypes,
Source§fn as_ref(&self) -> &DatabaseProvider<<DB as Database>::TXMut, N>
fn as_ref(&self) -> &DatabaseProvider<<DB as Database>::TXMut, N>
Source§impl<TX, N> AsRef<DatabaseProvider<TX, N>> for DatabaseProvider<TX, N>where
N: NodeTypes,
impl<TX, N> AsRef<DatabaseProvider<TX, N>> for DatabaseProvider<TX, N>where
N: NodeTypes,
Source§fn as_ref(&self) -> &DatabaseProvider<TX, N>
fn as_ref(&self) -> &DatabaseProvider<TX, N>
Source§impl<TX, N> BlockExecutionWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes + 'static,
<N as NodeTypes>::ChainSpec: EthereumHardforks,
impl<TX, N> BlockExecutionWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes + 'static,
<N as NodeTypes>::ChainSpec: EthereumHardforks,
Source§fn take_block_and_execution_range(
&self,
range: RangeInclusive<u64>,
) -> Result<Chain, ProviderError>
fn take_block_and_execution_range( &self, range: RangeInclusive<u64>, ) -> Result<Chain, ProviderError>
Source§fn remove_block_and_execution_range(
&self,
range: RangeInclusive<u64>,
) -> Result<(), ProviderError>
fn remove_block_and_execution_range( &self, range: RangeInclusive<u64>, ) -> Result<(), ProviderError>
Source§impl<TX, N> BlockHashReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
impl<TX, N> BlockHashReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
Source§fn block_hash(
&self,
number: u64,
) -> Result<Option<FixedBytes<32>>, ProviderError>
fn block_hash( &self, number: u64, ) -> Result<Option<FixedBytes<32>>, ProviderError>
None
if no block with this number
exists.Source§fn canonical_hashes_range(
&self,
start: u64,
end: u64,
) -> Result<Vec<FixedBytes<32>>, ProviderError>
fn canonical_hashes_range( &self, start: u64, end: u64, ) -> Result<Vec<FixedBytes<32>>, ProviderError>
§fn convert_block_hash(
&self,
hash_or_number: HashOrNumber,
) -> Result<Option<FixedBytes<32>>, ProviderError>
fn convert_block_hash( &self, hash_or_number: HashOrNumber, ) -> Result<Option<FixedBytes<32>>, ProviderError>
None
if no block with this number
exists.Source§impl<TX, N> BlockNumReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
impl<TX, N> BlockNumReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
Source§fn chain_info(&self) -> Result<ChainInfo, ProviderError>
fn chain_info(&self) -> Result<ChainInfo, ProviderError>
Source§fn best_block_number(&self) -> Result<u64, ProviderError>
fn best_block_number(&self) -> Result<u64, ProviderError>
Source§fn last_block_number(&self) -> Result<u64, ProviderError>
fn last_block_number(&self) -> Result<u64, ProviderError>
Source§fn block_number(
&self,
hash: FixedBytes<32>,
) -> Result<Option<u64>, ProviderError>
fn block_number( &self, hash: FixedBytes<32>, ) -> Result<Option<u64>, ProviderError>
BlockNumber
for the given hash. Returns None
if no block with this hash exists.§fn convert_hash_or_number(
&self,
id: HashOrNumber,
) -> Result<Option<u64>, ProviderError>
fn convert_hash_or_number( &self, id: HashOrNumber, ) -> Result<Option<u64>, ProviderError>
BlockHashOrNumber
. Returns None
if no block with
this hash exists. If the BlockHashOrNumber
is a Number
, it is returned as is.§fn convert_number(
&self,
id: HashOrNumber,
) -> Result<Option<FixedBytes<32>>, ProviderError>
fn convert_number( &self, id: HashOrNumber, ) -> Result<Option<FixedBytes<32>>, ProviderError>
BlockHashOrNumber
. Returns None
if no block with this
number exists. If the BlockHashOrNumber
is a Hash
, it is returned as is.Source§impl<TX, N> BlockReader for DatabaseProvider<TX, N>
impl<TX, N> BlockReader for DatabaseProvider<TX, N>
Source§fn block(&self, id: HashOrNumber) -> Result<Option<Block>, ProviderError>
fn block(&self, id: HashOrNumber) -> Result<Option<Block>, ProviderError>
Returns the block with matching number from database.
If the header for this block is not found, this returns None
.
If the header is found, but the transactions either do not exist, or are not indexed, this
will return None.
Source§fn ommers(&self, id: HashOrNumber) -> Result<Option<Vec<Header>>, ProviderError>
fn ommers(&self, id: HashOrNumber) -> Result<Option<Vec<Header>>, ProviderError>
Returns the ommers for the block with matching id from the database.
If the block is not found, this returns None
.
If the block exists, but doesn’t contain ommers, this returns None
.
Source§fn block_with_senders(
&self,
id: HashOrNumber,
transaction_kind: TransactionVariant,
) -> Result<Option<BlockWithSenders>, ProviderError>
fn block_with_senders( &self, id: HashOrNumber, transaction_kind: TransactionVariant, ) -> Result<Option<BlockWithSenders>, ProviderError>
Returns the block with senders with matching number or hash from database.
NOTE: The transactions have invalid hashes, since they would need to be calculated on the spot, and we want fast querying.
If the header for this block is not found, this returns None
.
If the header is found, but the transactions either do not exist, or are not indexed, this
will return None.
Source§fn find_block_by_hash(
&self,
hash: FixedBytes<32>,
source: BlockSource,
) -> Result<Option<Block>, ProviderError>
fn find_block_by_hash( &self, hash: FixedBytes<32>, source: BlockSource, ) -> Result<Option<Block>, ProviderError>
Source§fn pending_block(&self) -> Result<Option<SealedBlock>, ProviderError>
fn pending_block(&self) -> Result<Option<SealedBlock>, ProviderError>
Source§fn pending_block_with_senders(
&self,
) -> Result<Option<SealedBlockWithSenders>, ProviderError>
fn pending_block_with_senders( &self, ) -> Result<Option<SealedBlockWithSenders>, ProviderError>
Source§fn pending_block_and_receipts(
&self,
) -> Result<Option<(SealedBlock, Vec<Receipt>)>, ProviderError>
fn pending_block_and_receipts( &self, ) -> Result<Option<(SealedBlock, Vec<Receipt>)>, ProviderError>
Source§fn block_body_indices(
&self,
num: u64,
) -> Result<Option<StoredBlockBodyIndices>, ProviderError>
fn block_body_indices( &self, num: u64, ) -> Result<Option<StoredBlockBodyIndices>, ProviderError>
Source§fn sealed_block_with_senders(
&self,
id: HashOrNumber,
transaction_kind: TransactionVariant,
) -> Result<Option<SealedBlockWithSenders>, ProviderError>
fn sealed_block_with_senders( &self, id: HashOrNumber, transaction_kind: TransactionVariant, ) -> Result<Option<SealedBlockWithSenders>, ProviderError>
Source§fn block_range(
&self,
range: RangeInclusive<u64>,
) -> Result<Vec<Block>, ProviderError>
fn block_range( &self, range: RangeInclusive<u64>, ) -> Result<Vec<Block>, ProviderError>
Source§fn block_with_senders_range(
&self,
range: RangeInclusive<u64>,
) -> Result<Vec<BlockWithSenders>, ProviderError>
fn block_with_senders_range( &self, range: RangeInclusive<u64>, ) -> Result<Vec<BlockWithSenders>, ProviderError>
Source§fn sealed_block_with_senders_range(
&self,
range: RangeInclusive<u64>,
) -> Result<Vec<SealedBlockWithSenders>, ProviderError>
fn sealed_block_with_senders_range( &self, range: RangeInclusive<u64>, ) -> Result<Vec<SealedBlockWithSenders>, ProviderError>
§fn block_by_hash(
&self,
hash: FixedBytes<32>,
) -> Result<Option<Block>, ProviderError>
fn block_by_hash( &self, hash: FixedBytes<32>, ) -> Result<Option<Block>, ProviderError>
§fn block_by_number(&self, num: u64) -> Result<Option<Block>, ProviderError>
fn block_by_number(&self, num: u64) -> Result<Option<Block>, ProviderError>
Source§impl<TX, N> BlockWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes + 'static,
<N as NodeTypes>::ChainSpec: EthereumHardforks,
impl<TX, N> BlockWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes + 'static,
<N as NodeTypes>::ChainSpec: EthereumHardforks,
Source§fn insert_block(
&self,
block: SealedBlockWithSenders,
) -> Result<StoredBlockBodyIndices, ProviderError>
fn insert_block( &self, block: SealedBlockWithSenders, ) -> Result<StoredBlockBodyIndices, ProviderError>
Inserts the block into the database, always modifying the following tables:
If there are transactions in the block, the following tables will be modified:
If ommers are not empty, this will modify BlockOmmers
.
If withdrawals are not empty, this will modify
BlockWithdrawals
.
If the provider has not configured full sender pruning, this will modify
TransactionSenders
.
If the provider has not configured full transaction lookup pruning, this will modify
TransactionHashNumbers
.
Source§fn append_blocks_with_state(
&self,
blocks: Vec<SealedBlockWithSenders>,
execution_outcome: ExecutionOutcome,
hashed_state: HashedPostStateSorted,
trie_updates: TrieUpdates,
) -> Result<(), ProviderError>
fn append_blocks_with_state( &self, blocks: Vec<SealedBlockWithSenders>, execution_outcome: ExecutionOutcome, hashed_state: HashedPostStateSorted, trie_updates: TrieUpdates, ) -> Result<(), ProviderError>
TODO(joshie): this fn should be moved to UnifiedStorageWriter
eventually
Source§fn append_block_bodies(
&self,
bodies: impl Iterator<Item = (u64, Option<BlockBody>)>,
) -> Result<(), ProviderError>
fn append_block_bodies( &self, bodies: impl Iterator<Item = (u64, Option<BlockBody>)>, ) -> Result<(), ProviderError>
Bodies
stage and does not write to TransactionHashNumbers
and TransactionSenders
tables which are populated on later stages. Read moreSource§impl<TX, N> ChainSpecProvider for DatabaseProvider<TX, N>
impl<TX, N> ChainSpecProvider for DatabaseProvider<TX, N>
Source§fn chain_spec(
&self,
) -> Arc<<DatabaseProvider<TX, N> as ChainSpecProvider>::ChainSpec>
fn chain_spec( &self, ) -> Arc<<DatabaseProvider<TX, N> as ChainSpecProvider>::ChainSpec>
Arc
to the chainspec.Source§impl<TX, N> ChainStateBlockReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
impl<TX, N> ChainStateBlockReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
Source§fn last_finalized_block_number(&self) -> Result<Option<u64>, ProviderError>
fn last_finalized_block_number(&self) -> Result<Option<u64>, ProviderError>
Source§fn last_safe_block_number(&self) -> Result<Option<u64>, ProviderError>
fn last_safe_block_number(&self) -> Result<Option<u64>, ProviderError>
Source§impl<TX, N> ChainStateBlockWriter for DatabaseProvider<TX, N>where
TX: DbTxMut,
N: NodeTypes,
impl<TX, N> ChainStateBlockWriter for DatabaseProvider<TX, N>where
TX: DbTxMut,
N: NodeTypes,
Source§fn save_finalized_block_number(
&self,
block_number: u64,
) -> Result<(), ProviderError>
fn save_finalized_block_number( &self, block_number: u64, ) -> Result<(), ProviderError>
Source§fn save_safe_block_number(&self, block_number: u64) -> Result<(), ProviderError>
fn save_safe_block_number(&self, block_number: u64) -> Result<(), ProviderError>
Source§impl<TX, N> ChangeSetReader for DatabaseProvider<TX, N>where
TX: DbTx,
N: NodeTypes,
impl<TX, N> ChangeSetReader for DatabaseProvider<TX, N>where
TX: DbTx,
N: NodeTypes,
Source§fn account_block_changeset(
&self,
block_number: u64,
) -> Result<Vec<AccountBeforeTx>, ProviderError>
fn account_block_changeset( &self, block_number: u64, ) -> Result<Vec<AccountBeforeTx>, ProviderError>
Source§impl<TX, N> DBProvider for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes + 'static,
impl<TX, N> DBProvider for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes + 'static,
Source§fn tx_ref(&self) -> &<DatabaseProvider<TX, N> as DBProvider>::Tx
fn tx_ref(&self) -> &<DatabaseProvider<TX, N> as DBProvider>::Tx
Source§fn tx_mut(&mut self) -> &mut <DatabaseProvider<TX, N> as DBProvider>::Tx
fn tx_mut(&mut self) -> &mut <DatabaseProvider<TX, N> as DBProvider>::Tx
Source§fn into_tx(self) -> <DatabaseProvider<TX, N> as DBProvider>::Tx
fn into_tx(self) -> <DatabaseProvider<TX, N> as DBProvider>::Tx
Source§fn prune_modes_ref(&self) -> &PruneModes
fn prune_modes_ref(&self) -> &PruneModes
§fn disable_long_read_transaction_safety(self) -> Self
fn disable_long_read_transaction_safety(self) -> Self
§fn commit(self) -> Result<bool, ProviderError>
fn commit(self) -> Result<bool, ProviderError>
§fn table<T>(
&self,
) -> Result<Vec<(<T as Table>::Key, <T as Table>::Value)>, DatabaseError>
fn table<T>( &self, ) -> Result<Vec<(<T as Table>::Key, <T as Table>::Value)>, DatabaseError>
§fn get<T>(
&self,
range: impl RangeBounds<<T as Table>::Key>,
) -> Result<Vec<(<T as Table>::Key, <T as Table>::Value)>, DatabaseError>where
T: Table,
fn get<T>(
&self,
range: impl RangeBounds<<T as Table>::Key>,
) -> Result<Vec<(<T as Table>::Key, <T as Table>::Value)>, DatabaseError>where
T: Table,
§fn cursor_read_collect<T>(
&self,
range: impl RangeBounds<<T as Table>::Key>,
) -> Result<Vec<<T as Table>::Value>, ProviderError>where
T: Table<Key = u64>,
fn cursor_read_collect<T>(
&self,
range: impl RangeBounds<<T as Table>::Key>,
) -> Result<Vec<<T as Table>::Value>, ProviderError>where
T: Table<Key = u64>,
§fn cursor_collect<T>(
&self,
cursor: &mut impl DbCursorRO<T>,
range: impl RangeBounds<<T as Table>::Key>,
) -> Result<Vec<<T as Table>::Value>, ProviderError>where
T: Table<Key = u64>,
fn cursor_collect<T>(
&self,
cursor: &mut impl DbCursorRO<T>,
range: impl RangeBounds<<T as Table>::Key>,
) -> Result<Vec<<T as Table>::Value>, ProviderError>where
T: Table<Key = u64>,
§fn cursor_collect_with_capacity<T>(
&self,
cursor: &mut impl DbCursorRO<T>,
range: impl RangeBounds<<T as Table>::Key>,
capacity: usize,
) -> Result<Vec<<T as Table>::Value>, ProviderError>where
T: Table<Key = u64>,
fn cursor_collect_with_capacity<T>(
&self,
cursor: &mut impl DbCursorRO<T>,
range: impl RangeBounds<<T as Table>::Key>,
capacity: usize,
) -> Result<Vec<<T as Table>::Value>, ProviderError>where
T: Table<Key = u64>,
§fn remove<T>(
&self,
range: impl RangeBounds<<T as Table>::Key>,
) -> Result<usize, DatabaseError>where
T: Table,
Self::Tx: DbTxMut,
fn remove<T>(
&self,
range: impl RangeBounds<<T as Table>::Key>,
) -> Result<usize, DatabaseError>where
T: Table,
Self::Tx: DbTxMut,
§fn take<T>(
&self,
range: impl RangeBounds<<T as Table>::Key>,
) -> Result<Vec<(<T as Table>::Key, <T as Table>::Value)>, DatabaseError>where
T: Table,
Self::Tx: DbTxMut,
fn take<T>(
&self,
range: impl RangeBounds<<T as Table>::Key>,
) -> Result<Vec<(<T as Table>::Key, <T as Table>::Value)>, DatabaseError>where
T: Table,
Self::Tx: DbTxMut,
Source§impl<TX, N> Debug for DatabaseProvider<TX, N>
impl<TX, N> Debug for DatabaseProvider<TX, N>
Source§impl<TX, N> EvmEnvProvider for DatabaseProvider<TX, N>
impl<TX, N> EvmEnvProvider for DatabaseProvider<TX, N>
Source§fn fill_env_at<EvmConfig>(
&self,
cfg: &mut CfgEnvWithHandlerCfg,
block_env: &mut BlockEnv,
at: HashOrNumber,
evm_config: EvmConfig,
) -> Result<(), ProviderError>where
EvmConfig: ConfigureEvmEnv<Header = Header>,
fn fill_env_at<EvmConfig>(
&self,
cfg: &mut CfgEnvWithHandlerCfg,
block_env: &mut BlockEnv,
at: HashOrNumber,
evm_config: EvmConfig,
) -> Result<(), ProviderError>where
EvmConfig: ConfigureEvmEnv<Header = Header>,
CfgEnvWithHandlerCfg
and BlockEnv fields with values specific to the given
BlockHashOrNumber.Source§fn fill_env_with_header<EvmConfig>(
&self,
cfg: &mut CfgEnvWithHandlerCfg,
block_env: &mut BlockEnv,
header: &Header,
evm_config: EvmConfig,
) -> Result<(), ProviderError>where
EvmConfig: ConfigureEvmEnv<Header = Header>,
fn fill_env_with_header<EvmConfig>(
&self,
cfg: &mut CfgEnvWithHandlerCfg,
block_env: &mut BlockEnv,
header: &Header,
evm_config: EvmConfig,
) -> Result<(), ProviderError>where
EvmConfig: ConfigureEvmEnv<Header = Header>,
CfgEnvWithHandlerCfg
and BlockEnv fields with values specific to the given
[Header].Source§fn fill_cfg_env_at<EvmConfig>(
&self,
cfg: &mut CfgEnvWithHandlerCfg,
at: HashOrNumber,
evm_config: EvmConfig,
) -> Result<(), ProviderError>where
EvmConfig: ConfigureEvmEnv<Header = Header>,
fn fill_cfg_env_at<EvmConfig>(
&self,
cfg: &mut CfgEnvWithHandlerCfg,
at: HashOrNumber,
evm_config: EvmConfig,
) -> Result<(), ProviderError>where
EvmConfig: ConfigureEvmEnv<Header = Header>,
CfgEnvWithHandlerCfg
fields with values specific to the given
BlockHashOrNumber.Source§fn fill_cfg_env_with_header<EvmConfig>(
&self,
cfg: &mut CfgEnvWithHandlerCfg,
header: &Header,
evm_config: EvmConfig,
) -> Result<(), ProviderError>where
EvmConfig: ConfigureEvmEnv<Header = Header>,
fn fill_cfg_env_with_header<EvmConfig>(
&self,
cfg: &mut CfgEnvWithHandlerCfg,
header: &Header,
evm_config: EvmConfig,
) -> Result<(), ProviderError>where
EvmConfig: ConfigureEvmEnv<Header = Header>,
CfgEnvWithHandlerCfg
fields with values specific to the given [Header].§fn env_with_header<EvmConfig>(
&self,
header: &Header,
evm_config: EvmConfig,
) -> Result<(CfgEnvWithHandlerCfg, BlockEnv), ProviderError>where
EvmConfig: ConfigureEvmEnv<Header = Header>,
fn env_with_header<EvmConfig>(
&self,
header: &Header,
evm_config: EvmConfig,
) -> Result<(CfgEnvWithHandlerCfg, BlockEnv), ProviderError>where
EvmConfig: ConfigureEvmEnv<Header = Header>,
CfgEnvWithHandlerCfg
and BlockEnv fields with values specific to the
given [Header].Source§impl<DB, N> From<DatabaseProviderRW<DB, N>> for DatabaseProvider<<DB as Database>::TXMut, N>where
DB: Database,
N: NodeTypes,
impl<DB, N> From<DatabaseProviderRW<DB, N>> for DatabaseProvider<<DB as Database>::TXMut, N>where
DB: Database,
N: NodeTypes,
Source§fn from(
provider: DatabaseProviderRW<DB, N>,
) -> DatabaseProvider<<DB as Database>::TXMut, N>
fn from( provider: DatabaseProviderRW<DB, N>, ) -> DatabaseProvider<<DB as Database>::TXMut, N>
Source§impl<TX, N> HashingWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
impl<TX, N> HashingWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
Source§fn unwind_account_hashing<'a>(
&self,
changesets: impl Iterator<Item = &'a (u64, AccountBeforeTx)>,
) -> Result<BTreeMap<FixedBytes<32>, Option<Account>>, ProviderError>
fn unwind_account_hashing<'a>( &self, changesets: impl Iterator<Item = &'a (u64, AccountBeforeTx)>, ) -> Result<BTreeMap<FixedBytes<32>, Option<Account>>, ProviderError>
Source§fn unwind_account_hashing_range(
&self,
range: impl RangeBounds<u64>,
) -> Result<BTreeMap<FixedBytes<32>, Option<Account>>, ProviderError>
fn unwind_account_hashing_range( &self, range: impl RangeBounds<u64>, ) -> Result<BTreeMap<FixedBytes<32>, Option<Account>>, ProviderError>
Source§fn insert_account_for_hashing(
&self,
changesets: impl IntoIterator<Item = (Address, Option<Account>)>,
) -> Result<BTreeMap<FixedBytes<32>, Option<Account>>, ProviderError>
fn insert_account_for_hashing( &self, changesets: impl IntoIterator<Item = (Address, Option<Account>)>, ) -> Result<BTreeMap<FixedBytes<32>, Option<Account>>, ProviderError>
Source§fn unwind_storage_hashing(
&self,
changesets: impl Iterator<Item = (BlockNumberAddress, StorageEntry)>,
) -> Result<HashMap<FixedBytes<32>, BTreeSet<FixedBytes<32>>>, ProviderError>
fn unwind_storage_hashing( &self, changesets: impl Iterator<Item = (BlockNumberAddress, StorageEntry)>, ) -> Result<HashMap<FixedBytes<32>, BTreeSet<FixedBytes<32>>>, ProviderError>
Source§fn unwind_storage_hashing_range(
&self,
range: impl RangeBounds<BlockNumberAddress>,
) -> Result<HashMap<FixedBytes<32>, BTreeSet<FixedBytes<32>>>, ProviderError>
fn unwind_storage_hashing_range( &self, range: impl RangeBounds<BlockNumberAddress>, ) -> Result<HashMap<FixedBytes<32>, BTreeSet<FixedBytes<32>>>, ProviderError>
Source§fn insert_storage_for_hashing(
&self,
storages: impl IntoIterator<Item = (Address, impl IntoIterator<Item = StorageEntry>)>,
) -> Result<HashMap<FixedBytes<32>, BTreeSet<FixedBytes<32>>>, ProviderError>
fn insert_storage_for_hashing( &self, storages: impl IntoIterator<Item = (Address, impl IntoIterator<Item = StorageEntry>)>, ) -> Result<HashMap<FixedBytes<32>, BTreeSet<FixedBytes<32>>>, ProviderError>
Source§fn insert_hashes(
&self,
range: RangeInclusive<u64>,
end_block_hash: FixedBytes<32>,
expected_state_root: FixedBytes<32>,
) -> Result<(), ProviderError>
fn insert_hashes( &self, range: RangeInclusive<u64>, end_block_hash: FixedBytes<32>, expected_state_root: FixedBytes<32>, ) -> Result<(), ProviderError>
Source§impl<TX, N> HeaderProvider for DatabaseProvider<TX, N>
impl<TX, N> HeaderProvider for DatabaseProvider<TX, N>
Source§fn header(
&self,
block_hash: &FixedBytes<32>,
) -> Result<Option<Header>, ProviderError>
fn header( &self, block_hash: &FixedBytes<32>, ) -> Result<Option<Header>, ProviderError>
Source§fn header_by_number(&self, num: u64) -> Result<Option<Header>, ProviderError>
fn header_by_number(&self, num: u64) -> Result<Option<Header>, ProviderError>
Source§fn header_td(
&self,
block_hash: &FixedBytes<32>,
) -> Result<Option<Uint<256, 4>>, ProviderError>
fn header_td( &self, block_hash: &FixedBytes<32>, ) -> Result<Option<Uint<256, 4>>, ProviderError>
Source§fn header_td_by_number(
&self,
number: u64,
) -> Result<Option<Uint<256, 4>>, ProviderError>
fn header_td_by_number( &self, number: u64, ) -> Result<Option<Uint<256, 4>>, ProviderError>
Source§fn headers_range(
&self,
range: impl RangeBounds<u64>,
) -> Result<Vec<Header>, ProviderError>
fn headers_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<Header>, ProviderError>
Source§fn sealed_header(
&self,
number: u64,
) -> Result<Option<SealedHeader>, ProviderError>
fn sealed_header( &self, number: u64, ) -> Result<Option<SealedHeader>, ProviderError>
Source§fn sealed_headers_while(
&self,
range: impl RangeBounds<u64>,
predicate: impl FnMut(&SealedHeader) -> bool,
) -> Result<Vec<SealedHeader>, ProviderError>
fn sealed_headers_while( &self, range: impl RangeBounds<u64>, predicate: impl FnMut(&SealedHeader) -> bool, ) -> Result<Vec<SealedHeader>, ProviderError>
predicate
returns true
or the range is exhausted.§fn is_known(&self, block_hash: &FixedBytes<32>) -> Result<bool, ProviderError>
fn is_known(&self, block_hash: &FixedBytes<32>) -> Result<bool, ProviderError>
§fn sealed_header_by_hash(
&self,
block_hash: FixedBytes<32>,
) -> Result<Option<SealedHeader>, ProviderError>
fn sealed_header_by_hash( &self, block_hash: FixedBytes<32>, ) -> Result<Option<SealedHeader>, ProviderError>
§fn header_by_hash_or_number(
&self,
hash_or_num: HashOrNumber,
) -> Result<Option<Header>, ProviderError>
fn header_by_hash_or_number( &self, hash_or_num: HashOrNumber, ) -> Result<Option<Header>, ProviderError>
§fn sealed_headers_range(
&self,
range: impl RangeBounds<u64>,
) -> Result<Vec<SealedHeader>, ProviderError>
fn sealed_headers_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<SealedHeader>, ProviderError>
Source§impl<TX, N> HeaderSyncGapProvider for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
impl<TX, N> HeaderSyncGapProvider for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
Source§fn sync_gap(
&self,
tip: Receiver<FixedBytes<32>>,
highest_uninterrupted_block: u64,
) -> Result<HeaderSyncGap, ProviderError>
fn sync_gap( &self, tip: Receiver<FixedBytes<32>>, highest_uninterrupted_block: u64, ) -> Result<HeaderSyncGap, ProviderError>
Source§impl<TX, N> HistoryWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
impl<TX, N> HistoryWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
Source§fn unwind_account_history_indices<'a>(
&self,
changesets: impl Iterator<Item = &'a (u64, AccountBeforeTx)>,
) -> Result<usize, ProviderError>
fn unwind_account_history_indices<'a>( &self, changesets: impl Iterator<Item = &'a (u64, AccountBeforeTx)>, ) -> Result<usize, ProviderError>
Source§fn unwind_account_history_indices_range(
&self,
range: impl RangeBounds<u64>,
) -> Result<usize, ProviderError>
fn unwind_account_history_indices_range( &self, range: impl RangeBounds<u64>, ) -> Result<usize, ProviderError>
Source§fn insert_account_history_index(
&self,
account_transitions: impl IntoIterator<Item = (Address, impl IntoIterator<Item = u64>)>,
) -> Result<(), ProviderError>
fn insert_account_history_index( &self, account_transitions: impl IntoIterator<Item = (Address, impl IntoIterator<Item = u64>)>, ) -> Result<(), ProviderError>
Source§fn unwind_storage_history_indices(
&self,
changesets: impl Iterator<Item = (BlockNumberAddress, StorageEntry)>,
) -> Result<usize, ProviderError>
fn unwind_storage_history_indices( &self, changesets: impl Iterator<Item = (BlockNumberAddress, StorageEntry)>, ) -> Result<usize, ProviderError>
Source§fn unwind_storage_history_indices_range(
&self,
range: impl RangeBounds<BlockNumberAddress>,
) -> Result<usize, ProviderError>
fn unwind_storage_history_indices_range( &self, range: impl RangeBounds<BlockNumberAddress>, ) -> Result<usize, ProviderError>
Source§fn insert_storage_history_index(
&self,
storage_transitions: impl IntoIterator<Item = ((Address, FixedBytes<32>), impl IntoIterator<Item = u64>)>,
) -> Result<(), ProviderError>
fn insert_storage_history_index( &self, storage_transitions: impl IntoIterator<Item = ((Address, FixedBytes<32>), impl IntoIterator<Item = u64>)>, ) -> Result<(), ProviderError>
Source§fn update_history_indices(
&self,
range: RangeInclusive<u64>,
) -> Result<(), ProviderError>
fn update_history_indices( &self, range: RangeInclusive<u64>, ) -> Result<(), ProviderError>
Source§impl<TX, N> PruneCheckpointReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
impl<TX, N> PruneCheckpointReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
Source§fn get_prune_checkpoint(
&self,
segment: PruneSegment,
) -> Result<Option<PruneCheckpoint>, ProviderError>
fn get_prune_checkpoint( &self, segment: PruneSegment, ) -> Result<Option<PruneCheckpoint>, ProviderError>
Source§fn get_prune_checkpoints(
&self,
) -> Result<Vec<(PruneSegment, PruneCheckpoint)>, ProviderError>
fn get_prune_checkpoints( &self, ) -> Result<Vec<(PruneSegment, PruneCheckpoint)>, ProviderError>
Source§impl<TX, N> PruneCheckpointWriter for DatabaseProvider<TX, N>where
TX: DbTxMut,
N: NodeTypes,
impl<TX, N> PruneCheckpointWriter for DatabaseProvider<TX, N>where
TX: DbTxMut,
N: NodeTypes,
Source§fn save_prune_checkpoint(
&self,
segment: PruneSegment,
checkpoint: PruneCheckpoint,
) -> Result<(), ProviderError>
fn save_prune_checkpoint( &self, segment: PruneSegment, checkpoint: PruneCheckpoint, ) -> Result<(), ProviderError>
Source§impl<TX, N> ReceiptProvider for DatabaseProvider<TX, N>
impl<TX, N> ReceiptProvider for DatabaseProvider<TX, N>
Source§fn receipt(&self, id: u64) -> Result<Option<Receipt>, ProviderError>
fn receipt(&self, id: u64) -> Result<Option<Receipt>, ProviderError>
Source§fn receipt_by_hash(
&self,
hash: FixedBytes<32>,
) -> Result<Option<Receipt>, ProviderError>
fn receipt_by_hash( &self, hash: FixedBytes<32>, ) -> Result<Option<Receipt>, ProviderError>
Source§fn receipts_by_block(
&self,
block: HashOrNumber,
) -> Result<Option<Vec<Receipt>>, ProviderError>
fn receipts_by_block( &self, block: HashOrNumber, ) -> Result<Option<Vec<Receipt>>, ProviderError>
Source§fn receipts_by_tx_range(
&self,
range: impl RangeBounds<u64>,
) -> Result<Vec<Receipt>, ProviderError>
fn receipts_by_tx_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<Receipt>, ProviderError>
Source§impl<TX, N> StageCheckpointReader for DatabaseProvider<TX, N>where
TX: DbTx,
N: NodeTypes,
impl<TX, N> StageCheckpointReader for DatabaseProvider<TX, N>where
TX: DbTx,
N: NodeTypes,
Source§fn get_stage_checkpoint_progress(
&self,
id: StageId,
) -> Result<Option<Vec<u8>>, ProviderError>
fn get_stage_checkpoint_progress( &self, id: StageId, ) -> Result<Option<Vec<u8>>, ProviderError>
Get stage checkpoint progress.
Source§fn get_stage_checkpoint(
&self,
id: StageId,
) -> Result<Option<StageCheckpoint>, ProviderError>
fn get_stage_checkpoint( &self, id: StageId, ) -> Result<Option<StageCheckpoint>, ProviderError>
Source§fn get_all_checkpoints(
&self,
) -> Result<Vec<(String, StageCheckpoint)>, ProviderError>
fn get_all_checkpoints( &self, ) -> Result<Vec<(String, StageCheckpoint)>, ProviderError>
Source§impl<TX, N> StageCheckpointWriter for DatabaseProvider<TX, N>where
TX: DbTxMut,
N: NodeTypes,
impl<TX, N> StageCheckpointWriter for DatabaseProvider<TX, N>where
TX: DbTxMut,
N: NodeTypes,
Source§fn save_stage_checkpoint(
&self,
id: StageId,
checkpoint: StageCheckpoint,
) -> Result<(), ProviderError>
fn save_stage_checkpoint( &self, id: StageId, checkpoint: StageCheckpoint, ) -> Result<(), ProviderError>
Save stage checkpoint.
Source§fn save_stage_checkpoint_progress(
&self,
id: StageId,
checkpoint: Vec<u8>,
) -> Result<(), ProviderError>
fn save_stage_checkpoint_progress( &self, id: StageId, checkpoint: Vec<u8>, ) -> Result<(), ProviderError>
Save stage checkpoint progress.
Source§fn update_pipeline_stages(
&self,
block_number: u64,
drop_stage_checkpoint: bool,
) -> Result<(), ProviderError>
fn update_pipeline_stages( &self, block_number: u64, drop_stage_checkpoint: bool, ) -> Result<(), ProviderError>
Source§impl<TX, N> StateChangeWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
impl<TX, N> StateChangeWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
Source§fn remove_state(&self, range: RangeInclusive<u64>) -> Result<(), ProviderError>
fn remove_state(&self, range: RangeInclusive<u64>) -> Result<(), ProviderError>
Remove the last N blocks of state.
The latest state will be unwound
- Iterate over the
BlockBodyIndices
table to get all the transaction ids. - Iterate over the
StorageChangeSets
table and theAccountChangeSets
tables in reverse order to reconstruct the changesets.- In order to have both the old and new values in the changesets, we also access the plain state tables.
- While iterating over the changeset tables, if we encounter a new account or storage slot,
we:
- Take the old value from the changeset
- Take the new value from the plain state
- Save the old value to the local state
- While iterating over the changeset tables, if we encounter an account/storage slot we
have seen before we:
- Take the old value from the changeset
- Take the new value from the local state
- Set the local state to the value in the changeset
Source§fn take_state(
&self,
range: RangeInclusive<u64>,
) -> Result<ExecutionOutcome, ProviderError>
fn take_state( &self, range: RangeInclusive<u64>, ) -> Result<ExecutionOutcome, ProviderError>
Take the last N blocks of state, recreating the ExecutionOutcome
.
The latest state will be unwound and returned back with all the blocks
- Iterate over the
BlockBodyIndices
table to get all the transaction ids. - Iterate over the
StorageChangeSets
table and theAccountChangeSets
tables in reverse order to reconstruct the changesets.- In order to have both the old and new values in the changesets, we also access the plain state tables.
- While iterating over the changeset tables, if we encounter a new account or storage slot,
we:
- Take the old value from the changeset
- Take the new value from the plain state
- Save the old value to the local state
- While iterating over the changeset tables, if we encounter an account/storage slot we
have seen before we:
- Take the old value from the changeset
- Take the new value from the local state
- Set the local state to the value in the changeset
Source§fn write_state_reverts(
&self,
reverts: PlainStateReverts,
first_block: u64,
) -> Result<(), ProviderError>
fn write_state_reverts( &self, reverts: PlainStateReverts, first_block: u64, ) -> Result<(), ProviderError>
Source§fn write_state_changes(
&self,
changes: StateChangeset,
) -> Result<(), ProviderError>
fn write_state_changes( &self, changes: StateChangeset, ) -> Result<(), ProviderError>
Source§fn write_hashed_state(
&self,
hashed_state: &HashedPostStateSorted,
) -> Result<(), ProviderError>
fn write_hashed_state( &self, hashed_state: &HashedPostStateSorted, ) -> Result<(), ProviderError>
Source§impl<TX, N> StateReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
impl<TX, N> StateReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
Source§fn get_state(
&self,
block: u64,
) -> Result<Option<ExecutionOutcome>, ProviderError>
fn get_state( &self, block: u64, ) -> Result<Option<ExecutionOutcome>, ProviderError>
ExecutionOutcome
for the given blockSource§impl<TX, N> StaticFileProviderFactory for DatabaseProvider<TX, N>where
N: NodeTypes,
impl<TX, N> StaticFileProviderFactory for DatabaseProvider<TX, N>where
N: NodeTypes,
Source§fn static_file_provider(&self) -> StaticFileProvider
fn static_file_provider(&self) -> StaticFileProvider
Returns a static file provider
Source§impl<TX, N> StatsReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
impl<TX, N> StatsReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
Source§fn count_entries<T>(&self) -> Result<usize, ProviderError>where
T: Table,
fn count_entries<T>(&self) -> Result<usize, ProviderError>where
T: Table,
Source§impl<TX, N> StorageChangeSetReader for DatabaseProvider<TX, N>where
TX: DbTx,
N: NodeTypes,
impl<TX, N> StorageChangeSetReader for DatabaseProvider<TX, N>where
TX: DbTx,
N: NodeTypes,
Source§fn storage_changeset(
&self,
block_number: u64,
) -> Result<Vec<(BlockNumberAddress, StorageEntry)>, ProviderError>
fn storage_changeset( &self, block_number: u64, ) -> Result<Vec<(BlockNumberAddress, StorageEntry)>, ProviderError>
Source§impl<TX, N> StorageReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
impl<TX, N> StorageReader for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
Source§fn plain_state_storages(
&self,
addresses_with_keys: impl IntoIterator<Item = (Address, impl IntoIterator<Item = FixedBytes<32>>)>,
) -> Result<Vec<(Address, Vec<StorageEntry>)>, ProviderError>
fn plain_state_storages( &self, addresses_with_keys: impl IntoIterator<Item = (Address, impl IntoIterator<Item = FixedBytes<32>>)>, ) -> Result<Vec<(Address, Vec<StorageEntry>)>, ProviderError>
Source§fn changed_storages_with_range(
&self,
range: RangeInclusive<u64>,
) -> Result<BTreeMap<Address, BTreeSet<FixedBytes<32>>>, ProviderError>
fn changed_storages_with_range( &self, range: RangeInclusive<u64>, ) -> Result<BTreeMap<Address, BTreeSet<FixedBytes<32>>>, ProviderError>
Source§fn changed_storages_and_blocks_with_range(
&self,
range: RangeInclusive<u64>,
) -> Result<BTreeMap<(Address, FixedBytes<32>), Vec<u64>>, ProviderError>
fn changed_storages_and_blocks_with_range( &self, range: RangeInclusive<u64>, ) -> Result<BTreeMap<(Address, FixedBytes<32>), Vec<u64>>, ProviderError>
Source§impl<TX, N> StorageTrieWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
impl<TX, N> StorageTrieWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
Source§fn write_storage_trie_updates(
&self,
storage_tries: &HashMap<FixedBytes<32>, StorageTrieUpdates>,
) -> Result<usize, ProviderError>
fn write_storage_trie_updates( &self, storage_tries: &HashMap<FixedBytes<32>, StorageTrieUpdates>, ) -> Result<usize, ProviderError>
Writes storage trie updates from the given storage trie map. First sorts the storage trie updates by the hashed address, writing in sorted order.
Source§fn write_individual_storage_trie_updates(
&self,
hashed_address: FixedBytes<32>,
updates: &StorageTrieUpdates,
) -> Result<usize, ProviderError>
fn write_individual_storage_trie_updates( &self, hashed_address: FixedBytes<32>, updates: &StorageTrieUpdates, ) -> Result<usize, ProviderError>
Source§impl<TX, N> TransactionsProvider for DatabaseProvider<TX, N>
impl<TX, N> TransactionsProvider for DatabaseProvider<TX, N>
Source§fn transaction_id(
&self,
tx_hash: FixedBytes<32>,
) -> Result<Option<u64>, ProviderError>
fn transaction_id( &self, tx_hash: FixedBytes<32>, ) -> Result<Option<u64>, ProviderError>
Source§fn transaction_by_id(
&self,
id: u64,
) -> Result<Option<TransactionSigned>, ProviderError>
fn transaction_by_id( &self, id: u64, ) -> Result<Option<TransactionSigned>, ProviderError>
Source§fn transaction_by_id_no_hash(
&self,
id: u64,
) -> Result<Option<TransactionSignedNoHash>, ProviderError>
fn transaction_by_id_no_hash( &self, id: u64, ) -> Result<Option<TransactionSignedNoHash>, ProviderError>
Source§fn transaction_by_hash(
&self,
hash: FixedBytes<32>,
) -> Result<Option<TransactionSigned>, ProviderError>
fn transaction_by_hash( &self, hash: FixedBytes<32>, ) -> Result<Option<TransactionSigned>, ProviderError>
Source§fn transaction_by_hash_with_meta(
&self,
tx_hash: FixedBytes<32>,
) -> Result<Option<(TransactionSigned, TransactionMeta)>, ProviderError>
fn transaction_by_hash_with_meta( &self, tx_hash: FixedBytes<32>, ) -> Result<Option<(TransactionSigned, TransactionMeta)>, ProviderError>
Source§fn transaction_block(&self, id: u64) -> Result<Option<u64>, ProviderError>
fn transaction_block(&self, id: u64) -> Result<Option<u64>, ProviderError>
Source§fn transactions_by_block(
&self,
id: HashOrNumber,
) -> Result<Option<Vec<TransactionSigned>>, ProviderError>
fn transactions_by_block( &self, id: HashOrNumber, ) -> Result<Option<Vec<TransactionSigned>>, ProviderError>
Source§fn transactions_by_block_range(
&self,
range: impl RangeBounds<u64>,
) -> Result<Vec<Vec<TransactionSigned>>, ProviderError>
fn transactions_by_block_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<Vec<TransactionSigned>>, ProviderError>
Source§fn transactions_by_tx_range(
&self,
range: impl RangeBounds<u64>,
) -> Result<Vec<TransactionSignedNoHash>, ProviderError>
fn transactions_by_tx_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<TransactionSignedNoHash>, ProviderError>
Source§fn senders_by_tx_range(
&self,
range: impl RangeBounds<u64>,
) -> Result<Vec<Address>, ProviderError>
fn senders_by_tx_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<Address>, ProviderError>
Source§fn transaction_sender(&self, id: u64) -> Result<Option<Address>, ProviderError>
fn transaction_sender(&self, id: u64) -> Result<Option<Address>, ProviderError>
Source§impl<TX, N> TransactionsProviderExt for DatabaseProvider<TX, N>
impl<TX, N> TransactionsProviderExt for DatabaseProvider<TX, N>
Source§fn transaction_hashes_by_range(
&self,
tx_range: Range<u64>,
) -> Result<Vec<(FixedBytes<32>, u64)>, ProviderError>
fn transaction_hashes_by_range( &self, tx_range: Range<u64>, ) -> Result<Vec<(FixedBytes<32>, u64)>, ProviderError>
Recovers transaction hashes by walking through Transactions
table and
calculating them in a parallel manner. Returned unsorted.
§fn transaction_range_by_block_range(
&self,
block_range: RangeInclusive<u64>,
) -> Result<RangeInclusive<u64>, ProviderError>
fn transaction_range_by_block_range( &self, block_range: RangeInclusive<u64>, ) -> Result<RangeInclusive<u64>, ProviderError>
Source§impl<TX, N> TrieWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
impl<TX, N> TrieWriter for DatabaseProvider<TX, N>where
TX: DbTxMut + DbTx + 'static,
N: NodeTypes,
Source§fn write_trie_updates(
&self,
trie_updates: &TrieUpdates,
) -> Result<usize, ProviderError>
fn write_trie_updates( &self, trie_updates: &TrieUpdates, ) -> Result<usize, ProviderError>
Writes trie updates. Returns the number of entries modified.
Source§impl<TX, N> TryIntoHistoricalStateProvider for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
impl<TX, N> TryIntoHistoricalStateProvider for DatabaseProvider<TX, N>where
TX: DbTx + 'static,
N: NodeTypes,
Source§fn try_into_history_at_block(
self,
block_number: u64,
) -> Result<Box<dyn StateProvider>, ProviderError>
fn try_into_history_at_block( self, block_number: u64, ) -> Result<Box<dyn StateProvider>, ProviderError>
StateProvider
indexed by the given historic block number.Source§impl<TX, N> WithdrawalsProvider for DatabaseProvider<TX, N>
impl<TX, N> WithdrawalsProvider for DatabaseProvider<TX, N>
Source§fn withdrawals_by_block(
&self,
id: HashOrNumber,
timestamp: u64,
) -> Result<Option<Withdrawals>, ProviderError>
fn withdrawals_by_block( &self, id: HashOrNumber, timestamp: u64, ) -> Result<Option<Withdrawals>, ProviderError>
Source§fn latest_withdrawal(&self) -> Result<Option<Withdrawal>, ProviderError>
fn latest_withdrawal(&self) -> Result<Option<Withdrawal>, ProviderError>
Auto Trait Implementations§
impl<TX, N> Freeze for DatabaseProvider<TX, N>where
TX: Freeze,
impl<TX, N> !RefUnwindSafe for DatabaseProvider<TX, N>
impl<TX, N> Send for DatabaseProvider<TX, N>where
TX: Send,
impl<TX, N> Sync for DatabaseProvider<TX, N>where
TX: Sync,
impl<TX, N> Unpin for DatabaseProvider<TX, N>where
TX: Unpin,
impl<TX, N> !UnwindSafe for DatabaseProvider<TX, N>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the foreground set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red()
and
green()
, which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg()
:
use yansi::{Paint, Color};
painted.fg(Color::White);
Set foreground color to white using white()
.
use yansi::Paint;
painted.white();
§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the background set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red()
and
on_green()
, which have the same functionality but
are pithier.
§Example
Set background color to red using fg()
:
use yansi::{Paint, Color};
painted.bg(Color::Red);
Set background color to red using on_red()
.
use yansi::Paint;
painted.on_red();
§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling [Attribute
] value
.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold()
and
underline()
, which have the same functionality
but are pithier.
§Example
Make text bold using attr()
:
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);
Make text bold using using bold()
.
use yansi::Paint;
painted.bold();
§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi
[Quirk
] value
.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask()
and
wrap()
, which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk()
:
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);
Enable wrapping using wrap()
.
use yansi::Paint;
painted.wrap();
§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the [Condition
] value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted
only when both stdout
and stderr
are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<T> MaybeDebug for Twhere
T: Debug,
impl<T> MaybeSend for Twhere
T: Send,
impl<T> MaybeSendSync for T
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.