diff --git a/electrumx/server/session.py b/electrumx/server/session.py index 6d6b3e1..5040aeb 100644 --- a/electrumx/server/session.py +++ b/electrumx/server/session.py @@ -508,6 +508,19 @@ class SessionManager(object): except DaemonError as e: raise RPCError(DAEMON_ERROR, f'daemon error: {e!r}') from None + async def raw_header(self, height): + '''Return the binary header at the given height.''' + try: + return await self.db.raw_header(height) + except IndexError: + raise RPCError(BAD_REQUEST, f'height {height:,d} ' + 'out of range') from None + + async def electrum_header(self, height): + '''Return the deserialized header at the given height.''' + raw_header = await self.raw_header(height) + return self.env.coin.electrum_header(raw_header, height) + async def broadcast_transaction(self, raw_tx): hex_hash = await self.daemon.sendrawtransaction([raw_tx]) self.txs_sent += 1 @@ -777,25 +790,12 @@ class ElectrumX(SessionBase): if touched or (height_changed and self.mempool_statuses): await self.notify_touched(touched) - async def raw_header(self, height): - '''Return the binary header at the given height.''' - try: - return await self.db.raw_header(height) - except IndexError: - raise RPCError(BAD_REQUEST, f'height {height:,d} ' - 'out of range') from None - - async def electrum_header(self, height): - '''Return the deserialized header at the given height.''' - raw_header = await self.raw_header(height) - return self.coin.electrum_header(raw_header, height) - async def subscribe_headers_result(self, height): '''The result of a header subscription for the given height.''' if self.subscribe_headers_raw: - raw_header = await self.raw_header(height) + raw_header = await self.session_mgr.raw_header(height) return {'hex': raw_header.hex(), 'height': height} - return await self.electrum_header(height) + return await self.session_mgr.electrum_header(height) async def _headers_subscribe(self, raw): '''Subscribe to get headers of new blocks.''' @@ -978,7 +978,7 @@ class ElectrumX(SessionBase): dictionary with a merkle proof.''' height = non_negative_integer(height) cp_height = non_negative_integer(cp_height) - raw_header_hex = (await self.raw_header(height)).hex() + raw_header_hex = (await self.session_mgr.raw_header(height)).hex() if cp_height == 0: return raw_header_hex result = {'header': raw_header_hex} @@ -1029,7 +1029,7 @@ class ElectrumX(SessionBase): height: the header's height''' height = non_negative_integer(height) - return await self.electrum_header(height) + return await self.session_mgr.electrum_header(height) def is_tor(self): '''Try to detect if the connection is to a tor hidden service we are