Auf der Suche nach einem funktionierenden Whisper-Beispiel

Ich wollte eine Anwendung mit Whisper & NodeJS entwickeln und habe Probleme, ein funktionierendes und aktualisiertes Beispiel zu finden.

Ich bin auf dieses Dokument web3js.readthedocs.io/en/1.0/web3-shh.html und dieses Handbuch https://github.com/ethereum/wiki/wiki/Whisper-Overview gestoßen , aber sie sind nicht miteinander kompatibel ( wahrscheinlich Versionssache).

Ich habe es geschafft, so weit zu kommen, was meiner Meinung nach eine Nachricht auf Whisper veröffentlichen sollte, aber ich weiß nicht, warum es nicht funktioniert und wie ich es anhören soll.

var net = require('net');
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.IpcProvider('/Users/tloriato/Library/Ethereum/geth.ipc', net));

var KeyID;
var PubKey;

var message = web3.utils.toHex("Test");

web3.shh.newKeyPair().then((data) => {
    console.log(data);
    web3.shh.getPublicKey(KeyID).then((data) => {
        console.log(data);
    }).then(() => {
        shh.post({
            pubKey: PubKey,
            sig: KeyID,
            ttl: 120,
            payload: message,
            powTime: 2,
            powTarget: 1
            }, function(err, data){
                if (err) console.log(err);
                console.log(data);
        });
    });
});

[F] : Hat jemand ein funktionierendes Beispiel für Flüstern mit der aktuellen Version von Geth oder Party?

Antworten (1)

Basierend auf der Whisper V5 RPC-API-Dokumentation konnte ich endlich ein funktionierendes Beispiel mit privaten/öffentlichen Schlüsseln erstellen. Ich habe dies in einem privaten Netzwerk mit der Geth 1.7.2-Konsole getestet. Im Mainnet wird Flüstern höchstwahrscheinlich nicht funktionieren, da die meisten Knoten dieses Protokoll nicht aktiviert haben.

Auf dem Empfängerknoten:

1/ Erstellen Sie ein neues Schlüsselpaar

var kId = web3.shh.newKeyPair();

2/ Erstellen Sie einen Nachrichtenfilter. Die einfachste Variante ist die Angabe des privaten Schlüssels. Alle mit dem entsprechenden öffentlichen Schlüssel verschlüsselten Nachrichten lösen die Callback-Funktion aus. Sie können dies eingrenzen, indem Sie ein Thema angeben.

web3.shh.newMessageFilter(
    {privateKeyID:kId}, 
    function(err, res) {console.log(JSON.stringify(res))});

3/ Holen Sie sich den öffentlichen Schlüssel (der vom Absender benötigt wird)

web3.shh.getPublicKey(kId)

Auf dem Senderknoten:

PUBLIC_KEY_OF_THE_RECEIVER(durch den Wert aus Schritt 3 oben zwischen einfachen Anführungszeichen ( ) ersetzen ')

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

ttl, topic, powTarget, powTime sind Werte aus der Dokumentation.

geth-Version ist 1.8.0, aber ich habe: Error: The method shh_newKeyPair does not exist/is not available.Bitte lesen Sie ausführlich: ethereum.stackexchange.com/q/51585/4575 @ivicaa
Ich habe das mit geth 1.7.2 getestet, wie ich oben geschrieben habe ... Ich habe es noch nicht mit geht 1.8.0 getestet.
Auf der Seite des Empfängerknotens res.payloadsollte die Zeichenfolge dekodiert werden, um die ursprüngliche Nachricht des Absenders zu sehen. Bitte folgen Sie ( ethereum.stackexchange.com/a/51605/4575 ), um die gesendete Nachricht des Absenders zu entschlüsseln.
@alper Sie müssen geth mit dem Flag --shh ausführen