|
|
@ -32,6 +32,7 @@ import traceback |
|
|
|
import aiorpcx |
|
|
|
import asyncio |
|
|
|
import concurrent.futures |
|
|
|
from aiorpcx import ClientSession, Notification |
|
|
|
|
|
|
|
import requests |
|
|
|
|
|
|
@ -43,8 +44,29 @@ from . import util |
|
|
|
from . import x509 |
|
|
|
from . import pem |
|
|
|
from .version import ELECTRUM_VERSION, PROTOCOL_VERSION |
|
|
|
from .util import NotificationSession |
|
|
|
from . import blockchain |
|
|
|
from .blockchain import deserialize_header |
|
|
|
|
|
|
|
|
|
|
|
class NotificationSession(ClientSession): |
|
|
|
|
|
|
|
def __init__(self, scripthash, header, *args, **kwargs): |
|
|
|
super(NotificationSession, self).__init__(*args, **kwargs) |
|
|
|
self.scripthash = scripthash |
|
|
|
self.header = header |
|
|
|
|
|
|
|
@aiosafe |
|
|
|
async def handle_request(self, request): |
|
|
|
if isinstance(request, Notification): |
|
|
|
if request.method == 'blockchain.scripthash.subscribe' and self.scripthash is not None: |
|
|
|
args = request.args |
|
|
|
await self.scripthash.put((args[0], args[1])) |
|
|
|
elif request.method == 'blockchain.headers.subscribe' and self.header is not None: |
|
|
|
deser = deserialize_header(bfh(request.args[0]['hex']), request.args[0]['height']) |
|
|
|
await self.header.put(deser) |
|
|
|
else: |
|
|
|
assert False, request.method |
|
|
|
|
|
|
|
|
|
|
|
class Interface(PrintError): |
|
|
|
|
|
|
|