diff --git a/electrum/interface.py b/electrum/interface.py index 45a05576a..19581bf94 100644 --- a/electrum/interface.py +++ b/electrum/interface.py @@ -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): diff --git a/electrum/synchronizer.py b/electrum/synchronizer.py index eba1ec7f0..3fe16a251 100644 --- a/electrum/synchronizer.py +++ b/electrum/synchronizer.py @@ -32,7 +32,7 @@ import concurrent.futures # from .bitcoin import Hash, hash_encode from .transaction import Transaction -from .util import ThreadJob, bh2u, PrintError, aiosafe, bfh, NotificationSession +from .util import ThreadJob, bh2u, PrintError, aiosafe, bfh from .bitcoin import address_to_scripthash from .version import ELECTRUM_VERSION, PROTOCOL_VERSION diff --git a/electrum/util.py b/electrum/util.py index ec4d44342..4a3629cd4 100644 --- a/electrum/util.py +++ b/electrum/util.py @@ -38,7 +38,6 @@ from locale import localeconv from .i18n import _ -from aiorpcx import ClientSession, Notification import urllib.request, urllib.parse, urllib.error import queue @@ -948,24 +947,3 @@ VerifiedTxInfo = NamedTuple("VerifiedTxInfo", [("height", int), ("timestamp", int), ("txpos", int), ("header_hash", str)]) - -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