Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
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 @@ -459,6 +459,9 @@ public class CommonParameter {
@Getter
@Setter
public int jsonRpcMaxBlockFilterNum = 50000;
@Getter
@Setter
public int jsonRpcMaxLogFilterNum = 20000;

@Getter
@Setter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ public void setHttpPBFTPort(int v) {
private int maxBlockRange = 5000;
private int maxSubTopics = 1000;
private int maxBlockFilterNum = 50000;
private int maxLogFilterNum = 20000;
}

@Getter
Expand Down
5 changes: 4 additions & 1 deletion common/src/main/resources/reference.conf
Original file line number Diff line number Diff line change
Expand Up @@ -398,8 +398,11 @@ node {
# Maximum topics within a topic criteria, >0 otherwise no limit
maxSubTopics = 1000

# Maximum number for blockFilter
# Maximum number for blockFilter. >0 otherwise no limit
maxBlockFilterNum = 50000

# Maximum number of concurrent eth_newFilter registrations, >0 otherwise no limit
maxLogFilterNum = 20000
}

# Disabled API list (works for http, rpc and pbft, not jsonrpc). Case insensitive.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package org.tron.common.logsfilter.capsule;

import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.handleBLockFilter;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.tron.core.capsule.BlockCapsule;
import org.tron.core.services.jsonrpc.TronJsonRpcImpl;

@Slf4j(topic = "API")
@ToString
Expand All @@ -19,19 +18,21 @@ public class BlockFilterCapsule extends FilterTriggerCapsule {
@Setter
private boolean solidified;

public BlockFilterCapsule(BlockCapsule block, boolean solidified) {
blockHash = block.getBlockId().toString();
this.solidified = solidified;
private final TronJsonRpcImpl jsonRpc;

public BlockFilterCapsule(BlockCapsule block, boolean solidified, TronJsonRpcImpl jsonRpc) {
this(block.getBlockId().toString(), solidified, jsonRpc);
}

public BlockFilterCapsule(String blockHash, boolean solidified) {
public BlockFilterCapsule(String blockHash, boolean solidified, TronJsonRpcImpl jsonRpc) {
this.blockHash = blockHash;
this.solidified = solidified;
this.jsonRpc = jsonRpc;
}

@Override
public void processFilterTrigger() {
handleBLockFilter(this);
jsonRpc.handleBLockFilter(this);
}

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package org.tron.common.logsfilter.capsule;

import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.handleLogsFilter;

import java.util.List;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.tron.common.bloom.Bloom;
import org.tron.core.services.jsonrpc.TronJsonRpcImpl;
import org.tron.protos.Protocol.TransactionInfo;

@Slf4j(topic = "API")
Expand All @@ -33,18 +32,22 @@ public class LogsFilterCapsule extends FilterTriggerCapsule {
@Setter
private boolean removed;

private final TronJsonRpcImpl jsonRpc;

public LogsFilterCapsule(long blockNumber, String blockHash, Bloom bloom,
List<TransactionInfo> txInfoList, boolean solidified, boolean removed) {
List<TransactionInfo> txInfoList, boolean solidified, boolean removed,
TronJsonRpcImpl jsonRpc) {
this.blockNumber = blockNumber;
this.blockHash = blockHash;
this.bloom = bloom;
this.txInfoList = txInfoList;
this.solidified = solidified;
this.removed = removed;
this.jsonRpc = jsonRpc;
}

@Override
public void processFilterTrigger() {
handleLogsFilter(this);
jsonRpc.handleLogsFilter(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -585,6 +585,7 @@ private static void applyNodeConfig(NodeConfig nc) {
PARAMETER.jsonRpcMaxBlockRange = jsonrpc.getMaxBlockRange();
PARAMETER.jsonRpcMaxSubTopics = jsonrpc.getMaxSubTopics();
PARAMETER.jsonRpcMaxBlockFilterNum = jsonrpc.getMaxBlockFilterNum();
PARAMETER.jsonRpcMaxLogFilterNum = jsonrpc.getMaxLogFilterNum();

// ---- P2P sub-bean ----
PARAMETER.nodeP2pVersion = nc.getP2p().getVersion();
Expand Down
11 changes: 9 additions & 2 deletions framework/src/main/java/org/tron/core/db/Manager.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import org.apache.commons.collections4.CollectionUtils;
import org.bouncycastle.util.encoders.Hex;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.tron.api.GrpcAPI;
import org.tron.api.GrpcAPI.TransactionInfoList;
Expand Down Expand Up @@ -141,6 +142,7 @@
import org.tron.core.service.MortgageService;
import org.tron.core.service.RewardViCalService;
import org.tron.core.services.event.exception.EventException;
import org.tron.core.services.jsonrpc.TronJsonRpcImpl;
import org.tron.core.store.AccountAssetStore;
import org.tron.core.store.AccountIdIndexStore;
import org.tron.core.store.AccountIndexStore;
Expand Down Expand Up @@ -276,6 +278,10 @@ public class Manager {
@Autowired
private RewardViCalService rewardViCalService;

@Lazy
@Autowired
private TronJsonRpcImpl tronJsonRpcImpl;

/**
* Cycle thread to rePush Transactions
*/
Expand Down Expand Up @@ -2264,7 +2270,8 @@ private void reOrgLogsFilter() {
}

private void postBlockFilter(final BlockCapsule blockCapsule, boolean solidified) {
BlockFilterCapsule blockFilterCapsule = new BlockFilterCapsule(blockCapsule, solidified);
BlockFilterCapsule blockFilterCapsule =
new BlockFilterCapsule(blockCapsule, solidified, tronJsonRpcImpl);
if (!filterCapsuleQueue.offer(blockFilterCapsule)) {
logger.info("Too many filters, block filter lost: {}.", blockCapsule.getBlockId());
}
Expand All @@ -2278,7 +2285,7 @@ private void postLogsFilter(final BlockCapsule blockCapsule, boolean solidified,
= getTransactionInfoByBlockNum(blockNumber).getTransactionInfoList();
LogsFilterCapsule logsFilterCapsule = new LogsFilterCapsule(blockNumber,
blockCapsule.getBlockId().toString(), blockCapsule.getBloom(), transactionInfoList,
solidified, removed);
solidified, removed, tronJsonRpcImpl);

if (!filterCapsuleQueue.offer(logsFilterCapsule)) {
logger.info("Too many filters, logs filter lost: {}.", blockNumber);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ public class JsonRpcApiUtil {
public static final String TAG_SAFE_SUPPORT_ERROR = "TAG safe not supported";
public static final String BLOCK_NUM_ERROR = "invalid block number";

static SecureRandom random = new SecureRandom();

public static byte[] convertToTronAddress(byte[] address) {
byte[] newAddress = new byte[21];
byte[] temp = new byte[] {Wallet.getAddressPreFixByte()};
Expand Down Expand Up @@ -567,7 +569,6 @@ public static long parseBlockNumber(String blockNumOrTag, Wallet wallet)
}

public static String generateFilterId() {
SecureRandom random = new SecureRandom();
byte[] uid = new byte[16]; // 128 bits are converted to 16 bytes
random.nextBytes(uid);
return ByteArray.toHexString(uid);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,9 +291,10 @@ CompilationResult ethSubmitHashrate(String hashrate, String id)
@JsonRpcErrors({
@JsonRpcError(exception = JsonRpcMethodNotFoundException.class, code = -32601, data = "{}"),
@JsonRpcError(exception = JsonRpcInvalidParamsException.class, code = -32602, data = "{}"),
@JsonRpcError(exception = JsonRpcExceedLimitException.class, code = -32005, data = "{}"),
})
String newFilter(FilterRequest fr) throws JsonRpcInvalidParamsException,
JsonRpcMethodNotFoundException;
JsonRpcMethodNotFoundException, JsonRpcExceedLimitException;

@JsonRpcMethod("eth_newBlockFilter")
@JsonRpcErrors({
Expand Down
Loading
Loading