Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 2ce580d

Browse filesBrowse files
Merge pull request #6172 from lxcmyf/feature/consensus_optimize_tx
feat(transaction): optimize transactions during the consensus phase
2 parents 0c27569 + 9c03624 commit 2ce580d
Copy full SHA for 2ce580d

File tree

Expand file treeCollapse file tree

7 files changed

+49
-13
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

7 files changed

+49
-13
lines changed
Open diff view settings
Collapse file

‎chainbase/src/main/java/org/tron/core/ChainBaseManager.java‎

Copy file name to clipboardExpand all lines: chainbase/src/main/java/org/tron/core/ChainBaseManager.java
+9Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,15 @@ public static synchronized void init(ChainBaseManager manager) {
380380
AssetUtil.setDynamicPropertiesStore(manager.getDynamicPropertiesStore());
381381
}
382382

383+
public long getNextBlockSlotTime() {
384+
long slotCount = 1;
385+
if (dynamicPropertiesStore.getStateFlag() == 1) {
386+
slotCount += dynamicPropertiesStore.getMaintenanceSkipSlots();
387+
}
388+
return dynamicPropertiesStore.getLatestBlockHeaderTimestamp()
389+
+ slotCount * BLOCK_PRODUCED_INTERVAL;
390+
}
391+
383392
@PostConstruct
384393
private void init() {
385394
this.lowestBlockNum = this.blockIndexStore.getLimitNumber(1, 1).stream()
Collapse file

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

Copy file name to clipboardExpand all lines: chainbase/src/main/java/org/tron/core/db/BandwidthProcessor.java
+4-2Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ public void consume(TransactionCapsule trx, TransactionTrace trace)
9999
TooBigTransactionResultException, TooBigTransactionException {
100100
List<Contract> contracts = trx.getInstance().getRawData().getContractList();
101101
long resultSizeWithMaxContractRet = trx.getResultSizeWithMaxContractRet();
102-
if (!trx.isInBlock() && resultSizeWithMaxContractRet >
102+
boolean optimizeTxs = !trx.isInBlock() || chainBaseManager
103+
.getDynamicPropertiesStore().allowConsensusLogicOptimization();
104+
if (optimizeTxs && resultSizeWithMaxContractRet >
103105
Constant.MAX_RESULT_SIZE_IN_TX * contracts.size()) {
104106
throw new TooBigTransactionResultException(String.format(
105107
"Too big transaction result, TxId %s, the result size is %d bytes, maxResultSize %d",
@@ -135,7 +137,7 @@ public void consume(TransactionCapsule trx, TransactionTrace trace)
135137
}
136138
long now = chainBaseManager.getHeadSlot();
137139
if (contractCreateNewAccount(contract)) {
138-
if (!trx.isInBlock()) {
140+
if (optimizeTxs) {
139141
long maxCreateAccountTxSize = dynamicPropertiesStore.getMaxCreateAccountTxSize();
140142
int signatureCount = trx.getInstance().getSignatureCount();
141143
long createAccountBytesSize = trx.getInstance().toBuilder().clearRet()
Collapse file

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

Copy file name to clipboardExpand all lines: framework/src/main/java/org/tron/core/Wallet.java
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,7 @@ public GrpcAPI.Return broadcastTransaction(Transaction signedTransaction) {
556556
throw new ContractValidateException(ActuatorConstant.CONTRACT_NOT_EXIST);
557557
}
558558
TransactionMessage message = new TransactionMessage(trx.getInstance().toByteArray());
559-
trx.checkExpiration(tronNetDelegate.getNextBlockSlotTime());
559+
trx.checkExpiration(chainBaseManager.getNextBlockSlotTime());
560560
dbManager.pushTransaction(trx);
561561
int num = tronNetService.fastBroadcastTransaction(message);
562562
if (num == 0 && minEffectiveConnection != 0) {
Collapse file

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

Copy file name to clipboardExpand all lines: framework/src/main/java/org/tron/core/db/Manager.java
+7-1Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,9 @@ void validateTapos(TransactionCapsule transactionCapsule) throws TaposException
797797

798798
void validateCommon(TransactionCapsule transactionCapsule)
799799
throws TransactionExpirationException, TooBigTransactionException {
800-
if (!transactionCapsule.isInBlock()) {
800+
boolean optimizeTxs = !transactionCapsule.isInBlock() || chainBaseManager
801+
.getDynamicPropertiesStore().allowConsensusLogicOptimization();
802+
if (optimizeTxs) {
801803
transactionCapsule.removeRedundantRet();
802804
long generalBytesSize =
803805
transactionCapsule.getInstance().toBuilder().clearRet().build().getSerializedSize()
@@ -816,6 +818,10 @@ void validateCommon(TransactionCapsule transactionCapsule)
816818
}
817819
long transactionExpiration = transactionCapsule.getExpiration();
818820
long headBlockTime = chainBaseManager.getHeadBlockTimeStamp();
821+
if (transactionCapsule.isInBlock()
822+
&& chainBaseManager.getDynamicPropertiesStore().allowConsensusLogicOptimization()) {
823+
transactionCapsule.checkExpiration(chainBaseManager.getNextBlockSlotTime());
824+
}
819825
if (transactionExpiration <= headBlockTime
820826
|| transactionExpiration > headBlockTime + Constant.MAXIMUM_TIME_UNTIL_EXPIRATION) {
821827
throw new TransactionExpirationException(
Collapse file

‎framework/src/main/java/org/tron/core/net/TronNetDelegate.java‎

Copy file name to clipboardExpand all lines: framework/src/main/java/org/tron/core/net/TronNetDelegate.java
-8Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -384,12 +384,4 @@ public boolean isBlockUnsolidified() {
384384
return headNum - solidNum >= maxUnsolidifiedBlocks;
385385
}
386386

387-
public long getNextBlockSlotTime() {
388-
long slotCount = 1;
389-
if (chainBaseManager.getDynamicPropertiesStore().getStateFlag() == 1) {
390-
slotCount += chainBaseManager.getDynamicPropertiesStore().getMaintenanceSkipSlots();
391-
}
392-
return chainBaseManager.getDynamicPropertiesStore().getLatestBlockHeaderTimestamp()
393-
+ slotCount * BLOCK_PRODUCED_INTERVAL;
394-
}
395387
}
Collapse file

‎framework/src/main/java/org/tron/core/net/messagehandler/TransactionsMsgHandler.java‎

Copy file name to clipboardExpand all lines: framework/src/main/java/org/tron/core/net/messagehandler/TransactionsMsgHandler.java
+4-1Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.springframework.beans.factory.annotation.Autowired;
1111
import org.springframework.stereotype.Component;
1212
import org.tron.common.es.ExecutorServiceManager;
13+
import org.tron.core.ChainBaseManager;
1314
import org.tron.core.config.args.Args;
1415
import org.tron.core.exception.P2pException;
1516
import org.tron.core.exception.P2pException.TypeEnum;
@@ -36,6 +37,8 @@ public class TransactionsMsgHandler implements TronMsgHandler {
3637
private TronNetDelegate tronNetDelegate;
3738
@Autowired
3839
private AdvService advService;
40+
@Autowired
41+
private ChainBaseManager chainBaseManager;
3942

4043
private BlockingQueue<TrxEvent> smartContractQueue = new LinkedBlockingQueue(MAX_TRX_SIZE);
4144

@@ -133,7 +136,7 @@ private void handleTransaction(PeerConnection peer, TransactionMessage trx) {
133136
}
134137

135138
try {
136-
trx.getTransactionCapsule().checkExpiration(tronNetDelegate.getNextBlockSlotTime());
139+
trx.getTransactionCapsule().checkExpiration(chainBaseManager.getNextBlockSlotTime());
137140
tronNetDelegate.pushTransaction(trx.getTransactionCapsule());
138141
advService.broadcast(trx);
139142
} catch (P2pException e) {
Collapse file

‎framework/src/test/java/org/tron/core/db/ManagerTest.java‎

Copy file name to clipboardExpand all lines: framework/src/test/java/org/tron/core/db/ManagerTest.java
+24Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,6 +1161,30 @@ public void testTooBigTransaction() {
11611161

11621162
}
11631163

1164+
@Test
1165+
public void testExpiration() {
1166+
dbManager.getDynamicPropertiesStore().saveConsensusLogicOptimization(1);
1167+
TransferContract transferContract =
1168+
TransferContract.newBuilder()
1169+
.setAmount(10)
1170+
.setOwnerAddress(ByteString.copyFromUtf8("aaa"))
1171+
.setToAddress(ByteString.copyFromUtf8("bbb"))
1172+
.build();
1173+
StringBuilder sb = new StringBuilder();
1174+
for (int i = 0; i < 100; i++) {
1175+
sb.append("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
1176+
}
1177+
Transaction transaction = Transaction.newBuilder().setRawData(Transaction.raw.newBuilder()
1178+
.setData(ByteString.copyFrom(sb.toString().getBytes(StandardCharsets.UTF_8)))
1179+
.addContract(Transaction.Contract.newBuilder().setParameter(Any.pack(transferContract))
1180+
.setType(ContractType.TransferContract))).build();
1181+
TransactionCapsule trx = new TransactionCapsule(transaction);
1182+
trx.setInBlock(true);
1183+
1184+
assertThrows(TransactionExpirationException.class, () -> dbManager.validateCommon(trx));
1185+
1186+
}
1187+
11641188
@Test
11651189
public void blockTrigger() {
11661190
exception.expect(TronError.class);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.