From 9e122594b041c4dc52783b079c276e845baf91ab Mon Sep 17 00:00:00 2001 From: taihaofu Date: Wed, 5 Sep 2018 13:16:21 +0800 Subject: [PATCH] refine exceptions in vm --- .../java/org/tron/common/runtime/Runtime.java | 35 ++++++++++++------- .../runtime/vm/PrecompiledContracts.java | 4 --- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/tron/common/runtime/Runtime.java b/src/main/java/org/tron/common/runtime/Runtime.java index 7c25b0a7034..c74b66ad9f2 100644 --- a/src/main/java/org/tron/common/runtime/Runtime.java +++ b/src/main/java/org/tron/common/runtime/Runtime.java @@ -184,18 +184,29 @@ public BigInteger getBlockCPULeftInUs() { } public void execute() throws ContractValidateException, ContractExeException { - switch (trxType) { - case TRX_PRECOMPILED_TYPE: - precompiled(); - break; - case TRX_CONTRACT_CREATION_TYPE: - create(); - break; - case TRX_CONTRACT_CALL_TYPE: - call(); - break; - default: - throw new ContractValidateException("Unknown contract type"); + try { + switch (trxType) { + case TRX_PRECOMPILED_TYPE: + precompiled(); + break; + case TRX_CONTRACT_CREATION_TYPE: + create(); + break; + case TRX_CONTRACT_CALL_TYPE: + call(); + break; + default: + throw new ContractValidateException("Unknown contract type"); + } + } + catch (ContractExeException e){ + throw e; + } + catch (ContractValidateException e){ + throw e; + } + catch (Exception e){ + throw new ContractValidateException("Unknown contract error"); } } diff --git a/src/main/java/org/tron/common/runtime/vm/PrecompiledContracts.java b/src/main/java/org/tron/common/runtime/vm/PrecompiledContracts.java index 0325ccaa44f..dbf4b5db28f 100644 --- a/src/main/java/org/tron/common/runtime/vm/PrecompiledContracts.java +++ b/src/main/java/org/tron/common/runtime/vm/PrecompiledContracts.java @@ -912,10 +912,6 @@ public Pair execute(byte[] data) { return Pair.of(true, new DataWord(0).getData()); } - if (data == null) { - data = EMPTY_BYTE_ARRAY; - } - Contract.WithdrawBalanceContract.Builder builder = Contract.WithdrawBalanceContract .newBuilder(); ByteString byteAddress = ByteString.copyFrom(getCallerAddress());