Skip to content

Commit ab45283

Browse files
authored
Merge branch 'release' into switch_back_when_switch_fork_failed
2 parents 7443157 + 33d8a4e commit ab45283

20 files changed

+534
-45
lines changed

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
import org.tron.protos.Protocol.Account;
7070
import org.tron.protos.Protocol.Block;
7171
import org.tron.protos.Protocol.Transaction;
72+
import org.tron.protos.Protocol.TransactionSign;
7273

7374

7475
@Slf4j
@@ -293,6 +294,23 @@ public GrpcAPI.Return broadcastTransaction(Transaction signaturedTransaction) {
293294
}
294295
}
295296

297+
public TransactionCapsule getTransactionSign(TransactionSign transactionSign) {
298+
byte[] privateKey = transactionSign.getPrivateKey().toByteArray();
299+
TransactionCapsule trx = new TransactionCapsule(transactionSign.getTransaction());
300+
trx.sign(privateKey);
301+
return trx;
302+
}
303+
304+
public byte[] pass2Key(byte[] passPhrase){
305+
return Sha256Hash.hash(passPhrase);
306+
}
307+
308+
public byte[] createAdresss(byte[] passPhrase) {
309+
byte[] privateKey = pass2Key(passPhrase);
310+
ECKey ecKey = ECKey.fromPrivate(privateKey);
311+
return ecKey.getAddress();
312+
}
313+
296314
public Block getNowBlock() {
297315
List<BlockCapsule> blockList = dbManager.getBlockStore().getBlockByLatestNum(1);
298316
if (CollectionUtils.isEmpty(blockList)) {
@@ -328,7 +346,8 @@ public AssetIssueList getAssetIssueList() {
328346

329347
public AssetIssueList getAssetIssueList(long offset, long limit) {
330348
AssetIssueList.Builder builder = AssetIssueList.newBuilder();
331-
List<AssetIssueCapsule> assetIssueList = dbManager.getAssetIssueStore().getAssetIssuesPaginated(offset, limit);
349+
List<AssetIssueCapsule> assetIssueList = dbManager.getAssetIssueStore()
350+
.getAssetIssuesPaginated(offset, limit);
332351
if (null == assetIssueList || assetIssueList.size() == 0) {
333352
return null;
334353
}
@@ -449,6 +468,7 @@ public Transaction getTransactionById(ByteString transactionId) {
449468
try {
450469
transactionCapsule = dbManager.getTransactionStore()
451470
.get(transactionId.toByteArray());
471+
452472
} catch (BadItemException e) {
453473
}
454474
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);

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
import com.google.protobuf.Any;
55
import com.google.protobuf.ByteString;
66
import com.google.protobuf.InvalidProtocolBufferException;
7+
import java.util.Arrays;
78
import lombok.extern.slf4j.Slf4j;
89
import org.tron.common.utils.StringUtil;
910
import org.tron.core.Wallet;
1011
import org.tron.core.capsule.AccountCapsule;
1112
import org.tron.core.capsule.TransactionResultCapsule;
13+
import org.tron.core.config.args.Args;
1214
import org.tron.core.db.Manager;
1315
import org.tron.core.exception.ContractExeException;
1416
import org.tron.core.exception.ContractValidateException;
@@ -84,12 +86,20 @@ public boolean validate() throws ContractValidateException {
8486
"Account[" + readableOwnerAddress + "] not exists");
8587
}
8688

89+
String readableOwnerAddress = StringUtil.createReadableString(ownerAddress);
8790
if (!dbManager.getWitnessStore().has(ownerAddress)) {
88-
String readableOwnerAddress = StringUtil.createReadableString(ownerAddress);
8991
throw new ContractValidateException(
9092
"Account[" + readableOwnerAddress + "] is not a witnessAccount");
9193
}
9294

95+
boolean isGP = Args.getInstance().getGenesisBlock().getWitnesses().stream().anyMatch(witness ->
96+
Arrays.equals(ownerAddress, witness.getAddress()));
97+
if (isGP) {
98+
throw new ContractValidateException(
99+
"Account[" + readableOwnerAddress
100+
+ "] is a guard representative and is not allowed to withdraw Balance");
101+
}
102+
93103
long latestWithdrawTime = accountCapsule.getLatestWithdrawTime();
94104
long now = dbManager.getHeadBlockTimeStamp();
95105
long witnessAllowanceFrozenTime =

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,11 +221,10 @@ public boolean checkBalance(byte[] address, byte[] to, long amount, long balance
221221
return true;
222222
}
223223

224-
@Deprecated
225224
public void sign(byte[] privateKey) {
226225
ECKey ecKey = ECKey.fromPrivate(privateKey);
227226
ECDSASignature signature = ecKey.sign(getRawHash().getBytes());
228-
ByteString sig = ByteString.copyFrom(signature.toBase64().getBytes());
227+
ByteString sig = ByteString.copyFrom(signature.toByteArray());
229228
this.transaction = this.transaction.toBuilder().addSignature(sig).build();
230229
}
231230

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
@@ -49,6 +49,7 @@
4949
import org.tron.core.capsule.BlockCapsule.BlockId;
5050
import org.tron.core.capsule.BytesCapsule;
5151
import org.tron.core.capsule.TransactionCapsule;
52+
import org.tron.core.capsule.TransactionInfoCapsule;
5253
import org.tron.core.capsule.TransactionResultCapsule;
5354
import org.tron.core.capsule.WitnessCapsule;
5455
import org.tron.core.capsule.utils.BlockUtil;
@@ -109,6 +110,9 @@ public class Manager {
109110
private RecentBlockStore recentBlockStore;
110111
@Autowired
111112
private VotesStore votesStore;
113+
@Autowired
114+
private TransactionHistoryStore transactionHistoryStore;
115+
112116

113117
// for network
114118
@Autowired
@@ -911,6 +915,12 @@ public boolean processTransaction(final TransactionCapsule trxCap)
911915
trxCap.setResult(ret);
912916

913917
transactionStore.put(trxCap.getTransactionId().getBytes(), trxCap);
918+
if (Args.getInstance().isSolidityNode()) {
919+
TransactionInfoCapsule transactionInfoCapsule = new TransactionInfoCapsule();
920+
transactionInfoCapsule.setId(trxCap.getTransactionId().getBytes());
921+
transactionInfoCapsule.setFee(ret.getFee());
922+
transactionHistoryStore.put(trxCap.getTransactionId().getBytes(), transactionInfoCapsule);
923+
}
914924
return true;
915925
}
916926

@@ -1043,6 +1053,14 @@ private void setTransactionStore(final TransactionStore transactionStore) {
10431053
this.transactionStore = transactionStore;
10441054
}
10451055

1056+
public TransactionHistoryStore getTransactionHistoryStore() {
1057+
return this.transactionHistoryStore;
1058+
}
1059+
1060+
private void setTransactionHistoryStore(final TransactionHistoryStore transactionHistoryStore) {
1061+
this.transactionHistoryStore = transactionHistoryStore;
1062+
}
1063+
10461064
public BlockStore getBlockStore() {
10471065
return this.blockStore;
10481066
}

0 commit comments

Comments
 (0)