Buscando un ejemplo de Whisper que funcione

Estaba buscando desarrollar una aplicación usando Whisper & NodeJS y tengo problemas para encontrar un ejemplo que funcione y esté actualizado.

Encontré este documento web3js.readthedocs.io/en/1.0/web3-shh.html y esta guía https://github.com/ethereum/wiki/wiki/Whisper-Overview , pero son incompatibles entre sí ( probablemente cosa de la versión).

He logrado llegar hasta aquí, en lo que creo que debería publicar un mensaje en Whisper, pero no sé por qué no funciona ni cómo escucharlo.

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);
        });
    });
});

[P] : ¿Alguien tiene un ejemplo práctico para trabajar con susurros con la versión reciente de geth o partiy?

Respuestas (1)

Basado en la documentación de la API RPC de Whisper V5 , finalmente pude construir un ejemplo de trabajo con claves privadas/públicas. He probado esto en una red privada con la consola geth 1.7.2. En mainnet, lo más probable es que el susurro no funcione, ya que la mayoría de los nodos no tendrán este protocolo habilitado.

En el nodo receptor:

1/ crear un nuevo par de llaves

var kId = web3.shh.newKeyPair();

2/ crear un filtro de mensajes. La versión más simple es especificar la clave privada. Todos los mensajes cifrados con la clave pública correspondiente activarán la función de devolución de llamada. Puede reducir esto especificando un tema.

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

3/ obtener la clave pública (que necesita el remitente)

web3.shh.getPublicKey(kId)

En el nodo emisor:

(reemplace PUBLIC_KEY_OF_THE_RECEIVERcon el valor del Paso 3 anterior entre comillas simples ( '))

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 son valores de la documentación.

la versión geth es 1.8.0pero tengo: Error: The method shh_newKeyPair does not exist/is not available.consulte en profundidad: ethereum.stackexchange.com/q/51585/4575 @ivicaa
Probé esto con geth 1.7.2 como escribí anteriormente... No lo probé con geht 1.8.0 todavía.
En el lado del nodo receptor, la res.payloadcadena debe decodificarse para ver el mensaje original del remitente. Siga ( ethereum.stackexchange.com/a/51605/4575 ) para decodificar el mensaje enviado por el remitente.
@alper Necesita ejecutar geth con la bandera --shh