Skip to content

Commit bd7b3d1

Browse files
committed
feat(jsonrpc): ethGetBlockByNumber supports finalized
1 parent 773b374 commit bd7b3d1

File tree

3 files changed

+25
-6
lines changed

3 files changed

+25
-6
lines changed

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

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
import static org.tron.core.config.Parameter.DatabaseConstants.PROPOSAL_COUNT_LIMIT_MAX;
3030
import static org.tron.core.services.jsonrpc.JsonRpcApiUtil.parseEnergyFee;
3131
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.EARLIEST_STR;
32+
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.FINALIZED_STR;
33+
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.LATEST_STR;
34+
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.PENDING_STR;
35+
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.TAG_PENDING_SUPPORT_ERROR;
3236
import static org.tron.core.vm.utils.FreezeV2Util.getV2EnergyUsage;
3337
import static org.tron.core.vm.utils.FreezeV2Util.getV2NetUsage;
3438
import static org.tron.protos.contract.Common.ResourceCode;
@@ -681,6 +685,16 @@ public Block getBlockByNum(long blockNum) {
681685
}
682686
}
683687

688+
public Block getFinalizedBlock() {
689+
try {
690+
long blockNum = chainBaseManager.getDynamicPropertiesStore().getLatestSolidifiedBlockNum();
691+
return chainBaseManager.getBlockByNum(blockNum).getInstance();
692+
} catch (StoreException e) {
693+
logger.info(e.getMessage());
694+
return null;
695+
}
696+
}
697+
684698
public BlockCapsule getBlockCapsuleByNum(long blockNum) {
685699
try {
686700
return chainBaseManager.getBlockByNum(blockNum);
@@ -706,10 +720,12 @@ public long getTransactionCountByBlockNum(long blockNum) {
706720
public Block getByJsonBlockId(String id) throws JsonRpcInvalidParamsException {
707721
if (EARLIEST_STR.equalsIgnoreCase(id)) {
708722
return getBlockByNum(0);
709-
} else if ("latest".equalsIgnoreCase(id)) {
723+
} else if (LATEST_STR.equalsIgnoreCase(id)) {
710724
return getNowBlock();
711-
} else if ("pending".equalsIgnoreCase(id)) {
712-
throw new JsonRpcInvalidParamsException("TAG pending not supported");
725+
} else if (FINALIZED_STR.equalsIgnoreCase(id)) {
726+
return getFinalizedBlock();
727+
} else if (PENDING_STR.equalsIgnoreCase(id)) {
728+
throw new JsonRpcInvalidParamsException(TAG_PENDING_SUPPORT_ERROR);
713729
} else {
714730
long blockNumber;
715731
try {
@@ -724,8 +740,8 @@ public Block getByJsonBlockId(String id) throws JsonRpcInvalidParamsException {
724740

725741
public List<Transaction> getTransactionsByJsonBlockId(String id)
726742
throws JsonRpcInvalidParamsException {
727-
if ("pending".equalsIgnoreCase(id)) {
728-
throw new JsonRpcInvalidParamsException("TAG pending not supported");
743+
if (PENDING_STR.equalsIgnoreCase(id)) {
744+
throw new JsonRpcInvalidParamsException(TAG_PENDING_SUPPORT_ERROR);
729745
} else {
730746
Block block = getByJsonBlockId(id);
731747
return block != null ? block.getTransactionsList() : null;

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.EARLIEST_STR;
44
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.LATEST_STR;
55
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.PENDING_STR;
6+
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.TAG_PENDING_SUPPORT_ERROR;
67

78
import com.google.common.base.Throwables;
89
import com.google.common.primitives.Longs;
@@ -515,7 +516,7 @@ public static long parseEnergyFee(long timestamp, String energyPriceHistory) {
515516

516517
public static long getByJsonBlockId(String blockNumOrTag) throws JsonRpcInvalidParamsException {
517518
if (PENDING_STR.equalsIgnoreCase(blockNumOrTag)) {
518-
throw new JsonRpcInvalidParamsException("TAG pending not supported");
519+
throw new JsonRpcInvalidParamsException(TAG_PENDING_SUPPORT_ERROR);
519520
}
520521
if (StringUtils.isEmpty(blockNumOrTag) || LATEST_STR.equalsIgnoreCase(blockNumOrTag)) {
521522
return -1;

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ public enum RequestSource {
136136
public static final String EARLIEST_STR = "earliest";
137137
public static final String PENDING_STR = "pending";
138138
public static final String LATEST_STR = "latest";
139+
public static final String FINALIZED_STR = "finalized";
140+
public static final String TAG_PENDING_SUPPORT_ERROR = "TAG pending not supported";
139141

140142
private static final String JSON_ERROR = "invalid json request";
141143
private static final String BLOCK_NUM_ERROR = "invalid block number";

0 commit comments

Comments
 (0)