mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat(tree): validate state root (#9369)
This commit is contained in:
@ -17,10 +17,12 @@ use reth_evm::execute::{BlockExecutorProvider, Executor};
|
||||
use reth_payload_primitives::PayloadTypes;
|
||||
use reth_payload_validator::ExecutionPayloadValidator;
|
||||
use reth_primitives::{
|
||||
Address, Block, BlockNumber, Receipts, Requests, SealedBlock, SealedBlockWithSenders, B256,
|
||||
U256,
|
||||
Address, Block, BlockNumber, GotExpected, Receipts, Requests, SealedBlock,
|
||||
SealedBlockWithSenders, B256, U256,
|
||||
};
|
||||
use reth_provider::{
|
||||
BlockReader, ExecutionOutcome, StateProvider, StateProviderFactory, StateRootProvider,
|
||||
};
|
||||
use reth_provider::{BlockReader, ExecutionOutcome, StateProvider, StateProviderFactory};
|
||||
use reth_revm::database::StateProviderDatabase;
|
||||
use reth_rpc_types::{
|
||||
engine::{
|
||||
@ -548,10 +550,16 @@ where
|
||||
PostExecutionInput::new(&output.receipts, &output.requests),
|
||||
)?;
|
||||
|
||||
// TODO: change StateRootProvider API to accept hashed post state
|
||||
let hashed_state = HashedPostState::from_bundle_state(&output.state.state);
|
||||
|
||||
// TODO: compute and validate state root
|
||||
let trie_output = TrieUpdates::default();
|
||||
let (state_root, trie_output) = state_provider.state_root_with_updates(&output.state)?;
|
||||
if state_root != block.state_root {
|
||||
return Err(ConsensusError::BodyStateRootDiff(
|
||||
GotExpected { got: state_root, expected: block.state_root }.into(),
|
||||
)
|
||||
.into())
|
||||
}
|
||||
|
||||
let executed = ExecutedBlock {
|
||||
block: Arc::new(block.block.seal(block_hash)),
|
||||
|
||||
Reference in New Issue
Block a user