Skip to main content

reth_trie_db/
lib.rs

1//! An integration of `reth-trie` with `reth-db`.
2
3#![cfg_attr(not(test), warn(unused_crate_dependencies))]
4
5mod changesets;
6pub use changesets::*;
7mod hashed_cursor;
8mod prefix_set;
9mod proof;
10mod state;
11mod storage;
12mod trie_cursor;
13mod verify;
14
15pub use hashed_cursor::{
16    DatabaseHashedAccountCursor, DatabaseHashedCursorFactory, DatabaseHashedStorageCursor,
17};
18pub use prefix_set::load_prefix_sets_with_provider;
19pub use proof::{DatabaseProof, DatabaseStorageProof};
20pub use reth_db_api::tables::{PackedAccountsTrie, PackedStoragesTrie};
21pub use state::{DatabaseHashedPostState, DatabaseStateRoot};
22pub use storage::{hashed_storage_from_reverts_with_provider, DatabaseStorageRoot};
23pub use trie_cursor::{
24    DatabaseAccountTrieCursor, DatabaseStorageTrieCursor, DatabaseTrieCursorFactory,
25    LegacyKeyAdapter, PackedKeyAdapter, StorageTrieEntryLike, TrieKeyAdapter, TrieTableAdapter,
26};
27pub use verify::DatabaseVerifier;
28
29/// Dispatches a trie operation using the correct [`TrieKeyAdapter`] based on storage settings.
30///
31/// The first argument must implement
32/// [`StorageSettingsCache`](reth_storage_api::StorageSettingsCache). Inside the closure body, `$A`
33/// is a type alias for either [`PackedKeyAdapter`] or [`LegacyKeyAdapter`].
34///
35/// # Example
36///
37/// ```ignore
38/// reth_trie_db::with_adapter!(provider, |A| {
39///     let factory = DatabaseTrieCursorFactory::<_, A>::new(tx);
40///     // ...
41/// })
42/// ```
43#[macro_export]
44macro_rules! with_adapter {
45    ($settings_provider:expr, |$A:ident| $body:expr) => {
46        if $settings_provider.cached_storage_settings().is_v2() {
47            {
48                type $A = $crate::PackedKeyAdapter;
49                $body
50            }
51        } else {
52            {
53                type $A = $crate::LegacyKeyAdapter;
54                $body
55            }
56        }
57    };
58}