Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

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.INVALID_BLOCK_RANGE;
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;
Expand Down Expand Up @@ -515,7 +516,7 @@ public static long parseEnergyFee(long timestamp, String energyPriceHistory) {
return -1;
}

public static long getByJsonBlockId(String blockNumOrTag, Wallet wallet)
public static long getByJsonBlockId(String blockNumOrTag, Wallet wallet, boolean supportFinalized)
throws JsonRpcInvalidParamsException {
if (PENDING_STR.equalsIgnoreCase(blockNumOrTag)) {
throw new JsonRpcInvalidParamsException(TAG_PENDING_SUPPORT_ERROR);
Expand All @@ -525,7 +526,11 @@ public static long getByJsonBlockId(String blockNumOrTag, Wallet wallet)
} else if (EARLIEST_STR.equalsIgnoreCase(blockNumOrTag)) {
return 0;
} else if (FINALIZED_STR.equalsIgnoreCase(blockNumOrTag)) {
return wallet.getSolidBlockNum();
if (supportFinalized) {
return wallet.getSolidBlockNum();
} else {
throw new JsonRpcInvalidParamsException(INVALID_BLOCK_RANGE);
}
} else {
return ByteArray.jsonHexToLong(blockNumOrTag);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -1320,7 +1321,7 @@ public LogFilterElement[] getLogs(FilterRequest fr) throws JsonRpcInvalidParamsE

long currentMaxBlockNum = wallet.getNowBlock().getBlockHeader().getRawData().getNumber();
//convert FilterRequest to LogFilterWrapper
LogFilterWrapper logFilterWrapper = new LogFilterWrapper(fr, currentMaxBlockNum, wallet);
LogFilterWrapper logFilterWrapper = new LogFilterWrapper(fr, currentMaxBlockNum, wallet, true);

return getLogsByLogFilterWrapper(logFilterWrapper, currentMaxBlockNum);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class LogFilterAndResult extends FilterResult<LogFilterElement> {

public LogFilterAndResult(FilterRequest fr, long currentMaxBlockNum, Wallet wallet)
throws JsonRpcInvalidParamsException {
this.logFilterWrapper = new LogFilterWrapper(fr, currentMaxBlockNum, wallet);
this.logFilterWrapper = new LogFilterWrapper(fr, currentMaxBlockNum, wallet, false);
result = new LinkedBlockingQueue<>();
this.updateExpireTime();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -23,8 +24,8 @@ public class LogFilterWrapper {
@Getter
private final long toBlock;

public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet)
throws JsonRpcInvalidParamsException {
public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet,
boolean supportFinalized) throws JsonRpcInvalidParamsException {

// 1.convert FilterRequest to LogFilter
this.logFilter = new LogFilter(fr);
Expand Down Expand Up @@ -53,15 +54,15 @@ public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet
// then if toBlock < maxBlockNum, set fromBlock = toBlock
// then if toBlock >= maxBlockNum, set fromBlock = maxBlockNum
if (StringUtils.isEmpty(fr.getFromBlock()) && StringUtils.isNotEmpty(fr.getToBlock())) {
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock(), wallet);
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock(), wallet, supportFinalized);
if (toBlockSrc == -1) {
toBlockSrc = Long.MAX_VALUE;
}
fromBlockSrc = min(toBlockSrc, currentMaxBlockNum, true);

} else if (StringUtils.isNotEmpty(fr.getFromBlock())
&& StringUtils.isEmpty(fr.getToBlock())) {
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock(), wallet);
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock(), wallet, supportFinalized);
if (fromBlockSrc == -1) {
fromBlockSrc = currentMaxBlockNum;
}
Expand All @@ -72,8 +73,8 @@ public LogFilterWrapper(FilterRequest fr, long currentMaxBlockNum, Wallet wallet
toBlockSrc = Long.MAX_VALUE;

} else {
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock(), wallet);
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock(), wallet);
fromBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getFromBlock(), wallet, supportFinalized);
toBlockSrc = JsonRpcApiUtil.getByJsonBlockId(fr.getToBlock(), wallet, supportFinalized);
if (fromBlockSrc == -1 && toBlockSrc == -1) {
fromBlockSrc = currentMaxBlockNum;
toBlockSrc = Long.MAX_VALUE;
Expand All @@ -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);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,8 @@ public void testGetConditions() {
topics,
null),
100,
null);
null,
true);

LogBlockQuery logBlockQuery = new LogBlockQuery(logFilterWrapper, null, 100, null);
int[][][] conditions = logBlockQuery.getConditions();
Expand Down Expand Up @@ -331,7 +332,8 @@ public void testGetConditionWithHashCollision() {
topics,
null),
100,
null);
null,
true);

LogBlockQuery logBlockQuery = new LogBlockQuery(logFilterWrapper, null, 100, null);
int[][][] conditions = logBlockQuery.getConditions();
Expand Down
Loading