obelisk

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

commit e86a874c7d6874218adf1b88da09ebcabf8a728f
parent 6a0632518d71bad83105a1dbe0cfb69f33790f2e
Author: parazyd <parazyd@dyne.org>
Date:   Wed,  7 Apr 2021 18:29:41 +0200

Implement server.version

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

diff --git a/electrumobelisk/protocol.py b/electrumobelisk/protocol.py @@ -44,6 +44,8 @@ class ElectrumProtocol(asyncio.Protocol): # pylint: disable=R0904 self.endpoints = endpoints self.server_cfg = server_cfg self.loop = asyncio.get_event_loop() + # In spec, version shouldn't be called more than once + self.version_called = False # Consider renaming bx to something else self.bx = Client(log, endpoints, self.loop) @@ -261,4 +263,18 @@ class ElectrumProtocol(asyncio.Protocol): # pylint: disable=R0904 return {"result": None} async def server_version(self, query): - return + if self.version_called: + self.log.warning("Got a subsequent %s call", query["method"]) + return + if len(query["params"]) != 2: + return {"error": "malformed request"} + client_ver = query["params"][1] + if isinstance(client_ver, list): + client_min, client_max = client_ver[0], client_ver[1] + else: + client_min = client_max = client_ver + version = min(client_max, SERVER_PROTO_MAX) + if version < max(client_min, SERVER_PROTO_MIN): + return {"error": f"client protocol version {client_ver} is not supported"} + self.version_called = True + return {"response": [f"obelisk {VERSION}", version]}