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.
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"}
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))
ismael