Skip to content

Commit a3301aa

Browse files
committed
feat(jsonrpc): eth_newFilter not supports finalized for block parameter
1 parent 8ca7085 commit a3301aa

File tree

7 files changed

+205
-39
lines changed

7 files changed

+205
-39
lines changed

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.EARLIEST_STR;
44
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.FINALIZED_STR;
5+
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.INVALID_BLOCK_RANGE;
56
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.LATEST_STR;
67
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.PENDING_STR;
78
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.TAG_PENDING_SUPPORT_ERROR;
@@ -515,7 +516,7 @@ public static long parseEnergyFee(long timestamp, String energyPriceHistory) {
515516
return -1;
516517
}
517518

518-
public static long getByJsonBlockId(String blockNumOrTag, Wallet wallet)
519+
public static long getByJsonBlockId(String blockNumOrTag, Wallet wallet, boolean supportFinalized)
519520
throws JsonRpcInvalidParamsException {
520521
if (PENDING_STR.equalsIgnoreCase(blockNumOrTag)) {
521522
throw new JsonRpcInvalidParamsException(TAG_PENDING_SUPPORT_ERROR);
@@ -525,7 +526,11 @@ public static long getByJsonBlockId(String blockNumOrTag, Wallet wallet)
525526
} else if (EARLIEST_STR.equalsIgnoreCase(blockNumOrTag)) {
526527
return 0;
527528
} else if (FINALIZED_STR.equalsIgnoreCase(blockNumOrTag)) {
528-
return wallet.getSolidBlockNum();
529+
if (supportFinalized) {
530+
return wallet.getSolidBlockNum();
531+
} else {
532+
throw new JsonRpcInvalidParamsException(INVALID_BLOCK_RANGE);
533+
}
529534
} else {
530535
return ByteArray.jsonHexToLong(blockNumOrTag);
531536
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ public enum RequestSource {
138138
public static final String LATEST_STR = "latest";
139139
public static final String FINALIZED_STR = "finalized";
140140
public static final String TAG_PENDING_SUPPORT_ERROR = "TAG pending not supported";
141+
public static final String INVALID_BLOCK_RANGE = "invalid block range params";
141142

142143
private static final String JSON_ERROR = "invalid json request";
143144
private static final String BLOCK_NUM_ERROR = "invalid block number";
@@ -1320,7 +1321,7 @@ public LogFilterElement[] getLogs(FilterRequest fr) throws JsonRpcInvalidParamsE
13201321

13211322
long currentMaxBlockNum = wallet.getNowBlock().getBlockHeader().getRawData().getNumber();
13221323
//convert FilterRequest to LogFilterWrapper
1323-
LogFilterWrapper logFilterWrapper = new LogFilterWrapper(fr, currentMaxBlockNum, wallet);
1324+
LogFilterWrapper logFilterWrapper = new LogFilterWrapper(fr, currentMaxBlockNum, wallet, true);
13241325

13251326
return getLogsByLogFilterWrapper(logFilterWrapper, currentMaxBlockNum);
13261327
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class LogFilterAndResult extends FilterResult<LogFilterElement> {
1616

1717
public LogFilterAndResult(FilterRequest fr, long currentMaxBlockNum, Wallet wallet)
1818
throws JsonRpcInvalidParamsException {
19-
this.logFilterWrapper = new LogFilterWrapper(fr, currentMaxBlockNum, wallet);
19+
this.logFilterWrapper = new LogFilterWrapper(fr, currentMaxBlockNum, wallet, false);
2020
result = new LinkedBlockingQueue<>();
2121
this.updateExpireTime();
2222
}

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

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

33
import static org.tron.common.math.Maths.min;
4+
import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.INVALID_BLOCK_RANGE;
45

56
import com.google.protobuf.ByteString;
67
import lombok.Getter;
@@ -23,8 +24,8 @@ public class LogFilterWrapper {
2324
@Getter
2425
private final long toBlock;
2526

26-
public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet)
27-
throws JsonRpcInvalidParamsException {
27+
public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet,
28+
boolean supportFinalized) throws JsonRpcInvalidParamsException {
2829

2930
// 1.convert FilterRequest to LogFilter
3031
this.logFilter = new LogFilter(fr);
@@ -53,15 +54,15 @@ public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet
5354
// then if toBlock < maxBlockNum, set fromBlock = toBlock
5455
// then if toBlock >= maxBlockNum, set fromBlock = maxBlockNum
5556
if (StringUtils.isEmpty(fr.getFromBlock()) && StringUtils.isNotEmpty(fr.getToBlock())) {
56-
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock(), wallet);
57+
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock(), wallet, supportFinalized);
5758
if (toBlockSrc == -1) {
5859
toBlockSrc = Long.MAX_VALUE;
5960
}
6061
fromBlockSrc = min(toBlockSrc, currentMaxBlockNum, true);
6162

6263
} else if (StringUtils.isNotEmpty(fr.getFromBlock())
6364
&& StringUtils.isEmpty(fr.getToBlock())) {
64-
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock(), wallet);
65+
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock(), wallet, supportFinalized);
6566
if (fromBlockSrc == -1) {
6667
fromBlockSrc = currentMaxBlockNum;
6768
}
@@ -72,8 +73,8 @@ public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet
7273
toBlockSrc = Long.MAX_VALUE;
7374

7475
} else {
75-
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock(), wallet);
76-
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock(), wallet);
76+
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock(), wallet, supportFinalized);
77+
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock(), wallet, supportFinalized);
7778
if (fromBlockSrc == -1 && toBlockSrc == -1) {
7879
fromBlockSrc = currentMaxBlockNum;
7980
toBlockSrc = Long.MAX_VALUE;
@@ -83,7 +84,7 @@ public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet
8384
toBlockSrc = Long.MAX_VALUE;
8485
}
8586
if (fromBlockSrc > toBlockSrc) {
86-
throw new JsonRpcInvalidParamsException("please verify: fromBlock <= toBlock");
87+
throw new JsonRpcInvalidParamsException(INVALID_BLOCK_RANGE);
8788
}
8889
}
8990
}

framework/src/test/java/org/tron/core/jsonrpc/JsonRpcTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,8 @@ public void testGetConditions() {
284284
topics,
285285
null),
286286
100,
287-
null);
287+
null,
288+
true);
288289

289290
LogBlockQuery logBlockQuery = new LogBlockQuery(logFilterWrapper, null, 100, null);
290291
int[][][] conditions = logBlockQuery.getConditions();
@@ -331,7 +332,8 @@ public void testGetConditionWithHashCollision() {
331332
topics,
332333
null),
333334
100,
334-
null);
335+
null,
336+
true);
335337

336338
LogBlockQuery logBlockQuery = new LogBlockQuery(logFilterWrapper, null, 100, null);
337339
int[][][] conditions = logBlockQuery.getConditions();

0 commit comments

Comments
 (0)