Estoy tratando de suscribirme a geth usando la API websocket. El primer paso fue iniciar geth:
geth --ws --wsport=8456 --wsorigins="*" --fast --cache=512 --rpcport=8455 --rpc --rpcapi="personal,eth,network"
Luego traté de conectarme usando websockets de python:
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())
Recibo la respuesta de suscripción: '{"jsonrpc":"2.0","id":1,"result":"0xde19c48fe52cd12207f807f330630e2b"}'
Pero no recibir ningún mensaje después de eso y ejecutarse en TimeoutError. ¿Alguna idea de lo que va mal?
A primera vista, parece que no está habilitando ninguno de los métodos --wsapi disponibles (personal, admin, eth, web3). Los está habilitando en --rpcapi. Eso podría ser lo que está causando el tiempo de espera. ¿Tiene tiempo de espera geth, o su aplicación?