Move raw_header to session manager
Ultimately this stuff belongs in a ChainState object.
This commit is contained in:
parent
b7572ce9c0
commit
9cf3b5358f
@ -123,10 +123,3 @@ class Controller(ServerBase):
|
||||
self.create_task(self.peer_mgr.main_loop())
|
||||
self.create_task(self.session_mgr.start_serving())
|
||||
self.create_task(self.session_mgr.housekeeping())
|
||||
|
||||
def raw_header(self, height):
|
||||
'''Return the binary header at the given height.'''
|
||||
header, n = self.bp.read_headers(height, 1)
|
||||
if n != 1:
|
||||
raise RPCError(BAD_REQUEST, f'height {height:,d} out of range')
|
||||
return header
|
||||
|
||||
@ -156,7 +156,7 @@ class PeerSession(ClientSession):
|
||||
return
|
||||
# Check prior header too in case of hard fork.
|
||||
check_height = min(our_height, their_height)
|
||||
raw_header = controller.raw_header(check_height)
|
||||
raw_header = controller.session_mgr.raw_header(check_height)
|
||||
if self.ptuple >= (1, 4):
|
||||
self.send_request('blockchain.block.header', [check_height],
|
||||
partial(self.on_header, raw_header.hex()),
|
||||
|
||||
@ -420,12 +420,18 @@ class SessionManager(object):
|
||||
if session_touched is not None:
|
||||
create_task(session.notify_async(session_touched))
|
||||
|
||||
def raw_header(self, height):
|
||||
'''Return the binary header at the given height.'''
|
||||
header, n = self.controller.bp.read_headers(height, 1)
|
||||
if n != 1:
|
||||
raise RPCError(BAD_REQUEST, f'height {height:,d} out of range')
|
||||
return header
|
||||
|
||||
async def get_history(self, hashX):
|
||||
'''Get history asynchronously to reduce latency.'''
|
||||
if hashX in self.history_cache:
|
||||
return self.history_cache[hashX]
|
||||
|
||||
controller = self.controller
|
||||
def job():
|
||||
# History DoS limit. Each element of history is about 99
|
||||
# bytes when encoded as JSON. This limits resource usage
|
||||
@ -434,6 +440,7 @@ class SessionManager(object):
|
||||
limit = self.env.max_send // 97
|
||||
return list(controller.bp.get_history(hashX, limit=limit))
|
||||
|
||||
controller = self.controller
|
||||
history = await controller.run_in_executor(job)
|
||||
self.history_cache[hashX] = history
|
||||
return history
|
||||
@ -701,13 +708,13 @@ class ElectrumX(SessionBase):
|
||||
|
||||
def electrum_header(self, height):
|
||||
'''Return the deserialized header at the given height.'''
|
||||
raw_header = self.controller.raw_header(height)
|
||||
raw_header = self.session_mgr.raw_header(height)
|
||||
return self.coin.electrum_header(raw_header, height)
|
||||
|
||||
def subscribe_headers_result(self, height):
|
||||
'''The result of a header subscription for the given height.'''
|
||||
if self.subscribe_headers_raw:
|
||||
raw_header = self.controller.raw_header(height)
|
||||
raw_header = self.session_mgr.raw_header(height)
|
||||
return {'hex': raw_header.hex(), 'height': height}
|
||||
return self.electrum_header(height)
|
||||
|
||||
@ -896,7 +903,7 @@ class ElectrumX(SessionBase):
|
||||
dictionary with a merkle proof.'''
|
||||
height = non_negative_integer(height)
|
||||
cp_height = non_negative_integer(cp_height)
|
||||
raw_header_hex = self.controller.raw_header(height).hex()
|
||||
raw_header_hex = self.session_mgr.raw_header(height).hex()
|
||||
if cp_height == 0:
|
||||
return raw_header_hex
|
||||
result = {'header': raw_header_hex}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user