Move more code to session class from controller
This commit is contained in:
parent
063f1b2eff
commit
c35c062780
@ -651,46 +651,6 @@ class Controller(ServerBase):
|
|||||||
|
|
||||||
return await self.run_in_executor(job)
|
return await self.run_in_executor(job)
|
||||||
|
|
||||||
def block_headers(self, start_height, count):
|
|
||||||
'''Read count block headers starting at start_height; both
|
|
||||||
must be non-negative.
|
|
||||||
|
|
||||||
The return value is (hex, n), where hex is the hex encoding of
|
|
||||||
the concatenated headers, and n is the number of headers read
|
|
||||||
(0 <= n <= count).
|
|
||||||
'''
|
|
||||||
headers, n = self.bp.read_headers(start_height, count)
|
|
||||||
return headers.hex(), n
|
|
||||||
|
|
||||||
# Client RPC "blockchain" command handlers
|
|
||||||
|
|
||||||
async def hashX_listunspent(self, hashX):
|
|
||||||
'''Return the list of UTXOs of a script hash, including mempool
|
|
||||||
effects.'''
|
|
||||||
utxos = await self.get_utxos(hashX)
|
|
||||||
utxos = sorted(utxos)
|
|
||||||
utxos.extend(self.mempool.get_utxos(hashX))
|
|
||||||
spends = await self.mempool.potential_spends(hashX)
|
|
||||||
|
|
||||||
return [{'tx_hash': hash_to_hex_str(utxo.tx_hash),
|
|
||||||
'tx_pos': utxo.tx_pos,
|
|
||||||
'height': utxo.height, 'value': utxo.value}
|
|
||||||
for utxo in utxos
|
|
||||||
if (utxo.tx_hash, utxo.tx_pos) not in spends]
|
|
||||||
|
|
||||||
def mempool_get_fee_histogram(self):
|
|
||||||
'''Memory pool fee histogram.
|
|
||||||
|
|
||||||
TODO: The server should detect and discount transactions that
|
|
||||||
never get mined when they should.
|
|
||||||
'''
|
|
||||||
return self.mempool.get_fee_histogram()
|
|
||||||
|
|
||||||
async def relayfee(self):
|
|
||||||
'''The minimum fee a low-priority tx must pay in order to be accepted
|
|
||||||
to the daemon's memory pool.'''
|
|
||||||
return await self.daemon_request('relayfee')
|
|
||||||
|
|
||||||
async def transaction_get(self, tx_hash, verbose=False):
|
async def transaction_get(self, tx_hash, verbose=False):
|
||||||
'''Return the serialized raw transaction given its hash
|
'''Return the serialized raw transaction given its hash
|
||||||
|
|
||||||
|
|||||||
@ -328,6 +328,20 @@ class ElectrumX(SessionBase):
|
|||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
||||||
|
async def hashX_listunspent(self, hashX):
|
||||||
|
'''Return the list of UTXOs of a script hash, including mempool
|
||||||
|
effects.'''
|
||||||
|
utxos = await self.controller.get_utxos(hashX)
|
||||||
|
utxos = sorted(utxos)
|
||||||
|
utxos.extend(self.controller.mempool.get_utxos(hashX))
|
||||||
|
spends = await self.controller.mempool.potential_spends(hashX)
|
||||||
|
|
||||||
|
return [{'tx_hash': hash_to_hex_str(utxo.tx_hash),
|
||||||
|
'tx_pos': utxo.tx_pos,
|
||||||
|
'height': utxo.height, 'value': utxo.value}
|
||||||
|
for utxo in utxos
|
||||||
|
if (utxo.tx_hash, utxo.tx_pos) not in spends]
|
||||||
|
|
||||||
async def hashX_subscribe(self, hashX, alias):
|
async def hashX_subscribe(self, hashX, alias):
|
||||||
# First check our limit.
|
# First check our limit.
|
||||||
if len(self.hashX_subs) >= self.max_subs:
|
if len(self.hashX_subs) >= self.max_subs:
|
||||||
@ -364,7 +378,7 @@ class ElectrumX(SessionBase):
|
|||||||
async def address_listunspent(self, address):
|
async def address_listunspent(self, address):
|
||||||
'''Return the list of UTXOs of an address.'''
|
'''Return the list of UTXOs of an address.'''
|
||||||
hashX = self.address_to_hashX(address)
|
hashX = self.address_to_hashX(address)
|
||||||
return await self.controller.hashX_listunspent(hashX)
|
return await self.hashX_listunspent(hashX)
|
||||||
|
|
||||||
async def address_subscribe(self, address):
|
async def address_subscribe(self, address):
|
||||||
'''Subscribe to an address.
|
'''Subscribe to an address.
|
||||||
@ -411,7 +425,7 @@ class ElectrumX(SessionBase):
|
|||||||
async def scripthash_listunspent(self, scripthash):
|
async def scripthash_listunspent(self, scripthash):
|
||||||
'''Return the list of UTXOs of a scripthash.'''
|
'''Return the list of UTXOs of a scripthash.'''
|
||||||
hashX = scripthash_to_hashX(scripthash)
|
hashX = scripthash_to_hashX(scripthash)
|
||||||
return await self.controller.hashX_listunspent(hashX)
|
return await self.hashX_listunspent(hashX)
|
||||||
|
|
||||||
async def scripthash_subscribe(self, scripthash):
|
async def scripthash_subscribe(self, scripthash):
|
||||||
'''Subscribe to a script hash.
|
'''Subscribe to a script hash.
|
||||||
@ -462,9 +476,10 @@ class ElectrumX(SessionBase):
|
|||||||
count = non_negative_integer(count)
|
count = non_negative_integer(count)
|
||||||
cp_height = non_negative_integer(cp_height)
|
cp_height = non_negative_integer(cp_height)
|
||||||
|
|
||||||
count = min(count, self.MAX_CHUNK_SIZE)
|
max_size = self.MAX_CHUNK_SIZE
|
||||||
hex_str, count = self.controller.block_headers(start_height, count)
|
count = min(count, max_size)
|
||||||
result = {'hex': hex_str, 'count': count, 'max': self.MAX_CHUNK_SIZE}
|
headers, count = self.bp.read_headers(start_height, count)
|
||||||
|
result = {'hex': headers.hex(), 'count': count, 'max': max_size}
|
||||||
if count and cp_height:
|
if count and cp_height:
|
||||||
last_height = start_height + count - 1
|
last_height = start_height + count - 1
|
||||||
result.update(self._merkle_proof(cp_height, last_height))
|
result.update(self._merkle_proof(cp_height, last_height))
|
||||||
@ -480,8 +495,8 @@ class ElectrumX(SessionBase):
|
|||||||
index = non_negative_integer(index)
|
index = non_negative_integer(index)
|
||||||
chunk_size = self.coin.CHUNK_SIZE
|
chunk_size = self.coin.CHUNK_SIZE
|
||||||
start_height = index * chunk_size
|
start_height = index * chunk_size
|
||||||
hex_str, n = self.controller.block_headers(start_height, chunk_size)
|
headers, count = self.bp.read_headers(start_height, chunk_size)
|
||||||
return hex_str
|
return headers.hex()
|
||||||
|
|
||||||
def block_get_header(self, height):
|
def block_get_header(self, height):
|
||||||
'''The deserialized header at a given height.
|
'''The deserialized header at a given height.
|
||||||
@ -539,6 +554,15 @@ class ElectrumX(SessionBase):
|
|||||||
|
|
||||||
return banner
|
return banner
|
||||||
|
|
||||||
|
def mempool_get_fee_histogram(self):
|
||||||
|
'''Memory pool fee histogram.'''
|
||||||
|
return self.controller.mempool.get_fee_histogram()
|
||||||
|
|
||||||
|
async def relayfee(self):
|
||||||
|
'''The minimum fee a low-priority tx must pay in order to be accepted
|
||||||
|
to the daemon's memory pool.'''
|
||||||
|
return await self.controller.daemon_request('relayfee')
|
||||||
|
|
||||||
async def estimatefee(self, number):
|
async def estimatefee(self, number):
|
||||||
'''The estimated transaction fee per kilobyte to be paid for a
|
'''The estimated transaction fee per kilobyte to be paid for a
|
||||||
transaction to be included within a certain number of blocks.
|
transaction to be included within a certain number of blocks.
|
||||||
@ -615,7 +639,7 @@ class ElectrumX(SessionBase):
|
|||||||
'blockchain.block.get_chunk': self.block_get_chunk,
|
'blockchain.block.get_chunk': self.block_get_chunk,
|
||||||
'blockchain.block.get_header': self.block_get_header,
|
'blockchain.block.get_header': self.block_get_header,
|
||||||
'blockchain.estimatefee': self.estimatefee,
|
'blockchain.estimatefee': self.estimatefee,
|
||||||
'blockchain.relayfee': controller.relayfee,
|
'blockchain.relayfee': self.relayfee,
|
||||||
'blockchain.scripthash.get_balance': self.scripthash_get_balance,
|
'blockchain.scripthash.get_balance': self.scripthash_get_balance,
|
||||||
'blockchain.scripthash.get_history': self.scripthash_get_history,
|
'blockchain.scripthash.get_history': self.scripthash_get_history,
|
||||||
'blockchain.scripthash.get_mempool': self.scripthash_get_mempool,
|
'blockchain.scripthash.get_mempool': self.scripthash_get_mempool,
|
||||||
@ -636,8 +660,7 @@ class ElectrumX(SessionBase):
|
|||||||
if ptuple >= (1, 2):
|
if ptuple >= (1, 2):
|
||||||
# New handler as of 1.2
|
# New handler as of 1.2
|
||||||
handlers.update({
|
handlers.update({
|
||||||
'mempool.get_fee_histogram':
|
'mempool.get_fee_histogram': self.mempool_get_fee_histogram,
|
||||||
controller.mempool_get_fee_histogram,
|
|
||||||
'blockchain.block.headers': self.block_headers_12,
|
'blockchain.block.headers': self.block_headers_12,
|
||||||
'server.ping': self.ping,
|
'server.ping': self.ping,
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user