Skip to content

Commit 3fd0c3f

Browse files
committed
Merge branch 'develop' into fast-sync-use-cpdb
2 parents 57ef39a + 16be345 commit 3fd0c3f

File tree

88 files changed

+9473
-4061
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+9473
-4061
lines changed

src/main/java/org/tron/common/logsfilter/capsule/BlockLogTriggerCapsule.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ public BlockLogTriggerCapsule(BlockCapsule block) {
2222
);
2323
}
2424

25+
public void setLatestSolidifiedBlockNumber(long latestSolidifiedBlockNumber) {
26+
blockLogTrigger.setLatestSolidifiedBlockNumber(latestSolidifiedBlockNumber);
27+
}
28+
2529
@Override
2630
public void processTrigger() {
2731
EventPluginLoader.getInstance().postBlockTrigger(blockLogTrigger);

src/main/java/org/tron/common/logsfilter/capsule/ContractEventTriggerCapsule.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ public class ContractEventTriggerCapsule extends TriggerCapsule {
2828
@Setter
2929
private Entry abiEntry;
3030

31+
public void setLatestSolidifiedBlockNumber(long latestSolidifiedBlockNumber) {
32+
contractEventTrigger.setLatestSolidifiedBlockNumber(latestSolidifiedBlockNumber);
33+
}
34+
3135
public ContractEventTriggerCapsule(LogEventWrapper log) {
3236
this.contractEventTrigger = new ContractEventTrigger();
3337

src/main/java/org/tron/common/logsfilter/capsule/ContractLogTriggerCapsule.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ public ContractLogTriggerCapsule(ContractLogTrigger contractLogTrigger) {
1515
this.contractLogTrigger = contractLogTrigger;
1616
}
1717

18+
public void setLatestSolidifiedBlockNumber(long latestSolidifiedBlockNumber) {
19+
contractLogTrigger.setLatestSolidifiedBlockNumber(latestSolidifiedBlockNumber);
20+
}
21+
1822
@Override
1923
public void processTrigger() {
2024
if (FilterQuery.matchFilter(contractLogTrigger)) {

src/main/java/org/tron/common/logsfilter/capsule/TransactionLogTriggerCapsule.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,17 @@ public class TransactionLogTriggerCapsule extends TriggerCapsule {
3535
@Setter
3636
TransactionLogTrigger transactionLogTrigger;
3737

38+
public void setLatestSolidifiedBlockNumber(long latestSolidifiedBlockNumber) {
39+
transactionLogTrigger.setLatestSolidifiedBlockNumber(latestSolidifiedBlockNumber);
40+
}
41+
3842
public TransactionLogTriggerCapsule(TransactionCapsule trxCasule, BlockCapsule blockCapsule) {
3943
transactionLogTrigger = new TransactionLogTrigger();
4044
if (Objects.nonNull(blockCapsule)) {
4145
transactionLogTrigger.setBlockHash(blockCapsule.getBlockId().toString());
4246
}
4347
transactionLogTrigger.setTransactionId(trxCasule.getTransactionId().toString());
44-
transactionLogTrigger.setTimeStamp(trxCasule.getTimestamp());
48+
transactionLogTrigger.setTimeStamp(blockCapsule.getTimeStamp());
4549
transactionLogTrigger.setBlockNumber(trxCasule.getBlockNum());
4650

4751
TransactionTrace trxTrace = trxCasule.getTrxTrace();
@@ -152,7 +156,7 @@ private List<InternalTransactionPojo> getInternalTransactionList(List<InternalTr
152156
item.setCallValue(internalTransaction.getValue());
153157
item.setTokenInfo(internalTransaction.getTokenInfo());
154158
item.setCaller_address(Hex.toHexString(internalTransaction.getSender()));
155-
item.setTransferTo_address(Hex.toHexString(internalTransaction.getReceiveAddress()));
159+
item.setTransferTo_address(Hex.toHexString(internalTransaction.getTransferToAddress()));
156160
item.setData(Hex.toHexString(internalTransaction.getData()));
157161
item.setRejected(internalTransaction.isRejected());
158162
item.setNote(internalTransaction.getNote());

src/main/java/org/tron/common/logsfilter/trigger/BlockLogTrigger.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ public class BlockLogTrigger extends Trigger {
1818
@Setter
1919
private long transactionSize;
2020

21+
@Getter
22+
@Setter
23+
private long latestSolidifiedBlockNumber;
24+
2125
@Getter
2226
@Setter
2327
private List<String> transactionList = new ArrayList<>();
@@ -37,6 +41,8 @@ public String toString() {
3741
.append(blockHash)
3842
.append(", transactionSize: ")
3943
.append(transactionSize)
44+
.append(", latestSolidifiedBlockNumber: ")
45+
.append(latestSolidifiedBlockNumber)
4046
.append(", transactionList: ")
4147
.append(transactionList).toString();
4248
}

src/main/java/org/tron/common/logsfilter/trigger/ContractTrigger.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,8 @@ public class ContractTrigger extends Trigger {
5353
@Getter
5454
@Setter
5555
private boolean removed;
56+
57+
@Getter
58+
@Setter
59+
private long latestSolidifiedBlockNumber;
5660
}

src/main/java/org/tron/common/logsfilter/trigger/TransactionLogTrigger.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ public void setTimeStamp(long ts) {
9090
@Setter
9191
private long assetAmount;
9292

93+
@Getter
94+
@Setter
95+
private long latestSolidifiedBlockNumber;
96+
9397
//internal transaction
9498
@Getter
9599
@Setter

src/main/java/org/tron/common/runtime/RuntimeImpl.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ private void create()
452452
&& isCheckTransaction()){
453453

454454
logInfoTriggerParser = new LogInfoTriggerParser(newSmartContract.getAbi(),
455-
blockCap.getNum(), trx.getRawData().getTimestamp(), txId,
455+
blockCap.getNum(), blockCap.getTimeStamp(), txId,
456456
callerAddress, callerAddress, callerAddress, contractAddress);
457457

458458
}
@@ -580,7 +580,7 @@ private void call()
580580
&& isCheckTransaction()){
581581

582582
logInfoTriggerParser = new LogInfoTriggerParser(deployedContract.getInstance().getAbi(),
583-
blockCap.getNum(), trx.getRawData().getTimestamp(), txId,
583+
blockCap.getNum(), blockCap.getTimeStamp(), txId,
584584
callerAddress, creatorAddress, originAddress, contractAddress);
585585
}
586586
}
@@ -765,12 +765,13 @@ public void finalization() {
765765
}
766766

767767
}
768+
768769
public void checkTokenValueAndId(long tokenValue, long tokenId) throws ContractValidateException {
769770
if (VMConfig.allowTvmTransferTrc10()) {
770771
if (VMConfig.isVERSION_3_5_HARD_FORK()) { //3.5 hard fork
771772
// tokenid can only be 0
772773
// or (MIN_TOKEN_ID, Long.Max]
773-
if (tokenId <= VMConstant.MIN_TOKEN_ID && tokenId != 0){
774+
if (tokenId <= VMConstant.MIN_TOKEN_ID && tokenId != 0) {
774775
throw new ContractValidateException("tokenId must > " + VMConstant.MIN_TOKEN_ID);
775776
}
776777
// tokenid can only be 0 when tokenvalue = 0,

src/main/java/org/tron/common/runtime/vm/VM.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,6 +1359,7 @@ public void play(Program program) {
13591359
throw e;
13601360
} catch (RuntimeException e) {
13611361
if (StringUtils.isEmpty(e.getMessage())) {
1362+
logger.warn("Unknown Exception occurred, tx id: {}", Hex.toHexString(program.getRootTransactionId()), e);
13621363
program.setRuntimeFailure(new RuntimeException("Unknown Exception"));
13631364
} else {
13641365
program.setRuntimeFailure(e);

src/main/java/org/tron/common/storage/Value.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package org.tron.common.storage;
22

3+
import static org.tron.common.storage.Type.VALUE_TYPE_UNKNOWN;
4+
35
import java.util.Arrays;
46
import org.apache.commons.lang3.ArrayUtils;
5-
import org.tron.common.utils.ByteArray;
7+
import org.tron.common.runtime.config.VMConfig;
68
import org.tron.core.capsule.AccountCapsule;
79
import org.tron.core.capsule.AssetIssueCapsule;
810
import org.tron.core.capsule.BlockCapsule;
@@ -40,6 +42,10 @@ public Value(byte[] any, int type) {
4042
this.any = new byte[any.length];
4143
System.arraycopy(any, 0, this.any, 0, any.length);
4244
this.type = new Type(type);
45+
} else {
46+
if (VMConfig.isVERSION_3_5_HARD_FORK()) {
47+
this.type = new Type(VALUE_TYPE_UNKNOWN);
48+
}
4349
}
4450
}
4551

@@ -51,6 +57,10 @@ private Value(Value value) {
5157
this.any = new byte[value.any.length];
5258
System.arraycopy(value.getAny(), 0, this.any, 0, value.getAny().length);
5359
this.type = value.getType().clone();
60+
} else {
61+
if (VMConfig.isVERSION_3_5_HARD_FORK()) {
62+
this.type = new Type(VALUE_TYPE_UNKNOWN);
63+
}
5464
}
5565
}
5666

@@ -211,9 +221,9 @@ public static Value create(byte[] any, int type) {
211221
return new Value(any, type);
212222
}
213223

214-
public static Value create(byte[] any, Type type) {
215-
return new Value(any, type);
216-
}
224+
// public static Value create(byte[] any, Type type) {
225+
// return new Value(any, type);
226+
// }
217227

218228
public static Value create(byte[] any) {
219229
return new Value(any, Type.VALUE_TYPE_NORMAL);

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

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,6 @@
6464
import org.tron.api.GrpcAPI.WitnessList;
6565
import org.tron.common.crypto.ECKey;
6666
import org.tron.common.crypto.Hash;
67-
import org.tron.common.logsfilter.EventPluginLoader;
68-
import org.tron.common.logsfilter.FilterQuery;
6967
import org.tron.common.overlay.discover.node.NodeHandler;
7068
import org.tron.common.overlay.discover.node.NodeManager;
7169
import org.tron.common.overlay.message.Message;
@@ -128,6 +126,7 @@
128126
import org.tron.protos.Protocol.DelegatedResourceAccountIndex;
129127
import org.tron.protos.Protocol.Exchange;
130128
import org.tron.protos.Protocol.Permission;
129+
import org.tron.protos.Protocol.Permission.PermissionType;
131130
import org.tron.protos.Protocol.Proposal;
132131
import org.tron.protos.Protocol.SmartContract;
133132
import org.tron.protos.Protocol.SmartContract.ABI;
@@ -151,8 +150,8 @@ public class Wallet {
151150
private Manager dbManager;
152151
@Autowired
153152
private NodeManager nodeManager;
154-
private static String addressPreFixString = Constant.ADD_PRE_FIX_STRING_TESTNET; //default testnet
155-
private static byte addressPreFixByte = Constant.ADD_PRE_FIX_BYTE_TESTNET;
153+
private static String addressPreFixString = Constant.ADD_PRE_FIX_STRING_MAINNET; //default testnet
154+
private static byte addressPreFixByte = Constant.ADD_PRE_FIX_BYTE_MAINNET;
156155

157156
private int minEffectiveConnection = Args.getInstance().getMinEffectiveConnection();
158157

@@ -437,7 +436,6 @@ public GrpcAPI.Return broadcastTransaction(Transaction signaturedTransaction) {
437436
}
438437
}
439438

440-
441439
if (dbManager.isTooManyPending()) {
442440
logger.warn("Broadcast transaction {} failed, too many pending.", trx.getTransactionId());
443441
return builder.setResult(false).setCode(response_code.SERVER_BUSY).build();
@@ -525,6 +523,17 @@ public TransactionCapsule addSign(TransactionSign transactionSign)
525523
return trx;
526524
}
527525

526+
public static boolean checkPermissionOprations(Permission permission, Contract contract)
527+
throws PermissionException {
528+
ByteString operations = permission.getOperations();
529+
if (operations.size() != 32) {
530+
throw new PermissionException("operations size must 32");
531+
}
532+
int contractType = contract.getTypeValue();
533+
boolean b = (operations.byteAt(contractType / 8) & (1 << (contractType % 8))) != 0;
534+
return b;
535+
}
536+
528537
public TransactionSignWeight getTransactionSignWeight(Transaction trx) {
529538
TransactionSignWeight.Builder tswBuilder = TransactionSignWeight.newBuilder();
530539
TransactionExtention.Builder trxExBuilder = TransactionExtention.newBuilder();
@@ -542,9 +551,20 @@ public TransactionSignWeight getTransactionSignWeight(Transaction trx) {
542551
if (account == null) {
543552
throw new PermissionException("Account is not exist!");
544553
}
545-
String permissionName = TransactionCapsule.getPermissionName(contract);
546-
Permission permission = TransactionCapsule
547-
.getPermission(account.getInstance(), permissionName);
554+
int permissionId = contract.getPermissionId();
555+
Permission permission = account.getPermissionById(permissionId);
556+
if (permission == null) {
557+
throw new PermissionException("permission isn't exit");
558+
}
559+
if (permissionId != 0) {
560+
if (permission.getType() != PermissionType.Active) {
561+
throw new PermissionException("Permission type is error");
562+
}
563+
//check oprations
564+
if (!checkPermissionOprations(permission, contract)){
565+
throw new PermissionException("Permission denied");
566+
}
567+
}
548568
tswBuilder.setPermission(permission);
549569
if (trx.getSignatureCount() > 0) {
550570
List<ByteString> approveList = new ArrayList<ByteString>();

0 commit comments

Comments
 (0)