mirror of
https://github.com/LBRYFoundation/lbry-sdk.git
synced 2025-08-23 17:27:25 +00:00
fix fs_transactions
This commit is contained in:
parent
ac752d5ec2
commit
a9de1ce8e0
2 changed files with 32 additions and 9 deletions
|
@ -464,10 +464,9 @@ class LevelDB:
|
||||||
block_txs[tx_height] = list(tx_iterator(
|
block_txs[tx_height] = list(tx_iterator(
|
||||||
start=TX_HASH_PREFIX + pack_be_uint64(tx_counts[tx_height - 1]),
|
start=TX_HASH_PREFIX + 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 + pack_be_uint64(tx_counts[tx_height]),
|
TX_HASH_PREFIX + pack_be_uint64(tx_counts[tx_height] + 1), include_key=False
|
||||||
include_key=False
|
|
||||||
))
|
))
|
||||||
tx_pos = tx_counts[tx_height] - tx_num
|
tx_pos = tx_num - tx_counts[tx_height - 1]
|
||||||
branch, root = branch_and_root(block_txs[tx_height], tx_pos)
|
branch, root = branch_and_root(block_txs[tx_height], tx_pos)
|
||||||
merkle = {
|
merkle = {
|
||||||
'block_height': tx_height,
|
'block_height': tx_height,
|
||||||
|
|
|
@ -9,17 +9,32 @@ class BlockchainReorganizationTests(CommandTestCase):
|
||||||
VERBOSITY = logging.WARN
|
VERBOSITY = logging.WARN
|
||||||
|
|
||||||
async def assertBlockHash(self, height):
|
async def assertBlockHash(self, height):
|
||||||
self.assertEqual(
|
bp = self.conductor.spv_node.server.bp
|
||||||
(await self.ledger.headers.hash(height)).decode(),
|
|
||||||
await self.blockchain.get_block_hash(height)
|
def get_txids():
|
||||||
)
|
return [
|
||||||
|
bp.db.fs_tx_hash(tx_num)[0][::-1].hex()
|
||||||
|
for tx_num in range(bp.db.tx_counts[height - 1], bp.db.tx_counts[height])
|
||||||
|
]
|
||||||
|
|
||||||
|
block_hash = await self.blockchain.get_block_hash(height)
|
||||||
|
|
||||||
|
self.assertEqual(block_hash, (await self.ledger.headers.hash(height)).decode())
|
||||||
|
self.assertEqual(block_hash, (await bp.db.fs_block_hashes(height, 1))[0][::-1].hex())
|
||||||
|
|
||||||
|
txids = await asyncio.get_event_loop().run_in_executor(bp.db.executor, get_txids)
|
||||||
|
txs = await bp.db.fs_transactions(txids)
|
||||||
|
block_txs = (await bp.daemon.deserialised_block(block_hash))['tx']
|
||||||
|
self.assertSetEqual(set(block_txs), set(txs.keys()), msg='leveldb/lbrycrd is missing transactions')
|
||||||
|
self.assertListEqual(block_txs, list(txs.keys()), msg='leveldb/lbrycrd transactions are of order')
|
||||||
|
|
||||||
async def test_reorg(self):
|
async def test_reorg(self):
|
||||||
bp = self.conductor.spv_node.server.bp
|
bp = self.conductor.spv_node.server.bp
|
||||||
bp.reorg_count_metric.set(0)
|
bp.reorg_count_metric.set(0)
|
||||||
# invalidate current block, move forward 2
|
# invalidate current block, move forward 2
|
||||||
self.assertEqual(self.ledger.headers.height, 206)
|
height = 206
|
||||||
await self.assertBlockHash(206)
|
self.assertEqual(self.ledger.headers.height, height)
|
||||||
|
await self.assertBlockHash(height)
|
||||||
await self.blockchain.invalidate_block((await self.ledger.headers.hash(206)).decode())
|
await self.blockchain.invalidate_block((await self.ledger.headers.hash(206)).decode())
|
||||||
await self.blockchain.generate(2)
|
await self.blockchain.generate(2)
|
||||||
await self.ledger.on_header.where(lambda e: e.height == 207)
|
await self.ledger.on_header.where(lambda e: e.height == 207)
|
||||||
|
@ -37,6 +52,11 @@ class BlockchainReorganizationTests(CommandTestCase):
|
||||||
await self.assertBlockHash(207)
|
await self.assertBlockHash(207)
|
||||||
await self.assertBlockHash(208)
|
await self.assertBlockHash(208)
|
||||||
self.assertEqual(2, bp.reorg_count_metric._samples()[0][2])
|
self.assertEqual(2, bp.reorg_count_metric._samples()[0][2])
|
||||||
|
await self.blockchain.generate(3)
|
||||||
|
await self.ledger.on_header.where(lambda e: e.height == 211)
|
||||||
|
await self.assertBlockHash(209)
|
||||||
|
await self.assertBlockHash(210)
|
||||||
|
await self.assertBlockHash(211)
|
||||||
|
|
||||||
async def test_reorg_change_claim_height(self):
|
async def test_reorg_change_claim_height(self):
|
||||||
# sanity check
|
# sanity check
|
||||||
|
@ -51,6 +71,8 @@ class BlockchainReorganizationTests(CommandTestCase):
|
||||||
|
|
||||||
# create a claim and verify it's returned by claim_search
|
# create a claim and verify it's returned by claim_search
|
||||||
self.assertEqual(self.ledger.headers.height, 207)
|
self.assertEqual(self.ledger.headers.height, 207)
|
||||||
|
await self.assertBlockHash(207)
|
||||||
|
|
||||||
broadcast_tx = await self.daemon.jsonrpc_stream_create(
|
broadcast_tx = await self.daemon.jsonrpc_stream_create(
|
||||||
'hovercraft', '1.0', file_path=self.create_upload_file(data=b'hi!')
|
'hovercraft', '1.0', file_path=self.create_upload_file(data=b'hi!')
|
||||||
)
|
)
|
||||||
|
@ -58,6 +80,8 @@ class BlockchainReorganizationTests(CommandTestCase):
|
||||||
await self.generate(1)
|
await self.generate(1)
|
||||||
await self.ledger.wait(broadcast_tx, self.blockchain.block_expected)
|
await self.ledger.wait(broadcast_tx, self.blockchain.block_expected)
|
||||||
self.assertEqual(self.ledger.headers.height, 208)
|
self.assertEqual(self.ledger.headers.height, 208)
|
||||||
|
await self.assertBlockHash(208)
|
||||||
|
|
||||||
txos, _, _, _ = await self.ledger.claim_search([], name='hovercraft')
|
txos, _, _, _ = await self.ledger.claim_search([], name='hovercraft')
|
||||||
self.assertEqual(1, len(txos))
|
self.assertEqual(1, len(txos))
|
||||||
txo = txos[0]
|
txo = txos[0]
|
||||||
|
|
Loading…
Add table
Reference in a new issue