為什麼我的 Whisper 消息沒有在 Status.IM 中轉發
我已經安裝了Status.IM的測試版本,並嘗試向其他願意與我分享他們聯繫的其他使用者發送消息。但是,消息總是停留在發送狀態:
為什麼我的 Whisper 消息沒有在 Status.IM 中轉發?是否以某種方式未連接,如何檢查網路狀態?我需要乙太幣來使用 Whisper 協議嗎?
我很高興你問,因為這是我們在 Status 中測試的主要內容 - Whisper 的可行性。
這裡有很多因素在起作用。首先,讓我描述一下 Whisper 的大致工作原理、Status 如何嘗試補償以及這裡可能會發生什麼。
Whisper 是一種基於身份的加密消息協議,具有暗路由,要了解更多資訊,請查看 Gavin 的 devcon1 優秀的 Whisper 影片。現在 Gavin 描述的許多特性在實現中並不存在,Whisper 本身還遠未完成,事實上我們目前使用的是早於 devcon1 的 WhisperV2,而現在 WhisperV5 正在
go-ethereum
. WhisperV3 & 4 在cpp-ethereum
客戶端實現。WhisperV5 更加不穩定,不能向後兼容。您可能也有興趣在此處閱讀最新的 WhisperV5 文件。Whisper 的一個有趣特性是它支持暗路由,即當您發送消息時,它會從一個節點反彈到另一個節點,直到它的 TTL(生存時間)到期,然後它就會終止。無法保證您的消息會到達所需的節點,因為它可能會在此之前過期。
我為什麼要提這個?缺少布隆過濾器。布隆過濾器是讓您的節點連接到的對等方知道您的節點感興趣的資訊和主題的重要組件。這些過濾器在暗路由中很重要,因為它允許我們以機率性的方式定位資訊應該遵循的總體方向流,同時最小化頻寬,增加消息沿目標節點的大致方向流動的可能性。
沒有它,您的資訊就會在資訊的海洋中漫無目的地遊蕩。
為了緩解這種情況,Status 在 Whisper 之上實現了一個應用協議,用於消息重傳和傳遞。也就是說,我們將嘗試重新傳輸該消息,直到我們從您的朋友聯繫人那裡收到一條回執消息,說明它已被傳遞(並看到)。麻煩的是,這條回執資訊也是在黑暗中漫無目的地遊蕩。
因此,為了使其目前正常工作,兩個節點都需要線上且可用,我們不能在不耗盡電池電量的情況下將 geth 作為後台服務執行。推送通知是一個尚未解決的問題,但我們計劃支持這一點,我在alpha 部落格文章中對此進行了概述,我們很可能會為 Whisper 做出貢獻,以直接在協議中提供收件箱。
此外,支持 Whisper 的節點並不多,如果您執行最新的 geth,您將執行 WhisperV5(我們上次檢查過)。
您認為這可能只是對等連接問題也是正確的。在控制台中,您可以鍵入
web3.net.peerCount
並點擊發送,希望您會看到一個 >0 的數字,如果引擎蓋下的 geth 沒有問題,它應該會回復一個答案。如果您沒有從控制台收到響應,那麼您會在 Status 中看到另一個錯誤,即 go-ethereum 已崩潰並且 Status 無法重新啟動它並且在此過程中弄亂了它的內部狀態。不幸的是,如果是這種情況,則需要在 Android 上清除數據或在 iOS 上重新安裝
我希望這會有所幫助,並再次感謝您嘗試 Status :)
編輯:不,你不需要 ETH 來使用 Whisper