mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-18 18:02:24 +00:00
core/state: fix several hook issues
This commit is contained in:
parent
8ca0cd582d
commit
21f5a77ece
4 changed files with 20 additions and 22 deletions
|
|
@ -459,7 +459,7 @@ func (s *stateObject) AddBalance(amount *uint256.Int) uint256.Int {
|
|||
return s.SetBalance(new(uint256.Int).Add(s.Balance(), amount))
|
||||
}
|
||||
|
||||
// SetBalance sets the balance for the object, and returns the prevous balance
|
||||
// SetBalance sets the balance for the object, and returns the previous balance.
|
||||
func (s *stateObject) SetBalance(amount *uint256.Int) uint256.Int {
|
||||
prev := *s.data.Balance
|
||||
s.db.journal.balanceChange(s.address, s.data.Balance)
|
||||
|
|
|
|||
|
|
@ -402,24 +402,22 @@ func (s *StateDB) HasSelfDestructed(addr common.Address) bool {
|
|||
// AddBalance adds amount to the account associated with addr.
|
||||
func (s *StateDB) AddBalance(addr common.Address, amount *uint256.Int, reason tracing.BalanceChangeReason) uint256.Int {
|
||||
stateObject := s.getOrNewStateObject(addr)
|
||||
if stateObject != nil {
|
||||
return stateObject.AddBalance(amount)
|
||||
if stateObject == nil {
|
||||
return uint256.Int{}
|
||||
}
|
||||
return uint256.Int{}
|
||||
return stateObject.AddBalance(amount)
|
||||
}
|
||||
|
||||
// SubBalance subtracts amount from the account associated with addr.
|
||||
func (s *StateDB) SubBalance(addr common.Address, amount *uint256.Int, reason tracing.BalanceChangeReason) uint256.Int {
|
||||
stateObject := s.getOrNewStateObject(addr)
|
||||
var prev uint256.Int
|
||||
if stateObject == nil {
|
||||
return uint256.Int{}
|
||||
}
|
||||
if amount.IsZero() {
|
||||
return prev
|
||||
return *(stateObject.Balance())
|
||||
}
|
||||
if stateObject != nil {
|
||||
prev = *(stateObject.Balance())
|
||||
stateObject.SetBalance(new(uint256.Int).Sub(stateObject.Balance(), amount))
|
||||
}
|
||||
return prev
|
||||
return stateObject.SetBalance(new(uint256.Int).Sub(stateObject.Balance(), amount))
|
||||
}
|
||||
|
||||
func (s *StateDB) SetBalance(addr common.Address, amount *uint256.Int, reason tracing.BalanceChangeReason) {
|
||||
|
|
@ -505,15 +503,15 @@ func (s *StateDB) SelfDestruct(addr common.Address) uint256.Int {
|
|||
return prevBalance
|
||||
}
|
||||
|
||||
func (s *StateDB) Selfdestruct6780(addr common.Address) uint256.Int {
|
||||
func (s *StateDB) Selfdestruct6780(addr common.Address) (uint256.Int, bool) {
|
||||
stateObject := s.getStateObject(addr)
|
||||
if stateObject == nil {
|
||||
return uint256.Int{}
|
||||
return uint256.Int{}, false
|
||||
}
|
||||
if stateObject.newContract {
|
||||
return s.SelfDestruct(addr)
|
||||
return s.SelfDestruct(addr), true
|
||||
}
|
||||
return *(stateObject.Balance())
|
||||
return *(stateObject.Balance()), false
|
||||
}
|
||||
|
||||
// SetTransientState sets transient storage for a given account. It
|
||||
|
|
|
|||
|
|
@ -159,7 +159,7 @@ func (s *hookedStateDB) Witness() *stateless.Witness {
|
|||
|
||||
func (s *hookedStateDB) SubBalance(addr common.Address, amount *uint256.Int, reason tracing.BalanceChangeReason) uint256.Int {
|
||||
prev := s.inner.SubBalance(addr, amount, reason)
|
||||
if s.hooks.OnBalanceChange != nil {
|
||||
if s.hooks.OnBalanceChange != nil && !amount.IsZero() {
|
||||
newBalance := new(uint256.Int).Sub(&prev, amount)
|
||||
s.hooks.OnBalanceChange(addr, prev.ToBig(), newBalance.ToBig(), reason)
|
||||
}
|
||||
|
|
@ -168,7 +168,7 @@ func (s *hookedStateDB) SubBalance(addr common.Address, amount *uint256.Int, rea
|
|||
|
||||
func (s *hookedStateDB) AddBalance(addr common.Address, amount *uint256.Int, reason tracing.BalanceChangeReason) uint256.Int {
|
||||
prev := s.inner.AddBalance(addr, amount, reason)
|
||||
if s.hooks.OnBalanceChange != nil {
|
||||
if s.hooks.OnBalanceChange != nil && !amount.IsZero() {
|
||||
newBalance := new(uint256.Int).Add(&prev, amount)
|
||||
s.hooks.OnBalanceChange(addr, prev.ToBig(), newBalance.ToBig(), reason)
|
||||
}
|
||||
|
|
@ -207,14 +207,14 @@ func (s *hookedStateDB) SelfDestruct(address common.Address) uint256.Int {
|
|||
return prev
|
||||
}
|
||||
|
||||
func (s *hookedStateDB) Selfdestruct6780(address common.Address) uint256.Int {
|
||||
prev := s.inner.Selfdestruct6780(address)
|
||||
if !prev.IsZero() {
|
||||
func (s *hookedStateDB) Selfdestruct6780(address common.Address) (uint256.Int, bool) {
|
||||
prev, changed := s.inner.Selfdestruct6780(address)
|
||||
if !prev.IsZero() && changed {
|
||||
if s.hooks.OnBalanceChange != nil {
|
||||
s.hooks.OnBalanceChange(address, prev.ToBig(), new(big.Int), tracing.BalanceDecreaseSelfdestruct)
|
||||
}
|
||||
}
|
||||
return prev
|
||||
return prev, changed
|
||||
}
|
||||
|
||||
func (s *hookedStateDB) AddLog(log *types.Log) {
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ type StateDB interface {
|
|||
SelfDestruct(common.Address) uint256.Int
|
||||
HasSelfDestructed(common.Address) bool
|
||||
|
||||
Selfdestruct6780(common.Address) uint256.Int
|
||||
Selfdestruct6780(common.Address) (uint256.Int, bool)
|
||||
|
||||
// Exist reports whether the given account exists in state.
|
||||
// Notably this should also return true for self-destructed accounts.
|
||||
|
|
|
|||
Loading…
Reference in a new issue