Merge pull request #3093 from lbryio/fix-merkle
fix off-by-one when getting block txs for tx_merkle
This commit is contained in:
commit
16c2e5a585
1 changed files with 5 additions and 4 deletions
|
@ -469,7 +469,7 @@ class LevelDB:
|
||||||
block_txs = list(self.tx_db.iterator(
|
block_txs = list(self.tx_db.iterator(
|
||||||
start=TX_HASH_PREFIX + util.pack_be_uint64(tx_counts[tx_height - 1]),
|
start=TX_HASH_PREFIX + util.pack_be_uint64(tx_counts[tx_height - 1]),
|
||||||
stop=None if tx_height + 1 == len(tx_counts) else
|
stop=None if tx_height + 1 == len(tx_counts) else
|
||||||
TX_HASH_PREFIX + util.pack_be_uint64(tx_counts[tx_height] + 1), include_key=False
|
TX_HASH_PREFIX + util.pack_be_uint64(tx_counts[tx_height]), include_key=False
|
||||||
))
|
))
|
||||||
if tx_height + 100 > self.db_height:
|
if tx_height + 100 > self.db_height:
|
||||||
return block_txs
|
return block_txs
|
||||||
|
@ -480,12 +480,13 @@ class LevelDB:
|
||||||
return self._merkle_tx_cache[(tx_num, tx_height)]
|
return self._merkle_tx_cache[(tx_num, tx_height)]
|
||||||
if tx_height not in self._block_txs_cache:
|
if tx_height not in self._block_txs_cache:
|
||||||
uncached = await asyncio.get_event_loop().run_in_executor(self.executor, _update_block_txs_cache)
|
uncached = await asyncio.get_event_loop().run_in_executor(self.executor, _update_block_txs_cache)
|
||||||
|
block_txs = self._block_txs_cache.get(tx_height, uncached)
|
||||||
|
branch, root = self.merkle.branch_and_root(block_txs, tx_pos)
|
||||||
merkle = {
|
merkle = {
|
||||||
'block_height': tx_height,
|
'block_height': tx_height,
|
||||||
'merkle': [
|
'merkle': [
|
||||||
hash_to_hex_str(hash) for hash in self.merkle.branch_and_root(
|
hash_to_hex_str(hash)
|
||||||
self._block_txs_cache.get(tx_height, uncached), tx_pos
|
for hash in branch
|
||||||
)[0]
|
|
||||||
],
|
],
|
||||||
'pos': tx_pos
|
'pos': tx_pos
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue