mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: improve in memory block tracking (#9773)
This commit is contained in:
@ -563,7 +563,7 @@ mod tests {
|
||||
use reth_primitives::Receipt;
|
||||
|
||||
fn create_mock_state(block_number: u64) -> BlockState {
|
||||
BlockState::new(get_executed_block_with_number(block_number))
|
||||
BlockState::new(get_executed_block_with_number(block_number, B256::random()))
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -643,7 +643,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_state_new() {
|
||||
let number = rand::thread_rng().gen::<u64>();
|
||||
let block = get_executed_block_with_number(number);
|
||||
let block = get_executed_block_with_number(number, B256::random());
|
||||
|
||||
let state = BlockState::new(block.clone());
|
||||
|
||||
@ -653,7 +653,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_state_block() {
|
||||
let number = rand::thread_rng().gen::<u64>();
|
||||
let block = get_executed_block_with_number(number);
|
||||
let block = get_executed_block_with_number(number, B256::random());
|
||||
|
||||
let state = BlockState::new(block.clone());
|
||||
|
||||
@ -663,17 +663,17 @@ mod tests {
|
||||
#[test]
|
||||
fn test_state_hash() {
|
||||
let number = rand::thread_rng().gen::<u64>();
|
||||
let block = get_executed_block_with_number(number);
|
||||
let block = get_executed_block_with_number(number, B256::random());
|
||||
|
||||
let state = BlockState::new(block.clone());
|
||||
|
||||
assert_eq!(state.hash(), block.block().hash());
|
||||
assert_eq!(state.hash(), block.block.hash());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_state_number() {
|
||||
let number = rand::thread_rng().gen::<u64>();
|
||||
let block = get_executed_block_with_number(number);
|
||||
let block = get_executed_block_with_number(number, B256::random());
|
||||
|
||||
let state = BlockState::new(block);
|
||||
|
||||
@ -683,7 +683,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_state_state_root() {
|
||||
let number = rand::thread_rng().gen::<u64>();
|
||||
let block = get_executed_block_with_number(number);
|
||||
let block = get_executed_block_with_number(number, B256::random());
|
||||
|
||||
let state = BlockState::new(block.clone());
|
||||
|
||||
@ -694,7 +694,7 @@ mod tests {
|
||||
fn test_state_receipts() {
|
||||
let receipts = Receipts { receipt_vec: vec![vec![Some(Receipt::default())]] };
|
||||
|
||||
let block = get_executed_block_with_receipts(receipts.clone());
|
||||
let block = get_executed_block_with_receipts(receipts.clone(), B256::random());
|
||||
|
||||
let state = BlockState::new(block);
|
||||
|
||||
@ -704,8 +704,8 @@ mod tests {
|
||||
#[test]
|
||||
fn test_in_memory_state_chain_update() {
|
||||
let state = CanonicalInMemoryState::new(HashMap::new(), HashMap::new(), None);
|
||||
let block1 = get_executed_block_with_number(0);
|
||||
let block2 = get_executed_block_with_number(0);
|
||||
let block1 = get_executed_block_with_number(0, B256::random());
|
||||
let block2 = get_executed_block_with_number(0, B256::random());
|
||||
let chain = NewCanonicalChain::Commit { new: vec![block1.clone()] };
|
||||
state.update_chain(chain);
|
||||
assert_eq!(state.head_state().unwrap().block().block().hash(), block1.block().hash());
|
||||
|
||||
@ -6,6 +6,7 @@ use rand::Rng;
|
||||
use reth_execution_types::{Chain, ExecutionOutcome};
|
||||
use reth_primitives::{
|
||||
Address, Block, BlockNumber, Receipts, Requests, SealedBlockWithSenders, TransactionSigned,
|
||||
B256,
|
||||
};
|
||||
use reth_trie::{updates::TrieUpdates, HashedPostState};
|
||||
use revm::db::BundleState;
|
||||
@ -15,18 +16,22 @@ use std::{
|
||||
};
|
||||
use tokio::sync::broadcast::{self, Sender};
|
||||
|
||||
fn get_executed_block(block_number: BlockNumber, receipts: Receipts) -> ExecutedBlock {
|
||||
fn get_executed_block(
|
||||
block_number: BlockNumber,
|
||||
receipts: Receipts,
|
||||
parent_hash: B256,
|
||||
) -> ExecutedBlock {
|
||||
let mut block = Block::default();
|
||||
let mut header = block.header.clone();
|
||||
header.number = block_number;
|
||||
header.parent_hash = parent_hash;
|
||||
header.ommers_hash = B256::random();
|
||||
block.header = header;
|
||||
|
||||
let sender = Address::random();
|
||||
let tx = TransactionSigned::default();
|
||||
block.body.push(tx);
|
||||
let sealed = block.seal_slow();
|
||||
let sender = Address::random();
|
||||
let sealed_with_senders = SealedBlockWithSenders::new(sealed.clone(), vec![sender]).unwrap();
|
||||
|
||||
ExecutedBlock::new(
|
||||
Arc::new(sealed),
|
||||
Arc::new(sealed_with_senders.senders),
|
||||
@ -42,20 +47,27 @@ fn get_executed_block(block_number: BlockNumber, receipts: Receipts) -> Executed
|
||||
}
|
||||
|
||||
/// Generates an `ExecutedBlock` that includes the given `Receipts`.
|
||||
pub fn get_executed_block_with_receipts(receipts: Receipts) -> ExecutedBlock {
|
||||
pub fn get_executed_block_with_receipts(receipts: Receipts, parent_hash: B256) -> ExecutedBlock {
|
||||
let number = rand::thread_rng().gen::<u64>();
|
||||
|
||||
get_executed_block(number, receipts)
|
||||
get_executed_block(number, receipts, parent_hash)
|
||||
}
|
||||
|
||||
/// Generates an `ExecutedBlock` with the given `BlockNumber`.
|
||||
pub fn get_executed_block_with_number(block_number: BlockNumber) -> ExecutedBlock {
|
||||
get_executed_block(block_number, Receipts { receipt_vec: vec![vec![]] })
|
||||
pub fn get_executed_block_with_number(
|
||||
block_number: BlockNumber,
|
||||
parent_hash: B256,
|
||||
) -> ExecutedBlock {
|
||||
get_executed_block(block_number, Receipts { receipt_vec: vec![vec![]] }, parent_hash)
|
||||
}
|
||||
|
||||
/// Generates a range of executed blocks with ascending block numbers.
|
||||
pub fn get_executed_blocks(range: Range<u64>) -> impl Iterator<Item = ExecutedBlock> {
|
||||
range.map(get_executed_block_with_number)
|
||||
let mut parent_hash = B256::default();
|
||||
range.map(move |number| {
|
||||
let block = get_executed_block_with_number(number, parent_hash);
|
||||
parent_hash = block.block.hash();
|
||||
block
|
||||
})
|
||||
}
|
||||
|
||||
/// A test `ChainEventSubscriptions`
|
||||
|
||||
Reference in New Issue
Block a user