Go-Ethereum

Geth 上乙太坊的 websocket URL 是什麼?

  • January 4, 2022

我吃過一個基於Geth的****乙太坊伺服器。現在,我需要通知我生成的帳戶上的所有傳入交易。

在我之前的比特幣核心伺服器中,我在其配置文件中有一個選項,如下所示:

walletnotify=php -f /path/notify.php %s

通過這段程式碼,比特幣伺服器將所有事件發送到指定文件,然後,我處理其他事情。

但我不知道在 Geth 和 Ethereum 中這樣做的確切機制是什麼。官方文件,只說使用--wsaddr, --wsport, --wsapi標誌。但是,我必須在哪裡收聽通知?

網路套接字

我推薦這個頁面來概述你可以在啟動時與 Geth 一起使用的不同標誌。它在那裡提到 websocket 的預設地址(如果使用 開啟--ws)是localhost:8546.

記錄所有事務

我不認為這會立即輸出所有新的 tx,儘管我在這裡有點不知所措。您可以使用 JavaScript 腳本在沒有 websocket 或 ipc 的情況下完成此操作(載入帶有--js標誌的腳本,後跟腳本的路徑),或者您可以使用訂閱。你的問題表達方式意味著你在尋找後者,所以我會盡量集中精力。文件中的頁面是您連結的頁面之後的頁面:https ://geth.ethereum.org/docs/rpc/pubsub 。

您將需要呼叫暴露的 websocket(或 rpc,如果您願意的話 - 我堅持使用 websockets,因為您在問題中提到了它們)。如果你願意,你可以使用 Postman。(如果有人有更簡潔的方法,請提出建議。)為了訂閱接收新塊,因為它們被添加到鏈中,然後將所有 txs 包含在塊中,發送:

{"id": 1, "method": "eth_subscribe", "params": ["newHeads", {"includeTransactions": true}]}

例如,如果您使用預設的 websocket 設置,則該對象應發送到localhost:8546.

您應該收到一個數據對像作為回報,例如:

{"jsonrpc":"2.0","id":1,"result":"0xcd0c3e8af590364c09d0fa6a1210faf5"}

是您的result訂閱 ID。您現在應該通過 websocket 獲得數據流。記下您的訂閱 ID,如果您想取消訂閱,您將需要它。

如果您使用的是 web3js,請查看web3.eth.subscribe函式。它實現了有關各種區塊鏈事件的非同步通知,例如新塊或事件日誌。它只是定期輪詢節點,因為geth它不支持推送通知。對於令牌轉移,您需要訂閱transfer事件。對於乙太傳輸來說,事情有點複雜,因為沒有簡單的方法可以遍歷一個塊內的所有乙太傳輸。這是一個很好的未記錄功能,可以幫助有效地監控大量地址的餘額:https ://github.com/ethereum/go-ethereum/pull/15512

如果您需要更多詳細資訊,請告訴我。

引用自:https://ethereum.stackexchange.com/questions/80856