mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-05-13 03:26:38 +00:00
core/vm: fix lint, check leftover gas before stateful check
This commit is contained in:
parent
338285621b
commit
2667b3fb0c
2 changed files with 10 additions and 3 deletions
|
|
@ -19,6 +19,7 @@ package vm
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/math"
|
"github.com/ethereum/go-ethereum/common/math"
|
||||||
"github.com/ethereum/go-ethereum/params"
|
"github.com/ethereum/go-ethereum/params"
|
||||||
|
|
@ -420,7 +421,11 @@ func gasCallIntrinsic(evm *EVM, contract *Contract, stack *Stack, mem *Memory, m
|
||||||
if gas, overflow = math.SafeAdd(memoryGas, transferGas); overflow {
|
if gas, overflow = math.SafeAdd(memoryGas, transferGas); overflow {
|
||||||
return 0, ErrGasUintOverflow
|
return 0, ErrGasUintOverflow
|
||||||
}
|
}
|
||||||
|
// Terminate the gas measurement if the leftover gas is not sufficient,
|
||||||
|
// it can effectively prevent accessing the states in the following steps.
|
||||||
|
if contract.Gas < gas {
|
||||||
|
return 0, ErrOutOfGas
|
||||||
|
}
|
||||||
// Stateful check
|
// Stateful check
|
||||||
var stateGas uint64
|
var stateGas uint64
|
||||||
if evm.chainRules.IsEIP158 {
|
if evm.chainRules.IsEIP158 {
|
||||||
|
|
|
||||||
|
|
@ -308,7 +308,8 @@ func makeCallVariantGasCallEIP7702(intrinsicFunc gasFunc) gasFunc {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
// Terminate the gas measurement if the leftover gas is not sufficient,
|
// Terminate the gas measurement if the leftover gas is not sufficient,
|
||||||
// it can effectively prevent accessing the states in the following steps
|
// it can effectively prevent accessing the states in the following steps.
|
||||||
|
// It's an essential safeguard before any stateful check.
|
||||||
if contract.Gas < intrinsicCost {
|
if contract.Gas < intrinsicCost {
|
||||||
return 0, ErrOutOfGas
|
return 0, ErrOutOfGas
|
||||||
}
|
}
|
||||||
|
|
@ -325,7 +326,8 @@ func makeCallVariantGasCallEIP7702(intrinsicFunc gasFunc) gasFunc {
|
||||||
return 0, ErrOutOfGas
|
return 0, ErrOutOfGas
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Calculate the gas budget for the nested call. The costs defined by
|
||||||
|
// EIP-2929 and EIP-7702 have already been applied.
|
||||||
evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, intrinsicCost, stack.Back(0))
|
evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, intrinsicCost, stack.Back(0))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue