知乎專欄 | 多維度架構 | | | 微信號 netkiller-ebook | | | QQ群:128659835 請註明“讀者” |
在區塊鏈上發生的事件時,能不通知到訂閲事件者。
提示 | |
---|---|
主意 https://docs.web3j.io/filters.html 有一段話:
Note: filters are not supported on Infura. 目前 Infura 不支持。 |
Subscription subscription = web3j.blockObservable(false).subscribe(block -> { ... });
Subscription subscription = web3j.transactionObservable().subscribe(tx -> { ... });
Subscription subscription = web3j.pendingTransactionObservable().subscribe(tx -> { ... });
測試環境 Mac, 首先啟動 Ethereum Wallet,然後啟動下面程序,回到 Ethereum Wallet 中做一筆轉賬。
package cn.netkiller.example.ethereum.subscription; import org.web3j.protocol.Web3j; import org.web3j.protocol.ipc.UnixIpcService; import rx.Subscription; public class PendingTest { public PendingTest() { // TODO Auto-generated constructor stub } public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Subscription Starting..."); Web3j web3 = Web3j.build(new UnixIpcService("/Users/neo/Library/Ethereum/geth.ipc")); Subscription subscription = web3.pendingTransactionObservable().subscribe(block -> { // System.out.println(block.toString()); System.out.println("block number: " + block.getBlockHash()); }); // subscription.unsubscribe(); } }
輸出
block number: 0x74f7dd053dadcf01599dc85d4abf60662695e78ce7531335f44dc03f49dee326
Subscription subscription = catchUpToLatestAndSubscribeToNewBlocksObservable( <startBlockNumber>, <fullTxObjects>) .subscribe(block -> { ... }); 作者:ChainBoard鏈博科技 連結:https://www.jianshu.com/p/c7c5556a436b 來源:簡書 著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
EthFilter filter = new EthFilter(DefaultBlockParameterName.EARLIEST, DefaultBlockParameterName.LATEST, <contract-address>).addSingleTopic(...)|.addOptionalTopics(..., ...)|...; web3j.ethLogObservable(filter).subscribe(log -> { ... });
Web3j web3 = Web3j.build(new HttpService("http://127.0.0.1:8080")); System.out.println("Connected to Ethereum client version: " + web3.toString()); subscription = web3.blockObservable(false) .subscribe(tx -> { System.out.println("observation tx:" + tx.getRawResponse()); }); txSubscription = web3.transactionObservable().subscribe((tx) -> { System.out.println("txSubscription hash:" + tx.getHash() + ":::::address:" + tx.getTo()); if (!ValidationUtil.isEmpty(tx.getTo())) { System.out.println("getBlockNumber:" + tx.getBlockNumber().longValue()); System.out.println("getValue:" + tx.getValue()); System.out.println("getTo:" + tx.getTo()); System.out.println("getFrom:" + tx.getFrom()); System.out.println("getHash:" + tx.getHash()); } }); pendingSubscription = web3.pendingTransactionObservable().subscribe(tx -> { System.out.println("pending hash:" + tx.getHash() + ":::::address:" + tx.getTo()); }); latestSubscription = web3.catchUpToLatestTransactionObservable(new DefaultBlockParameterNumber(2576860)).subscribe(block -> System.out.println("*+observer+getblock" + block.getBlockNumber()) );