reth::providers

Struct DatabaseProvider

Source
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,

Source

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,

Source

pub fn latest<'a>( &'a self, ) -> Result<Box<dyn StateProvider + 'a>, ProviderError>

State provider for latest block

Source

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,

Source

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,

Source

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,

Source

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.

Source

pub fn into_tx(self) -> TX

Consume DbTx or DbTxMut.

Source

pub fn tx_mut(&mut self) -> &mut TX

Pass DbTx or DbTxMut mutable reference.

Source

pub const fn tx_ref(&self) -> &TX

Pass DbTx or DbTxMut immutable reference.

Source

pub fn chain_spec(&self) -> &<N as NodeTypes>::ChainSpec

Returns a reference to the chain specification.

Source

pub fn get_state( &self, range: RangeInclusive<u64>, ) -> Result<Option<ExecutionOutcome>, ProviderError>

Return the last N blocks of state, recreating the ExecutionOutcome.

  1. Iterate over the BlockBodyIndices table to get all the transaction ids.
  2. Iterate over the StorageChangeSets table and the AccountChangeSets 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.
  3. While iterating over the changeset tables, if we encounter a new account or storage slot, we:
    1. Take the old value from the changeset
    2. Take the new value from the plain state
    3. Save the old value to the local state
  4. While iterating over the changeset tables, if we encounter an account/storage slot we have seen before we:
    1. Take the old value from the changeset
    2. Take the new value from the local state
    3. 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,

Source

pub fn commit(self) -> Result<bool, ProviderError>

Commit database transaction.

Source

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:

Source

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:

Source

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.

Source

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,

Source§

fn changed_accounts_with_range( &self, range: impl RangeBounds<u64>, ) -> Result<BTreeSet<Address>, ProviderError>

Iterate over account changesets and return all account address that were changed.
Source§

fn basic_accounts( &self, iter: impl IntoIterator<Item = Address>, ) -> Result<Vec<(Address, Option<Account>)>, ProviderError>

Get basic account information for multiple accounts. A more efficient version than calling AccountReader::basic_account repeatedly. Read more
Source§

fn changed_accounts_and_blocks_with_range( &self, range: RangeInclusive<u64>, ) -> Result<BTreeMap<Address, Vec<u64>>, ProviderError>

Iterate over account changesets and return all account addresses that were changed alongside each specific set of blocks. Read more
Source§

impl<TX, N> AccountReader for DatabaseProvider<TX, N>
where TX: DbTx, N: NodeTypes,

Source§

fn basic_account( &self, address: Address, ) -> Result<Option<Account>, ProviderError>

Get basic account information. Read more
Source§

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>

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<TX, N> AsRef<DatabaseProvider<TX, N>> for DatabaseProvider<TX, N>
where N: NodeTypes,

Source§

fn as_ref(&self) -> &DatabaseProvider<TX, N>

Converts this type into a shared reference of the (usually inferred) input type.
Source§

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>

Take range of blocks and its execution result
Source§

fn remove_block_and_execution_range( &self, range: RangeInclusive<u64>, ) -> Result<(), ProviderError>

Remove range of blocks and its execution result
Source§

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>

Get the hash of the block with the given number. Returns None if no block with this number exists.
Source§

fn canonical_hashes_range( &self, start: u64, end: u64, ) -> Result<Vec<FixedBytes<32>>, ProviderError>

Get headers in range of block hashes or numbers Read more
§

fn convert_block_hash( &self, hash_or_number: HashOrNumber, ) -> Result<Option<FixedBytes<32>>, ProviderError>

Get the hash of the block with the given number. Returns None if no block with this number exists.
Source§

impl<TX, N> BlockNumReader for DatabaseProvider<TX, N>
where TX: DbTx + 'static, N: NodeTypes,

Source§

fn chain_info(&self) -> Result<ChainInfo, ProviderError>

Returns the current info for the chain.
Source§

fn best_block_number(&self) -> Result<u64, ProviderError>

Returns the best block number in the chain.
Source§

fn last_block_number(&self) -> Result<u64, ProviderError>

Returns the last block number associated with the last canonical header in the database.
Source§

fn block_number( &self, hash: FixedBytes<32>, ) -> Result<Option<u64>, ProviderError>

Gets the 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>

Gets the block number for the given 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>

Gets the block hash for the given 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>
where TX: DbTx + 'static, N: NodeTypes, <N as NodeTypes>::ChainSpec: EthereumHardforks,

