|
|
@ -165,9 +165,6 @@ func (evm *EVM) Interpreter() *EVMInterpreter { |
|
|
|
// the necessary steps to create accounts and reverses the state in case of an
|
|
|
|
// the necessary steps to create accounts and reverses the state in case of an
|
|
|
|
// execution error or failed value transfer.
|
|
|
|
// execution error or failed value transfer.
|
|
|
|
func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas uint64, value *big.Int) (ret []byte, leftOverGas uint64, err error) { |
|
|
|
func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas uint64, value *big.Int) (ret []byte, leftOverGas uint64, err error) { |
|
|
|
if evm.Config.NoRecursion && evm.depth > 0 { |
|
|
|
|
|
|
|
return nil, gas, nil |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Fail if we're trying to execute above the call depth limit
|
|
|
|
// Fail if we're trying to execute above the call depth limit
|
|
|
|
if evm.depth > int(params.CallCreateDepth) { |
|
|
|
if evm.depth > int(params.CallCreateDepth) { |
|
|
|
return nil, gas, ErrDepth |
|
|
|
return nil, gas, ErrDepth |
|
|
@ -254,9 +251,6 @@ func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas |
|
|
|
// CallCode differs from Call in the sense that it executes the given address'
|
|
|
|
// CallCode differs from Call in the sense that it executes the given address'
|
|
|
|
// code with the caller as context.
|
|
|
|
// code with the caller as context.
|
|
|
|
func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte, gas uint64, value *big.Int) (ret []byte, leftOverGas uint64, err error) { |
|
|
|
func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte, gas uint64, value *big.Int) (ret []byte, leftOverGas uint64, err error) { |
|
|
|
if evm.Config.NoRecursion && evm.depth > 0 { |
|
|
|
|
|
|
|
return nil, gas, nil |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Fail if we're trying to execute above the call depth limit
|
|
|
|
// Fail if we're trying to execute above the call depth limit
|
|
|
|
if evm.depth > int(params.CallCreateDepth) { |
|
|
|
if evm.depth > int(params.CallCreateDepth) { |
|
|
|
return nil, gas, ErrDepth |
|
|
|
return nil, gas, ErrDepth |
|
|
@ -305,9 +299,6 @@ func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte, |
|
|
|
// DelegateCall differs from CallCode in the sense that it executes the given address'
|
|
|
|
// DelegateCall differs from CallCode in the sense that it executes the given address'
|
|
|
|
// code with the caller as context and the caller is set to the caller of the caller.
|
|
|
|
// code with the caller as context and the caller is set to the caller of the caller.
|
|
|
|
func (evm *EVM) DelegateCall(caller ContractRef, addr common.Address, input []byte, gas uint64) (ret []byte, leftOverGas uint64, err error) { |
|
|
|
func (evm *EVM) DelegateCall(caller ContractRef, addr common.Address, input []byte, gas uint64) (ret []byte, leftOverGas uint64, err error) { |
|
|
|
if evm.Config.NoRecursion && evm.depth > 0 { |
|
|
|
|
|
|
|
return nil, gas, nil |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Fail if we're trying to execute above the call depth limit
|
|
|
|
// Fail if we're trying to execute above the call depth limit
|
|
|
|
if evm.depth > int(params.CallCreateDepth) { |
|
|
|
if evm.depth > int(params.CallCreateDepth) { |
|
|
|
return nil, gas, ErrDepth |
|
|
|
return nil, gas, ErrDepth |
|
|
@ -347,9 +338,6 @@ func (evm *EVM) DelegateCall(caller ContractRef, addr common.Address, input []by |
|
|
|
// Opcodes that attempt to perform such modifications will result in exceptions
|
|
|
|
// Opcodes that attempt to perform such modifications will result in exceptions
|
|
|
|
// instead of performing the modifications.
|
|
|
|
// instead of performing the modifications.
|
|
|
|
func (evm *EVM) StaticCall(caller ContractRef, addr common.Address, input []byte, gas uint64) (ret []byte, leftOverGas uint64, err error) { |
|
|
|
func (evm *EVM) StaticCall(caller ContractRef, addr common.Address, input []byte, gas uint64) (ret []byte, leftOverGas uint64, err error) { |
|
|
|
if evm.Config.NoRecursion && evm.depth > 0 { |
|
|
|
|
|
|
|
return nil, gas, nil |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Fail if we're trying to execute above the call depth limit
|
|
|
|
// Fail if we're trying to execute above the call depth limit
|
|
|
|
if evm.depth > int(params.CallCreateDepth) { |
|
|
|
if evm.depth > int(params.CallCreateDepth) { |
|
|
|
return nil, gas, ErrDepth |
|
|
|
return nil, gas, ErrDepth |
|
|
@ -451,10 +439,6 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, |
|
|
|
contract := NewContract(caller, AccountRef(address), value, gas) |
|
|
|
contract := NewContract(caller, AccountRef(address), value, gas) |
|
|
|
contract.SetCodeOptionalHash(&address, codeAndHash) |
|
|
|
contract.SetCodeOptionalHash(&address, codeAndHash) |
|
|
|
|
|
|
|
|
|
|
|
if evm.Config.NoRecursion && evm.depth > 0 { |
|
|
|
|
|
|
|
return nil, address, gas, nil |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if evm.Config.Debug { |
|
|
|
if evm.Config.Debug { |
|
|
|
if evm.depth == 0 { |
|
|
|
if evm.depth == 0 { |
|
|
|
evm.Config.Tracer.CaptureStart(evm, caller.Address(), address, true, codeAndHash.code, gas, value) |
|
|
|
evm.Config.Tracer.CaptureStart(evm, caller.Address(), address, true, codeAndHash.code, gas, value) |
|
|
|