diff --git a/src/main/java/org/tron/common/runtime/Runtime.java b/src/main/java/org/tron/common/runtime/Runtime.java index d3dba42c0cc..ec60b3f560a 100644 --- a/src/main/java/org/tron/common/runtime/Runtime.java +++ b/src/main/java/org/tron/common/runtime/Runtime.java @@ -348,6 +348,11 @@ private void create() long vmShouldEndInUs = vmStartInUs + thisTxCPULimitInUs; long feeLimit = trx.getRawData().getFeeLimit(); + if (feeLimit < 0) { + logger.info("feeLimit < 0"); + throw new ContractValidateException("feeLimit must be >= 0"); + } + long energyLimit = getEnergyLimit(creator, feeLimit, callValue); byte[] ops = newSmartContract.getBytecode().toByteArray(); InternalTransaction internalTransaction = new InternalTransaction(trx); @@ -420,6 +425,10 @@ private void call() long vmShouldEndInUs = vmStartInUs + thisTxCPULimitInUs; long feeLimit = trx.getRawData().getFeeLimit(); + if (feeLimit < 0) { + logger.info("feeLimit < 0"); + throw new ContractValidateException("feeLimit must be >= 0"); + } long energyLimit; if (isCallConstant(contractAddress)) { energyLimit = Constant.MAX_ENERGY_IN_TX; diff --git a/src/main/java/org/tron/core/capsule/ReceiptCapsule.java b/src/main/java/org/tron/core/capsule/ReceiptCapsule.java index d48a5365f48..a1894336242 100644 --- a/src/main/java/org/tron/core/capsule/ReceiptCapsule.java +++ b/src/main/java/org/tron/core/capsule/ReceiptCapsule.java @@ -90,7 +90,7 @@ public long getNetFee() { */ public void payEnergyBill(Manager manager, AccountCapsule origin, AccountCapsule caller, long percent, EnergyProcessor energyProcessor, long now) throws BalanceInsufficientException { - if (0 == receipt.getEnergyUsageTotal()) { + if (receipt.getEnergyUsageTotal() <= 0) { return; } diff --git a/src/main/java/org/tron/core/db/TransactionTrace.java b/src/main/java/org/tron/core/db/TransactionTrace.java index 3c1083631ba..0b7c68d1d11 100644 --- a/src/main/java/org/tron/core/db/TransactionTrace.java +++ b/src/main/java/org/tron/core/db/TransactionTrace.java @@ -93,6 +93,9 @@ public void init() throws TransactionTraceException { //set bill public void setBill(long energyUsage) { + if (energyUsage < 0) { + energyUsage = 0L; + } receipt.setEnergyUsageTotal(energyUsage); }