Source§

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>

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>

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>

Tries to find in the given block source. Read more
Source§

fn pending_block(&self) -> Result<Option<SealedBlock>, ProviderError>

Returns the pending block if available Read more
Source§

fn pending_block_with_senders( &self, ) -> Result<Option<SealedBlockWithSenders>, ProviderError>

Returns the pending block if available Read more
Source§

fn pending_block_and_receipts( &self, ) -> Result<Option<(SealedBlock, Vec<Receipt>)>, ProviderError>

Returns the pending block and receipts if available.
Source§

fn block_body_indices( &self, num: u64, ) -> Result<Option<StoredBlockBodyIndices>, ProviderError>

Returns the block body indices with matching number from database. Read more
Source§

fn sealed_block_with_senders( &self, id: HashOrNumber, transaction_kind: TransactionVariant, ) -> Result<Option<SealedBlockWithSenders>, ProviderError>

Returns the sealed block with senders with matching number or hash from database. Read more
Source§

fn block_range( &self, range: RangeInclusive<u64>, ) -> Result<Vec<Block>, ProviderError>

Returns all blocks in the given inclusive range. Read more
Source§

fn block_with_senders_range( &self, range: RangeInclusive<u64>, ) -> Result<Vec<BlockWithSenders>, ProviderError>

Returns a range of blocks from the database, along with the senders of each transaction in the blocks.
Source§

fn sealed_block_with_senders_range( &self, range: RangeInclusive<u64>, ) -> Result<Vec<SealedBlockWithSenders>, ProviderError>

Returns a range of sealed blocks from the database, along with the senders of each transaction in the blocks.
§

fn block_by_hash( &self, hash: FixedBytes<32>, ) -> Result<Option<Block>, ProviderError>

Returns the block with matching hash from the database. Read more
§

fn block_by_number(&self, num: u64) -> Result<Option<Block>, ProviderError>

Returns the block with matching number from database. Read more
Source§

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>

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>

TODO(joshie): this fn should be moved to UnifiedStorageWriter eventually

Source§

type Body = BlockBody

The body this writer can write.
Source§

fn append_block_bodies( &self, bodies: impl Iterator<Item = (u64, Option<BlockBody>)>, ) -> Result<(), ProviderError>

Appends a batch of block bodies extending the canonical chain. This is invoked during Bodies stage and does not write to TransactionHashNumbers and TransactionSenders tables which are populated on later stages. Read more
Source§

impl<TX, N> ChainSpecProvider for DatabaseProvider<TX, N>
where TX: Send + Sync, N: NodeTypes, <N as NodeTypes>::ChainSpec: EthChainSpec + 'static,

Source§

type ChainSpec = <N as NodeTypes>::ChainSpec

The chain spec type.
Source§

fn chain_spec( &self, ) -> Arc<<DatabaseProvider<TX, N> as ChainSpecProvider>::ChainSpec>

Get an Arc to the chainspec.
Source§

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>

Returns the last finalized block number. Read more
Source§

fn last_safe_block_number(&self) -> Result<Option<u64>, ProviderError>

Returns the last safe block number. Read more
Source§

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>

Saves the given finalized block number in the DB.
Source§

fn save_safe_block_number(&self, block_number: u64) -> Result<(), ProviderError>

Saves the given safe block number in the DB.
Source§

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>

Iterate over account changesets and return the account state from before this block.
Source§

impl<TX, N> DBProvider for DatabaseProvider<TX, N>
where TX: DbTx + 'static, N: NodeTypes + 'static,

Source§

type Tx = TX

Underlying database transaction held by the provider.
Source§

fn tx_ref(&self) -> &<DatabaseProvider<TX, N> as DBProvider>::Tx

Returns a reference to the underlying transaction.
Source§

fn tx_mut(&mut self) -> &mut <DatabaseProvider<TX, N> as DBProvider>::Tx

Returns a mutable reference to the underlying transaction.
Source§

fn into_tx(self) -> <DatabaseProvider<TX, N> as DBProvider>::Tx

Consumes the provider and returns the underlying transaction.
Source§

fn prune_modes_ref(&self) -> &PruneModes

Returns a reference to prune modes.
§

fn disable_long_read_transaction_safety(self) -> Self

Disables long-lived read transaction safety guarantees for leaks prevention and observability improvements. Read more
§

fn commit(self) -> Result<bool, ProviderError>

Commit database transaction
§

