Skip to content

Commit dcd0ebd

Browse files
authored
Merge pull request #5325 from tronprotocol/master
feat(merge): merge master into develop
2 parents 4b6e0a5 + 9e95599 commit dcd0ebd

File tree

22 files changed

+445
-105
lines changed

22 files changed

+445
-105
lines changed

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

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@
55
import static org.tron.core.config.Parameter.ChainConstant.TRX_PRECISION;
66
import static org.tron.protos.contract.Common.ResourceCode.BANDWIDTH;
77
import static org.tron.protos.contract.Common.ResourceCode.ENERGY;
8+
import static org.tron.protos.contract.Common.ResourceCode.TRON_POWER;
89

910
import com.google.protobuf.ByteString;
1011
import com.google.protobuf.InvalidProtocolBufferException;
12+
import java.util.HashMap;
1113
import java.util.List;
14+
import java.util.Map;
1215
import java.util.Objects;
1316
import java.util.concurrent.atomic.AtomicLong;
1417
import lombok.extern.slf4j.Slf4j;
18+
import org.apache.commons.lang3.tuple.Pair;
1519
import org.apache.commons.lang3.tuple.Triple;
1620
import org.tron.common.utils.DecodeUtil;
1721
import org.tron.common.utils.StringUtil;
@@ -54,12 +58,13 @@ public boolean execute(Object result) throws ContractExeException {
5458
List<UnFreezeV2> unfrozenV2List = ownerCapsule.getUnfrozenV2List();
5559
long now = dynamicStore.getLatestBlockHeaderTimestamp();
5660
AtomicLong atomicWithdrawExpireBalance = new AtomicLong(0L);
57-
AtomicLong atomicCancelBalance = new AtomicLong(0L);
58-
Triple<AtomicLong, AtomicLong, AtomicLong> triple =
59-
Triple.of(new AtomicLong(0L), new AtomicLong(0L), new AtomicLong(0L));
61+
Triple<Pair<AtomicLong, AtomicLong>, Pair<AtomicLong, AtomicLong>, Pair<AtomicLong, AtomicLong>>
62+
triple = Triple.of(
63+
Pair.of(new AtomicLong(0L), new AtomicLong(0L)),
64+
Pair.of(new AtomicLong(0L), new AtomicLong(0L)),
65+
Pair.of(new AtomicLong(0L), new AtomicLong(0L)));
6066
for (UnFreezeV2 unFreezeV2 : unfrozenV2List) {
61-
updateAndCalculate(triple, ownerCapsule, now, atomicWithdrawExpireBalance,
62-
atomicCancelBalance, unFreezeV2);
67+
updateAndCalculate(triple, ownerCapsule, now, atomicWithdrawExpireBalance, unFreezeV2);
6368
}
6469
ownerCapsule.clearUnfrozenV2();
6570
addTotalResourceWeight(dynamicStore, triple);
@@ -71,24 +76,29 @@ public boolean execute(Object result) throws ContractExeException {
7176

7277
accountStore.put(ownerCapsule.createDbKey(), ownerCapsule);
7378
ret.setWithdrawExpireAmount(withdrawExpireBalance);
74-
ret.setCancelAllUnfreezeV2Amount(atomicCancelBalance.get());
79+
Map<String, Long> cancelUnfreezeV2AmountMap = new HashMap<>();
80+
cancelUnfreezeV2AmountMap.put(BANDWIDTH.name(), triple.getLeft().getRight().get());
81+
cancelUnfreezeV2AmountMap.put(ENERGY.name(), triple.getMiddle().getRight().get());
82+
cancelUnfreezeV2AmountMap.put(TRON_POWER.name(), triple.getRight().getRight().get());
83+
ret.putAllCancelUnfreezeV2AmountMap(cancelUnfreezeV2AmountMap);
7584
ret.setStatus(fee, code.SUCESS);
7685
return true;
7786
}
7887

7988
private void addTotalResourceWeight(DynamicPropertiesStore dynamicStore,
80-
Triple<AtomicLong, AtomicLong, AtomicLong> triple) {
81-
dynamicStore.addTotalNetWeight(triple.getLeft().get());
82-
dynamicStore.addTotalEnergyWeight(triple.getMiddle().get());
83-
dynamicStore.addTotalTronPowerWeight(triple.getRight().get());
89+
Triple<Pair<AtomicLong, AtomicLong>,
90+
Pair<AtomicLong, AtomicLong>,
91+
Pair<AtomicLong, AtomicLong>> triple) {
92+
dynamicStore.addTotalNetWeight(triple.getLeft().getLeft().get());
93+
dynamicStore.addTotalEnergyWeight(triple.getMiddle().getLeft().get());
94+
dynamicStore.addTotalTronPowerWeight(triple.getRight().getLeft().get());
8495
}
8596

86-
private void updateAndCalculate(Triple<AtomicLong, AtomicLong, AtomicLong> triple,
87-
AccountCapsule ownerCapsule, long now, AtomicLong atomicLong, AtomicLong cancelBalance,
88-
UnFreezeV2 unFreezeV2) {
97+
private void updateAndCalculate(Triple<Pair<AtomicLong, AtomicLong>, Pair<AtomicLong, AtomicLong>,
98+
Pair<AtomicLong, AtomicLong>> triple,
99+
AccountCapsule ownerCapsule, long now, AtomicLong atomicLong, UnFreezeV2 unFreezeV2) {
89100
if (unFreezeV2.getUnfreezeExpireTime() > now) {
90101
updateFrozenInfoAndTotalResourceWeight(ownerCapsule, unFreezeV2, triple);
91-
cancelBalance.addAndGet(unFreezeV2.getUnfreezeAmount());
92102
} else {
93103
atomicLong.addAndGet(unFreezeV2.getUnfreezeAmount());
94104
}
@@ -160,25 +170,29 @@ public long calcFee() {
160170

161171
public void updateFrozenInfoAndTotalResourceWeight(
162172
AccountCapsule accountCapsule, UnFreezeV2 unFreezeV2,
163-
Triple<AtomicLong, AtomicLong, AtomicLong> triple) {
173+
Triple<Pair<AtomicLong, AtomicLong>, Pair<AtomicLong, AtomicLong>,
174+
Pair<AtomicLong, AtomicLong>> triple) {
164175
switch (unFreezeV2.getType()) {
165176
case BANDWIDTH:
166177
long oldNetWeight = accountCapsule.getFrozenV2BalanceWithDelegated(BANDWIDTH) / TRX_PRECISION;
167178
accountCapsule.addFrozenBalanceForBandwidthV2(unFreezeV2.getUnfreezeAmount());
168179
long newNetWeight = accountCapsule.getFrozenV2BalanceWithDelegated(BANDWIDTH) / TRX_PRECISION;
169-
triple.getLeft().addAndGet(newNetWeight - oldNetWeight);
180+
triple.getLeft().getLeft().addAndGet(newNetWeight - oldNetWeight);
181+
triple.getLeft().getRight().addAndGet(unFreezeV2.getUnfreezeAmount());
170182
break;
171183
case ENERGY:
172184
long oldEnergyWeight = accountCapsule.getFrozenV2BalanceWithDelegated(ENERGY) / TRX_PRECISION;
173185
accountCapsule.addFrozenBalanceForEnergyV2(unFreezeV2.getUnfreezeAmount());
174186
long newEnergyWeight = accountCapsule.getFrozenV2BalanceWithDelegated(ENERGY) / TRX_PRECISION;
175-
triple.getMiddle().addAndGet(newEnergyWeight - oldEnergyWeight);
187+
triple.getMiddle().getLeft().addAndGet(newEnergyWeight - oldEnergyWeight);
188+
triple.getMiddle().getRight().addAndGet(unFreezeV2.getUnfreezeAmount());
176189
break;
177190
case TRON_POWER:
178191
long oldTPWeight = accountCapsule.getTronPowerFrozenV2Balance() / TRX_PRECISION;
179192
accountCapsule.addFrozenForTronPowerV2(unFreezeV2.getUnfreezeAmount());
180193
long newTPWeight = accountCapsule.getTronPowerFrozenV2Balance() / TRX_PRECISION;
181-
triple.getRight().addAndGet(newTPWeight - oldTPWeight);
194+
triple.getRight().getLeft().addAndGet(newTPWeight - oldTPWeight);
195+
triple.getRight().getRight().addAndGet(unFreezeV2.getUnfreezeAmount());
182196
break;
183197
default:
184198
break;

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static java.lang.Math.min;
55
import static org.apache.commons.lang3.ArrayUtils.getLength;
66
import static org.apache.commons.lang3.ArrayUtils.isNotEmpty;
7+
import static org.tron.protos.contract.Common.ResourceCode.ENERGY;
78

89
import com.google.protobuf.ByteString;
910
import java.math.BigInteger;
@@ -58,7 +59,6 @@
5859
import org.tron.protos.Protocol.Transaction;
5960
import org.tron.protos.Protocol.Transaction.Contract.ContractType;
6061
import org.tron.protos.Protocol.Transaction.Result.contractResult;
61-
import org.tron.protos.contract.Common;
6262
import org.tron.protos.contract.SmartContractOuterClass.CreateSmartContract;
6363
import org.tron.protos.contract.SmartContractOuterClass.SmartContract;
6464
import org.tron.protos.contract.SmartContractOuterClass.TriggerSmartContract;
@@ -568,12 +568,13 @@ public long getAccountEnergyLimitWithFixRatio(AccountCapsule account, long feeLi
568568
energyProcessor.updateUsage(account);
569569
account.setLatestConsumeTimeForEnergy(now);
570570
receipt.setCallerEnergyUsage(account.getEnergyUsage());
571-
receipt.setCallerEnergyWindowSize(account.getWindowSize(Common.ResourceCode.ENERGY));
571+
receipt.setCallerEnergyWindowSize(account.getWindowSize(ENERGY));
572+
receipt.setCallerEnergyWindowSizeV2(account.getWindowSizeV2(ENERGY));
572573
account.setEnergyUsage(
573-
energyProcessor.increase(account, Common.ResourceCode.ENERGY,
574+
energyProcessor.increase(account, ENERGY,
574575
account.getEnergyUsage(), min(leftFrozenEnergy, energyFromFeeLimit), now, now));
575576
receipt.setCallerEnergyMergedUsage(account.getEnergyUsage());
576-
receipt.setCallerEnergyMergedWindowSize(account.getWindowSize(Common.ResourceCode.ENERGY));
577+
receipt.setCallerEnergyMergedWindowSize(account.getWindowSize(ENERGY));
577578
rootRepository.updateAccount(account.createDbKey(), account);
578579
}
579580
return min(availableEnergy, energyFromFeeLimit);
@@ -730,12 +731,13 @@ public long getTotalEnergyLimitWithFixRatio(AccountCapsule creator, AccountCapsu
730731
energyProcessor.updateUsage(creator);
731732
creator.setLatestConsumeTimeForEnergy(now);
732733
receipt.setOriginEnergyUsage(creator.getEnergyUsage());
733-
receipt.setOriginEnergyWindowSize(creator.getWindowSize(Common.ResourceCode.ENERGY));
734+
receipt.setOriginEnergyWindowSize(creator.getWindowSize(ENERGY));
735+
receipt.setOriginEnergyWindowSizeV2(creator.getWindowSizeV2(ENERGY));
734736
creator.setEnergyUsage(
735-
energyProcessor.increase(creator, Common.ResourceCode.ENERGY,
737+
energyProcessor.increase(creator, ENERGY,
736738
creator.getEnergyUsage(), creatorEnergyLimit, now, now));
737739
receipt.setOriginEnergyMergedUsage(creator.getEnergyUsage());
738-
receipt.setOriginEnergyMergedWindowSize(creator.getWindowSize(Common.ResourceCode.ENERGY));
740+
receipt.setOriginEnergyMergedWindowSize(creator.getWindowSize(ENERGY));
739741
rootRepository.updateAccount(creator.createDbKey(), creator);
740742
}
741743
return Math.addExact(callerEnergyLimit, creatorEnergyLimit);

chainbase/src/main/java/org/tron/core/capsule/AccountCapsule.java

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@
4242
import java.util.Map;
4343
import java.util.Objects;
4444

45+
import static java.lang.Math.ceil;
4546
import static org.tron.core.config.Parameter.ChainConstant.BLOCK_PRODUCED_INTERVAL;
4647
import static org.tron.core.config.Parameter.ChainConstant.WINDOW_SIZE_MS;
48+
import static org.tron.core.config.Parameter.ChainConstant.WINDOW_SIZE_PRECISION;
4749
import static org.tron.protos.contract.Common.ResourceCode.BANDWIDTH;
4850
import static org.tron.protos.contract.Common.ResourceCode.ENERGY;
4951
import static org.tron.protos.contract.Common.ResourceCode.TRON_POWER;
@@ -1369,12 +1371,62 @@ public void setNewWindowSize(ResourceCode resourceCode, long newWindowSize) {
13691371

13701372
public long getWindowSize(ResourceCode resourceCode) {
13711373
long windowSize;
1374+
boolean windowOptimized;
13721375
if (resourceCode == BANDWIDTH) {
13731376
windowSize = this.account.getNetWindowSize();
1377+
windowOptimized = this.account.getNetWindowOptimized();
13741378
} else {
13751379
windowSize = this.account.getAccountResource().getEnergyWindowSize();
1380+
windowOptimized = this.account.getAccountResource().getEnergyWindowOptimized();
1381+
}
1382+
if (windowSize == 0) {
1383+
return WINDOW_SIZE_MS / BLOCK_PRODUCED_INTERVAL;
1384+
}
1385+
if (windowOptimized) {
1386+
return windowSize < WINDOW_SIZE_PRECISION ? WINDOW_SIZE_MS / BLOCK_PRODUCED_INTERVAL :
1387+
windowSize / WINDOW_SIZE_PRECISION;
1388+
} else {
1389+
return windowSize;
1390+
}
1391+
}
1392+
1393+
public long getWindowSizeV2(ResourceCode resourceCode) {
1394+
long windowSize;
1395+
boolean windowOptimized;
1396+
if (resourceCode == BANDWIDTH) {
1397+
windowSize = this.account.getNetWindowSize();
1398+
windowOptimized = this.account.getNetWindowOptimized();
1399+
} else {
1400+
windowSize = this.account.getAccountResource().getEnergyWindowSize();
1401+
windowOptimized = this.account.getAccountResource().getEnergyWindowOptimized();
1402+
}
1403+
if (windowSize == 0) {
1404+
return WINDOW_SIZE_MS / BLOCK_PRODUCED_INTERVAL * WINDOW_SIZE_PRECISION;
1405+
}
1406+
if (windowOptimized) {
1407+
return windowSize;
1408+
} else {
1409+
return windowSize * WINDOW_SIZE_PRECISION;
1410+
}
1411+
}
1412+
1413+
public boolean getWindowOptimized(ResourceCode resourceCode) {
1414+
boolean windowOptimized;
1415+
if (resourceCode == BANDWIDTH) {
1416+
windowOptimized = this.account.getNetWindowOptimized();
1417+
} else {
1418+
windowOptimized = this.account.getAccountResource().getEnergyWindowOptimized();
1419+
}
1420+
return windowOptimized;
1421+
}
1422+
1423+
public void setWindowOptimized(ResourceCode resourceCode, boolean windowOptimized) {
1424+
if (resourceCode == BANDWIDTH) {
1425+
this.account = this.account.toBuilder().setNetWindowOptimized(windowOptimized).build();
1426+
} else {
1427+
this.account = this.account.toBuilder().setAccountResource(this.account.getAccountResource()
1428+
.toBuilder().setEnergyWindowOptimized(windowOptimized).build()).build();
13761429
}
1377-
return windowSize == 0 ? WINDOW_SIZE_MS / BLOCK_PRODUCED_INTERVAL : windowSize;
13781430
}
13791431

13801432
public long getLastConsumeTime(ResourceCode resourceCode) {
@@ -1393,4 +1445,11 @@ public long getFrozenV2BalanceWithDelegated(ResourceCode resourceCode) {
13931445
}
13941446
}
13951447

1448+
public void setNewWindowSizeV2( ResourceCode resourceCode, long newWindowSize) {
1449+
this.setNewWindowSize(resourceCode, newWindowSize);
1450+
if (!this.getWindowOptimized(resourceCode)) {
1451+
this.setWindowOptimized(resourceCode, true);
1452+
}
1453+
}
1454+
13961455
}

chainbase/src/main/java/org/tron/core/capsule/ReceiptCapsule.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ public class ReceiptCapsule {
6969
@Setter
7070
private long callerEnergyWindowSize;
7171

72+
@Getter
73+
@Setter
74+
private long callerEnergyWindowSizeV2;
75+
7276
/**
7377
* Window size of caller after merging frozen energy
7478
*/
@@ -83,6 +87,10 @@ public class ReceiptCapsule {
8387
@Setter
8488
private long originEnergyWindowSize;
8589

90+
@Getter
91+
@Setter
92+
private long originEnergyWindowSizeV2;
93+
8694
/**
8795
* Window size of origin after merging frozen energy
8896
*/

chainbase/src/main/java/org/tron/core/capsule/TransactionResultCapsule.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.protobuf.ByteString;
44
import com.google.protobuf.InvalidProtocolBufferException;
55
import java.util.List;
6+
import java.util.Map;
67
import lombok.extern.slf4j.Slf4j;
78
import org.tron.core.exception.BadItemException;
89
import org.tron.protos.Protocol.MarketOrderDetail;
@@ -89,13 +90,13 @@ public void setWithdrawExpireAmount(long amount) {
8990
.setWithdrawExpireAmount(amount).build();
9091
}
9192

92-
public long getCancelAllUnfreezeV2Amount() {
93-
return transactionResult.getCancelAllUnfreezeV2Amount();
93+
public Map<String, Long> getCancelUnfreezeV2AmountMap() {
94+
return transactionResult.getCancelUnfreezeV2AmountMap();
9495
}
9596

96-
public void setCancelAllUnfreezeV2Amount(long amount) {
97+
public void putAllCancelUnfreezeV2AmountMap(Map<String, Long> map) {
9798
this.transactionResult = this.transactionResult.toBuilder()
98-
.setCancelAllUnfreezeV2Amount(amount).build();
99+
.putAllCancelUnfreezeV2Amount(map).build();
99100
}
100101

101102
public long getExchangeReceivedAmount() {

chainbase/src/main/java/org/tron/core/capsule/utils/TransactionUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public static TransactionInfoCapsule buildTransactionInfoInstance(TransactionCap
100100
builder.setExchangeId(programResult.getRet().getExchangeId());
101101
builder.setWithdrawAmount(programResult.getRet().getWithdrawAmount());
102102
builder.setWithdrawExpireAmount(programResult.getRet().getWithdrawExpireAmount());
103-
builder.setCancelAllUnfreezeV2Amount(programResult.getRet().getCancelAllUnfreezeV2Amount());
103+
builder.putAllCancelUnfreezeV2Amount(programResult.getRet().getCancelUnfreezeV2AmountMap());
104104
builder.setExchangeReceivedAmount(programResult.getRet().getExchangeReceivedAmount());
105105
builder.setExchangeInjectAnotherAmount(programResult.getRet().getExchangeInjectAnotherAmount());
106106
builder.setExchangeWithdrawAnotherAmount(

0 commit comments

Comments
 (0)