Also habe ich die web3-API aus dem NodeJS-Modul „web3“ sehr gerne verwendet und sie funktioniert sehr gut (sie verwendet den HTTP-Transport AFAIU). Aber jetzt möchte ich Ereignisse vom Server erhalten (ohne Abfrage), und dafür muss ich anscheinend die Abonnement-API verwenden .
Die Dokumentation, die ich gerade verlinkt habe, besagt jedoch, dass Abonnements eine Vollduplex-Verbindung erfordern. Geth bietet solche Verbindungen in Form von Websockets (mit --ws aktivieren) und IPC (standardmäßig aktiviert) an . Fair genug.
Aber für mein ganzes Leben kann ich dort draußen kein Beispiel finden, wie man eine Verbindung über IPC/WebSockets herstellt. Wenn die Dokumentation ein einfaches Hallo-Welt-Beispiel eines Abonnements enthalten würde, wäre es krass.
Sie können auch netcat verwenden:
➜ ~ nc -U /home/XXX/.ethereum/geth.ipc
{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":1}
{"jsonrpc":"2.0","id":1,"result":"0xeeeeeeeeeeeeeeeeeeeeededededede"}
Beim Herumhacken habe ich mich in Python auf diese Weise verbunden, ziemlich einfach:
➜ ~ 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'
Beim Durchsuchen scheint diese Bibliothek genau das zu tun, was Sie wollen, aber in Python
web3 hat Anbieter für IPC und Websockets
http://web3js.readthedocs.io/en/1.0/web3.html#providers
Sie können es einfach mit verwenden
const web3 = new Web3(new Web3.providers.IpcProvider(/path/to/.ipc, net))
Ismael