fn table<T>( &self, ) -> Result<Vec<(<T as Table>::Key, <T as Table>::Value)>, DatabaseError>
where T: Table, <T as Table>::Key: Default + Ord,

Return full table as Vec
§

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,

Return a list of entries from the table, based on the given range.
§

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>,

Iterates over read only values in the given table and collects them into a vector. Read more
§

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>,

Iterates over read only values in the given table and collects them into a vector.
§

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>,

Iterates over read only values in the given table and collects them into a vector with capacity.
§

fn remove<T>( &self, range: impl RangeBounds<<T as Table>::Key>, ) -> Result<usize, DatabaseError>
where T: Table, Self::Tx: DbTxMut,

Remove list of entries from the table. Returns the number of entries removed.
§

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,

Return a list of entries from the table, and remove them, based on the given range.
Source§

impl<TX, N> Debug for DatabaseProvider<TX, N>
where TX: Debug, N: Debug + NodeTypes, <N as NodeTypes>::ChainSpec: Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<TX, N> EvmEnvProvider for DatabaseProvider<TX, N>
where TX: DbTx + 'static, N: NodeTypes, <N as NodeTypes>::ChainSpec: EthereumHardforks,

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>,

Fills the 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>,

Fills the 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>,

Fills the 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>,

Fills the 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>,

Fills the default 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,

Source§

fn from( provider: DatabaseProviderRW<DB, N>, ) -> DatabaseProvider<<DB as Database>::TXMut, N>

Converts to this type from the input type.
Source§

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>

Unwind and clear account hashing. Read more
Source§

fn unwind_account_hashing_range( &self, range: impl RangeBounds<u64>, ) -> Result<BTreeMap<FixedBytes<32>, Option<Account>>, ProviderError>

Unwind and clear account hashing in a given block range. Read more
Source§

fn insert_account_for_hashing( &self, changesets: impl IntoIterator<Item = (Address, Option<Account>)>, ) -> Result<BTreeMap<FixedBytes<32>, Option<Account>>, ProviderError>

Inserts all accounts into reth_db::tables::AccountsHistory table. Read more
Source§

fn unwind_storage_hashing( &self, changesets: impl Iterator<Item = (BlockNumberAddress, StorageEntry)>, ) -> Result<HashMap<FixedBytes<32>, BTreeSet<FixedBytes<32>>>, ProviderError>

Unwind and clear storage hashing Read more
Source§

fn unwind_storage_hashing_range( &self, range: impl RangeBounds<BlockNumberAddress>, ) -> Result<HashMap<FixedBytes<32>, BTreeSet<FixedBytes<32>>>, ProviderError>

Unwind and clear storage hashing in a given block range. Read more
Source§

fn insert_storage_for_hashing( &self, storages: impl IntoIterator<Item = (Address, impl IntoIterator<Item = StorageEntry>)>, ) -> Result<HashMap<FixedBytes<32>, BTreeSet<FixedBytes<32>>>, ProviderError>

Iterates over storages and inserts them to hashing table. Read more
Source§

fn insert_hashes( &self, range: RangeInclusive<u64>, end_block_hash: FixedBytes<32>, expected_state_root: FixedBytes<32>, ) -> Result<(), ProviderError>

Calculate the hashes of all changed accounts and storages, and finally calculate the state root. Read more
Source§

impl<TX, N> HeaderProvider for DatabaseProvider<TX, N>
where TX: DbTx + 'static, N: NodeTypes, <N as NodeTypes>::ChainSpec: EthereumHardforks,

Source§

fn header( &self, block_hash: &FixedBytes<32>, ) -> Result<Option<Header>, ProviderError>

Get header by block hash
Source§

fn header_by_number(&self, num: u64) -> Result<Option<Header>, ProviderError>

Get header by block number
Source§

fn header_td( &self, block_hash: &FixedBytes<32>, ) -> Result<Option<Uint<256, 4>>, ProviderError>

Get total difficulty by block hash.
Source§

fn header_td_by_number( &self, number: u64, ) -> Result<Option<Uint<256, 4>>, ProviderError>

Get total difficulty by block number.
Source§

fn headers_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<Header>, ProviderError>

Get headers in range of block numbers
Source§

fn sealed_header( &self, number: u64, ) -> Result<Option<SealedHeader>, ProviderError>

Get a single sealed header by block number.
Source§

fn sealed_headers_while( &self, range: impl RangeBounds<u64>, predicate: impl FnMut(&SealedHeader) -> bool, ) -> Result<Vec<SealedHeader>, ProviderError>

