Так что я очень счастливо использовал API-интерфейс web3 из модуля «web3» NodeJS, и он работает очень хорошо (он использует HTTP-транспорт AFAIU). Но теперь я хочу получать события от сервера (без опроса), и для этого, похоже, мне нужно использовать API подписки .
Однако в документации, которую я только что связал, указано, что для подписки требуется полнодуплексное соединение. Geth предлагает такие соединения в виде веб-сокетов (включается с --ws) и ipc (включено по умолчанию) . Справедливо.
Но, на всю жизнь, я не могу найти ни одного примера того, как подключиться через IPC/WebSockets. Если бы документация включала простой образец подписки на приветствие, это было бы здорово.
вы также можете использовать netcat:
➜ ~ nc -U /home/XXX/.ethereum/geth.ipc
{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":1}
{"jsonrpc":"2.0","id":1,"result":"0xeeeeeeeeeeeeeeeeeeeeededededede"}
взломав, я подключился к python таким образом, довольно просто:
➜ ~ 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'
все еще просматривая, кажется, что эта библиотека предназначена для того, чтобы делать именно то, что вы хотите, но в python
web3 имеет провайдеров для IPC и веб-сокетов
http://web3js.readthedocs.io/en/1.0/web3.html#providers
Вы можете использовать его просто с
const web3 = new Web3(new Web3.providers.IpcProvider(/path/to/.ipc, net))
Исмаэль