Merge pull request #37 from sei-protocol/yiren/revert-gas-refund-policy

Revert "feat: limit EVM max gas refund to 150% of used gas"
This commit is contained in:
yirenz 2024-11-27 10:43:59 -05:00 committed by GitHub
commit ad2a4cefac
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -473,39 +473,31 @@ func (st *StateTransition) TransitionDb() (*ExecutionResult, error) {
} }
func (st *StateTransition) refundGas(refundQuotient uint64) uint64 { func (st *StateTransition) refundGas(refundQuotient uint64) uint64 {
// Calculate state change refund // Apply refund counter, capped to a refund quotient
stateRefund := st.gasUsed() / refundQuotient refund := st.gasUsed() / refundQuotient
if stateRefund > st.state.GetRefund() { if refund > st.state.GetRefund() {
stateRefund = st.state.GetRefund() refund = st.state.GetRefund()
} }
// Calculate the total refund (unused gas + state refund) if st.evm.Config.Tracer != nil && st.evm.Config.Tracer.OnGasChange != nil && refund > 0 {
totalRefund := st.gasRemaining + stateRefund st.evm.Config.Tracer.OnGasChange(st.gasRemaining, st.gasRemaining+refund, tracing.GasChangeTxRefunds)
// Calculate the maximum refund allowed (150% of gas used)
maxRefund := st.gasUsed()/2 + st.gasUsed()
// Ensure the refund does not exceed the maximum allowed
if totalRefund > maxRefund {
totalRefund = maxRefund
} }
// Update gasRemaining st.gasRemaining += refund
st.gasRemaining += stateRefund
// Return ETH for total refund, exchanged at the original rate. // Return ETH for remaining gas, exchanged at the original rate.
totalRefundValue := new(big.Int).Mul(new(big.Int).SetUint64(totalRefund), st.msg.GasPrice) remaining := new(big.Int).Mul(new(big.Int).SetUint64(st.gasRemaining), st.msg.GasPrice)
st.state.AddBalance(st.msg.From, totalRefundValue, tracing.BalanceIncreaseGasReturn) st.state.AddBalance(st.msg.From, remaining, tracing.BalanceIncreaseGasReturn)
// Notify the tracer about the gas change
if st.evm.Config.Tracer != nil && st.evm.Config.Tracer.OnGasChange != nil && st.gasRemaining > 0 { if st.evm.Config.Tracer != nil && st.evm.Config.Tracer.OnGasChange != nil && st.gasRemaining > 0 {
st.evm.Config.Tracer.OnGasChange(st.gasRemaining, 0, tracing.GasChangeTxLeftOverReturned) st.evm.Config.Tracer.OnGasChange(st.gasRemaining, 0, tracing.GasChangeTxLeftOverReturned)
} }
// Update gas pool // Also return remaining gas to the block gas counter so it is
// available for the next transaction.
st.gp.AddGas(st.gasRemaining) st.gp.AddGas(st.gasRemaining)
return stateRefund return refund
} }
// gasUsed returns the amount of gas used up by the state transition. // gasUsed returns the amount of gas used up by the state transition.