我想检索 2 个区块之间的交易历史记录,我遇到了这个重播过滤器来重播一系列区块中包含的各个交易:
Subscription subscription = web3j.replayTransactionsObservable( <startBlockNumber>, <endBlockNumber>) .subscribe(tx -> { ... });
但是,我找不到与此过滤器相关的任何工作示例。任何人都可以帮助提供一个工作示例吗?
我想检索 2 个区块之间的交易历史记录,我遇到了这个重播过滤器来重播一系列区块中包含的各个交易:
Subscription subscription = web3j.replayTransactionsObservable( <startBlockNumber>, <endBlockNumber>) .subscribe(tx -> { ... });
但是,我找不到与此过滤器相关的任何工作示例。任何人都可以帮助提供一个工作示例吗?
简单地访问事务对象非常简单:
Web3j web3j = Web3j.build(new HttpService());
web3j.replayTransactionsObservable(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST).subscribe(System.out::println));
将打印出在本地主机上运行的对等节点上发生的所有事务。只需更改System.out::println
为tx -> //do something with tx
( tx
is a org.web3j.protocol.core.methods.response.EthBlock$TransactionObject
)。
请注意,这只会重播历史记录。随着区块被添加到链中,您不会看到任何新的交易对象。
如果你想做一些事情,比如监听发出的特定事件,那么使用订阅的一个更复杂的例子就会出现。我在下面提供了一个示例,以防万一。如果您需要有关特定问题的帮助,请发布带有更多详细信息和示例代码的问题。
// Prints event emitted from a deployed contract
// Event definition:
// event MyEvent(address indexed _address, uint256 _oldValue, uint256 _newValue);
public static void eventTest() {
try {
Web3j web3j = Web3j.build(new HttpService());
Event event = new Event("MyEvent",
Arrays.asList(new TypeReference<Address>() {}),
Arrays.asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
// Note contract address here. See https://github.com/web3j/web3j/issues/405
EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST, "6dd7c1c13df7594c27e0d191fd8cc21efbfc98b4");
filter.addSingleTopic(EventEncoder.encode(event));
web3j.ethLogObservable(filter).subscribe(log -> System.out.println(log.toString()));
}
catch (Throwable t) {
t.printStackTrace();
}
}