diff --git a/Cargo.lock b/Cargo.lock index c68654a3cf..939bbe0a5c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1544,7 +1544,7 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef" dependencies = [ - "fastrand 2.4.0", + "fastrand 2.4.1", "tokio", ] @@ -3746,19 +3746,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "example-migrate-trie-to-packed" -version = "0.0.0" -dependencies = [ - "clap", - "eyre", - "reth-db", - "reth-db-api", - "reth-trie-common", - "reth-trie-db", - "serde_json", -] - [[package]] name = "example-network" version = "0.0.0" @@ -3910,9 +3897,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a043dc74da1e37d6afe657061213aa6f425f855399a11d3463c6ecccc4dfda1f" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "fastrlp" @@ -4179,7 +4166,7 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ - "fastrand 2.4.0", + "fastrand 2.4.1", "futures-core", "futures-io", "parking", @@ -6584,7 +6571,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" dependencies = [ - "fastrand 2.4.0", + "fastrand 2.4.1", "phf_shared", ] @@ -11872,7 +11859,7 @@ version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ - "fastrand 2.4.0", + "fastrand 2.4.1", "getrandom 0.4.2", "once_cell", "rustix", @@ -12259,9 +12246,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.10+spec-1.1.0" +version = "0.25.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82418ca169e235e6c399a84e395ab6debeb3bc90edc959bf0f48647c6a32d1b" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" dependencies = [ "indexmap 2.13.1", "toml_datetime 1.1.1+spec-1.1.0", diff --git a/Cargo.toml b/Cargo.toml index 27234bbd07..645671f228 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -134,7 +134,6 @@ members = [ "examples/exex-subscription", "examples/exex-test", "examples/full-contract-state", - "examples/migrate-trie-to-packed", "examples/manual-p2p/", "examples/network-txpool/", "examples/network/", diff --git a/examples/migrate-trie-to-packed/Cargo.toml b/examples/migrate-trie-to-packed/Cargo.toml deleted file mode 100644 index 833f3c2be1..0000000000 --- a/examples/migrate-trie-to-packed/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -name = "example-migrate-trie-to-packed" -version = "0.0.0" -publish = false -edition.workspace = true -license.workspace = true - -[dependencies] -reth-db = { workspace = true, features = ["mdbx"] } -reth-db-api = { workspace = true } -reth-trie-db = { workspace = true } -reth-trie-common = { workspace = true } -eyre.workspace = true -serde_json.workspace = true -clap = { workspace = true, features = ["derive"] } diff --git a/examples/migrate-trie-to-packed/src/main.rs b/examples/migrate-trie-to-packed/src/main.rs deleted file mode 100644 index c11b610c8b..0000000000 --- a/examples/migrate-trie-to-packed/src/main.rs +++ /dev/null @@ -1,133 +0,0 @@ -#![allow(unused_crate_dependencies)] - -//! Migrates reth trie tables from legacy (v1, 65-byte nibble keys) to packed (v2, 33-byte nibble -//! keys). -//! -//! This reads all entries from `AccountsTrie` and `StoragesTrie` using the legacy encoding, -//! clears both tables, and rewrites them using packed encoding. Finally, it updates the -//! `StorageSettings` metadata entry to v2. -//! -//! **Back up your datadir before running this.** -//! -//! Usage: -//! ```sh -//! cargo run -p example-migrate-trie-to-packed -- --datadir ~/.local/share/reth/mainnet -//! ``` - -use clap::Parser; -use eyre::Result; -use reth_db::{mdbx::DatabaseArguments, open_db}; -use reth_db_api::{ - cursor::{DbCursorRO, DbCursorRW}, - database::Database, - models::StorageSettings, - tables, - transaction::{DbTx, DbTxMut}, -}; -use reth_trie_common::{PackedStorageTrieEntry, PackedStoredNibbles, PackedStoredNibblesSubKey}; -use reth_trie_db::{PackedAccountsTrie, PackedStoragesTrie}; -use std::path::PathBuf; - -#[derive(Parser)] -#[command(about = "Migrate trie tables from legacy to packed nibble encoding")] -struct Cli { - /// Path to the reth datadir (e.g. ~/.local/share/reth/mainnet) - #[arg(long)] - datadir: PathBuf, -} - -fn main() -> Result<()> { - let cli = Cli::parse(); - let db_path = cli.datadir.join("db"); - - println!("Opening database at {}", db_path.display()); - let db = open_db(db_path, DatabaseArguments::default())?; - let tx = db.tx_mut()?; - - // -- AccountsTrie -- - println!("Reading AccountsTrie (legacy encoding)..."); - let account_entries = { - let mut cursor = tx.cursor_read::()?; - let mut entries = Vec::new(); - let walker = cursor.walk(None)?; - for result in walker { - let (key, value) = result?; - entries.push((key, value)); - if entries.len() % 100_000 == 0 { - println!(" read {} AccountsTrie entries", entries.len()); - } - } - entries - }; - let account_count = account_entries.len(); - println!("Read {account_count} AccountsTrie entries"); - - println!("Clearing AccountsTrie..."); - tx.clear::()?; - - println!("Writing AccountsTrie (packed encoding)..."); - { - let mut cursor = tx.cursor_write::()?; - for (i, (key, value)) in account_entries.into_iter().enumerate() { - let packed_key = PackedStoredNibbles(key.0); - cursor.upsert(packed_key, &value)?; - if (i + 1) % 100_000 == 0 { - println!(" wrote {} AccountsTrie entries", i + 1); - } - } - } - println!("Wrote {account_count} AccountsTrie entries (packed)"); - - // -- StoragesTrie -- - println!("Reading StoragesTrie (legacy encoding)..."); - let storage_entries = { - let mut cursor = tx.cursor_read::()?; - let mut entries = Vec::new(); - let walker = cursor.walk(None)?; - for result in walker { - let (key, value) = result?; - entries.push((key, value)); - if entries.len() % 100_000 == 0 { - println!(" read {} StoragesTrie entries", entries.len()); - } - } - entries - }; - let storage_count = storage_entries.len(); - println!("Read {storage_count} StoragesTrie entries"); - - println!("Clearing StoragesTrie..."); - tx.clear::()?; - - println!("Writing StoragesTrie (packed encoding)..."); - { - let mut cursor = tx.cursor_write::()?; - for (i, (key, value)) in storage_entries.into_iter().enumerate() { - let packed_entry = PackedStorageTrieEntry { - nibbles: PackedStoredNibblesSubKey(value.nibbles.0), - node: value.node, - }; - cursor.upsert(key, &packed_entry)?; - if (i + 1) % 100_000 == 0 { - println!(" wrote {} StoragesTrie entries", i + 1); - } - } - } - println!("Wrote {storage_count} StoragesTrie entries (packed)"); - - // -- Update StorageSettings metadata -- - println!("Updating StorageSettings to v2..."); - let settings = StorageSettings::v2(); - let settings_json = serde_json::to_vec(&settings)?; - tx.put::("storage_settings".to_string(), settings_json)?; - - println!("Committing transaction..."); - tx.commit()?; - - println!("Migration complete!"); - println!(" AccountsTrie: {account_count} entries migrated"); - println!(" StoragesTrie: {storage_count} entries migrated"); - println!(" StorageSettings: updated to v2"); - - Ok(()) -}