commit e86a874c7d6874218adf1b88da09ebcabf8a728f
parent 6a0632518d71bad83105a1dbe0cfb69f33790f2e
Author: parazyd <parazyd@dyne.org>
Date: Wed, 7 Apr 2021 18:29:41 +0200
Implement server.version
Diffstat:
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]}