diff --git a/framework/src/main/java/org/tron/core/Wallet.java b/framework/src/main/java/org/tron/core/Wallet.java index 9d7eb75df1b..b3754db9241 100755 --- a/framework/src/main/java/org/tron/core/Wallet.java +++ b/framework/src/main/java/org/tron/core/Wallet.java @@ -29,6 +29,10 @@ import static org.tron.core.config.Parameter.DatabaseConstants.PROPOSAL_COUNT_LIMIT_MAX; import static org.tron.core.services.jsonrpc.JsonRpcApiUtil.parseEnergyFee; import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.EARLIEST_STR; +import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.FINALIZED_STR; +import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.LATEST_STR; +import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.PENDING_STR; +import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.TAG_PENDING_SUPPORT_ERROR; import static org.tron.core.vm.utils.FreezeV2Util.getV2EnergyUsage; import static org.tron.core.vm.utils.FreezeV2Util.getV2NetUsage; import static org.tron.protos.contract.Common.ResourceCode; @@ -681,6 +685,16 @@ public Block getBlockByNum(long blockNum) { } } + public Block getFinalizedBlock() { + try { + long blockNum = chainBaseManager.getDynamicPropertiesStore().getLatestSolidifiedBlockNum(); + return chainBaseManager.getBlockByNum(blockNum).getInstance(); + } catch (StoreException e) { + logger.info(e.getMessage()); + return null; + } + } + public BlockCapsule getBlockCapsuleByNum(long blockNum) { try { return chainBaseManager.getBlockByNum(blockNum); @@ -706,10 +720,12 @@ public long getTransactionCountByBlockNum(long blockNum) { public Block getByJsonBlockId(String id) throws JsonRpcInvalidParamsException { if (EARLIEST_STR.equalsIgnoreCase(id)) { return getBlockByNum(0); - } else if ("latest".equalsIgnoreCase(id)) { + } else if (LATEST_STR.equalsIgnoreCase(id)) { return getNowBlock(); - } else if ("pending".equalsIgnoreCase(id)) { - throw new JsonRpcInvalidParamsException("TAG pending not supported"); + } else if (FINALIZED_STR.equalsIgnoreCase(id)) { + return getFinalizedBlock(); + } else if (PENDING_STR.equalsIgnoreCase(id)) { + throw new JsonRpcInvalidParamsException(TAG_PENDING_SUPPORT_ERROR); } else { long blockNumber; try { @@ -724,8 +740,8 @@ public Block getByJsonBlockId(String id) throws JsonRpcInvalidParamsException { public List getTransactionsByJsonBlockId(String id) throws JsonRpcInvalidParamsException { - if ("pending".equalsIgnoreCase(id)) { - throw new JsonRpcInvalidParamsException("TAG pending not supported"); + if (PENDING_STR.equalsIgnoreCase(id)) { + throw new JsonRpcInvalidParamsException(TAG_PENDING_SUPPORT_ERROR); } else { Block block = getByJsonBlockId(id); return block != null ? block.getTransactionsList() : null; diff --git a/framework/src/main/java/org/tron/core/services/jsonrpc/JsonRpcApiUtil.java b/framework/src/main/java/org/tron/core/services/jsonrpc/JsonRpcApiUtil.java index 4efc5994c0d..3891e472e7c 100644 --- a/framework/src/main/java/org/tron/core/services/jsonrpc/JsonRpcApiUtil.java +++ b/framework/src/main/java/org/tron/core/services/jsonrpc/JsonRpcApiUtil.java @@ -3,6 +3,7 @@ import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.EARLIEST_STR; import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.LATEST_STR; import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.PENDING_STR; +import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.TAG_PENDING_SUPPORT_ERROR; import com.google.common.base.Throwables; import com.google.common.primitives.Longs; @@ -515,7 +516,7 @@ public static long parseEnergyFee(long timestamp, String energyPriceHistory) { public static long getByJsonBlockId(String blockNumOrTag) throws JsonRpcInvalidParamsException { if (PENDING_STR.equalsIgnoreCase(blockNumOrTag)) { - throw new JsonRpcInvalidParamsException("TAG pending not supported"); + throw new JsonRpcInvalidParamsException(TAG_PENDING_SUPPORT_ERROR); } if (StringUtils.isEmpty(blockNumOrTag) || LATEST_STR.equalsIgnoreCase(blockNumOrTag)) { return -1; diff --git a/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java b/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java index 0ca57a3b98c..1bb93001055 100644 --- a/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java +++ b/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java @@ -136,6 +136,8 @@ public enum RequestSource { public static final String EARLIEST_STR = "earliest"; public static final String PENDING_STR = "pending"; public static final String LATEST_STR = "latest"; + public static final String FINALIZED_STR = "finalized"; + public static final String TAG_PENDING_SUPPORT_ERROR = "TAG pending not supported"; private static final String JSON_ERROR = "invalid json request"; private static final String BLOCK_NUM_ERROR = "invalid block number";