mirror of
https://github.com/fusion44/blitz_api.git
synced 2026-08-13 11:52:45 +02:00
feat: implement bitcoin core block hash zmq sub
Block data will be published to sse/subscribe SSE endpoint
This commit is contained in:
parent
f037854748
commit
97458fb3f8
3 changed files with 25 additions and 3 deletions
|
|
@ -1,11 +1,12 @@
|
|||
import asyncio
|
||||
import binascii
|
||||
import json
|
||||
from hashlib import sha256
|
||||
|
||||
import zmq
|
||||
import zmq.asyncio
|
||||
from app.utils import bitcoin_config, bitcoin_rpc_async
|
||||
from fastapi import Request
|
||||
from fastapi_plugins import redis_plugin
|
||||
|
||||
|
||||
async def handle_block_sub(request: Request, verbosity: int = 1) -> str:
|
||||
|
|
@ -24,3 +25,22 @@ async def handle_block_sub(request: Request, verbosity: int = 1) -> str:
|
|||
hash = binascii.hexlify(body).decode('utf-8')
|
||||
r = await bitcoin_rpc_async('getblock', [hash, verbosity])
|
||||
yield json.dumps(r["result"])
|
||||
|
||||
|
||||
async def handle_block_sub_redis(verbosity: int = 1) -> str:
|
||||
ctx = zmq.asyncio.Context()
|
||||
zmq_socket = ctx.socket(zmq.SUB)
|
||||
zmq_socket.setsockopt(zmq.RCVHWM, 0)
|
||||
zmq_socket.setsockopt_string(zmq.SUBSCRIBE, "hashblock")
|
||||
zmq_socket.connect(bitcoin_config.zmq_url)
|
||||
|
||||
while True:
|
||||
_, body, _ = await zmq_socket.recv_multipart()
|
||||
hash = binascii.hexlify(body).decode('utf-8')
|
||||
r = await bitcoin_rpc_async('getblock', [hash, verbosity])
|
||||
await redis_plugin.redis.publish("default", json.dumps(r["result"]))
|
||||
|
||||
|
||||
async def register_bitcoin_zmq_sub():
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.create_task(handle_block_sub_redis())
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
from app.routers import bitcoin
|
||||
import json
|
||||
from types import coroutine
|
||||
|
||||
import aiohttp
|
||||
import requests
|
||||
import json
|
||||
from decouple import config
|
||||
|
||||
|
||||
|
|
|
|||
2
main.py
2
main.py
|
|
@ -1,3 +1,4 @@
|
|||
from app.repositories.bitcoin import register_bitcoin_zmq_sub
|
||||
from aioredis import Channel, Redis
|
||||
from fastapi import FastAPI, Depends
|
||||
from fastapi_plugins import (get_config, depends_redis, registered_configuration,
|
||||
|
|
@ -25,6 +26,7 @@ app.include_router(system.router)
|
|||
async def on_startup() -> None:
|
||||
await redis_plugin.init_app(app, config=config)
|
||||
await redis_plugin.init()
|
||||
await register_bitcoin_zmq_sub()
|
||||
|
||||
|
||||
@app.on_event('shutdown')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue