From 2dccfedaae6b1f416f2906307c647c4c2654fa87 Mon Sep 17 00:00:00 2001 From: sean-liu55 Date: Wed, 30 May 2018 19:41:57 +0800 Subject: [PATCH] fix transaction fee bug --- .../java/org/tron/core/db/BandwidthProcessor.java | 3 +-- src/main/java/org/tron/core/db/Manager.java | 13 ++++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/tron/core/db/BandwidthProcessor.java b/src/main/java/org/tron/core/db/BandwidthProcessor.java index 29c171710a6..54d5372371e 100644 --- a/src/main/java/org/tron/core/db/BandwidthProcessor.java +++ b/src/main/java/org/tron/core/db/BandwidthProcessor.java @@ -124,10 +124,9 @@ public void consumeBandwidth(TransactionCapsule trx) private boolean consumeFee(AccountCapsule accountCapsule, long fee) { try { - dbManager.adjustBalance(accountCapsule.getAddress().toByteArray(), -fee); long latestOperationTime = dbManager.getHeadBlockTimeStamp(); accountCapsule.setLatestOperationTime(latestOperationTime); - dbManager.getAccountStore().put(accountCapsule.createDbKey(), accountCapsule); + dbManager.adjustBalance(accountCapsule.createDbKey(), -fee); return true; } catch (BalanceInsufficientException e) { return false; diff --git a/src/main/java/org/tron/core/db/Manager.java b/src/main/java/org/tron/core/db/Manager.java index dbf257108ad..485ed72f32a 100644 --- a/src/main/java/org/tron/core/db/Manager.java +++ b/src/main/java/org/tron/core/db/Manager.java @@ -380,24 +380,31 @@ public AccountStore getAccountStore() { return this.accountStore; } + public void adjustBalance(byte[] accountAddress, long amount) + throws BalanceInsufficientException { + AccountCapsule account = getAccountStore().get(accountAddress); + adjustBalance(account, amount); + } + /** * judge balance. */ - public void adjustBalance(byte[] accountAddress, long amount) + public void adjustBalance(AccountCapsule account, long amount) throws BalanceInsufficientException { - AccountCapsule account = getAccountStore().get(accountAddress); + long balance = account.getBalance(); if (amount == 0) { return; } if (amount < 0 && balance < -amount) { - throw new BalanceInsufficientException(accountAddress + " Insufficient"); + throw new BalanceInsufficientException(account.createDbKey() + " Insufficient"); } account.setBalance(Math.addExact(balance, amount)); this.getAccountStore().put(account.getAddress().toByteArray(), account); } + public void adjustAllowance(byte[] accountAddress, long amount) throws BalanceInsufficientException { AccountCapsule account = getAccountStore().get(accountAddress);