Skip to content

Commit

Permalink
feat(jsonrpc): ethGetBlockByNumber supports finalized
Browse files Browse the repository at this point in the history
  • Loading branch information
waynercheung committed Sep 18, 2024
1 parent 773b374 commit bd7b3d1
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 6 deletions.
26 changes: 21 additions & 5 deletions framework/src/main/java/org/tron/core/Wallet.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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 {
Expand All @@ -724,8 +740,8 @@ public Block getByJsonBlockId(String id) throws JsonRpcInvalidParamsException {

public List<Transaction> 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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down

0 comments on commit bd7b3d1

Please sign in to comment.