Go-Ethereum

如何在沒有區塊鏈的情況下開始耳語?

  • September 30, 2019

我正在Whisper之上編寫一個聊天應用程序;該應用程序應該管理乙太坊節點的生命週期。

一種建構方法是在後台使用wnode並以程式方式使用 stdout/stdin 與其通信。但是,我更喜歡使用web3.shhAPI,所以我需要一個 Ethereum/Whisper 客戶端,它在 Whisper 的東西旁邊提供 RPC 介面。

geth似乎很合適。但是,預設情況下,它似乎啟動了區塊鏈的東西和其他東西,而我只需要它來耳語。所以:

1-如何開始geth以使其提供絕對零區塊鏈內容和僅耳語內容(+ rpc)?

2-如何讓它成為一個引導節點耳語和檢索它的enode網址?

3-如何配置它以使用其他引導節點?旗幟是--bootnodes用來竊竊私語的嗎?

基本上,我希望能夠執行此處範例中的操作,但使用geth,沒有不必要的成本:

> wnode -standalone -forwarder -ip=127.0.0.1:30379
my public key: 0x040ef7acd60781c336c52056b3782f7eae45be2063e591ac6b78472dc27ba770010bde445ffd2f3623ad656f3859e00d11ef518df4916c4d4e258c60b15f34c682 enode://15454fc65bbf0031155f4eee83fa732f1454c314e9f78ade9cba4d4a098d29edbf5431764ee65b200169025c3f900cacc3348a000dda7a8a0d9643d0b7618712@127.0.0.1:30379
Bootstrap Whisper node started

... Then, in another tab:

> wnode -test -boot=enode://15454fc65bbf0031155f4eee83fa732f1454c314e9f78ade9cba4d4a098d29edbf5431764ee65b200169025c3f900cacc3348a000dda7a8a0d9643d0b7618712@127.0.0.1:30379
............................
Whisper node started
Connected to peer.
............................

更新

我自己沒有嘗試過接受的答案,但我從作者那裡確認他/她嘗試過,並且解決方案似乎滿足所有要求。

執行 Status 的 go 伺服器(在 docker 鏡像中)會做你想做的事:沒有區塊鏈同步,外加一個符合 JSONRPC 標準的暴露的 HTTP API 介面。

遵循這些說明對我有用: https ://status.im/technical/run_status_node.html

docker run --rm \
   -p 8545:8545 \
   -v $(pwd)/http-enabled.json:/config/config.json \
   statusteam/status-go:0.16.0 \
   -register \
   -log DEBUG \
   -c /config/config.json

然後用像這樣的呼叫來測試它

curl -X POST "http://localhost:8545" -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"shh_newKeyPair","params":[],"id":1}' 

存檔(僅限 Geth)

為了完整起見,我的舊答案。您geth只能在啟用了 Whispershh模組的情況下執行,並且 syncmode=light. 這並不完全符合您的要求(它仍然同步區塊鏈),但比執行完整節點更輕量/更快,並且比訪問您不需要或不想公開的其他 API 模組更安全。

你可以從這樣的標誌開始

geth --rinkeby --syncmode=light --rpcaddr=0.0.0.0 --shh --rpcapi=shh --rpc --rpcport 8547

主網和 rinkeby 消息之間沒有技術差異,因為耳語消息是短暫的,並且在鏈上不安全,但主網耳語消息不會與 rinkeby 對等方交換,反之亦然。

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