From fb5a848e4843be68e5424968180433d3447e6b55 Mon Sep 17 00:00:00 2001 From: Jared Wasinger Date: Mon, 19 Jan 2026 20:54:25 +0900 Subject: [PATCH] add static guards to call/callcode gas handler stateless components --- core/vm/gas_table.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/core/vm/gas_table.go b/core/vm/gas_table.go index af7e043dc7..09d62918c9 100644 --- a/core/vm/gas_table.go +++ b/core/vm/gas_table.go @@ -380,8 +380,12 @@ func gasCallStateless(evm *EVM, contract *Contract, stack *Stack, mem *Memory, m transfersValue = !stack.Back(2).IsZero() ) - if transfersValue && !evm.chainRules.IsEIP4762 { - gas += params.CallValueTransferGas + if transfersValue { + if evm.readOnly { + return 0, ErrWriteProtection + } else if !evm.chainRules.IsEIP4762 { + gas += params.CallValueTransferGas + } } memoryGas, err := memoryGasCost(mem, memorySize) @@ -452,11 +456,16 @@ func gasCallCodeStateless(evm *EVM, contract *Contract, stack *Stack, mem *Memor return 0, err } var ( - gas uint64 - overflow bool + gas uint64 + overflow bool + transfersValue = !stack.Back(2).IsZero() ) - if stack.Back(2).Sign() != 0 && !evm.chainRules.IsEIP4762 { - gas += params.CallValueTransferGas + if transfersValue { + if evm.readOnly { + return 0, ErrWriteProtection + } else if !evm.chainRules.IsEIP4762 { + gas += params.CallValueTransferGas + } } if gas, overflow = math.SafeAdd(gas, memoryGas); overflow { return 0, ErrGasUintOverflow