Просто получить доступ к объектам транзакций довольно просто:
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
- это 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();
}
}