From c3ad7547ce8039724ba6e1a37b8da935ae5dc483 Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Fri, 3 Apr 2026 18:41:45 +0200 Subject: [PATCH] core/state: various fixes in EIP-7928 (#34641) Co-authored-by: jwasinger --- core/state/bal_state_transition.go | 13 +++++++------ core/types/bal/bal_encoding.go | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/core/state/bal_state_transition.go b/core/state/bal_state_transition.go index 0dccefd7c3..a2307fc887 100644 --- a/core/state/bal_state_transition.go +++ b/core/state/bal_state_transition.go @@ -102,7 +102,7 @@ func (s *BALStateTransition) Error() error { } func (s *BALStateTransition) setError(err error) { - if s.err != nil { + if s.err == nil { s.err = err } } @@ -169,10 +169,11 @@ func (s *BALStateTransition) commitAccount(addr common.Address) (*accountUpdate, ) op := &accountUpdate{ address: addr, - data: types.SlimAccountRLP(*s.postStates[addr]), // TODO: cache the updated state acocunt somewhere + data: types.SlimAccountRLP(*s.postStates[addr]), // TODO: cache the updated state account somewhere } - if prestate, exist := s.prestates.Load(addr); exist { - prestate := prestate.(*types.StateAccount) + var prestate *types.StateAccount + if ps, exist := s.prestates.Load(addr); exist { + prestate = ps.(*types.StateAccount) op.origin = types.SlimAccountRLP(*prestate) } @@ -181,10 +182,10 @@ func (s *BALStateTransition) commitAccount(addr common.Address) (*accountUpdate, hash: crypto.Keccak256Hash(s.diffs[addr].Code), blob: s.diffs[addr].Code, } - if op.origin == nil { + if prestate == nil { code.originHash = types.EmptyCodeHash } else { - code.originHash = crypto.Keccak256Hash(op.origin) + code.originHash = common.BytesToHash(prestate.CodeHash) } op.code = &code } diff --git a/core/types/bal/bal_encoding.go b/core/types/bal/bal_encoding.go index 0029d5d668..fc1d36007e 100644 --- a/core/types/bal/bal_encoding.go +++ b/core/types/bal/bal_encoding.go @@ -367,7 +367,7 @@ func (e *AccountAccess) validate(blockTxCount int) error { return errors.New("balance changes not in ascending order by tx index") } - if len(e.BalanceChanges) > 0 && int(e.BalanceChanges[len(e.BalanceChanges)-1].TxIdx) > blockTxCount+2 { + if len(e.BalanceChanges) > 0 && int(e.BalanceChanges[len(e.BalanceChanges)-1].TxIdx) > blockTxCount+1 { return errors.New("highest balance change index beyond what is allowed") } // check that the balance values are set and there are no duplicate index entries