mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-04-30 03:01:58 -04:00
Compare commits
10 Commits
wt/batch-n
...
pr-21478
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48d404d392 | ||
|
|
098749e63a | ||
|
|
a4ae97f1a6 | ||
|
|
7c3713645f | ||
|
|
e581192da9 | ||
|
|
445b1e92c2 | ||
|
|
e4e05e9ef9 | ||
|
|
c8245594bc | ||
|
|
ed40ce8c4c | ||
|
|
1e734936d8 |
21
.github/workflows/e2e.yml
vendored
21
.github/workflows/e2e.yml
vendored
@@ -44,3 +44,24 @@ jobs:
|
||||
--exclude 'op-reth' \
|
||||
--exclude 'reth' \
|
||||
-E 'binary(e2e_testsuite)'
|
||||
|
||||
rocksdb:
|
||||
name: e2e-rocksdb
|
||||
runs-on: depot-ubuntu-latest-4
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
- uses: mozilla-actions/sccache-action@v0.0.9
|
||||
- uses: taiki-e/install-action@nextest
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
cache-on-failure: true
|
||||
- name: Run RocksDB e2e tests
|
||||
run: |
|
||||
cargo nextest run \
|
||||
--locked --features "edge" \
|
||||
-p reth-e2e-test-utils \
|
||||
-E 'binary(rocksdb)'
|
||||
|
||||
@@ -125,7 +125,10 @@ pub async fn setup_engine_with_chain_import(
|
||||
db.clone(),
|
||||
chain_spec.clone(),
|
||||
reth_provider::providers::StaticFileProvider::read_write(static_files_path.clone())?,
|
||||
reth_provider::providers::RocksDBProvider::builder(rocksdb_dir_path).build().unwrap(),
|
||||
reth_provider::providers::RocksDBProvider::builder(rocksdb_dir_path)
|
||||
.with_default_tables()
|
||||
.build()
|
||||
.unwrap(),
|
||||
)?;
|
||||
|
||||
// Initialize genesis if needed
|
||||
@@ -328,6 +331,7 @@ mod tests {
|
||||
reth_provider::providers::StaticFileProvider::read_write(static_files_path.clone())
|
||||
.unwrap(),
|
||||
reth_provider::providers::RocksDBProvider::builder(rocksdb_dir_path.clone())
|
||||
.with_default_tables()
|
||||
.build()
|
||||
.unwrap(),
|
||||
)
|
||||
@@ -392,6 +396,7 @@ mod tests {
|
||||
reth_provider::providers::StaticFileProvider::read_only(static_files_path, false)
|
||||
.unwrap(),
|
||||
reth_provider::providers::RocksDBProvider::builder(rocksdb_dir_path)
|
||||
.with_default_tables()
|
||||
.build()
|
||||
.unwrap(),
|
||||
)
|
||||
@@ -490,7 +495,10 @@ mod tests {
|
||||
db.clone(),
|
||||
chain_spec.clone(),
|
||||
reth_provider::providers::StaticFileProvider::read_write(static_files_path).unwrap(),
|
||||
reth_provider::providers::RocksDBProvider::builder(rocksdb_dir_path).build().unwrap(),
|
||||
reth_provider::providers::RocksDBProvider::builder(rocksdb_dir_path)
|
||||
.with_default_tables()
|
||||
.build()
|
||||
.unwrap(),
|
||||
)
|
||||
.expect("failed to create provider factory");
|
||||
|
||||
|
||||
@@ -10,11 +10,10 @@ use jsonrpsee::core::client::ClientT;
|
||||
use reth_chainspec::{ChainSpec, ChainSpecBuilder, MAINNET};
|
||||
use reth_db::tables;
|
||||
use reth_e2e_test_utils::{transaction::TransactionTestContext, wallet, E2ETestSetupBuilder};
|
||||
use reth_node_builder::NodeConfig;
|
||||
use reth_node_core::args::RocksDbArgs;
|
||||
use reth_node_ethereum::EthereumNode;
|
||||
use reth_payload_builder::EthPayloadBuilderAttributes;
|
||||
use reth_provider::RocksDBProviderFactory;
|
||||
use reth_provider::{RocksDBProviderFactory, StorageSettings};
|
||||
use std::{sync::Arc, time::Duration};
|
||||
|
||||
const ROCKSDB_POLL_TIMEOUT: Duration = Duration::from_secs(60);
|
||||
@@ -97,16 +96,24 @@ fn test_attributes_generator(timestamp: u64) -> EthPayloadBuilderAttributes {
|
||||
EthPayloadBuilderAttributes::new(B256::ZERO, attributes)
|
||||
}
|
||||
|
||||
/// Enables `RocksDB` for `TransactionHashNumbers` table.
|
||||
///
|
||||
/// Note: Static file changesets are disabled because `persistence_threshold(0)` causes
|
||||
/// a race where the static file writer expects sequential block numbers but receives
|
||||
/// them out of order, resulting in `UnexpectedStaticFileBlockNumber` errors.
|
||||
fn with_rocksdb_enabled<C>(mut config: NodeConfig<C>) -> NodeConfig<C> {
|
||||
config.rocksdb = RocksDbArgs { tx_hash: true, ..Default::default() };
|
||||
config.static_files.storage_changesets = false;
|
||||
config.static_files.account_changesets = false;
|
||||
config
|
||||
/// Verifies that `RocksDB` CLI defaults match `StorageSettings::base()`.
|
||||
#[test]
|
||||
fn test_rocksdb_defaults_match_storage_settings() {
|
||||
let args = RocksDbArgs::default();
|
||||
let settings = StorageSettings::base();
|
||||
|
||||
assert_eq!(
|
||||
args.tx_hash, settings.transaction_hash_numbers_in_rocksdb,
|
||||
"tx_hash default should match StorageSettings::base()"
|
||||
);
|
||||
assert_eq!(
|
||||
args.storages_history, settings.storages_history_in_rocksdb,
|
||||
"storages_history default should match StorageSettings::base()"
|
||||
);
|
||||
assert_eq!(
|
||||
args.account_history, settings.account_history_in_rocksdb,
|
||||
"account_history default should match StorageSettings::base()"
|
||||
);
|
||||
}
|
||||
|
||||
/// Smoke test: node boots with `RocksDB` routing enabled.
|
||||
@@ -118,7 +125,6 @@ async fn test_rocksdb_node_startup() -> Result<()> {
|
||||
|
||||
let (nodes, _tasks, _wallet) =
|
||||
E2ETestSetupBuilder::<EthereumNode, _>::new(1, chain_spec, test_attributes_generator)
|
||||
.with_node_config_modifier(with_rocksdb_enabled)
|
||||
.build()
|
||||
.await?;
|
||||
|
||||
@@ -146,7 +152,6 @@ async fn test_rocksdb_block_mining() -> Result<()> {
|
||||
|
||||
let (mut nodes, _tasks, _wallet) =
|
||||
E2ETestSetupBuilder::<EthereumNode, _>::new(1, chain_spec, test_attributes_generator)
|
||||
.with_node_config_modifier(with_rocksdb_enabled)
|
||||
.build()
|
||||
.await?;
|
||||
|
||||
@@ -203,7 +208,6 @@ async fn test_rocksdb_transaction_queries() -> Result<()> {
|
||||
chain_spec.clone(),
|
||||
test_attributes_generator,
|
||||
)
|
||||
.with_node_config_modifier(with_rocksdb_enabled)
|
||||
.with_tree_config_modifier(|config| config.with_persistence_threshold(0))
|
||||
.build()
|
||||
.await?;
|
||||
@@ -270,7 +274,6 @@ async fn test_rocksdb_multi_tx_same_block() -> Result<()> {
|
||||
chain_spec.clone(),
|
||||
test_attributes_generator,
|
||||
)
|
||||
.with_node_config_modifier(with_rocksdb_enabled)
|
||||
.with_tree_config_modifier(|config| config.with_persistence_threshold(0))
|
||||
.build()
|
||||
.await?;
|
||||
@@ -338,7 +341,6 @@ async fn test_rocksdb_txs_across_blocks() -> Result<()> {
|
||||
chain_spec.clone(),
|
||||
test_attributes_generator,
|
||||
)
|
||||
.with_node_config_modifier(with_rocksdb_enabled)
|
||||
.with_tree_config_modifier(|config| config.with_persistence_threshold(0))
|
||||
.build()
|
||||
.await?;
|
||||
@@ -423,7 +425,6 @@ async fn test_rocksdb_pending_tx_not_in_storage() -> Result<()> {
|
||||
chain_spec.clone(),
|
||||
test_attributes_generator,
|
||||
)
|
||||
.with_node_config_modifier(with_rocksdb_enabled)
|
||||
.with_tree_config_modifier(|config| config.with_persistence_threshold(0))
|
||||
.build()
|
||||
.await?;
|
||||
|
||||
@@ -1,13 +1,27 @@
|
||||
//! clap [Args](clap::Args) for `RocksDB` table routing configuration
|
||||
|
||||
use clap::{ArgAction, Args};
|
||||
use reth_storage_api::StorageSettings;
|
||||
|
||||
/// Default value for `RocksDB` routing flags.
|
||||
/// Default value for `tx_hash` routing flag.
|
||||
///
|
||||
/// When the `edge` feature is enabled, defaults to `true` to enable edge storage features.
|
||||
/// Otherwise defaults to `false` for legacy behavior.
|
||||
const fn default_rocksdb_flag() -> bool {
|
||||
cfg!(feature = "edge")
|
||||
/// Derived from [`StorageSettings::base()`] to ensure CLI defaults match storage defaults.
|
||||
const fn default_tx_hash_in_rocksdb() -> bool {
|
||||
StorageSettings::base().transaction_hash_numbers_in_rocksdb
|
||||
}
|
||||
|
||||
/// Default value for `storages_history` routing flag.
|
||||
///
|
||||
/// Derived from [`StorageSettings::base()`] to ensure CLI defaults match storage defaults.
|
||||
const fn default_storages_history_in_rocksdb() -> bool {
|
||||
StorageSettings::base().storages_history_in_rocksdb
|
||||
}
|
||||
|
||||
/// Default value for `account_history` routing flag.
|
||||
///
|
||||
/// Derived from [`StorageSettings::base()`] to ensure CLI defaults match storage defaults.
|
||||
const fn default_account_history_in_rocksdb() -> bool {
|
||||
StorageSettings::base().account_history_in_rocksdb
|
||||
}
|
||||
|
||||
/// Parameters for `RocksDB` table routing configuration.
|
||||
@@ -28,21 +42,21 @@ pub struct RocksDbArgs {
|
||||
///
|
||||
/// This is a genesis-initialization-only flag: changing it after genesis requires a re-sync.
|
||||
/// Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
#[arg(long = "rocksdb.tx-hash", default_value_t = default_rocksdb_flag(), action = ArgAction::Set)]
|
||||
#[arg(long = "rocksdb.tx-hash", default_value_t = default_tx_hash_in_rocksdb(), action = ArgAction::Set)]
|
||||
pub tx_hash: bool,
|
||||
|
||||
/// Route storages history tables to `RocksDB` instead of MDBX.
|
||||
///
|
||||
/// This is a genesis-initialization-only flag: changing it after genesis requires a re-sync.
|
||||
/// Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
#[arg(long = "rocksdb.storages-history", default_value_t = default_rocksdb_flag(), action = ArgAction::Set)]
|
||||
/// Defaults to `false`.
|
||||
#[arg(long = "rocksdb.storages-history", default_value_t = default_storages_history_in_rocksdb(), action = ArgAction::Set)]
|
||||
pub storages_history: bool,
|
||||
|
||||
/// Route account history tables to `RocksDB` instead of MDBX.
|
||||
///
|
||||
/// This is a genesis-initialization-only flag: changing it after genesis requires a re-sync.
|
||||
/// Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
#[arg(long = "rocksdb.account-history", default_value_t = default_rocksdb_flag(), action = ArgAction::Set)]
|
||||
/// Defaults to `false`.
|
||||
#[arg(long = "rocksdb.account-history", default_value_t = default_account_history_in_rocksdb(), action = ArgAction::Set)]
|
||||
pub account_history: bool,
|
||||
}
|
||||
|
||||
@@ -50,9 +64,9 @@ impl Default for RocksDbArgs {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
all: false,
|
||||
tx_hash: default_rocksdb_flag(),
|
||||
storages_history: default_rocksdb_flag(),
|
||||
account_history: default_rocksdb_flag(),
|
||||
tx_hash: default_tx_hash_in_rocksdb(),
|
||||
storages_history: default_storages_history_in_rocksdb(),
|
||||
account_history: default_account_history_in_rocksdb(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -106,7 +120,25 @@ mod tests {
|
||||
fn test_parse_all_flag() {
|
||||
let args = CommandParser::<RocksDbArgs>::parse_from(["reth", "--rocksdb.all"]).args;
|
||||
assert!(args.all);
|
||||
assert_eq!(args.tx_hash, default_rocksdb_flag());
|
||||
assert_eq!(args.tx_hash, default_tx_hash_in_rocksdb());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_defaults_match_storage_settings() {
|
||||
let args = RocksDbArgs::default();
|
||||
let settings = StorageSettings::base();
|
||||
assert_eq!(
|
||||
args.tx_hash, settings.transaction_hash_numbers_in_rocksdb,
|
||||
"tx_hash default should match StorageSettings::base()"
|
||||
);
|
||||
assert_eq!(
|
||||
args.storages_history, settings.storages_history_in_rocksdb,
|
||||
"storages_history default should match StorageSettings::base()"
|
||||
);
|
||||
assert_eq!(
|
||||
args.account_history, settings.account_history_in_rocksdb,
|
||||
"account_history default should match StorageSettings::base()"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -63,9 +63,9 @@ impl StorageSettings {
|
||||
transaction_senders_in_static_files: true,
|
||||
account_changesets_in_static_files: true,
|
||||
storage_changesets_in_static_files: true,
|
||||
storages_history_in_rocksdb: false,
|
||||
storages_history_in_rocksdb: true,
|
||||
transaction_hash_numbers_in_rocksdb: true,
|
||||
account_history_in_rocksdb: false,
|
||||
account_history_in_rocksdb: true,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,12 @@ use alloy_primitives::{keccak256, map::HashMap, Address, B256, U256};
|
||||
use reth_chainspec::EthChainSpec;
|
||||
use reth_codecs::Compact;
|
||||
use reth_config::config::EtlConfig;
|
||||
use reth_db_api::{tables, transaction::DbTxMut, DatabaseError};
|
||||
use reth_db_api::{
|
||||
models::{storage_sharded_key::StorageShardedKey, ShardedKey},
|
||||
tables,
|
||||
transaction::DbTxMut,
|
||||
BlockNumberList, DatabaseError,
|
||||
};
|
||||
use reth_etl::Collector;
|
||||
use reth_execution_errors::StateRootError;
|
||||
use reth_primitives_traits::{
|
||||
@@ -14,11 +19,11 @@ use reth_primitives_traits::{
|
||||
};
|
||||
use reth_provider::{
|
||||
errors::provider::ProviderResult, providers::StaticFileWriter, BlockHashReader, BlockNumReader,
|
||||
BundleStateInit, ChainSpecProvider, DBProvider, DatabaseProviderFactory, ExecutionOutcome,
|
||||
HashingWriter, HeaderProvider, HistoryWriter, MetadataProvider, MetadataWriter,
|
||||
OriginalValuesKnown, ProviderError, RevertsInit, StageCheckpointReader, StageCheckpointWriter,
|
||||
StateWriteConfig, StateWriter, StaticFileProviderFactory, StorageSettings,
|
||||
StorageSettingsCache, TrieWriter,
|
||||
BundleStateInit, ChainSpecProvider, DBProvider, DatabaseProviderFactory, EitherWriter,
|
||||
ExecutionOutcome, HashingWriter, HeaderProvider, HistoryWriter, MetadataProvider,
|
||||
MetadataWriter, NodePrimitivesProvider, OriginalValuesKnown, ProviderError, RevertsInit,
|
||||
RocksDBProviderFactory, StageCheckpointReader, StageCheckpointWriter, StateWriteConfig,
|
||||
StateWriter, StaticFileProviderFactory, StorageSettings, StorageSettingsCache, TrieWriter,
|
||||
};
|
||||
use reth_stages_types::{StageCheckpoint, StageId};
|
||||
use reth_static_file_types::StaticFileSegment;
|
||||
@@ -103,6 +108,9 @@ where
|
||||
+ TrieWriter
|
||||
+ MetadataWriter
|
||||
+ ChainSpecProvider
|
||||
+ StorageSettingsCache
|
||||
+ RocksDBProviderFactory
|
||||
+ NodePrimitivesProvider
|
||||
+ AsRef<PF::ProviderRW>,
|
||||
PF::ChainSpec: EthChainSpec<Header = <PF::Primitives as NodePrimitives>::BlockHeader>,
|
||||
{
|
||||
@@ -138,6 +146,9 @@ where
|
||||
+ TrieWriter
|
||||
+ MetadataWriter
|
||||
+ ChainSpecProvider
|
||||
+ StorageSettingsCache
|
||||
+ RocksDBProviderFactory
|
||||
+ NodePrimitivesProvider
|
||||
+ AsRef<PF::ProviderRW>,
|
||||
PF::ChainSpec: EthChainSpec<Header = <PF::Primitives as NodePrimitives>::BlockHeader>,
|
||||
{
|
||||
@@ -386,37 +397,64 @@ where
|
||||
}
|
||||
|
||||
/// Inserts history indices for genesis accounts and storage.
|
||||
///
|
||||
/// Writes to either MDBX or `RocksDB` based on storage settings configuration,
|
||||
/// using [`EitherWriter`] to abstract over the storage backend.
|
||||
pub fn insert_genesis_history<'a, 'b, Provider>(
|
||||
provider: &Provider,
|
||||
alloc: impl Iterator<Item = (&'a Address, &'b GenesisAccount)> + Clone,
|
||||
) -> ProviderResult<()>
|
||||
where
|
||||
Provider: DBProvider<Tx: DbTxMut> + HistoryWriter + ChainSpecProvider,
|
||||
Provider: DBProvider<Tx: DbTxMut>
|
||||
+ HistoryWriter
|
||||
+ ChainSpecProvider
|
||||
+ StorageSettingsCache
|
||||
+ RocksDBProviderFactory
|
||||
+ NodePrimitivesProvider,
|
||||
{
|
||||
let genesis_block_number = provider.chain_spec().genesis_header().number();
|
||||
insert_history(provider, alloc, genesis_block_number)
|
||||
}
|
||||
|
||||
/// Inserts history indices for genesis accounts and storage.
|
||||
///
|
||||
/// Writes to either MDBX or `RocksDB` based on storage settings configuration,
|
||||
/// using [`EitherWriter`] to abstract over the storage backend.
|
||||
pub fn insert_history<'a, 'b, Provider>(
|
||||
provider: &Provider,
|
||||
alloc: impl Iterator<Item = (&'a Address, &'b GenesisAccount)> + Clone,
|
||||
block: u64,
|
||||
) -> ProviderResult<()>
|
||||
where
|
||||
Provider: DBProvider<Tx: DbTxMut> + HistoryWriter,
|
||||
Provider: DBProvider<Tx: DbTxMut>
|
||||
+ HistoryWriter
|
||||
+ StorageSettingsCache
|
||||
+ RocksDBProviderFactory
|
||||
+ NodePrimitivesProvider,
|
||||
{
|
||||
let account_transitions = alloc.clone().map(|(addr, _)| (*addr, [block]));
|
||||
provider.insert_account_history_index(account_transitions)?;
|
||||
provider.with_rocksdb_batch(|batch| {
|
||||
let mut writer = EitherWriter::new_accounts_history(provider, batch)?;
|
||||
let list = BlockNumberList::new([block]).expect("single block always fits");
|
||||
for (addr, _) in alloc.clone() {
|
||||
writer.upsert_account_history(ShardedKey::last(*addr), &list)?;
|
||||
}
|
||||
trace!(target: "reth::cli", "Inserted account history");
|
||||
Ok(((), writer.into_raw_rocksdb_batch()))
|
||||
})?;
|
||||
|
||||
trace!(target: "reth::cli", "Inserted account history");
|
||||
|
||||
let storage_transitions = alloc
|
||||
.filter_map(|(addr, account)| account.storage.as_ref().map(|storage| (addr, storage)))
|
||||
.flat_map(|(addr, storage)| storage.keys().map(|key| ((*addr, *key), [block])));
|
||||
provider.insert_storage_history_index(storage_transitions)?;
|
||||
|
||||
trace!(target: "reth::cli", "Inserted storage history");
|
||||
provider.with_rocksdb_batch(|batch| {
|
||||
let mut writer = EitherWriter::new_storages_history(provider, batch)?;
|
||||
let list = BlockNumberList::new([block]).expect("single block always fits");
|
||||
for (addr, account) in alloc {
|
||||
if let Some(storage) = &account.storage {
|
||||
for key in storage.keys() {
|
||||
writer.upsert_storage_history(StorageShardedKey::last(*addr, *key), &list)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
trace!(target: "reth::cli", "Inserted storage history");
|
||||
Ok(((), writer.into_raw_rocksdb_batch()))
|
||||
})?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -492,6 +530,9 @@ where
|
||||
+ HashingWriter
|
||||
+ TrieWriter
|
||||
+ StateWriter
|
||||
+ StorageSettingsCache
|
||||
+ RocksDBProviderFactory
|
||||
+ NodePrimitivesProvider
|
||||
+ AsRef<Provider>,
|
||||
{
|
||||
if etl_config.file_size == 0 {
|
||||
@@ -628,6 +669,9 @@ where
|
||||
+ HashingWriter
|
||||
+ HistoryWriter
|
||||
+ StateWriter
|
||||
+ StorageSettingsCache
|
||||
+ RocksDBProviderFactory
|
||||
+ NodePrimitivesProvider
|
||||
+ AsRef<Provider>,
|
||||
{
|
||||
let accounts_len = collector.len();
|
||||
@@ -888,27 +932,59 @@ mod tests {
|
||||
let factory = create_test_provider_factory_with_chain_spec(chain_spec);
|
||||
init_genesis(&factory).unwrap();
|
||||
|
||||
let provider = factory.provider().unwrap();
|
||||
let expected_accounts = vec![
|
||||
(ShardedKey::new(address_with_balance, u64::MAX), IntegerList::new([0]).unwrap()),
|
||||
(ShardedKey::new(address_with_storage, u64::MAX), IntegerList::new([0]).unwrap()),
|
||||
];
|
||||
let expected_storages = vec![(
|
||||
StorageShardedKey::new(address_with_storage, storage_key, u64::MAX),
|
||||
IntegerList::new([0]).unwrap(),
|
||||
)];
|
||||
|
||||
let tx = provider.tx_ref();
|
||||
let collect_from_mdbx = |factory: &ProviderFactory<MockNodeTypesWithDB>| {
|
||||
let provider = factory.provider().unwrap();
|
||||
let tx = provider.tx_ref();
|
||||
(
|
||||
collect_table_entries::<Arc<DatabaseEnv>, tables::AccountsHistory>(tx).unwrap(),
|
||||
collect_table_entries::<Arc<DatabaseEnv>, tables::StoragesHistory>(tx).unwrap(),
|
||||
)
|
||||
};
|
||||
|
||||
assert_eq!(
|
||||
collect_table_entries::<Arc<DatabaseEnv>, tables::AccountsHistory>(tx)
|
||||
.expect("failed to collect"),
|
||||
vec![
|
||||
(ShardedKey::new(address_with_balance, u64::MAX), IntegerList::new([0]).unwrap()),
|
||||
(ShardedKey::new(address_with_storage, u64::MAX), IntegerList::new([0]).unwrap())
|
||||
],
|
||||
);
|
||||
#[cfg(feature = "edge")]
|
||||
{
|
||||
let settings = factory.cached_storage_settings();
|
||||
let rocksdb = factory.rocksdb_provider();
|
||||
|
||||
assert_eq!(
|
||||
collect_table_entries::<Arc<DatabaseEnv>, tables::StoragesHistory>(tx)
|
||||
.expect("failed to collect"),
|
||||
vec![(
|
||||
StorageShardedKey::new(address_with_storage, storage_key, u64::MAX),
|
||||
IntegerList::new([0]).unwrap()
|
||||
)],
|
||||
);
|
||||
let collect_rocksdb = |rocksdb: &reth_provider::providers::RocksDBProvider| {
|
||||
(
|
||||
rocksdb
|
||||
.iter::<tables::AccountsHistory>()
|
||||
.unwrap()
|
||||
.collect::<Result<Vec<_>, _>>()
|
||||
.unwrap(),
|
||||
rocksdb
|
||||
.iter::<tables::StoragesHistory>()
|
||||
.unwrap()
|
||||
.collect::<Result<Vec<_>, _>>()
|
||||
.unwrap(),
|
||||
)
|
||||
};
|
||||
|
||||
let (accounts, storages) = if settings.account_history_in_rocksdb {
|
||||
collect_rocksdb(&rocksdb)
|
||||
} else {
|
||||
collect_from_mdbx(&factory)
|
||||
};
|
||||
assert_eq!(accounts, expected_accounts);
|
||||
assert_eq!(storages, expected_storages);
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "edge"))]
|
||||
{
|
||||
let (accounts, storages) = collect_from_mdbx(&factory);
|
||||
assert_eq!(accounts, expected_accounts);
|
||||
assert_eq!(storages, expected_storages);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -627,6 +627,7 @@ impl<TX: DbTx + DbTxMut + 'static, N: NodeTypesForProvider> DatabaseProvider<TX,
|
||||
StateWriteConfig {
|
||||
write_receipts: !sf_ctx.write_receipts,
|
||||
write_account_changesets: !sf_ctx.write_account_changesets,
|
||||
write_storage_changesets: !sf_ctx.write_storage_changesets,
|
||||
},
|
||||
)?;
|
||||
timings.write_state += start.elapsed();
|
||||
@@ -1358,7 +1359,7 @@ impl<TX: DbTx, N: NodeTypes> StorageChangeSetReader for DatabaseProvider<TX, N>
|
||||
self.tx
|
||||
.cursor_dup_read::<tables::StorageChangeSets>()?
|
||||
.walk_range(storage_range)?
|
||||
.map(|result| -> ProviderResult<_> { Ok(result?) })
|
||||
.map(|r| r.map_err(Into::into))
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
@@ -1391,7 +1392,7 @@ impl<TX: DbTx, N: NodeTypes> StorageChangeSetReader for DatabaseProvider<TX, N>
|
||||
self.tx
|
||||
.cursor_dup_read::<tables::StorageChangeSets>()?
|
||||
.walk_range(BlockNumberAddress::range(range))?
|
||||
.map(|result| -> ProviderResult<_> { Ok(result?) })
|
||||
.map(|r| r.map_err(Into::into))
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
@@ -1448,32 +1449,15 @@ impl<TX: DbTx, N: NodeTypes> ChangeSetReader for DatabaseProvider<TX, N> {
|
||||
&self,
|
||||
range: impl core::ops::RangeBounds<BlockNumber>,
|
||||
) -> ProviderResult<Vec<(BlockNumber, AccountBeforeTx)>> {
|
||||
let range = to_range(range);
|
||||
let mut changesets = Vec::new();
|
||||
if self.cached_storage_settings().account_changesets_in_static_files &&
|
||||
let Some(highest) = self
|
||||
.static_file_provider
|
||||
.get_highest_static_file_block(StaticFileSegment::AccountChangeSets)
|
||||
{
|
||||
let static_end = range.end.min(highest + 1);
|
||||
if range.start < static_end {
|
||||
for block in range.start..static_end {
|
||||
let block_changesets = self.account_block_changeset(block)?;
|
||||
for changeset in block_changesets {
|
||||
changesets.push((block, changeset));
|
||||
}
|
||||
}
|
||||
}
|
||||
if self.cached_storage_settings().account_changesets_in_static_files {
|
||||
self.static_file_provider.account_changesets_range(range)
|
||||
} else {
|
||||
// Fetch from database for blocks not in static files
|
||||
let mut cursor = self.tx.cursor_read::<tables::AccountChangeSets>()?;
|
||||
for entry in cursor.walk_range(range)? {
|
||||
let (block_num, account_before) = entry?;
|
||||
changesets.push((block_num, account_before));
|
||||
}
|
||||
self.tx
|
||||
.cursor_read::<tables::AccountChangeSets>()?
|
||||
.walk_range(to_range(range))?
|
||||
.map(|r| r.map_err(Into::into))
|
||||
.collect()
|
||||
}
|
||||
|
||||
Ok(changesets)
|
||||
}
|
||||
|
||||
fn account_changeset_count(&self) -> ProviderResult<usize> {
|
||||
@@ -2304,52 +2288,55 @@ impl<TX: DbTxMut + DbTx + 'static, N: NodeTypesForProvider> StateWriter
|
||||
config: StateWriteConfig,
|
||||
) -> ProviderResult<()> {
|
||||
// Write storage changes
|
||||
tracing::trace!("Writing storage changes");
|
||||
let mut storages_cursor = self.tx_ref().cursor_dup_write::<tables::PlainStorageState>()?;
|
||||
for (block_index, mut storage_changes) in reverts.storage.into_iter().enumerate() {
|
||||
let block_number = first_block + block_index as BlockNumber;
|
||||
if config.write_storage_changesets {
|
||||
tracing::trace!("Writing storage changes");
|
||||
let mut storages_cursor =
|
||||
self.tx_ref().cursor_dup_write::<tables::PlainStorageState>()?;
|
||||
for (block_index, mut storage_changes) in reverts.storage.into_iter().enumerate() {
|
||||
let block_number = first_block + block_index as BlockNumber;
|
||||
|
||||
tracing::trace!(block_number, "Writing block change");
|
||||
// sort changes by address.
|
||||
storage_changes.par_sort_unstable_by_key(|a| a.address);
|
||||
let total_changes =
|
||||
storage_changes.iter().map(|change| change.storage_revert.len()).sum();
|
||||
let mut changeset = Vec::with_capacity(total_changes);
|
||||
for PlainStorageRevert { address, wiped, storage_revert } in storage_changes {
|
||||
let mut storage = storage_revert
|
||||
.into_iter()
|
||||
.map(|(k, v)| (B256::new(k.to_be_bytes()), v))
|
||||
.collect::<Vec<_>>();
|
||||
// sort storage slots by key.
|
||||
storage.par_sort_unstable_by_key(|a| a.0);
|
||||
tracing::trace!(block_number, "Writing block change");
|
||||
// sort changes by address.
|
||||
storage_changes.par_sort_unstable_by_key(|a| a.address);
|
||||
let total_changes =
|
||||
storage_changes.iter().map(|change| change.storage_revert.len()).sum();
|
||||
let mut changeset = Vec::with_capacity(total_changes);
|
||||
for PlainStorageRevert { address, wiped, storage_revert } in storage_changes {
|
||||
let mut storage = storage_revert
|
||||
.into_iter()
|
||||
.map(|(k, v)| (B256::new(k.to_be_bytes()), v))
|
||||
.collect::<Vec<_>>();
|
||||
// sort storage slots by key.
|
||||
storage.par_sort_unstable_by_key(|a| a.0);
|
||||
|
||||
// If we are writing the primary storage wipe transition, the pre-existing plain
|
||||
// storage state has to be taken from the database and written to storage history.
|
||||
// See [StorageWipe::Primary] for more details.
|
||||
//
|
||||
// TODO(mediocregopher): This could be rewritten in a way which doesn't require
|
||||
// collecting wiped entries into a Vec like this, see
|
||||
// `write_storage_trie_changesets`.
|
||||
let mut wiped_storage = Vec::new();
|
||||
if wiped {
|
||||
tracing::trace!(?address, "Wiping storage");
|
||||
if let Some((_, entry)) = storages_cursor.seek_exact(address)? {
|
||||
wiped_storage.push((entry.key, entry.value));
|
||||
while let Some(entry) = storages_cursor.next_dup_val()? {
|
||||
wiped_storage.push((entry.key, entry.value))
|
||||
// If we are writing the primary storage wipe transition, the pre-existing plain
|
||||
// storage state has to be taken from the database and written to storage
|
||||
// history. See [StorageWipe::Primary] for more details.
|
||||
//
|
||||
// TODO(mediocregopher): This could be rewritten in a way which doesn't require
|
||||
// collecting wiped entries into a Vec like this, see
|
||||
// `write_storage_trie_changesets`.
|
||||
let mut wiped_storage = Vec::new();
|
||||
if wiped {
|
||||
tracing::trace!(?address, "Wiping storage");
|
||||
if let Some((_, entry)) = storages_cursor.seek_exact(address)? {
|
||||
wiped_storage.push((entry.key, entry.value));
|
||||
while let Some(entry) = storages_cursor.next_dup_val()? {
|
||||
wiped_storage.push((entry.key, entry.value))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tracing::trace!(?address, ?storage, "Writing storage reverts");
|
||||
for (key, value) in StorageRevertsIter::new(storage, wiped_storage) {
|
||||
changeset.push(StorageBeforeTx { address, key, value });
|
||||
}
|
||||
}
|
||||
|
||||
tracing::trace!(?address, ?storage, "Writing storage reverts");
|
||||
for (key, value) in StorageRevertsIter::new(storage, wiped_storage) {
|
||||
changeset.push(StorageBeforeTx { address, key, value });
|
||||
}
|
||||
let mut storage_changesets_writer =
|
||||
EitherWriter::new_storage_changesets(self, block_number)?;
|
||||
storage_changesets_writer.append_storage_changeset(block_number, changeset)?;
|
||||
}
|
||||
|
||||
let mut storage_changesets_writer =
|
||||
EitherWriter::new_storage_changesets(self, block_number)?;
|
||||
storage_changesets_writer.append_storage_changeset(block_number, changeset)?;
|
||||
}
|
||||
|
||||
if !config.write_account_changesets {
|
||||
@@ -3389,8 +3376,15 @@ impl<TX: DbTxMut + DbTx + 'static, N: NodeTypesForProvider> BlockWriter
|
||||
|
||||
// Use pre-computed transitions for history indices since static file
|
||||
// writes aren't visible until commit.
|
||||
self.insert_account_history_index(account_transitions)?;
|
||||
self.insert_storage_history_index(storage_transitions)?;
|
||||
// Skip MDBX history index writes when RocksDB is configured for history
|
||||
// (history will be read from RocksDB via healing/stages instead).
|
||||
let storage_settings = self.cached_storage_settings();
|
||||
if !storage_settings.account_history_in_rocksdb {
|
||||
self.insert_account_history_index(account_transitions)?;
|
||||
}
|
||||
if !storage_settings.storages_history_in_rocksdb {
|
||||
self.insert_storage_history_index(storage_transitions)?;
|
||||
}
|
||||
durations_recorder.record_relative(metrics::Action::InsertHistoryIndices);
|
||||
|
||||
// Update pipeline progress
|
||||
|
||||
@@ -615,13 +615,13 @@ impl<N: NodePrimitives> StaticFileProvider<N> {
|
||||
let block_number = block.recovered_block().number();
|
||||
let reverts = block.execution_outcome().state.reverts.to_plain_state_reverts();
|
||||
|
||||
for account_block_reverts in reverts.accounts {
|
||||
let changeset = account_block_reverts
|
||||
.into_iter()
|
||||
.map(|(address, info)| AccountBeforeTx { address, info: info.map(Into::into) })
|
||||
.collect::<Vec<_>>();
|
||||
w.append_account_changeset(changeset, block_number)?;
|
||||
}
|
||||
let changeset: Vec<_> = reverts
|
||||
.accounts
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.map(|(address, info)| AccountBeforeTx { address, info: info.map(Into::into) })
|
||||
.collect();
|
||||
w.append_account_changeset(changeset, block_number)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -636,21 +636,21 @@ impl<N: NodePrimitives> StaticFileProvider<N> {
|
||||
let block_number = block.recovered_block().number();
|
||||
let reverts = block.execution_outcome().state.reverts.to_plain_state_reverts();
|
||||
|
||||
for storage_block_reverts in reverts.storage {
|
||||
let changeset = storage_block_reverts
|
||||
.into_iter()
|
||||
.flat_map(|revert| {
|
||||
revert.storage_revert.into_iter().map(move |(key, revert_to_slot)| {
|
||||
StorageBeforeTx {
|
||||
address: revert.address,
|
||||
key: B256::new(key.to_be_bytes()),
|
||||
value: revert_to_slot.to_previous_value(),
|
||||
}
|
||||
})
|
||||
let changeset: Vec<_> = reverts
|
||||
.storage
|
||||
.into_iter()
|
||||
.flatten()
|
||||
.flat_map(|revert| {
|
||||
revert.storage_revert.into_iter().map(move |(key, revert_to_slot)| {
|
||||
StorageBeforeTx {
|
||||
address: revert.address,
|
||||
key: B256::new(key.to_be_bytes()),
|
||||
value: revert_to_slot.to_previous_value(),
|
||||
}
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
w.append_storage_changeset(changeset, block_number)?;
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
w.append_storage_changeset(changeset, block_number)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -136,10 +136,16 @@ pub struct StateWriteConfig {
|
||||
pub write_receipts: bool,
|
||||
/// Whether to write account changesets.
|
||||
pub write_account_changesets: bool,
|
||||
/// Whether to write storage changesets.
|
||||
pub write_storage_changesets: bool,
|
||||
}
|
||||
|
||||
impl Default for StateWriteConfig {
|
||||
fn default() -> Self {
|
||||
Self { write_receipts: true, write_account_changesets: true }
|
||||
Self {
|
||||
write_receipts: true,
|
||||
write_account_changesets: true,
|
||||
write_storage_changesets: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! Traits and default implementations related to retrieval of blinded trie nodes.
|
||||
|
||||
use alloy_primitives::{map::HashMap, Bytes, B256};
|
||||
use alloy_primitives::{Bytes, B256};
|
||||
use reth_execution_errors::SparseTrieError;
|
||||
use reth_trie_common::{Nibbles, TrieMask};
|
||||
|
||||
@@ -35,21 +35,6 @@ pub struct RevealedNode {
|
||||
pub trait TrieNodeProvider {
|
||||
/// Retrieve trie node by path.
|
||||
fn trie_node(&self, path: &Nibbles) -> Result<Option<RevealedNode>, SparseTrieError>;
|
||||
|
||||
/// Batch retrieve trie nodes by paths. Default: sequential fallback.
|
||||
fn trie_nodes_batch(
|
||||
&self,
|
||||
paths: &[Nibbles],
|
||||
) -> Result<HashMap<Nibbles, RevealedNode>, SparseTrieError> {
|
||||
let mut result = HashMap::default();
|
||||
result.reserve(paths.len());
|
||||
for path in paths {
|
||||
if let Some(node) = self.trie_node(path)? {
|
||||
result.insert(path.clone(), node);
|
||||
}
|
||||
}
|
||||
Ok(result)
|
||||
}
|
||||
}
|
||||
|
||||
/// Default trie node provider factory that creates [`DefaultTrieNodeProviderFactory`].
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use super::{Proof, StorageProof};
|
||||
use crate::{hashed_cursor::HashedCursorFactory, trie_cursor::TrieCursorFactory};
|
||||
use alloy_primitives::{map::{B256Set, HashMap, HashSet}, B256};
|
||||
use alloy_primitives::{map::HashSet, B256};
|
||||
use reth_execution_errors::{SparseTrieError, SparseTrieErrorKind};
|
||||
use reth_trie_common::{MultiProofTargets, Nibbles};
|
||||
use reth_trie_sparse::provider::{
|
||||
@@ -94,48 +94,6 @@ where
|
||||
);
|
||||
Ok(node.map(|node| RevealedNode { node, tree_mask, hash_mask }))
|
||||
}
|
||||
|
||||
fn trie_nodes_batch(
|
||||
&self,
|
||||
paths: &[Nibbles],
|
||||
) -> Result<HashMap<Nibbles, RevealedNode>, SparseTrieError> {
|
||||
if paths.is_empty() {
|
||||
return Ok(HashMap::default());
|
||||
}
|
||||
|
||||
let start = enabled!(target: "trie::proof::blinded", Level::TRACE).then(Instant::now);
|
||||
|
||||
let targets: MultiProofTargets =
|
||||
paths.iter().map(|p| (pad_path_to_key(p), HashSet::default())).collect();
|
||||
|
||||
let mut proof = Proof::new(&self.trie_cursor_factory, &self.hashed_cursor_factory)
|
||||
.with_branch_node_masks(true)
|
||||
.multiproof(targets)
|
||||
.map_err(|error| SparseTrieErrorKind::Other(Box::new(error)))?;
|
||||
|
||||
let mut account_subtree = proof.account_subtree.into_inner();
|
||||
let mut result = HashMap::default();
|
||||
result.reserve(paths.len());
|
||||
|
||||
for path in paths {
|
||||
if let Some(node) = account_subtree.remove(path) {
|
||||
let masks = proof.branch_node_masks.remove(path);
|
||||
let hash_mask = masks.map(|m| m.hash_mask);
|
||||
let tree_mask = masks.map(|m| m.tree_mask);
|
||||
result.insert(path.clone(), RevealedNode { node, tree_mask, hash_mask });
|
||||
}
|
||||
}
|
||||
|
||||
trace!(
|
||||
target: "trie::proof::blinded",
|
||||
elapsed = ?start.unwrap().elapsed(),
|
||||
paths_count = paths.len(),
|
||||
results_count = result.len(),
|
||||
"Batch blinded nodes for account trie"
|
||||
);
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
}
|
||||
|
||||
/// Blinded provider for retrieving storage trie nodes by path.
|
||||
@@ -190,50 +148,4 @@ where
|
||||
);
|
||||
Ok(node.map(|node| RevealedNode { node, tree_mask, hash_mask }))
|
||||
}
|
||||
|
||||
fn trie_nodes_batch(
|
||||
&self,
|
||||
paths: &[Nibbles],
|
||||
) -> Result<HashMap<Nibbles, RevealedNode>, SparseTrieError> {
|
||||
if paths.is_empty() {
|
||||
return Ok(HashMap::default());
|
||||
}
|
||||
|
||||
let start = enabled!(target: "trie::proof::blinded", Level::TRACE).then(Instant::now);
|
||||
|
||||
let targets: B256Set = paths.iter().map(pad_path_to_key).collect();
|
||||
|
||||
let mut proof = StorageProof::new_hashed(
|
||||
&self.trie_cursor_factory,
|
||||
&self.hashed_cursor_factory,
|
||||
self.account,
|
||||
)
|
||||
.with_branch_node_masks(true)
|
||||
.storage_multiproof(targets)
|
||||
.map_err(|error| SparseTrieErrorKind::Other(Box::new(error)))?;
|
||||
|
||||
let mut subtree = proof.subtree.into_inner();
|
||||
let mut result = HashMap::default();
|
||||
result.reserve(paths.len());
|
||||
|
||||
for path in paths {
|
||||
if let Some(node) = subtree.remove(path) {
|
||||
let masks = proof.branch_node_masks.remove(path);
|
||||
let hash_mask = masks.map(|m| m.hash_mask);
|
||||
let tree_mask = masks.map(|m| m.tree_mask);
|
||||
result.insert(path.clone(), RevealedNode { node, tree_mask, hash_mask });
|
||||
}
|
||||
}
|
||||
|
||||
trace!(
|
||||
target: "trie::proof::blinded",
|
||||
account = ?self.account,
|
||||
elapsed = ?start.unwrap().elapsed(),
|
||||
paths_count = paths.len(),
|
||||
results_count = result.len(),
|
||||
"Batch blinded nodes for storage trie"
|
||||
);
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -184,7 +184,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -192,7 +192,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -919,7 +919,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -927,7 +927,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -175,7 +175,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -183,7 +183,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -173,7 +173,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -181,7 +181,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -184,7 +184,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -192,7 +192,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -919,7 +919,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -927,7 +927,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -175,7 +175,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -183,7 +183,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -168,7 +168,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -176,7 +176,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
@@ -173,7 +173,7 @@ RocksDB:
|
||||
--rocksdb.storages-history <STORAGES_HISTORY>
|
||||
Route storages history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
@@ -181,7 +181,7 @@ RocksDB:
|
||||
--rocksdb.account-history <ACCOUNT_HISTORY>
|
||||
Route account history tables to `RocksDB` instead of MDBX.
|
||||
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `true` when the `edge` feature is enabled, `false` otherwise.
|
||||
This is a genesis-initialization-only flag: changing it after genesis requires a re-sync. Defaults to `false`.
|
||||
|
||||
[default: false]
|
||||
[possible values: true, false]
|
||||
|
||||
Reference in New Issue
Block a user