Get sealed headers while predicate returns true or the range is exhausted.
§

fn is_known(&self, block_hash: &FixedBytes<32>) -> Result<bool, ProviderError>

Check if block is known
§

fn sealed_header_by_hash( &self, block_hash: FixedBytes<32>, ) -> Result<Option<SealedHeader>, ProviderError>

Retrieves the header sealed by the given block hash.
§

fn header_by_hash_or_number( &self, hash_or_num: HashOrNumber, ) -> Result<Option<Header>, ProviderError>

Get header by block number or hash
§

fn sealed_headers_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<SealedHeader>, ProviderError>

Get headers in range of block numbers.
Source§

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>

Find a current sync gap for the headers depending on the last uninterrupted block number. Last uninterrupted block represents the block number before which there are no gaps. It’s up to the caller to ensure that last uninterrupted block is determined correctly.
Source§

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>

Unwind and clear account history indices. Read more
Source§

fn unwind_account_history_indices_range( &self, range: impl RangeBounds<u64>, ) -> Result<usize, ProviderError>

Unwind and clear account history indices in a given block range. Read more
Source§

fn insert_account_history_index( &self, account_transitions: impl IntoIterator<Item = (Address, impl IntoIterator<Item = u64>)>, ) -> Result<(), ProviderError>

Insert account change index to database. Used inside AccountHistoryIndex stage
Source§

fn unwind_storage_history_indices( &self, changesets: impl Iterator<Item = (BlockNumberAddress, StorageEntry)>, ) -> Result<usize, ProviderError>

Unwind and clear storage history indices. Read more
Source§

fn unwind_storage_history_indices_range( &self, range: impl RangeBounds<BlockNumberAddress>, ) -> Result<usize, ProviderError>

Unwind and clear storage history indices in a given block range. Read more
Source§

fn insert_storage_history_index( &self, storage_transitions: impl IntoIterator<Item = ((Address, FixedBytes<32>), impl IntoIterator<Item = u64>)>, ) -> Result<(), ProviderError>

Insert storage change index to database. Used inside StorageHistoryIndex stage
Source§

fn update_history_indices( &self, range: RangeInclusive<u64>, ) -> Result<(), ProviderError>

Read account/storage changesets and update account/storage history indices.
Source§

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>

Fetch the prune checkpoint for the given segment.
Source§

fn get_prune_checkpoints( &self, ) -> Result<Vec<(PruneSegment, PruneCheckpoint)>, ProviderError>

Fetch all the prune checkpoints.
Source§

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>

Save prune checkpoint.
Source§

impl<TX, N> ReceiptProvider for DatabaseProvider<TX, N>
where TX: DbTx + 'static, N: NodeTypes, <N as NodeTypes>::ChainSpec: EthereumHardforks,

Source§

fn receipt(&self, id: u64) -> Result<Option<Receipt>, ProviderError>

Get receipt by transaction number Read more
Source§

fn receipt_by_hash( &self, hash: FixedBytes<32>, ) -> Result<Option<Receipt>, ProviderError>

Get receipt by transaction hash. Read more
Source§

fn receipts_by_block( &self, block: HashOrNumber, ) -> Result<Option<Vec<Receipt>>, ProviderError>

Get receipts by block num or hash. Read more
Source§

fn receipts_by_tx_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<Receipt>, ProviderError>

Get receipts by tx range.
Source§

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>

Get stage checkpoint progress.

Source§

fn get_stage_checkpoint( &self, id: StageId, ) -> Result<Option<StageCheckpoint>, ProviderError>

Fetch the checkpoint for the given stage.
Source§

fn get_all_checkpoints( &self, ) -> Result<Vec<(String, StageCheckpoint)>, ProviderError>

Reads all stage checkpoints and returns a list with the name of the stage and the checkpoint data.
Source§

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>

Save stage checkpoint.

Source§

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>

Update all pipeline sync stage progress.
Source§

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>

Remove the last N blocks of state.

The latest state will be unwound

  1. Iterate over the BlockBodyIndices table to get all the transaction ids.
  2. Iterate over the StorageChangeSets table and the AccountChangeSets 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.
  3. While iterating over the changeset tables, if we encounter a new account or storage slot, we:
    1. Take the old value from the changeset
    2. Take the new value from the plain state
    3. Save the old value to the local state
  4. While iterating over the changeset tables, if we encounter an account/storage slot we have seen before we:
    1. Take the old value from the changeset
    2. Take the new value from the local state
    3. Set the local state to the value in the changeset
