Go-Ethereum

如何在 Whisper 上發送 1-N 信令或廣播消息?

  • June 15, 2020

來自耳語維基

低延遲、1-1 或 1-N 信令消息。

Shh.post(self, message:)Whisper Usage / shh.post

創建一個耳語消息並將其註入網路以進行分發。

的範例用法web3.shh.post,有關更多詳細資訊,請參閱此答案

web3.shh.post({
 pubKey: 'PUBLIC_KEY_OF_THE_RECEIVER',
 ttl: 3600,
 topic: '0x07678231',
 powTarget: 2.01,
 powTime: 2,
 payload: web3.fromAscii("Hello there!")
 });

當我pubKeyweb3.shh.post作為參數中刪除時;它說:Error: specify either a symmetric or an asymmetric key

shh.post({ "topic": t, "payload": p });無簽名,無加密:匿名廣播;有點像匿名主題過濾的 Twitter 提要。

**$$ Q $$**由於web3.shh.post()需要我們提供接收方的單一公鑰;是否可以使用發送 1-N 或廣播消息whisper protocol?如果是,如何?

我建議使用此文件:https ://github.com/ethereum/go-ethereum/wiki/Whisper

耳語使用

您發布的連結已過時,而且適用於 Whisper v 2.0

答:如果您為所有收件人提供相同的 symKey,則可能是 1:N 消息。

PS 我發布的連結是針對 Whisper 5.0 的,目前版本的 Whisper 是 6.0 但無論如何 v6 的 API 幾乎與 v5 相同。


在 node-1 的 geth-client 上:

generatedSymKey=shh.generateSymKeyFromPassword("hello");    
symKey=shh.getSymKey(generatedSymKey)    
symKeyID=shh.addSymKey(symKey) //ex: "d5212e736703afbb21246e8acd192e4345ea910398544d765ed6b49f0ec524b5"
filter = web3.shh.newMessageFilter(
       {symKeyID:symKeyID, topic: '0x07678231'}, 
       function(err, res) {console.log(web3.toUtf8(res.payload))});

在 node-2 的 geth-client 上:

generatedSymKey=shh.generateSymKeyFromPassword("hello")    
symKey=shh.getSymKey(generatedSymKey)    
symKeyID=shh.addSymKey(symKey) //ex: "c4c4cecf6ad9499c2386b8ce6416f44684e042e491726b38315646c0b4afadc6"
filter = web3.shh.newMessageFilter(
       {symKeyID:symKeyID, topic: '0x07678231'}, 
       function(err, res) {console.log(web3.toUtf8(res.payload))});

然後,在另一個節點上發送消息,並且兩個消息都顯示在node-1node-2上,即使symKeyIDnode-1node-2shh.post()功能。

以下程式碼執行在node-1's geth-client

給出了節點 1 symKeyID

web3.shh.post({
 symKeyID: 'd5212e736703afbb21246e8acd192e4345ea910398544d765ed6b49f0ec524b5', //symKeyID of the node-1
 ttl: 10,
 topic: '0x07678231',
 powTarget: 2.01,
 powTime: 2,
 payload: web3.fromAscii("Hello there!")
 });

或者


以下程式碼執行在node-2's geth-client

給出了節點 2 symKeyID

web3.shh.post({
 symKeyID: 'c4c4cecf6ad9499c2386b8ce6416f44684e042e491726b38315646c0b4afadc6', //symKeyID of the node-2
 ttl: 10,
 topic: '0x07678231',
 powTarget: 2.01,
 powTime: 2,
 payload: web3.fromAscii("Hello there!")
 });

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