Ich versuche, Geth über die Websocket-API zu abonnieren. Der erste Schritt war, geth zu starten:
geth --ws --wsport=8456 --wsorigins="*" --fast --cache=512 --rpcport=8455 --rpc --rpcapi="personal,eth,network"
Dann habe ich versucht, mit Websockets von Python eine Verbindung herzustellen:
from websockets import connect
import asyncio
async def get_event():
async with connect("ws://localhost:8456") as ws:
await ws.send(json.dumps({"id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions"]}))
subscription_response = await ws.recv()
while True:
try:
message = await asyncio.wait_for(ws.recv(), timeout=60)
pass
except asyncio.TimeoutError:
# No data in 20 seconds, check the connection.
try:
pong_waiter = await ws.ping()
await asyncio.wait_for(pong_waiter, timeout=10)
except asyncio.TimeoutError:
# No response to ping in 10 seconds, disconnect.
logger.critical("socket timeout")
break
else:
pprint(message)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
while True:
loop.run_until_complete(get_event())
Ich erhalte eine Abonnementantwort: '{"jsonrpc":"2.0","id":1,"result":"0xde19c48fe52cd12207f807f330630e2b"}'
Aber danach keine Nachrichten mehr erhalten und im TimeoutError laufen. Irgendeine Idee, was schief läuft?
Auf den ersten Blick scheint es, dass Sie keine der verfügbaren --wsapi-Methoden (personal, admin, eth, web3) aktivieren. Sie aktivieren sie auf --rpcapi. Das könnte die Ursache für die Zeitüberschreitung sein. Geht die Zeit aus, oder Ihre Bewerbung?