Source§

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

  1. Iterate over the BlockBodyIndices table to get all the transaction ids.
  2. Iterate over the StorageChangeSets table and the AccountChangeSets 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.
  3. While iterating over the changeset tables, if we encounter a new account or storage slot, we:
    1. Take the old value from the changeset
    2. Take the new value from the plain state
    3. Save the old value to the local state
  4. While iterating over the changeset tables, if we encounter an account/storage slot we have seen before we:
    1. Take the old value from the changeset
    2. Take the new value from the local state
    3. Set the local state to the value in the changeset
Source§

fn write_state_reverts( &self, reverts: PlainStateReverts, first_block: u64, ) -> Result<(), ProviderError>

Write state reverts to the database. Read more
Source§

fn write_state_changes( &self, changes: StateChangeset, ) -> Result<(), ProviderError>

Write state changes to the database.
Source§

fn write_hashed_state( &self, hashed_state: &HashedPostStateSorted, ) -> Result<(), ProviderError>

Writes the hashed state changes to the database
Source§

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>

Get the ExecutionOutcome for the given block
Source§

impl<TX, N> StaticFileProviderFactory for DatabaseProvider<TX, N>
where N: NodeTypes,

Source§

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,

Source§

fn count_entries<T>(&self) -> Result<usize, ProviderError>
where T: Table,

Fetch the number of entries in the corresponding [Table]. Depending on the provider, it may route to different data sources other than [Table].
Source§

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>

Iterate over storage changesets and return the storage state from before this block.
Source§

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>

Get plainstate storages for addresses and storage keys.
Source§

fn changed_storages_with_range( &self, range: RangeInclusive<u64>, ) -> Result<BTreeMap<Address, BTreeSet<FixedBytes<32>>>, ProviderError>

Iterate over storage changesets and return all storage slots that were changed.
Source§

fn changed_storages_and_blocks_with_range( &self, range: RangeInclusive<u64>, ) -> Result<BTreeMap<(Address, FixedBytes<32>), Vec<u64>>, ProviderError>

Iterate over storage changesets and return all storage slots that were changed alongside each specific set of blocks. Read more
Source§

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>

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>

Writes storage trie updates for the given hashed address.
Source§

impl<TX, N> TransactionsProvider for DatabaseProvider<TX, N>
where TX: DbTx + 'static, N: NodeTypes, <N as NodeTypes>::ChainSpec: EthereumHardforks,

Source§

fn transaction_id( &self, tx_hash: FixedBytes<32>, ) -> Result<Option<u64>, ProviderError>

Get internal transaction identifier by transaction hash. Read more
Source§

fn transaction_by_id( &self, id: u64, ) -> Result<Option<TransactionSigned>, ProviderError>

Get transaction by id, computes hash every time so more expensive.
Source§

fn transaction_by_id_no_hash( &self, id: u64, ) -> Result<Option<TransactionSignedNoHash>, ProviderError>

Get transaction by id without computing the hash.
Source§

fn transaction_by_hash( &self, hash: FixedBytes<32>, ) -> Result<Option<TransactionSigned>, ProviderError>

Get transaction by transaction hash.
Source§

fn transaction_by_hash_with_meta( &self, tx_hash: FixedBytes<32>, ) -> Result<Option<(TransactionSigned, TransactionMeta)>, ProviderError>

Get transaction by transaction hash and additional metadata of the block the transaction was mined in
Source§

fn transaction_block(&self, id: u64) -> Result<Option<u64>, ProviderError>

Get transaction block number
Source§

fn transactions_by_block( &self, id: HashOrNumber, ) -> Result<Option<Vec<TransactionSigned>>, ProviderError>

Get transactions by block id.
Source§

fn transactions_by_block_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<Vec<TransactionSigned>>, ProviderError>

Get transactions by block range.
Source§

fn transactions_by_tx_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<TransactionSignedNoHash>, ProviderError>

Get transactions by tx range.
Source§

fn senders_by_tx_range( &self, range: impl RangeBounds<u64>, ) -> Result<Vec<Address>, ProviderError>

Get Senders from a tx range.
Source§

fn transaction_sender(&self, id: u64) -> Result<Option<Address>, ProviderError>

Get transaction sender. Read more
Source§

impl<TX, N> TransactionsProviderExt for DatabaseProvider<TX, N>
where TX: DbTx + 'static, N: NodeTypes, <N as NodeTypes>::ChainSpec: EthereumHardforks,

Source§

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>

Get transactions range by block range.
Source§

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>

Writes trie updates. Returns the number of entries modified.

Source§

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>

Returns a historical StateProvider indexed by the given historic block number.
Source§

impl<TX, N> WithdrawalsProvider for DatabaseProvider<TX, N>
where TX: DbTx + 'static, N: NodeTypes, <N as NodeTypes>::ChainSpec: EthereumHardforks,

Source§

fn withdrawals_by_block( &self, id: HashOrNumber, timestamp: u64, ) -> Result<Option<Withdrawals>, ProviderError>

Get withdrawals by block id.
Source§

fn latest_withdrawal(&self) -> Result<Option<Withdrawal>, ProviderError>

Get latest withdrawal from this block or earlier .

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 T
where T: ?Sized,

§

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 primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Primary].

§Example
println!("{}", value.primary());
§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color::Fixed].

§Example
println!("{}", value.fixed(color));
§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color::Rgb].

§Example
println!("{}", value.rgb(r, g, b));
§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Black].

§Example
println!("{}", value.black());
§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Red].

§Example
println!("{}", value.red());
§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Green].

§Example
println!("{}", value.green());
§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Yellow].

§Example
println!("{}", value.yellow());
§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Blue].

§Example
println!("{}", value.blue());
§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Magenta].

§Example
println!("{}", value.magenta());
§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color::Cyan].

§Example
println!("{}", value.cyan());
§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color::White].

§Example
println!("{}", value.white());
§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightBlack].

§Example
println!("{}", value.bright_black());
§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightRed].

§Example
println!("{}", value.bright_red());
§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightGreen].

§Example
println!("{}", value.bright_green());
§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightYellow].

§Example
println!("{}", value.bright_yellow());
§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightBlue].

§Example
println!("{}", value.bright_blue());
§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightMagenta].

§Example
println!("{}", value.bright_magenta());
§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightCyan].

§Example
println!("{}", value.bright_cyan());
§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color::BrightWhite].

§Example
println!("{}", value.bright_white());
§

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>

Returns self with the bg() set to [Color::Primary].

§Example
println!("{}", value.on_primary());
§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color::Fixed].

§Example
println!("{}", value.on_fixed(color));
§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color::Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Black].

§Example
println!("{}", value.on_black());
§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Red].

§Example
println!("{}", value.on_red());
§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Green].

§Example
println!("{}", value.on_green());
§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Yellow].

§Example
println!("{}", value.on_yellow());
§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Blue].

§Example
println!("{}", value.on_blue());
§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Magenta].

§Example
println!("{}", value.on_magenta());
§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color::Cyan].

§Example
println!("{}", value.on_cyan());
§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color::White].

§Example
println!("{}", value.on_white());
§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightBlack].

§Example
println!("{}", value.on_bright_black());
§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightRed].

§Example
println!("{}", value.on_bright_red());
§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightGreen].

§Example
println!("{}", value.on_bright_green());
§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightBlue].

§Example
println!("{}", value.on_bright_blue());
§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color::BrightWhite].

§Example
println!("{}", value.on_bright_white());
§

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 bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Bold].

§Example
println!("{}", value.bold());
§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Dim].

§Example
println!("{}", value.dim());
§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Italic].

§Example
println!("{}", value.italic());
§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute::Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute::RapidBlink].

§Example
println!("{}", value.rapid_blink());
§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Invert].

§Example
println!("{}", value.invert());
§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Conceal].

§Example
println!("{}", value.conceal());
§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute::Strike].

§Example
println!("{}", value.strike());
§

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 mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::Mask].

§Example
println!("{}", value.mask());
§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::Wrap].

§Example
println!("{}", value.wrap());
§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::Linger].

§Example
println!("{}", value.linger());
§

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.

Returns self with the quirk() set to [Quirk::Clear].

§Example
println!("{}", value.clear());
§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::Resetting].

§Example
println!("{}", value.resetting());
§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::Bright].

§Example
println!("{}", value.bright());
§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk::OnBright].

§Example
println!("{}", value.on_bright());
§

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);
§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new [Painted] with a default [Style]. Read more
§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows 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) -> R
where R: 'a,

Mutably borrows 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
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeDebug for T
where T: Debug,

§

impl<T> MaybeSend for T
where 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.