|
|
@ -287,6 +287,7 @@ func (st *StateTransition) TransitionDb() (*ExecutionResult, error) { |
|
|
|
sender := vm.AccountRef(msg.From()) |
|
|
|
sender := vm.AccountRef(msg.From()) |
|
|
|
homestead := st.evm.ChainConfig().IsHomestead(st.evm.Context.BlockNumber) |
|
|
|
homestead := st.evm.ChainConfig().IsHomestead(st.evm.Context.BlockNumber) |
|
|
|
istanbul := st.evm.ChainConfig().IsIstanbul(st.evm.Context.BlockNumber) |
|
|
|
istanbul := st.evm.ChainConfig().IsIstanbul(st.evm.Context.BlockNumber) |
|
|
|
|
|
|
|
london := st.evm.ChainConfig().IsLondon(st.evm.Context.BlockNumber) |
|
|
|
contractCreation := msg.To() == nil |
|
|
|
contractCreation := msg.To() == nil |
|
|
|
|
|
|
|
|
|
|
|
// Check clauses 4-5, subtract intrinsic gas if everything is correct
|
|
|
|
// Check clauses 4-5, subtract intrinsic gas if everything is correct
|
|
|
@ -319,7 +320,8 @@ func (st *StateTransition) TransitionDb() (*ExecutionResult, error) { |
|
|
|
st.state.SetNonce(msg.From(), st.state.GetNonce(sender.Address())+1) |
|
|
|
st.state.SetNonce(msg.From(), st.state.GetNonce(sender.Address())+1) |
|
|
|
ret, st.gas, vmerr = st.evm.Call(sender, st.to(), st.data, st.gas, st.value) |
|
|
|
ret, st.gas, vmerr = st.evm.Call(sender, st.to(), st.data, st.gas, st.value) |
|
|
|
} |
|
|
|
} |
|
|
|
if !st.evm.ChainConfig().IsLondon(st.evm.Context.BlockNumber) { |
|
|
|
|
|
|
|
|
|
|
|
if !london { |
|
|
|
// Before EIP-3529: refunds were capped to gasUsed / 2
|
|
|
|
// Before EIP-3529: refunds were capped to gasUsed / 2
|
|
|
|
st.refundGas(params.RefundQuotient) |
|
|
|
st.refundGas(params.RefundQuotient) |
|
|
|
} else { |
|
|
|
} else { |
|
|
@ -327,7 +329,7 @@ func (st *StateTransition) TransitionDb() (*ExecutionResult, error) { |
|
|
|
st.refundGas(params.RefundQuotientEIP3529) |
|
|
|
st.refundGas(params.RefundQuotientEIP3529) |
|
|
|
} |
|
|
|
} |
|
|
|
effectiveTip := st.gasPrice |
|
|
|
effectiveTip := st.gasPrice |
|
|
|
if st.evm.ChainConfig().IsLondon(st.evm.Context.BlockNumber) { |
|
|
|
if london { |
|
|
|
effectiveTip = cmath.BigMin(st.gasTipCap, new(big.Int).Sub(st.gasFeeCap, st.evm.Context.BaseFee)) |
|
|
|
effectiveTip = cmath.BigMin(st.gasTipCap, new(big.Int).Sub(st.gasFeeCap, st.evm.Context.BaseFee)) |
|
|
|
} |
|
|
|
} |
|
|
|
st.state.AddBalance(st.evm.Context.Coinbase, new(big.Int).Mul(new(big.Int).SetUint64(st.gasUsed()), effectiveTip)) |
|
|
|
st.state.AddBalance(st.evm.Context.Coinbase, new(big.Int).Mul(new(big.Int).SetUint64(st.gasUsed()), effectiveTip)) |
|
|
|