Skip to content

Commit 4e65c21

Browse files
committed
feat(jsonrpc): make other jsonrpc apis process finalized parameter
1 parent bd7b3d1 commit 4e65c21

File tree

4 files changed

+26
-13
lines changed

4 files changed

+26
-13
lines changed

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -685,16 +685,20 @@ public Block getBlockByNum(long blockNum) {
685685
}
686686
}
687687

688-
public Block getFinalizedBlock() {
688+
public Block getSolidBlock() {
689689
try {
690-
long blockNum = chainBaseManager.getDynamicPropertiesStore().getLatestSolidifiedBlockNum();
690+
long blockNum = getSolidBlockNum();
691691
return chainBaseManager.getBlockByNum(blockNum).getInstance();
692692
} catch (StoreException e) {
693693
logger.info(e.getMessage());
694694
return null;
695695
}
696696
}
697697

698+
public long getSolidBlockNum() {
699+
return chainBaseManager.getDynamicPropertiesStore().getLatestSolidifiedBlockNum();
700+
}
701+
698702
public BlockCapsule getBlockCapsuleByNum(long blockNum) {
699703
try {
700704
return chainBaseManager.getBlockByNum(blockNum);
@@ -723,7 +727,7 @@ public Block getByJsonBlockId(String id) throws JsonRpcInvalidParamsException {
723727
} else if (LATEST_STR.equalsIgnoreCase(id)) {
724728
return getNowBlock();
725729
} else if (FINALIZED_STR.equalsIgnoreCase(id)) {
726-
return getFinalizedBlock();
730+
return getSolidBlock();
727731
} else if (PENDING_STR.equalsIgnoreCase(id)) {
728732
throw new JsonRpcInvalidParamsException(TAG_PENDING_SUPPORT_ERROR);
729733
} else {

framework/src/main/java/org/tron/core/services/jsonrpc/JsonRpcApiUtil.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.tron.core.services.jsonrpc;
22

33
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.EARLIEST_STR;
4+
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.FINALIZED_STR;
45
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.LATEST_STR;
56
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.PENDING_STR;
67
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.TAG_PENDING_SUPPORT_ERROR;
@@ -514,14 +515,17 @@ public static long parseEnergyFee(long timestamp, String energyPriceHistory) {
514515
return -1;
515516
}
516517

517-
public static long getByJsonBlockId(String blockNumOrTag) throws JsonRpcInvalidParamsException {
518+
public static long getByJsonBlockId(String blockNumOrTag, Wallet wallet)
519+
throws JsonRpcInvalidParamsException {
518520
if (PENDING_STR.equalsIgnoreCase(blockNumOrTag)) {
519521
throw new JsonRpcInvalidParamsException(TAG_PENDING_SUPPORT_ERROR);
520522
}
521523
if (StringUtils.isEmpty(blockNumOrTag) || LATEST_STR.equalsIgnoreCase(blockNumOrTag)) {
522524
return -1;
523525
} else if (EARLIEST_STR.equalsIgnoreCase(blockNumOrTag)) {
524526
return 0;
527+
} else if (FINALIZED_STR.equalsIgnoreCase(blockNumOrTag)) {
528+
return wallet.getSolidBlockNum();
525529
} else {
526530
return ByteArray.jsonHexToLong(blockNumOrTag);
527531
}

framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ public enum RequestSource {
141141

142142
private static final String JSON_ERROR = "invalid json request";
143143
private static final String BLOCK_NUM_ERROR = "invalid block number";
144-
private static final String TAG_NOT_SUPPORT_ERROR = "TAG [earliest | pending] not supported";
144+
private static final String TAG_NOT_SUPPORT_ERROR =
145+
"TAG [earliest | pending | finalized] not supported";
145146
private static final String QUANTITY_NOT_SUPPORT_ERROR =
146147
"QUANTITY not supported, just support TAG as latest";
147148
private static final String NO_BLOCK_HEADER = "header not found";
@@ -353,7 +354,8 @@ public String getLatestBlockNum() {
353354
public String getTrxBalance(String address, String blockNumOrTag)
354355
throws JsonRpcInvalidParamsException {
355356
if (EARLIEST_STR.equalsIgnoreCase(blockNumOrTag)
356-
|| PENDING_STR.equalsIgnoreCase(blockNumOrTag)) {
357+
|| PENDING_STR.equalsIgnoreCase(blockNumOrTag)
358+
|| FINALIZED_STR.equalsIgnoreCase(blockNumOrTag)) {
357359
throw new JsonRpcInvalidParamsException(TAG_NOT_SUPPORT_ERROR);
358360
} else if (LATEST_STR.equalsIgnoreCase(blockNumOrTag)) {
359361
byte[] addressData = addressCompatibleToByteArray(address);
@@ -490,7 +492,8 @@ private String call(byte[] ownerAddressByte, byte[] contractAddressByte, long va
490492
public String getStorageAt(String address, String storageIdx, String blockNumOrTag)
491493
throws JsonRpcInvalidParamsException {
492494
if (EARLIEST_STR.equalsIgnoreCase(blockNumOrTag)
493-
|| PENDING_STR.equalsIgnoreCase(blockNumOrTag)) {
495+
|| PENDING_STR.equalsIgnoreCase(blockNumOrTag)
496+
|| FINALIZED_STR.equalsIgnoreCase(blockNumOrTag)) {
494497
throw new JsonRpcInvalidParamsException(TAG_NOT_SUPPORT_ERROR);
495498
} else if (LATEST_STR.equalsIgnoreCase(blockNumOrTag)) {
496499
byte[] addressByte = addressCompatibleToByteArray(address);
@@ -525,7 +528,8 @@ public String getStorageAt(String address, String storageIdx, String blockNumOrT
525528
public String getABIOfSmartContract(String contractAddress, String blockNumOrTag)
526529
throws JsonRpcInvalidParamsException {
527530
if (EARLIEST_STR.equalsIgnoreCase(blockNumOrTag)
528-
|| PENDING_STR.equalsIgnoreCase(blockNumOrTag)) {
531+
|| PENDING_STR.equalsIgnoreCase(blockNumOrTag)
532+
|| FINALIZED_STR.equalsIgnoreCase(blockNumOrTag)) {
529533
throw new JsonRpcInvalidParamsException(TAG_NOT_SUPPORT_ERROR);
530534
} else if (LATEST_STR.equalsIgnoreCase(blockNumOrTag)) {
531535
byte[] addressData = addressCompatibleToByteArray(contractAddress);
@@ -825,7 +829,8 @@ public String getCall(CallArguments transactionCall, Object blockParamObj)
825829
}
826830

827831
if (EARLIEST_STR.equalsIgnoreCase(blockNumOrTag)
828-
|| PENDING_STR.equalsIgnoreCase(blockNumOrTag)) {
832+
|| PENDING_STR.equalsIgnoreCase(blockNumOrTag)
833+
|| FINALIZED_STR.equalsIgnoreCase(blockNumOrTag)) {
829834
throw new JsonRpcInvalidParamsException(TAG_NOT_SUPPORT_ERROR);
830835
} else if (LATEST_STR.equalsIgnoreCase(blockNumOrTag)) {
831836
byte[] addressData = addressCompatibleToByteArray(transactionCall.getFrom());

framework/src/main/java/org/tron/core/services/jsonrpc/filters/LogFilterWrapper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,15 @@ public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet
5151
// then if toBlock < maxBlockNum, set fromBlock = toBlock
5252
// then if toBlock >= maxBlockNum, set fromBlock = maxBlockNum
5353
if (StringUtils.isEmpty(fr.getFromBlock()) && StringUtils.isNotEmpty(fr.getToBlock())) {
54-
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock());
54+
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock(), wallet);
5555
if (toBlockSrc == -1) {
5656
toBlockSrc = Long.MAX_VALUE;
5757
}
5858
fromBlockSrc = Math.min(toBlockSrc, currentMaxBlockNum);
5959

6060
} else if (StringUtils.isNotEmpty(fr.getFromBlock())
6161
&& StringUtils.isEmpty(fr.getToBlock())) {
62-
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock());
62+
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock(), wallet);
6363
if (fromBlockSrc == -1) {
6464
fromBlockSrc = currentMaxBlockNum;
6565
}
@@ -70,8 +70,8 @@ public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet
7070
toBlockSrc = Long.MAX_VALUE;
7171

7272
} else {
73-
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock());
74-
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock());
73+
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock(), wallet);
74+
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock(), wallet);
7575
if (fromBlockSrc == -1 && toBlockSrc == -1) {
7676
fromBlockSrc = currentMaxBlockNum;
7777
toBlockSrc = Long.MAX_VALUE;

0 commit comments

Comments
 (0)