obelisk

Electrum server using libbitcoin as its backend
git clone https://git.parazyd.org/obelisk
Log | Files | Refs | README | LICENSE

commit 176e3362ff4e9d62d07284082977d5eab4fa718c
parent 7bf03633848c6e778a20476cefc151d7fb70ef64
Author: parazyd <parazyd@dyne.org>
Date:   Thu,  8 Apr 2021 15:05:00 +0200

Implement blockchain.scripthash.unsubscribe

Diffstat:
Melectrumobelisk/protocol.py | 13++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/electrumobelisk/protocol.py b/electrumobelisk/protocol.py @@ -64,6 +64,7 @@ class ElectrumProtocol(asyncio.Protocol): # pylint: disable=R0904,R0902 self.block_queue = None # TODO: Clean up on client disconnect self.tasks = [] + self.sh_subscriptions = {} if chain == "mainnet": self.genesis = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" @@ -337,7 +338,17 @@ class ElectrumProtocol(asyncio.Protocol): # pylint: disable=R0904,R0902 Unsubscribe from a script hash, preventing future notifications if its status changes. """ - return + if "params" not in query or len(query["params"]) != 1: + return {"error": "malformed request"} + + scripthash = query["params"][0] + if not is_hash256_str(scripthash): + return {"error": "invalid scripthash"} + + if scripthash in self.sh_subscriptions: + self.sh_subscriptions[scripthash].cancel() + return {"result": True} + return {"result": False} async def blockchain_transaction_broadcast(self, writer, query): # pylint: disable=W0613 """Method: blockchain.transaction.broadcast