Skip to content
This repository was archived by the owner on Jun 30, 2025. It is now read-only.

Commit d7a6593

Browse files
fix(vm): set callcode to use readOnly mode for precompile calls (evmos#24)
1 parent 359caee commit d7a6593

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

core/vm/evm.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas
208208
}
209209
}
210210

211+
// It is allowed to call precompiles, even via call -- as opposed to callcode, staticcall and delegatecall it can also modify state
211212
if isPrecompile {
212213
ret, gas, err = evm.RunPrecompiledContract(p, caller, input, gas, value, false)
213214
} else {
@@ -270,9 +271,9 @@ func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte,
270271
}(gas)
271272
}
272273

273-
// It is allowed to call precompiles, even via delegatecall
274+
// It is allowed to call precompiles, even via callcode, but only for reading
274275
if p, isPrecompile := evm.Precompile(addr); isPrecompile {
275-
ret, gas, err = evm.RunPrecompiledContract(p, caller, input, gas, value, false)
276+
ret, gas, err = evm.RunPrecompiledContract(p, caller, input, gas, value, true)
276277
} else {
277278
addrCopy := addr
278279
// Initialise a new contract and set the code that is to be used by the EVM.

0 commit comments

Comments
 (0)