diff --git a/core/vm/evm.go b/core/vm/evm.go index 79b6ab5930..8b6ef55175 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -340,7 +340,10 @@ func (evm *EVM) DelegateCall(caller ContractRef, addr common.Address, input []by // It is allowed to call precompiles, even via delegatecall if p, isPrecompile := evm.precompile(addr); isPrecompile { - ret, gas, err = RunPrecompiledContract(p, evm, caller.Address(), input, gas) + // NOTE: caller must, at all times be a contract. It should never happen + // that caller is something other than a Contract. + parent := caller.(*Contract) + ret, gas, err = RunPrecompiledContract(p, evm, parent.CallerAddress, input, gas) } else { addrCopy := addr // Initialise a new contract and make initialise the delegate values