Skip to content

Commit cd77191

Browse files
feat(DynamicEnergy): optimize dynamic energy penalty in receipts
1 parent 0d76f95 commit cd77191

File tree

6 files changed

+26
-8
lines changed

6 files changed

+26
-8
lines changed

chainbase/src/main/java/org/tron/common/runtime/ProgramResult.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import org.tron.common.logsfilter.trigger.ContractTrigger;
1717
import org.tron.common.runtime.vm.DataWord;
1818
import org.tron.common.runtime.vm.LogInfo;
19-
import org.tron.common.utils.ByteArraySet;
2019
import org.tron.core.capsule.TransactionResultCapsule;
2120
import org.tron.protos.Protocol.Transaction.Result.contractResult;
2221

@@ -29,7 +28,7 @@ public class ProgramResult {
2928
private long energyPenalty = 0;
3029

3130
@Getter
32-
private long energyOrigin = 0;
31+
private long energyPenaltyTotal = 0;
3332

3433
private byte[] hReturn = EMPTY_BYTE_ARRAY;
3534
private byte[] contractAddress = EMPTY_BYTE_ARRAY;
@@ -68,12 +67,11 @@ public static ProgramResult createEmpty() {
6867

6968
public void spendEnergy(long energy) {
7069
energyUsed += energy;
71-
energyOrigin += energy;
7270
}
7371

7472
public void spendEnergyWithPenalty(long origin, long penalty) {
75-
energyOrigin += origin;
7673
energyPenalty += penalty;
74+
energyPenaltyTotal += penalty;
7775
energyUsed += origin + penalty;
7876
}
7977

@@ -89,6 +87,10 @@ public void refundEnergy(long energy) {
8987
energyUsed -= energy;
9088
}
9189

90+
public void addTotalPenalty(long penalty) {
91+
energyPenaltyTotal += penalty;
92+
}
93+
9294
public byte[] getContractAddress() {
9395
return Arrays.copyOf(contractAddress, contractAddress.length);
9496
}
@@ -243,6 +245,7 @@ public void merge(ProgramResult another) {
243245
if (another.getException() == null && !another.isRevert()) {
244246
addDeleteAccounts(another.getDeleteAccounts());
245247
addLogInfos(another.getLogInfoList());
248+
addTotalPenalty(another.getEnergyPenaltyTotal());
246249
//addFutureRefund(another.getFutureRefund());
247250
//addTouchAccounts(another.getTouchedAccounts());
248251
}

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

+8
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,14 @@ public void setEnergyUsageTotal(long energyUsage) {
129129
this.receipt = this.receipt.toBuilder().setEnergyUsageTotal(energyUsage).build();
130130
}
131131

132+
public long getEnergyPenaltyTotal() {
133+
return this.receipt.getEnergyPenaltyTotal();
134+
}
135+
136+
public void setEnergyPenaltyTotal(long penalty) {
137+
this.receipt = this.receipt.toBuilder().setEnergyPenaltyTotal(penalty).build();
138+
}
139+
132140
public long getNetUsage() {
133141
return this.receipt.getNetUsage();
134142
}

chainbase/src/main/java/org/tron/core/db/TransactionTrace.java

+8
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,13 @@ public void setBill(long energyUsage) {
158158
receipt.setEnergyUsageTotal(energyUsage);
159159
}
160160

161+
public void setPenalty(long energyPenalty) {
162+
if (energyPenalty < 0) {
163+
energyPenalty = 0L;
164+
}
165+
receipt.setEnergyPenaltyTotal(energyPenalty);
166+
}
167+
161168
//set net bill
162169
public void setNetBill(long netUsage, long netFee) {
163170
receipt.setNetUsage(netUsage);
@@ -179,6 +186,7 @@ public void exec()
179186
/* VM execute */
180187
runtime.execute(transactionContext);
181188
setBill(transactionContext.getProgramResult().getEnergyUsed());
189+
setPenalty(transactionContext.getProgramResult().getEnergyPenaltyTotal());
182190

183191
// if (TrxType.TRX_PRECOMPILED_TYPE != trxType) {
184192
// if (contractResult.OUT_OF_TIME

framework/src/main/java/org/tron/core/Wallet.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -2960,8 +2960,7 @@ public Transaction callConstantContract(TransactionCapsule trxCap,
29602960

29612961
TransactionResultCapsule ret = new TransactionResultCapsule();
29622962
builder.setEnergyUsed(result.getEnergyUsed());
2963-
builder.setEnergyOrigin(result.getEnergyOrigin());
2964-
builder.setEnergyPenalty(result.getEnergyPenalty());
2963+
builder.setEnergyPenalty(result.getEnergyPenaltyTotal());
29652964
builder.addConstantResult(ByteString.copyFrom(result.getHReturn()));
29662965
result.getLogInfoList().forEach(logInfo ->
29672966
builder.addLogs(LogInfo.buildLog(logInfo)));

protocol/src/main/protos/api/api.proto

+1-2
Original file line numberDiff line numberDiff line change
@@ -1311,8 +1311,7 @@ message TransactionExtention {
13111311
int64 energy_used = 5;
13121312
repeated TransactionInfo.Log logs = 6;
13131313
repeated InternalTransaction internal_transactions = 7;
1314-
int64 energy_origin = 8;
1315-
int64 energy_penalty = 9;
1314+
int64 energy_penalty = 8;
13161315
}
13171316

13181317
message EstimateEnergyMessage {

protocol/src/main/protos/core/Tron.proto

+1
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ message ResourceReceipt {
321321
int64 net_usage = 5;
322322
int64 net_fee = 6;
323323
Transaction.Result.contractResult result = 7;
324+
int64 energy_penalty_total = 8;
324325
}
325326

326327
message MarketOrderDetail {

0 commit comments

Comments
 (0)