¿Muestra de suscripción usando websockets o IPC?

Así que estaba usando la API web3 del módulo 'web3' de NodeJS muy felizmente y funciona muy bien (usa el transporte HTTP AFAIU). Pero ahora quiero recibir eventos del servidor (sin encuestas), y para eso parece que necesito usar la API de suscripción .

Sin embargo, la documentación que acabo de vincular indica que las suscripciones requieren una conexión dúplex completa. Geth ofrece tales conexiones en forma de websockets (habilitar con --ws) e ipc (habilitado de forma predeterminada) . Me parece bien.

Pero, por mi vida, no puedo encontrar ninguna muestra de cómo conectarse a través de IPC/WebSockets. Si la documentación incluyera una simple muestra de Hello World de una suscripción, sería genial.

No lo intenté, pero parece que web3 ipc es lo que necesita npmjs.com/package/web3_ipc

Respuestas (3)

también puedes usar netcat:

➜  ~  nc -U /home/XXX/.ethereum/geth.ipc
{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":1}
{"jsonrpc":"2.0","id":1,"result":"0xeeeeeeeeeeeeeeeeeeeeededededede"}
¿Qué hay de usar nodejs? :) (si proporciona una muestra de js, votaré a favor de sus 3 respuestas :))
Lo siento, no conozco las bibliotecas js lo suficientemente bien como para eso, pero estoy bastante seguro de que otros encontrarán la manera;)
@knocte, ¿sobornarlo? ¿Encontraste js muestra? si me envías, votaré tus respuestas;)

pirateando me conecté en python de esta manera, bastante simple:

➜  ~ ipython2
Python 2.7.11+ (default, May  9 2016, 15:54:33)
Type "copyright", "credits" or "license" for more information.

IPython 4.2.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import socket

In [3]: s=socket.socket(socket.AF_UNIX,socket.SOCK_STREAM)

In [4]: s.connect("/home/XXX/.ethereum/geth.ipc")

In [5]: message = '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":1}'

In [6]: s.send(message)
Out[6]: 60

In [7]: s.recv(1024)
Out[7]: '{"jsonrpc":"2.0","id":1,"result":"0xeeeeeeeeeeeeeeeeeeeeededededede"}\n'

sigo navegando, parece que esta biblioteca está diseñada para hacer exactamente lo que quieres, pero en python

web3 tiene proveedores para IPC y Websockets

http://web3js.readthedocs.io/en/1.0/web3.html#proveedores

Puedes usarlo simplemente con

const web3 = new Web3(new Web3.providers.IpcProvider(/path/to/.ipc, net))