From b753741f1afeded93d4609b67132d4ca58de6df1 Mon Sep 17 00:00:00 2001 From: waynercheung Date: Thu, 13 Mar 2025 22:26:10 +0800 Subject: [PATCH 1/2] feat(jsonrpc): eth_newFilter not supports finalized as block parameter --- .../services/jsonrpc/TronJsonRpcImpl.java | 12 +++ .../jsonrpc/filters/LogFilterWrapper.java | 3 +- .../tron/core/jsonrpc/JsonrpcServiceTest.java | 83 ++++++++++++++++++- 3 files changed, 96 insertions(+), 2 deletions(-) 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 5ff915dbdc9..8be1f6a5faa 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 @@ -138,6 +138,7 @@ public enum RequestSource { 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"; + public static final String INVALID_BLOCK_RANGE = "invalid block range params"; private static final String JSON_ERROR = "invalid json request"; private static final String BLOCK_NUM_ERROR = "invalid block number"; @@ -1114,6 +1115,14 @@ public void disableInPBFT(String method) throws JsonRpcMethodNotFoundException { } } + public void disableFinalizedBlock(FilterRequest fr) throws JsonRpcInvalidParamsException { + // not supports finalized as block parameter + if (FINALIZED_STR.equalsIgnoreCase(fr.getFromBlock()) + || FINALIZED_STR.equalsIgnoreCase(fr.getToBlock())) { + throw new JsonRpcInvalidParamsException(INVALID_BLOCK_RANGE); + } + } + @Override public TransactionJson buildTransaction(BuildArguments args) throws JsonRpcInvalidParamsException, JsonRpcInvalidRequestException, @@ -1234,6 +1243,9 @@ public String newFilter(FilterRequest fr) throws JsonRpcInvalidParamsException, JsonRpcMethodNotFoundException { disableInPBFT("eth_newFilter"); + // not supports finalized as block parameter + disableFinalizedBlock(fr); + Map eventFilter2Result; if (getSource() == RequestSource.FULLNODE) { eventFilter2Result = eventFilter2ResultFull; diff --git a/framework/src/main/java/org/tron/core/services/jsonrpc/filters/LogFilterWrapper.java b/framework/src/main/java/org/tron/core/services/jsonrpc/filters/LogFilterWrapper.java index 7fcbab33ee3..e1d448b00d7 100644 --- a/framework/src/main/java/org/tron/core/services/jsonrpc/filters/LogFilterWrapper.java +++ b/framework/src/main/java/org/tron/core/services/jsonrpc/filters/LogFilterWrapper.java @@ -1,6 +1,7 @@ package org.tron.core.services.jsonrpc.filters; import static org.tron.common.math.Maths.min; +import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.INVALID_BLOCK_RANGE; import com.google.protobuf.ByteString; import lombok.Getter; @@ -83,7 +84,7 @@ public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet toBlockSrc = Long.MAX_VALUE; } if (fromBlockSrc > toBlockSrc) { - throw new JsonRpcInvalidParamsException("please verify: fromBlock <= toBlock"); + throw new JsonRpcInvalidParamsException(INVALID_BLOCK_RANGE); } } } diff --git a/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java b/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java index 8ab6611dfdd..4cbae5ff931 100644 --- a/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java +++ b/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java @@ -605,7 +605,7 @@ public void testLogFilterWrapper() { LogFilterWrapper logFilterWrapper = new LogFilterWrapper(new FilterRequest("0x78", "0x14", null, null, null), 100, null); } catch (JsonRpcInvalidParamsException e) { - Assert.assertEquals("please verify: fromBlock <= toBlock", e.getMessage()); + Assert.assertEquals("invalid block range params", e.getMessage()); } //fromBlock or toBlock is not hex num @@ -644,4 +644,85 @@ public void testLogFilterWrapper() { Assert.assertEquals("Incorrect hex syntax", e.getMessage()); } } + + @Test + public void testDisableFinalizedBlock() { + + try { + tronJsonRpc.disableFinalizedBlock(new FilterRequest(null, null, null, null, null)); + } catch (Exception e) { + Assert.fail(); + } + + try { + tronJsonRpc.disableFinalizedBlock(new FilterRequest("finalized", null, null, null, null)); + } catch (Exception e) { + Assert.assertEquals("invalid block range params", e.getMessage()); + } + + try { + tronJsonRpc.disableFinalizedBlock(new FilterRequest(null, "finalized", null, null, null)); + } catch (Exception e) { + Assert.assertEquals("invalid block range params", e.getMessage()); + } + + try { + tronJsonRpc.disableFinalizedBlock(new FilterRequest("finalized", "latest", null, null, null)); + } catch (Exception e) { + Assert.assertEquals("invalid block range params", e.getMessage()); + } + + try { + tronJsonRpc.disableFinalizedBlock(new FilterRequest("0x1", "finalized", null, null, null)); + } catch (Exception e) { + Assert.assertEquals("invalid block range params", e.getMessage()); + } + + try { + tronJsonRpc.disableFinalizedBlock( + new FilterRequest("finalized", "finalized", null, null, null)); + } catch (Exception e) { + Assert.assertEquals("invalid block range params", e.getMessage()); + } + } + + @Test + public void testNewFilterFinalizedBlock() { + + try { + tronJsonRpc.newFilter(new FilterRequest(null, null, null, null, null)); + } catch (Exception e) { + Assert.fail(); + } + + try { + tronJsonRpc.newFilter(new FilterRequest("finalized", null, null, null, null)); + } catch (Exception e) { + Assert.assertEquals("invalid block range params", e.getMessage()); + } + + try { + tronJsonRpc.newFilter(new FilterRequest(null, "finalized", null, null, null)); + } catch (Exception e) { + Assert.assertEquals("invalid block range params", e.getMessage()); + } + + try { + tronJsonRpc.newFilter(new FilterRequest("finalized", "latest", null, null, null)); + } catch (Exception e) { + Assert.assertEquals("invalid block range params", e.getMessage()); + } + + try { + tronJsonRpc.newFilter(new FilterRequest("0x1", "finalized", null, null, null)); + } catch (Exception e) { + Assert.assertEquals("invalid block range params", e.getMessage()); + } + + try { + tronJsonRpc.newFilter(new FilterRequest("finalized", "finalized", null, null, null)); + } catch (Exception e) { + Assert.assertEquals("invalid block range params", e.getMessage()); + } + } } From 4e404ece6f197f4e525aa937f49b1c6b62865a82 Mon Sep 17 00:00:00 2001 From: waynercheung Date: Fri, 14 Mar 2025 09:46:24 +0800 Subject: [PATCH 2/2] refactor(jsonrpc): check finalized in newFilter, not as a function --- .../services/jsonrpc/TronJsonRpcImpl.java | 13 ++---- .../tron/core/jsonrpc/JsonrpcServiceTest.java | 41 ------------------- 2 files changed, 4 insertions(+), 50 deletions(-) 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 8be1f6a5faa..6b90ec92283 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 @@ -1115,14 +1115,6 @@ public void disableInPBFT(String method) throws JsonRpcMethodNotFoundException { } } - public void disableFinalizedBlock(FilterRequest fr) throws JsonRpcInvalidParamsException { - // not supports finalized as block parameter - if (FINALIZED_STR.equalsIgnoreCase(fr.getFromBlock()) - || FINALIZED_STR.equalsIgnoreCase(fr.getToBlock())) { - throw new JsonRpcInvalidParamsException(INVALID_BLOCK_RANGE); - } - } - @Override public TransactionJson buildTransaction(BuildArguments args) throws JsonRpcInvalidParamsException, JsonRpcInvalidRequestException, @@ -1244,7 +1236,10 @@ public String newFilter(FilterRequest fr) throws JsonRpcInvalidParamsException, disableInPBFT("eth_newFilter"); // not supports finalized as block parameter - disableFinalizedBlock(fr); + if (FINALIZED_STR.equalsIgnoreCase(fr.getFromBlock()) + || FINALIZED_STR.equalsIgnoreCase(fr.getToBlock())) { + throw new JsonRpcInvalidParamsException(INVALID_BLOCK_RANGE); + } Map eventFilter2Result; if (getSource() == RequestSource.FULLNODE) { diff --git a/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java b/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java index 4cbae5ff931..6a0ab4a3745 100644 --- a/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java +++ b/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java @@ -645,47 +645,6 @@ public void testLogFilterWrapper() { } } - @Test - public void testDisableFinalizedBlock() { - - try { - tronJsonRpc.disableFinalizedBlock(new FilterRequest(null, null, null, null, null)); - } catch (Exception e) { - Assert.fail(); - } - - try { - tronJsonRpc.disableFinalizedBlock(new FilterRequest("finalized", null, null, null, null)); - } catch (Exception e) { - Assert.assertEquals("invalid block range params", e.getMessage()); - } - - try { - tronJsonRpc.disableFinalizedBlock(new FilterRequest(null, "finalized", null, null, null)); - } catch (Exception e) { - Assert.assertEquals("invalid block range params", e.getMessage()); - } - - try { - tronJsonRpc.disableFinalizedBlock(new FilterRequest("finalized", "latest", null, null, null)); - } catch (Exception e) { - Assert.assertEquals("invalid block range params", e.getMessage()); - } - - try { - tronJsonRpc.disableFinalizedBlock(new FilterRequest("0x1", "finalized", null, null, null)); - } catch (Exception e) { - Assert.assertEquals("invalid block range params", e.getMessage()); - } - - try { - tronJsonRpc.disableFinalizedBlock( - new FilterRequest("finalized", "finalized", null, null, null)); - } catch (Exception e) { - Assert.assertEquals("invalid block range params", e.getMessage()); - } - } - @Test public void testNewFilterFinalizedBlock() {