Go-Ethereum
Web3j 客戶端未檢測到來自 geth 的任何交易或區塊鏈
我
web3j
用來通過geth
. 我為區塊鍊或交易創建的訂閱似乎都沒有檢測到更改。我開始
geth
像下面這樣。./geth \ --fast --cache=512 \ --rpc --rpcapi 個人,db,eth,net,web3 \ --ws --wsapi 個人,db,eth,net,web3 \ --metrics --verbosity 5 --fakepow
我的 Java 程式碼如下所示。
public class App { public static void main(String[] args) throws ExecutionException, InterruptedException { Web3j web3 = Web3j.build(new HttpService(), 100, Async.defaultExecutorService()); // defaults to http://localhost:8545/ Web3ClientVersion web3ClientVersion = web3.web3ClientVersion().sendAsync().get(); String clientVersion = web3ClientVersion.getWeb3ClientVersion(); System.out.println(clientVersion); System.out.println(web3ClientVersion.getJsonrpc()); web3.blockObservable(false).subscribe(block -> { System.out.println(block.getBlock().getNumber()); }, Throwable::printStackTrace, () -> System.out.println("block done")); web3.transactionObservable().subscribe(tx -> { System.out.println(tx.getHash() + ", " + tx.getGasPriceRaw()); }, Throwable::printStackTrace, () -> System.out.println("tx done")); web3.pendingTransactionObservable().subscribe(tx -> { System.out.println(tx.getHash() + ", " + tx.getGasPriceRaw()); }, Throwable::printStackTrace, () -> System.out.println("ptx done")); System.out.println("umm reached the end"); } }
我在 Java 應用程序的控制台上看到的內容如下。
Geth/v1.6.1-stable-021c3c28/linux-amd64/go1.8.1 2.0 umm 到了盡頭
任何想法我做錯了什麼?
您似乎忘記添加 sleep 語句。請記住,訂閱是在與我們程序的其餘部分不同的執行執行緒中非同步進行的。也不要忘記進行取消訂閱方法呼叫。希望能幫助到你!
您需要連接到 Geth 套接字而不是 HTTP。由於您在 Web3J.Build 時沒有提供套接字 URL,因此它將根據您在程式碼中的註釋映射到預設值。
這是範例:
WebSocketService socketService=new WebSocketService("ws://127.0.0.1:8546", true); Web3J web3Socket=Web3J.build(socketService);
8546 是 Geth 的預設套接字埠。如果您在啟動 Geth 時更改了它,請確保使用它。