From 0c926e51e52d9be547cb699dcbd63dc9da14ccd5 Mon Sep 17 00:00:00 2001 From: nanfengpo Date: Thu, 10 May 2018 15:48:26 +0800 Subject: [PATCH 1/2] modify_transfer_asset_bandwidth --- .../core/actuator/TransferAssetActuator.java | 6 ++-- src/main/java/org/tron/core/db/Manager.java | 34 ++++++++++++++++--- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/tron/core/actuator/TransferAssetActuator.java b/src/main/java/org/tron/core/actuator/TransferAssetActuator.java index fb89f6d09d1..bc67702fb3d 100644 --- a/src/main/java/org/tron/core/actuator/TransferAssetActuator.java +++ b/src/main/java/org/tron/core/actuator/TransferAssetActuator.java @@ -54,17 +54,17 @@ public boolean execute(TransactionResultCapsule ret) throws ContractExeException AccountStore accountStore = this.dbManager.getAccountStore(); byte[] ownerKey = transferAssetContract.getOwnerAddress().toByteArray(); byte[] toKey = transferAssetContract.getToAddress().toByteArray(); - ByteString assertName = transferAssetContract.getAssetName(); + ByteString assetName = transferAssetContract.getAssetName(); long amount = transferAssetContract.getAmount(); AccountCapsule ownerAccountCapsule = accountStore.get(ownerKey); - if (!ownerAccountCapsule.reduceAssetAmount(assertName, amount)) { + if (!ownerAccountCapsule.reduceAssetAmount(assetName, amount)) { throw new ContractExeException("reduceAssetAmount failed !"); } accountStore.put(ownerKey, ownerAccountCapsule); AccountCapsule toAccountCapsule = accountStore.get(toKey); - toAccountCapsule.addAssetAmount(assertName, amount); + toAccountCapsule.addAssetAmount(assetName, amount); accountStore.put(toKey, toAccountCapsule); ret.setStatus(fee, code.SUCESS); diff --git a/src/main/java/org/tron/core/db/Manager.java b/src/main/java/org/tron/core/db/Manager.java index edd66853075..ec8913fad55 100644 --- a/src/main/java/org/tron/core/db/Manager.java +++ b/src/main/java/org/tron/core/db/Manager.java @@ -33,6 +33,7 @@ import org.tron.core.actuator.Actuator; import org.tron.core.actuator.ActuatorFactory; import org.tron.core.capsule.AccountCapsule; +import org.tron.core.capsule.AssetIssueCapsule; import org.tron.core.capsule.BlockCapsule; import org.tron.core.capsule.BlockCapsule.BlockId; import org.tron.core.capsule.BytesCapsule; @@ -59,6 +60,8 @@ import org.tron.core.exception.ValidateScheduleException; import org.tron.core.exception.ValidateSignatureException; import org.tron.core.witness.WitnessController; +import org.tron.protos.Contract; +import org.tron.protos.Contract.TransferAssetContract; import org.tron.protos.Protocol.AccountType; import org.tron.protos.Protocol.Transaction; @@ -449,7 +452,7 @@ public boolean pushTransactions(final TransactionCapsule trx) } - public void consumeBandwidth(TransactionCapsule trx) throws ValidateBandwidthException { + private void consumeBandwidth(TransactionCapsule trx) throws ValidateBandwidthException { List contracts = trx.getInstance().getRawData().getContractList(); for (Transaction.Contract contract : contracts) { @@ -458,7 +461,6 @@ public void consumeBandwidth(TransactionCapsule trx) throws ValidateBandwidthExc if (accountCapsule == null) { throw new ValidateBandwidthException("account not exists"); } - long bandwidth = accountCapsule.getBandwidth(); long now = getHeadBlockTimeStamp(); long latestOperationTime = accountCapsule.getLatestOperationTime(); //10 * 1000 @@ -468,10 +470,32 @@ public void consumeBandwidth(TransactionCapsule trx) throws ValidateBandwidthExc return; } long bandwidthPerTransaction = getDynamicPropertiesStore().getBandwidthPerTransaction(); - if (bandwidth < bandwidthPerTransaction) { - throw new ValidateBandwidthException("bandwidth is not enough"); + long bandwidth; + if (contract.getType() == TransferAssetContract) { + AccountCapsule issuerAccountCapsule; + try { + ByteString assetName + = contract.getParameter().unpack(TransferAssetContract.class).getAssetName(); + AssetIssueCapsule assetIssueCapsule + = this.getAssetIssueStore().get(assetName.toByteArray()); + issuerAccountCapsule = this.getAccountStore() + .get(assetIssueCapsule.getOwnerAddress().toByteArray()); + bandwidth = issuerAccountCapsule.getBandwidth(); + } catch (Exception ex) { + throw new ValidateBandwidthException(ex.getMessage()); + } + if (bandwidth < bandwidthPerTransaction) { + throw new ValidateBandwidthException("bandwidth is not enough"); + } + issuerAccountCapsule.setBandwidth(bandwidth - bandwidthPerTransaction); + this.getAccountStore().put(issuerAccountCapsule.createDbKey(), issuerAccountCapsule); + } else { + bandwidth = accountCapsule.getBandwidth(); + if (bandwidth < bandwidthPerTransaction) { + throw new ValidateBandwidthException("bandwidth is not enough"); + } + accountCapsule.setBandwidth(bandwidth - bandwidthPerTransaction); } - accountCapsule.setBandwidth(bandwidth - bandwidthPerTransaction); accountCapsule.setLatestOperationTime(now); this.getAccountStore().put(accountCapsule.createDbKey(), accountCapsule); } From 1ebb7e8f6ab56de9d28645e77dd2d8ee29d158cb Mon Sep 17 00:00:00 2001 From: nanfengpo Date: Thu, 10 May 2018 15:49:22 +0800 Subject: [PATCH 2/2] modify_transfer_asset_bandwidth --- src/main/java/org/tron/core/db/Manager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/tron/core/db/Manager.java b/src/main/java/org/tron/core/db/Manager.java index ec8913fad55..93325faa083 100644 --- a/src/main/java/org/tron/core/db/Manager.java +++ b/src/main/java/org/tron/core/db/Manager.java @@ -60,7 +60,6 @@ import org.tron.core.exception.ValidateScheduleException; import org.tron.core.exception.ValidateSignatureException; import org.tron.core.witness.WitnessController; -import org.tron.protos.Contract; import org.tron.protos.Contract.TransferAssetContract; import org.tron.protos.Protocol.AccountType; import org.tron.protos.Protocol.Transaction;