订阅 ERC20 转账活动
Posted
技术标签:
【中文标题】订阅 ERC20 转账活动【英文标题】:Subscribe for ERC20 transfer events 【发布时间】:2020-09-23 20:04:31 【问题描述】:我一直在尝试观察主网上发生的特定合约的交易,特别是 Tether (USDT)。我能够下载合同并使用 Web3 (Java) 编译可靠代码。但是我无法订阅传输事件。它只是超时..有什么我想念的吗?我正在使用下面的代码,但遇到了超时。
我看不出这不起作用的原因,我通过 Infura 连接到 wss://mainnet.infura.io/ws/v3/
TetherToken tetherToken = TetherToken.load(
"0xdac17f958d2ee523a2206206994597c13d831ec7",
session.getWeb3(),
session.getCredentials(),
session.getGasProvider());
String symbol = tetherToken.symbol().send();
String name = tetherToken.name().send();
BigInteger decimal = tetherToken.decimals().send();
System.out.println("symbol: " + symbol); // success = USDT
System.out.println("name: " + name); // success = Tether USD
System.out.println("decimal: " + decimal.intValueExact()); // success = 6
// java.io.IOException: Request with id 5 timed out
tetherToken.transferEventFlowable(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST)
.subscribe(event ->
try
System.err.printf("hash=%s from=%s to=%s amount=%s%n",
event.log.getTransactionHash(),
event.from,
event.to,
event.value);
catch(Throwable e)
e.printStackTrace();
);
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:原来 Web3j 框架隐藏了 Infura 响应的问题。如果 eth 日志过滤器的结果 > 10000 个结果,则 Infura 会响应:
"jsonrpc": "2.0",
"id": 1,
"error":
"code": -32005,
"message": "query returned more than 10000 results"
【讨论】:
您的问题和回答让我走上了正轨。我想知道为什么我的连接超时,原来是这样。如果您想首先监听流经的事件,那么使用 DefaultBlockParameterName.EARLIEST 并不是一个好主意。非常感谢。如果我可能会问,您在哪里找到有关如何将下载的 JSON 编译成 ABI 的信息?以上是关于订阅 ERC20 转账活动的主要内容,如果未能解决你的问题,请参考以下文章