Skip to content

Commit 33d8a4e

Browse files
authored
Merge pull request tronprotocol#1083 from tronprotocol/feature/transaction_history_store_2
Feature/transaction history store 2
2 parents a683c30 + 193dcb0 commit 33d8a4e

File tree

16 files changed

+371
-19
lines changed

16 files changed

+371
-19
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,8 @@ public AssetIssueList getAssetIssueList() {
346346

347347
public AssetIssueList getAssetIssueList(long offset, long limit) {
348348
AssetIssueList.Builder builder = AssetIssueList.newBuilder();
349-
List<AssetIssueCapsule> assetIssueList = dbManager.getAssetIssueStore().getAssetIssuesPaginated(offset, limit);
349+
List<AssetIssueCapsule> assetIssueList = dbManager.getAssetIssueStore()
350+
.getAssetIssuesPaginated(offset, limit);
350351
if (null == assetIssueList || assetIssueList.size() == 0) {
351352
return null;
352353
}
@@ -467,6 +468,7 @@ public Transaction getTransactionById(ByteString transactionId) {
467468
try {
468469
transactionCapsule = dbManager.getTransactionStore()
469470
.get(transactionId.toByteArray());
471+
470472
} catch (BadItemException e) {
471473
}
472474
if (transactionCapsule != null) {

src/main/java/org/tron/core/WalletSolidity.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,28 @@
22

33
import com.google.protobuf.ByteString;
44
import java.util.List;
5+
import java.util.Objects;
56
import lombok.extern.slf4j.Slf4j;
67
import org.springframework.beans.factory.annotation.Autowired;
78
import org.springframework.stereotype.Component;
89
import org.tron.api.GrpcAPI.TransactionList;
910
import org.tron.common.utils.ByteArray;
11+
import org.tron.core.capsule.TransactionInfoCapsule;
12+
import org.tron.core.db.Manager;
1013
import org.tron.core.db.api.StoreAPI;
14+
import org.tron.core.exception.BadItemException;
1115
import org.tron.core.exception.NonUniqueObjectException;
1216
import org.tron.protos.Protocol.Transaction;
17+
import org.tron.protos.Protocol.TransactionInfo;
1318

1419
@Slf4j
1520
@Component
1621
public class WalletSolidity {
1722

1823
@Autowired
1924
private StoreAPI storeAPI;
25+
@Autowired
26+
private Manager dbManager;
2027

2128
public Transaction getTransactionById(ByteString id) {
2229
try {
@@ -28,7 +35,23 @@ public Transaction getTransactionById(ByteString id) {
2835
}
2936
return null;
3037
}
31-
38+
39+
public TransactionInfo getTransactionInfoById(ByteString id) {
40+
if (Objects.isNull(id)) {
41+
return null;
42+
}
43+
TransactionInfoCapsule transactionInfoCapsule = null;
44+
try {
45+
transactionInfoCapsule = dbManager.getTransactionHistoryStore()
46+
.get(id.toByteArray());
47+
} catch (BadItemException e) {
48+
}
49+
if (transactionInfoCapsule != null) {
50+
return transactionInfoCapsule.getInstance();
51+
}
52+
return null;
53+
}
54+
3255
public TransactionList getTransactionsFromThis(ByteString thisAddress, long offset, long limit) {
3356
List<Transaction> transactionsFromThis = storeAPI
3457
.getTransactionsFromThis(ByteArray.toHexString(thisAddress.toByteArray()), offset, limit);
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package org.tron.core.capsule;
2+
3+
import com.google.protobuf.ByteString;
4+
import com.google.protobuf.InvalidProtocolBufferException;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.tron.core.exception.BadItemException;
7+
import org.tron.protos.Protocol.TransactionInfo;
8+
9+
@Slf4j
10+
public class TransactionInfoCapsule implements ProtoCapsule<TransactionInfo> {
11+
12+
private TransactionInfo transactionInfo;
13+
14+
/**
15+
* constructor TransactionCapsule.
16+
*/
17+
public TransactionInfoCapsule(TransactionInfo trxRet) {
18+
this.transactionInfo = trxRet;
19+
}
20+
21+
public TransactionInfoCapsule(byte[] data) throws BadItemException {
22+
try {
23+
this.transactionInfo = TransactionInfo.parseFrom(data);
24+
} catch (InvalidProtocolBufferException e) {
25+
throw new BadItemException("TransactionInfoCapsule proto data parse exception");
26+
}
27+
}
28+
29+
public TransactionInfoCapsule() {
30+
this.transactionInfo = TransactionInfo.newBuilder().build();
31+
}
32+
33+
public long getFee() {
34+
return transactionInfo.getFee();
35+
}
36+
37+
public void setId(byte[] id) {
38+
this.transactionInfo = this.transactionInfo.toBuilder()
39+
.setId(ByteString.copyFrom(id)).build();
40+
}
41+
42+
public byte[] getId() {
43+
return transactionInfo.getId().toByteArray();
44+
}
45+
46+
public void setFee(long fee) {
47+
this.transactionInfo = this.transactionInfo.toBuilder().setFee(fee).build();
48+
}
49+
50+
public void addFee(long fee) {
51+
this.transactionInfo = this.transactionInfo.toBuilder()
52+
.setFee(this.transactionInfo.getFee() + fee).build();
53+
}
54+
55+
public long getBlockNumber() {
56+
return transactionInfo.getBlockNumber();
57+
}
58+
59+
public void setBlockNumber(long num) {
60+
this.transactionInfo = this.transactionInfo.toBuilder().setBlockNumber(num)
61+
.build();
62+
}
63+
64+
public long getBlockTimeStamp() {
65+
return transactionInfo.getBlockTimeStamp();
66+
}
67+
68+
public void setBlockTimeStamp(long time) {
69+
this.transactionInfo = this.transactionInfo.toBuilder().setBlockTimeStamp(time)
70+
.build();
71+
}
72+
73+
@Override
74+
public byte[] getData() {
75+
return this.transactionInfo.toByteArray();
76+
}
77+
78+
@Override
79+
public TransactionInfo getInstance() {
80+
return this.transactionInfo;
81+
}
82+
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.tron.core.capsule;
22

3+
import com.google.protobuf.InvalidProtocolBufferException;
34
import lombok.extern.slf4j.Slf4j;
5+
import org.tron.core.exception.BadItemException;
46
import org.tron.protos.Protocol.Transaction;
57
import org.tron.protos.Protocol.Transaction.Result;
68

@@ -16,6 +18,14 @@ public TransactionResultCapsule(Transaction.Result trxRet) {
1618
this.transactionResult = trxRet;
1719
}
1820

21+
public TransactionResultCapsule(byte[] data) throws BadItemException {
22+
try {
23+
this.transactionResult = Transaction.Result.parseFrom(data);
24+
} catch (InvalidProtocolBufferException e) {
25+
throw new BadItemException("TransactionResult proto data parse exception");
26+
}
27+
}
28+
1929
public TransactionResultCapsule() {
2030
this.transactionResult = Transaction.Result.newBuilder().build();
2131
}

src/main/java/org/tron/core/config/args/Args.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.util.List;
2323
import java.util.Optional;
2424
import java.util.Properties;
25-
import java.util.Random;
2625
import java.util.stream.Collectors;
2726
import lombok.Getter;
2827
import lombok.NoArgsConstructor;
@@ -34,7 +33,6 @@
3433
import org.springframework.stereotype.Component;
3534
import org.tron.common.crypto.ECKey;
3635
import org.tron.common.overlay.discover.node.Node;
37-
import org.tron.core.Constant;
3836
import org.tron.common.utils.ByteArray;
3937
import org.tron.core.Constant;
4038
import org.tron.core.Wallet;
@@ -167,9 +165,9 @@ public class Args {
167165
@Setter
168166
private String p2pNodeId;
169167

168+
//If you are running a solidity node for java tron, this flag is set to true
170169
@Getter
171170
@Setter
172-
//If you are running a solidity node for java tron, this flag is set to true
173171
private boolean solidityNode = false;
174172

175173
@Getter

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ private boolean consumeFee(AccountCapsule accountCapsule, long fee) {
128128
long latestOperationTime = dbManager.getHeadBlockTimeStamp();
129129
accountCapsule.setLatestOperationTime(latestOperationTime);
130130
dbManager.adjustBalance(accountCapsule, -fee);
131+
dbManager.adjustBalance(this.dbManager.getAccountStore().getBlackhole().createDbKey(), +fee);
131132
return true;
132133
} catch (BalanceInsufficientException e) {
133134
return false;
@@ -159,7 +160,6 @@ private void consumeForCreateNewAccount(AccountCapsule accountCapsule, long byte
159160
}
160161
}
161162

162-
163163
public boolean consumeBandwidthForCreateNewAccount(AccountCapsule accountCapsule, long bytes,
164164
long now) {
165165
long netUsage = accountCapsule.getNetUsage();
@@ -388,6 +388,7 @@ private boolean useFreeNet(AccountCapsule accountCapsule, long bytes, long now)
388388
return true;
389389

390390
}
391+
391392
}
392393

393394

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.tron.core.capsule.BlockCapsule.BlockId;
4949
import org.tron.core.capsule.BytesCapsule;
5050
import org.tron.core.capsule.TransactionCapsule;
51+
import org.tron.core.capsule.TransactionInfoCapsule;
5152
import org.tron.core.capsule.TransactionResultCapsule;
5253
import org.tron.core.capsule.WitnessCapsule;
5354
import org.tron.core.capsule.utils.BlockUtil;
@@ -107,6 +108,9 @@ public class Manager {
107108
private RecentBlockStore recentBlockStore;
108109
@Autowired
109110
private VotesStore votesStore;
111+
@Autowired
112+
private TransactionHistoryStore transactionHistoryStore;
113+
110114

111115
// for network
112116
@Autowired
@@ -892,6 +896,12 @@ public boolean processTransaction(final TransactionCapsule trxCap)
892896
trxCap.setResult(ret);
893897

894898
transactionStore.put(trxCap.getTransactionId().getBytes(), trxCap);
899+
if (Args.getInstance().isSolidityNode()) {
900+
TransactionInfoCapsule transactionInfoCapsule = new TransactionInfoCapsule();
901+
transactionInfoCapsule.setId(trxCap.getTransactionId().getBytes());
902+
transactionInfoCapsule.setFee(ret.getFee());
903+
transactionHistoryStore.put(trxCap.getTransactionId().getBytes(), transactionInfoCapsule);
904+
}
895905
return true;
896906
}
897907

@@ -1025,6 +1035,14 @@ private void setTransactionStore(final TransactionStore transactionStore) {
10251035
this.transactionStore = transactionStore;
10261036
}
10271037

1038+
public TransactionHistoryStore getTransactionHistoryStore() {
1039+
return this.transactionHistoryStore;
1040+
}
1041+
1042+
private void setTransactionHistoryStore(final TransactionHistoryStore transactionHistoryStore) {
1043+
this.transactionHistoryStore = transactionHistoryStore;
1044+
}
1045+
10281046
public BlockStore getBlockStore() {
10291047
return this.blockStore;
10301048
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.tron.core.db;
2+
3+
import org.apache.commons.lang3.ArrayUtils;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.beans.factory.annotation.Value;
6+
import org.springframework.stereotype.Component;
7+
import org.tron.core.capsule.TransactionInfoCapsule;
8+
import org.tron.core.exception.BadItemException;
9+
10+
@Component
11+
public class TransactionHistoryStore extends TronStoreWithRevoking<TransactionInfoCapsule> {
12+
13+
@Autowired
14+
public TransactionHistoryStore(@Value("transactionHistoryStore") String dbName) {
15+
super(dbName);
16+
}
17+
18+
19+
@Override
20+
public void put(byte[] key, TransactionInfoCapsule item) {
21+
super.put(key, item);
22+
}
23+
24+
@Override
25+
public void delete(byte[] key) {
26+
super.delete(key);
27+
}
28+
29+
@Override
30+
public TransactionInfoCapsule get(byte[] key) throws BadItemException {
31+
byte[] value = dbSource.getData(key);
32+
return ArrayUtils.isEmpty(value) ? null : new TransactionInfoCapsule(value);
33+
}
34+
35+
@Override
36+
public boolean has(byte[] key) {
37+
byte[] account = dbSource.getData(key);
38+
return null != account;
39+
}
40+
41+
42+
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import org.tron.protos.Protocol.DynamicProperties;
7575
import org.tron.protos.Protocol.Transaction;
7676
import org.tron.protos.Protocol.Transaction.Contract.ContractType;
77+
import org.tron.protos.Protocol.TransactionInfo;
7778
import org.tron.protos.Protocol.TransactionSign;
7879

7980
@Component
@@ -280,6 +281,20 @@ public void getTransactionById(BytesMessage request,
280281
}
281282
responseObserver.onCompleted();
282283
}
284+
285+
@Override
286+
public void getTransactionInfoById(BytesMessage request,
287+
StreamObserver<TransactionInfo> responseObserver) {
288+
ByteString id = request.getValue();
289+
if (null != id) {
290+
TransactionInfo reply = walletSolidity.getTransactionInfoById(id);
291+
292+
responseObserver.onNext(reply);
293+
} else {
294+
responseObserver.onNext(null);
295+
}
296+
responseObserver.onCompleted();
297+
}
283298
}
284299

285300
/**

src/main/java/org/tron/keystore/CipherException.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
*/
66
public class CipherException extends Exception {
77

8-
public CipherException(String message) {
9-
super(message);
10-
}
8+
public CipherException(String message) {
9+
super(message);
10+
}
1111

12-
public CipherException(Throwable cause) {
13-
super(cause);
14-
}
12+
public CipherException(Throwable cause) {
13+
super(cause);
14+
}
1515

16-
public CipherException(String message, Throwable cause) {
17-
super(message, cause);
18-
}
16+
public CipherException(String message, Throwable cause) {
17+
super(message, cause);
18+
}
1919
}

0 commit comments

Comments
 (0)