Skip to content

Commit 6b8b773

Browse files
authored
Merge pull request #849 from tronprotocol/feature/debug_net_limit
Feature/debug net limit
2 parents d05202a + 626a759 commit 6b8b773

File tree

8 files changed

+75
-41
lines changed

8 files changed

+75
-41
lines changed

src/main/java/org/tron/core/actuator/AssetIssueActuator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,10 @@ public boolean validate() throws ContractValidateException {
167167
throw new ContractValidateException("Num must greater than 0!");
168168
}
169169

170+
if (assetIssueContract.getPublicFreeAssetNetUsage() != 0) {
171+
throw new ContractValidateException("PublicFreeAssetNetUsage must be 0!");
172+
}
173+
170174
if (assetIssueContract.getFrozenSupplyCount()
171175
> this.dbManager.getDynamicPropertiesStore().getMaxFrozenSupplyNumber()) {
172176
throw new ContractValidateException("Frozen supply list length is too long");

src/main/java/org/tron/core/actuator/UnfreezeBalanceActuator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public boolean execute(TransactionResultCapsule ret) throws ContractExeException
7070

7171
dbManager.getAccountStore().put(ownerAddress, accountCapsule);
7272
dbManager.getVotesStore().put(ownerAddress, votesCapsule);
73-
dbManager.getDynamicPropertiesStore().addTotalNetWeight(-unfreezeBalance);
73+
dbManager.getDynamicPropertiesStore().addTotalNetWeight(-unfreezeBalance / 1000_000L);
7474

7575
ret.setStatus(fee, code.SUCESS);
7676

src/main/java/org/tron/core/actuator/UpdateAssetActuator.java

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -21,42 +21,32 @@
2121
@Slf4j
2222
public class UpdateAssetActuator extends AbstractActuator {
2323

24-
private UpdateAssetContract updateAssetContract;
25-
26-
private byte[] ownerAddress;
27-
private byte[] newUrl;
28-
private byte[] newDescription;
29-
private long newLimit;
30-
private long newPublicLimit;
31-
32-
private long fee;
33-
3424
UpdateAssetActuator(Any contract, Manager dbManager) {
3525
super(contract, dbManager);
36-
try {
37-
updateAssetContract = contract.unpack(UpdateAssetContract.class);
38-
} catch (InvalidProtocolBufferException e) {
39-
logger.error(e.getMessage(), e);
40-
}
41-
42-
newLimit = updateAssetContract.getNewLimit();
43-
newPublicLimit = updateAssetContract.getNewPublicLimit();
44-
ownerAddress = updateAssetContract.getOwnerAddress().toByteArray();
45-
newUrl = updateAssetContract.getUrl().toByteArray();
46-
newDescription = updateAssetContract.getDescription().toByteArray();
47-
fee = calcFee();
4826
}
4927

5028
@Override
5129
public boolean execute(TransactionResultCapsule ret) throws ContractExeException {
30+
long fee = calcFee();
5231
try {
32+
final UpdateAssetContract updateAssetContract = this.contract
33+
.unpack(UpdateAssetContract.class);
34+
35+
long newLimit = updateAssetContract.getNewLimit();
36+
long newPublicLimit = updateAssetContract.getNewPublicLimit();
37+
byte[] ownerAddress = updateAssetContract.getOwnerAddress().toByteArray();
38+
ByteString newUrl = updateAssetContract.getUrl();
39+
ByteString newDescription = updateAssetContract.getDescription();
40+
5341
AssetIssueStore assetIssueStore = dbManager.getAssetIssueStore();
5442
AccountCapsule accountCapsule = dbManager.getAccountStore().get(ownerAddress);
5543
AssetIssueCapsule assetIssueCapsule =
5644
assetIssueStore.get(accountCapsule.getAssetIssuedName().toByteArray());
5745

5846
assetIssueCapsule.setFreeAssetNetLimit(newLimit);
5947
assetIssueCapsule.setPublicFreeAssetNetLimit(newPublicLimit);
48+
assetIssueCapsule.setUrl(newUrl);
49+
assetIssueCapsule.setDescription(newDescription);
6050
assetIssueStore.put(assetIssueCapsule.createDbKey(), assetIssueCapsule);
6151

6252
ret.setStatus(fee, code.SUCESS);
@@ -71,15 +61,32 @@ public boolean execute(TransactionResultCapsule ret) throws ContractExeException
7161

7262
@Override
7363
public boolean validate() throws ContractValidateException {
64+
65+
if (this.contract == null) {
66+
throw new ContractValidateException("No contract!");
67+
}
7468
if (this.dbManager == null) {
7569
throw new ContractValidateException("No dbManager!");
7670
}
77-
if (updateAssetContract == null) {
71+
if (!this.contract.is(UpdateAssetContract.class)) {
7872
throw new ContractValidateException(
79-
"contract type error,expected type [UpdateAssetContract],real type["
80-
+ contract.getClass() + "]");
73+
"contract type error,expected type [UpdateAssetContract],real type[" + contract
74+
.getClass() + "]");
75+
}
76+
final UpdateAssetContract updateAssetContract;
77+
try {
78+
updateAssetContract = this.contract.unpack(UpdateAssetContract.class);
79+
} catch (InvalidProtocolBufferException e) {
80+
logger.debug(e.getMessage(), e);
81+
throw new ContractValidateException(e.getMessage());
8182
}
8283

84+
long newLimit = updateAssetContract.getNewLimit();
85+
long newPublicLimit = updateAssetContract.getNewPublicLimit();
86+
byte[] ownerAddress = updateAssetContract.getOwnerAddress().toByteArray();
87+
ByteString newUrl = updateAssetContract.getUrl();
88+
ByteString newDescription = updateAssetContract.getDescription();
89+
8390
if (!Wallet.addressValid(ownerAddress)) {
8491
throw new ContractValidateException("Invalid ownerAddress");
8592
}
@@ -95,11 +102,11 @@ public boolean validate() throws ContractValidateException {
95102

96103
assert (dbManager.getAssetIssueStore().get(account.getAssetIssuedName().toByteArray()) != null);
97104

98-
if ((newUrl != null) && (!TransactionUtil.validUrl(newUrl))) {
105+
if ((newUrl != null) && (!TransactionUtil.validUrl(newUrl.toByteArray()))) {
99106
throw new ContractValidateException("Invalid url");
100107
}
101108

102-
if ((newDescription != null) && (!TransactionUtil.validAssetDescription(newDescription))) {
109+
if ((newDescription != null) && (!TransactionUtil.validAssetDescription(newDescription.toByteArray()))) {
103110
throw new ContractValidateException("Invalid description");
104111
}
105112

src/main/java/org/tron/core/capsule/AssetIssueCapsule.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,22 +114,33 @@ public long getPublicFreeAssetNetLimit() {
114114
}
115115

116116
public void setPublicFreeAssetNetLimit(long newPublicLimit) {
117-
this.assetIssueContract.toBuilder().setPublicFreeAssetNetLimit(newPublicLimit).build();
117+
this.assetIssueContract = this.assetIssueContract.toBuilder()
118+
.setPublicFreeAssetNetLimit(newPublicLimit).build();
118119
}
119120

120121
public long getPublicFreeAssetNetUsage() {
121122
return this.assetIssueContract.getPublicFreeAssetNetUsage();
122123
}
123124

124125
public void setPublicFreeAssetNetUsage(long value) {
125-
this.assetIssueContract.toBuilder().setPublicFreeAssetNetUsage(value).build();
126+
this.assetIssueContract = this.assetIssueContract.toBuilder()
127+
.setPublicFreeAssetNetUsage(value).build();
126128
}
127129

128130
public long getPublicLatestFreeNetTime() {
129131
return this.assetIssueContract.getPublicLatestFreeNetTime();
130132
}
131133

132134
public void setPublicLatestFreeNetTime(long time) {
133-
this.assetIssueContract.toBuilder().setPublicLatestFreeNetTime(time).build();
135+
this.assetIssueContract = this.assetIssueContract.toBuilder()
136+
.setPublicLatestFreeNetTime(time).build();
137+
}
138+
139+
public void setUrl(ByteString newUrl) {
140+
this.assetIssueContract.toBuilder().setUrl(newUrl).build();
141+
}
142+
143+
public void setDescription(ByteString string) {
144+
this.assetIssueContract.toBuilder().setDescription(string).build();
134145
}
135146
}

src/main/java/org/tron/core/db/BandwidthProcessor.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public void consumeBandwidth(TransactionCapsule trx) throws ValidateBandwidthExc
8383

8484
for (Contract contract : contracts) {
8585
long bytes = trx.getSerializedSize();
86+
logger.debug("trxId {},bandwidth cost :{}", trx.getTransactionId(), bytes);
8687
byte[] address = TransactionCapsule.getOwner(contract);
8788
AccountCapsule accountCapsule = dbManager.getAccountStore().get(address);
8889
if (accountCapsule == null) {
@@ -255,10 +256,14 @@ private boolean useAssetAccountNet(Contract contract, AccountCapsule accountCaps
255256
}
256257

257258
public long calculateGlobalNetLimit(long frozeBalance) {
259+
if (frozeBalance < 1000_000L) {
260+
return 0;
261+
}
258262
long netWeight = frozeBalance / 1000_000L;
259263
long totalNetLimit = dbManager.getDynamicPropertiesStore().getTotalNetLimit();
260264
long totalNetWeight = dbManager.getDynamicPropertiesStore().getTotalNetWeight();
261-
return netWeight * totalNetLimit / totalNetWeight;
265+
assert totalNetWeight > 0;
266+
return (long) (netWeight * ((double) totalNetLimit / totalNetWeight));
262267
}
263268

264269
private boolean useAccountNet(AccountCapsule accountCapsule, long bytes, long now) {

src/main/java/org/tron/core/db/DynamicPropertiesStore.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ private DynamicPropertiesStore(@Value("properties") String dbName) {
222222
try {
223223
this.getTotalNetWeight();
224224
} catch (IllegalArgumentException e) {
225-
this.saveTotalNetWeight(1L);
225+
this.saveTotalNetWeight(0L);
226226
}
227227

228228
try {

src/main/java/org/tron/core/db/Manager.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -359,12 +359,15 @@ private void initWitness() {
359359
byte[] keyAddress = key.getAddress();
360360
ByteString address = ByteString.copyFrom(keyAddress);
361361

362+
final AccountCapsule accountCapsule;
362363
if (!this.accountStore.has(keyAddress)) {
363-
final AccountCapsule accountCapsule =
364-
new AccountCapsule(ByteString.EMPTY, address, AccountType.AssetIssue, 0L);
365-
accountCapsule.setIsWitness(true);
366-
this.accountStore.put(keyAddress, accountCapsule);
364+
accountCapsule = new AccountCapsule(ByteString.EMPTY,
365+
address, AccountType.AssetIssue, 0L);
366+
} else {
367+
accountCapsule = this.accountStore.get(keyAddress);
367368
}
369+
accountCapsule.setIsWitness(true);
370+
this.accountStore.put(keyAddress, accountCapsule);
368371

369372
final WitnessCapsule witnessCapsule =
370373
new WitnessCapsule(address, key.getVoteCount(), key.getUrl());

src/main/java/org/tron/core/services/RpcApiService.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,14 @@ public void getAccount(Account request, StreamObserver<Account> responseObserver
195195
ByteString addressBs = request.getAddress();
196196
if (addressBs != null) {
197197
Account reply = walletSolidity.getAccount(addressBs);
198-
AccountCapsule accountCapsule = new AccountCapsule(reply);
199-
BandwidthProcessor processor = new BandwidthProcessor(dbManager);
200-
processor.updateUsage(accountCapsule);
201-
responseObserver.onNext(accountCapsule.getInstance());
198+
if (reply == null) {
199+
responseObserver.onNext(null);
200+
} else {
201+
AccountCapsule accountCapsule = new AccountCapsule(reply);
202+
BandwidthProcessor processor = new BandwidthProcessor(dbManager);
203+
processor.updateUsage(accountCapsule);
204+
responseObserver.onNext(accountCapsule.getInstance());
205+
}
202206
} else {
203207
responseObserver.onNext(null);
204208
}

0 commit comments

Comments
 (0)