mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: integrate NodeTypesWithDB (#10698)
Co-authored-by: joshieDo <93316087+joshieDo@users.noreply.github.com>
This commit is contained in:
@ -55,6 +55,7 @@ reth-provider = { workspace = true, features = ["test-utils"] }
|
||||
reth-storage-errors.workspace = true
|
||||
reth-trie-common = { workspace = true, features = ["test-utils", "arbitrary"] }
|
||||
reth-trie = { workspace = true, features = ["test-utils"] }
|
||||
reth-node-types.workspace = true
|
||||
|
||||
# trie
|
||||
triehash = "0.8"
|
||||
|
||||
@ -1,15 +1,9 @@
|
||||
use reth_chainspec::{Chain, ChainSpec, HOLESKY, MAINNET};
|
||||
use reth_db_api::database::Database;
|
||||
use reth_primitives::{
|
||||
constants::EMPTY_ROOT_HASH, keccak256, Account, Address, Bytes, StorageEntry, B256, U256,
|
||||
};
|
||||
use reth_provider::{
|
||||
test_utils::create_test_provider_factory, HashingWriter, ProviderFactory, TrieWriter,
|
||||
};
|
||||
use reth_storage_errors::provider::ProviderResult;
|
||||
use reth_trie::{proof::Proof, Nibbles, StateRoot};
|
||||
use reth_primitives::{constants::EMPTY_ROOT_HASH, keccak256, Account, Address, Bytes, B256, U256};
|
||||
use reth_provider::test_utils::{create_test_provider_factory, insert_genesis};
|
||||
use reth_trie::{proof::Proof, Nibbles};
|
||||
use reth_trie_common::{AccountProof, StorageProof};
|
||||
use reth_trie_db::{DatabaseProof, DatabaseStateRoot};
|
||||
use reth_trie_db::DatabaseProof;
|
||||
use std::{
|
||||
str::FromStr,
|
||||
sync::{Arc, LazyLock},
|
||||
@ -40,39 +34,6 @@ fn convert_to_proof<'a>(path: impl IntoIterator<Item = &'a str>) -> Vec<Bytes> {
|
||||
path.into_iter().map(Bytes::from_str).collect::<Result<Vec<_>, _>>().unwrap()
|
||||
}
|
||||
|
||||
fn insert_genesis<DB: Database>(
|
||||
provider_factory: &ProviderFactory<DB>,
|
||||
chain_spec: Arc<ChainSpec>,
|
||||
) -> ProviderResult<B256> {
|
||||
let provider = provider_factory.provider_rw()?;
|
||||
|
||||
// Hash accounts and insert them into hashing table.
|
||||
let genesis = chain_spec.genesis();
|
||||
let alloc_accounts =
|
||||
genesis.alloc.iter().map(|(addr, account)| (*addr, Some(Account::from(account))));
|
||||
provider.insert_account_for_hashing(alloc_accounts).unwrap();
|
||||
|
||||
let alloc_storage = genesis.alloc.clone().into_iter().filter_map(|(addr, account)| {
|
||||
// Only return `Some` if there is storage.
|
||||
account.storage.map(|storage| {
|
||||
(
|
||||
addr,
|
||||
storage.into_iter().map(|(key, value)| StorageEntry { key, value: value.into() }),
|
||||
)
|
||||
})
|
||||
});
|
||||
provider.insert_storage_for_hashing(alloc_storage)?;
|
||||
|
||||
let (root, updates) = StateRoot::from_tx(provider.tx_ref())
|
||||
.root_with_updates()
|
||||
.map_err(Into::<reth_db::DatabaseError>::into)?;
|
||||
provider.write_trie_updates(&updates).unwrap();
|
||||
|
||||
provider.commit()?;
|
||||
|
||||
Ok(root)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn testspec_proofs() {
|
||||
// Create test database and insert genesis accounts.
|
||||
|
||||
Reference in New Issue
Block a user