From 7af64889e3d0f9d1ed09de47466def4dafe415b6 Mon Sep 17 00:00:00 2001 From: Asuka Date: Mon, 3 Apr 2023 17:17:29 +0800 Subject: [PATCH 1/4] func(http,util): remove rule-3 validation --- framework/src/main/java/org/tron/core/Wallet.java | 1 - .../src/main/java/org/tron/core/services/http/Util.java | 6 ------ 2 files changed, 7 deletions(-) diff --git a/framework/src/main/java/org/tron/core/Wallet.java b/framework/src/main/java/org/tron/core/Wallet.java index c36437a806d..98b9c992f0d 100755 --- a/framework/src/main/java/org/tron/core/Wallet.java +++ b/framework/src/main/java/org/tron/core/Wallet.java @@ -3035,7 +3035,6 @@ public Transaction callConstantContract(TransactionCapsule trxCap, TransactionResultCapsule ret = new TransactionResultCapsule(); builder.setEnergyUsed(result.getEnergyUsed()); - builder.setEnergyPenalty(result.getEnergyPenaltyTotal()); builder.setBlockNumber(headBlockCapsule.getNum()); builder.setBlockHash(ByteString.copyFrom(headBlockCapsule.getBlockId().getBytes())); builder.setEnergyPenalty(result.getEnergyPenaltyTotal()); diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 15c5bc97009..5d97e944709 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -554,7 +554,6 @@ public static List convertLogAddressToTronAddress(TransactionInfo transacti * Validate parameters for trigger constant and estimate energy * - Rule-1: owner address must be set * - Rule-2: either contract address is set or call data is set - * - Rule-3: only one of function selector and call data can be set * @param contract parameters in json format * @throws InvalidParameterException if validation is not passed, this kind of exception is thrown */ @@ -568,11 +567,6 @@ public static void validateParameter(String contract) throws InvalidParameterExc throw new InvalidParameterException("At least one of " + CONTRACT_ADDRESS + " and " + CALL_DATA + " must be set."); } - if (!StringUtils.isEmpty(jsonObject.getString(FUNCTION_SELECTOR)) - ^ StringUtils.isEmpty(jsonObject.getString(CALL_DATA))) { - throw new InvalidParameterException("Only one of " - + FUNCTION_SELECTOR + " and " + CALL_DATA + " can be set."); - } } } From 131161e9504fa6aa9b7ead0c42fd39b6f05aba7e Mon Sep 17 00:00:00 2001 From: Asuka Date: Mon, 3 Apr 2023 17:37:08 +0800 Subject: [PATCH 2/4] func(http,util): add new rule-3 validation --- .../src/main/java/org/tron/core/services/http/Util.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 5d97e944709..4bd1be3fb6f 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -554,6 +554,7 @@ public static List convertLogAddressToTronAddress(TransactionInfo transacti * Validate parameters for trigger constant and estimate energy * - Rule-1: owner address must be set * - Rule-2: either contract address is set or call data is set + * - Rule-3: if try to deploy, function selector and call data can not be both set * @param contract parameters in json format * @throws InvalidParameterException if validation is not passed, this kind of exception is thrown */ @@ -567,6 +568,12 @@ public static void validateParameter(String contract) throws InvalidParameterExc throw new InvalidParameterException("At least one of " + CONTRACT_ADDRESS + " and " + CALL_DATA + " must be set."); } + if (StringUtils.isEmpty(jsonObject.getString(CONTRACT_ADDRESS)) + && !StringUtils.isEmpty(jsonObject.getString(FUNCTION_SELECTOR)) + && !StringUtils.isEmpty(jsonObject.getString(CALL_DATA))) { + throw new InvalidParameterException("While trying to deploy, " + + FUNCTION_SELECTOR + " and " + CALL_DATA + " can not be both set."); + } } } From 495f7ac69bc32252c57da8610c09ccab4ecd42dc Mon Sep 17 00:00:00 2001 From: Asuka Date: Mon, 3 Apr 2023 18:54:58 +0800 Subject: [PATCH 3/4] func(interface): drop rule-3 for trigger contract --- .../tron/core/services/http/TriggerSmartContractServlet.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/framework/src/main/java/org/tron/core/services/http/TriggerSmartContractServlet.java b/framework/src/main/java/org/tron/core/services/http/TriggerSmartContractServlet.java index d8f142edb46..6577a9e5f24 100644 --- a/framework/src/main/java/org/tron/core/services/http/TriggerSmartContractServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/TriggerSmartContractServlet.java @@ -41,11 +41,6 @@ private void validateParameter(String contract) { if (StringUtil.isNullOrEmpty(jsonObject.getString(Util.CONTRACT_ADDRESS))) { throw new InvalidParameterException(Util.CONTRACT_ADDRESS + " isn't set."); } - if (!StringUtil.isNullOrEmpty(jsonObject.getString(Util.FUNCTION_SELECTOR)) - ^ StringUtil.isNullOrEmpty(jsonObject.getString(Util.CALL_DATA))) { - throw new InvalidParameterException("Only one of " - + Util.FUNCTION_SELECTOR + " and " + Util.CALL_DATA + " can be set."); - } } protected void doPost(HttpServletRequest request, HttpServletResponse response) From 78b46c3ed411764f7f103ddb8d0e695ad360b38f Mon Sep 17 00:00:00 2001 From: Asuka Date: Mon, 3 Apr 2023 19:29:25 +0800 Subject: [PATCH 4/4] log(vm): reduce exception log level of featured instructions from error to warn --- .../org/tron/core/vm/program/Program.java | 43 +++++++++---------- .../src/main/java/org/tron/core/Wallet.java | 6 +-- .../org/tron/core/services/RpcApiService.java | 4 +- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/actuator/src/main/java/org/tron/core/vm/program/Program.java b/actuator/src/main/java/org/tron/core/vm/program/Program.java index 3a0aaf21f70..90a59f53a36 100644 --- a/actuator/src/main/java/org/tron/core/vm/program/Program.java +++ b/actuator/src/main/java/org/tron/core/vm/program/Program.java @@ -17,7 +17,6 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; - import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @@ -1815,9 +1814,9 @@ public boolean freeze(DataWord receiverAddress, DataWord frozenBalance, DataWord repository.commit(); return true; } catch (ContractValidateException e) { - logger.error("TVM Freeze: validate failure. Reason: {}", e.getMessage()); + logger.warn("TVM Freeze: validate failure. Reason: {}", e.getMessage()); } catch (ArithmeticException e) { - logger.error("TVM Freeze: frozenBalance out of long range."); + logger.warn("TVM Freeze: frozenBalance out of long range."); } if (internalTx != null) { internalTx.reject(); @@ -1848,7 +1847,7 @@ public boolean unfreeze(DataWord receiverAddress, DataWord resourceType) { } return true; } catch (ContractValidateException e) { - logger.error("TVM Unfreeze: validate failure. Reason: {}", e.getMessage()); + logger.warn("TVM Unfreeze: validate failure. Reason: {}", e.getMessage()); } if (internalTx != null) { internalTx.reject(); @@ -1911,9 +1910,9 @@ public boolean freezeBalanceV2(DataWord frozenBalance, DataWord resourceType) { repository.commit(); return true; } catch (ContractValidateException e) { - logger.error("TVM FreezeBalanceV2: validate failure. Reason: {}", e.getMessage()); + logger.warn("TVM FreezeBalanceV2: validate failure. Reason: {}", e.getMessage()); } catch (ArithmeticException e) { - logger.error("TVM FreezeBalanceV2: frozenBalance out of long range."); + logger.warn("TVM FreezeBalanceV2: frozenBalance out of long range."); } if (internalTx != null) { internalTx.reject(); @@ -1947,9 +1946,9 @@ public boolean unfreezeBalanceV2(DataWord unfreezeBalance, DataWord resourceType } return true; } catch (ContractValidateException e) { - logger.error("TVM UnfreezeBalanceV2: validate failure. Reason: {}", e.getMessage()); + logger.warn("TVM UnfreezeBalanceV2: validate failure. Reason: {}", e.getMessage()); } catch (ArithmeticException e) { - logger.error("TVM UnfreezeBalanceV2: balance out of long range."); + logger.warn("TVM UnfreezeBalanceV2: balance out of long range."); } if (internalTx != null) { internalTx.reject(); @@ -1978,9 +1977,9 @@ public long withdrawExpireUnfreeze() { } return expireUnfreezeBalance; } catch (ContractValidateException e) { - logger.error("TVM WithdrawExpireUnfreeze: validate failure. Reason: {}", e.getMessage()); + logger.warn("TVM WithdrawExpireUnfreeze: validate failure. Reason: {}", e.getMessage()); } catch (ContractExeException e) { - logger.error("TVM WithdrawExpireUnfreeze: execute failure. Reason: {}", e.getMessage()); + logger.warn("TVM WithdrawExpireUnfreeze: execute failure. Reason: {}", e.getMessage()); } if (internalTx != null) { internalTx.reject(); @@ -2011,9 +2010,9 @@ public boolean cancelAllUnfreezeV2Action() { } return true; } catch (ContractValidateException e) { - logger.error("TVM CancelAllUnfreezeV2: validate failure. Reason: {}", e.getMessage()); + logger.warn("TVM CancelAllUnfreezeV2: validate failure. Reason: {}", e.getMessage()); } catch (ContractExeException e) { - logger.error("TVM CancelAllUnfreezeV2: execute failure. Reason: {}", e.getMessage()); + logger.warn("TVM CancelAllUnfreezeV2: execute failure. Reason: {}", e.getMessage()); } if (internalTx != null) { internalTx.reject(); @@ -2045,9 +2044,9 @@ public boolean delegateResource( repository.commit(); return true; } catch (ContractValidateException e) { - logger.error("TVM DelegateResource: validate failure. Reason: {}", e.getMessage()); + logger.warn("TVM DelegateResource: validate failure. Reason: {}", e.getMessage()); } catch (ArithmeticException e) { - logger.error("TVM DelegateResource: balance out of long range."); + logger.warn("TVM DelegateResource: balance out of long range."); } if (internalTx != null) { internalTx.reject(); @@ -2079,9 +2078,9 @@ public boolean unDelegateResource( repository.commit(); return true; } catch (ContractValidateException e) { - logger.error("TVM UnDelegateResource: validate failure. Reason: {}", e.getMessage()); + logger.warn("TVM UnDelegateResource: validate failure. Reason: {}", e.getMessage()); } catch (ArithmeticException e) { - logger.error("TVM UnDelegateResource: balance out of long range."); + logger.warn("TVM UnDelegateResource: balance out of long range."); } if (internalTx != null) { internalTx.reject(); @@ -2114,7 +2113,7 @@ private Common.ResourceCode parseResourceCodeV2(DataWord resourceType) { return Common.ResourceCode.UNRECOGNIZED; } } catch (ArithmeticException e) { - logger.error("TVM ParseResourceCodeV2: invalid resource code: {}", resourceType.sValue()); + logger.warn("TVM ParseResourceCodeV2: invalid resource code: {}", resourceType.sValue()); return Common.ResourceCode.UNRECOGNIZED; } } @@ -2180,11 +2179,11 @@ public boolean voteWitness(int witnessArrayOffset, int witnessArrayLength, repository.commit(); return true; } catch (ContractValidateException e) { - logger.error("TVM VoteWitness: validate failure. Reason: {}", e.getMessage()); + logger.warn("TVM VoteWitness: validate failure. Reason: {}", e.getMessage()); } catch (ContractExeException e) { - logger.error("TVM VoteWitness: execute failure. Reason: {}", e.getMessage()); + logger.warn("TVM VoteWitness: execute failure. Reason: {}", e.getMessage()); } catch (ArithmeticException e) { - logger.error("TVM VoteWitness: int or long out of range. caused by: {}", e.getMessage()); + logger.warn("TVM VoteWitness: int or long out of range. caused by: {}", e.getMessage()); } if (internalTx != null) { internalTx.reject(); @@ -2213,9 +2212,9 @@ public long withdrawReward() { } return allowance; } catch (ContractValidateException e) { - logger.error("TVM WithdrawReward: validate failure. Reason: {}", e.getMessage()); + logger.warn("TVM WithdrawReward: validate failure. Reason: {}", e.getMessage()); } catch (ContractExeException e) { - logger.error("TVM WithdrawReward: execute failure. Reason: {}", e.getMessage()); + logger.warn("TVM WithdrawReward: execute failure. Reason: {}", e.getMessage()); } if (internalTx != null) { internalTx.reject(); diff --git a/framework/src/main/java/org/tron/core/Wallet.java b/framework/src/main/java/org/tron/core/Wallet.java index 98b9c992f0d..adb6c26db5a 100755 --- a/framework/src/main/java/org/tron/core/Wallet.java +++ b/framework/src/main/java/org/tron/core/Wallet.java @@ -3029,7 +3029,7 @@ public Transaction callConstantContract(TransactionCapsule trxCap, if (!isEstimating && result.getException() != null || result.getException() instanceof Program.OutOfTimeException) { RuntimeException e = result.getException(); - logger.warn("Constant call has an error {}", e.getMessage()); + logger.warn("Constant call failed for reason: {}", e.getMessage()); throw e; } @@ -3866,7 +3866,7 @@ private boolean isShieldedTRC20NoteSpent(GrpcAPI.Note note, long pos, byte[] ak, retBuilder.setResult(false).setCode(response_code.CONTRACT_EXE_ERROR) .setMessage(ByteString.copyFromUtf8(e.getClass() + " : " + e.getMessage())); trxExtBuilder.setResult(retBuilder); - logger.warn("When run constant call in VM, have RuntimeException: " + e.getMessage()); + logger.warn("When run constant call in VM, failed for reason: " + e.getMessage()); } catch (Exception e) { retBuilder.setResult(false).setCode(response_code.OTHER_ERROR) .setMessage(ByteString.copyFromUtf8(e.getClass() + " : " + e.getMessage())); @@ -4130,7 +4130,7 @@ private byte[] getShieldedContractScalingFactor(byte[] contractAddress) retBuilder.setResult(false).setCode(response_code.CONTRACT_EXE_ERROR) .setMessage(ByteString.copyFromUtf8(e.getClass() + " : " + e.getMessage())); trxExtBuilder.setResult(retBuilder); - logger.warn("When run constant call in VM, have RuntimeException: " + e.getMessage()); + logger.warn("When run constant call in VM, failed for reason: " + e.getMessage()); } catch (Exception e) { retBuilder.setResult(false).setCode(response_code.OTHER_ERROR) .setMessage(ByteString.copyFromUtf8(e.getClass() + " : " + e.getMessage())); diff --git a/framework/src/main/java/org/tron/core/services/RpcApiService.java b/framework/src/main/java/org/tron/core/services/RpcApiService.java index a6e1c5181ad..991124cc2ba 100755 --- a/framework/src/main/java/org/tron/core/services/RpcApiService.java +++ b/framework/src/main/java/org/tron/core/services/RpcApiService.java @@ -312,7 +312,7 @@ private void callContract(TriggerSmartContract request, retBuilder.setResult(false).setCode(response_code.CONTRACT_EXE_ERROR) .setMessage(ByteString.copyFromUtf8(e.getClass() + " : " + e.getMessage())); trxExtBuilder.setResult(retBuilder); - logger.warn("When run constant call in VM, have RuntimeException: " + e.getMessage()); + logger.warn("When run constant call in VM, failed for reason: " + e.getMessage()); } catch (Exception e) { retBuilder.setResult(false).setCode(response_code.OTHER_ERROR) .setMessage(ByteString.copyFromUtf8(e.getClass() + " : " + e.getMessage())); @@ -2077,7 +2077,7 @@ private void callContract(TriggerSmartContract request, retBuilder.setResult(false).setCode(response_code.CONTRACT_EXE_ERROR) .setMessage(ByteString.copyFromUtf8(e.getClass() + " : " + e.getMessage())); trxExtBuilder.setResult(retBuilder); - logger.warn("When run constant call in VM, have Runtime Exception: " + e.getMessage()); + logger.warn("When run constant call in VM, failed for reason: " + e.getMessage()); } catch (Exception e) { retBuilder.setResult(false).setCode(response_code.OTHER_ERROR) .setMessage(ByteString.copyFromUtf8(e.getClass() + " : " + e.getMessage()));