Abonnieren Sie Ereignisse mit dem Geth-Websocket

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?

Antworten (1)

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?