diff --git a/manager/eris-mint/evm/vm.go b/manager/eris-mint/evm/vm.go index dda17a03589647be0563054c3a35e733763db55a..e113513aa0585225b0147573e919151ccacd0245 100644 --- a/manager/eris-mint/evm/vm.go +++ b/manager/eris-mint/evm/vm.go @@ -15,18 +15,19 @@ import ( ) var ( - ErrUnknownAddress = errors.New("Unknown address") - ErrInsufficientBalance = errors.New("Insufficient balance") - ErrInvalidJumpDest = errors.New("Invalid jump dest") - ErrInsufficientGas = errors.New("Insufficient gas") - ErrMemoryOutOfBounds = errors.New("Memory out of bounds") - ErrCodeOutOfBounds = errors.New("Code out of bounds") - ErrInputOutOfBounds = errors.New("Input out of bounds") - ErrCallStackOverflow = errors.New("Call stack overflow") - ErrCallStackUnderflow = errors.New("Call stack underflow") - ErrDataStackOverflow = errors.New("Data stack overflow") - ErrDataStackUnderflow = errors.New("Data stack underflow") - ErrInvalidContract = errors.New("Invalid contract") + ErrUnknownAddress = errors.New("Unknown address") + ErrInsufficientBalance = errors.New("Insufficient balance") + ErrInvalidJumpDest = errors.New("Invalid jump dest") + ErrInsufficientGas = errors.New("Insufficient gas") + ErrMemoryOutOfBounds = errors.New("Memory out of bounds") + ErrCodeOutOfBounds = errors.New("Code out of bounds") + ErrInputOutOfBounds = errors.New("Input out of bounds") + ErrCallStackOverflow = errors.New("Call stack overflow") + ErrCallStackUnderflow = errors.New("Call stack underflow") + ErrDataStackOverflow = errors.New("Data stack overflow") + ErrDataStackUnderflow = errors.New("Data stack underflow") + ErrInvalidContract = errors.New("Invalid contract") + ErrNativeContractCodeCopy = errors.New("Tried to copy native contract code, but this is not supported") ) type ErrPermission struct { @@ -585,7 +586,10 @@ func (vm *VM) call(caller, callee *Account, code, input []byte, value int64, gas } acc := vm.appState.GetAccount(addr) if acc == nil { - return nil, firstErr(err, ErrUnknownAddress) + if _, ok := registeredNativeContracts[addr]; !ok { + return nil, firstErr(err, ErrUnknownAddress) + } + return nil, firstErr(err, ErrNativeContractCodeCopy) } code := acc.Code memOff := stack.Pop64()