Skip to content

Commit

Permalink
drop MerkleBlob.get_lineage_by_key_id() (#19238)
Browse files Browse the repository at this point in the history
  • Loading branch information
altendky authored Feb 8, 2025
2 parents 6a86a3d + aff2611 commit 0068102
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 22 deletions.
9 changes: 1 addition & 8 deletions chia/_tests/core/data_layer/test_merkle_blob.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from chia_rs.datalayer import KeyId, TreeIndex, ValueId

from chia._tests.util.misc import DataCase, Marks, datacases
from chia.data_layer.data_layer_util import InternalNode, Side, internal_hash
from chia.data_layer.data_layer_util import Side, internal_hash
from chia.data_layer.util.merkle_blob import (
InvalidIndexError,
KeyOrValueId,
Expand Down Expand Up @@ -216,13 +216,6 @@ def test_merkle_blob_two_leafs_loads() -> None:
]
assert merkle_blob.get_lineage_with_indexes(root.left) == expected

merkle_blob.calculate_lazy_hashes()
son_hash = bytes32(range(32))
root_hash = internal_hash(son_hash, son_hash)
expected_node = InternalNode(root_hash, son_hash, son_hash)
assert merkle_blob.get_lineage_by_key_id(KeyId(KeyOrValueId(int64(0x0405060708090A0B)))) == [expected_node]
assert merkle_blob.get_lineage_by_key_id(KeyId(KeyOrValueId(int64(0x1415161718191A1B)))) == [expected_node]


def generate_kvid(seed: int) -> tuple[KeyId, ValueId]:
kv_ids: list[KeyOrValueId] = []
Expand Down
15 changes: 14 additions & 1 deletion chia/data_layer/data_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import contextlib
import copy
import itertools
import logging
from collections import defaultdict
from collections.abc import AsyncIterator, Awaitable
Expand Down Expand Up @@ -860,7 +861,19 @@ async def get_ancestors(
merkle_blob = await self.get_merkle_blob(root_hash=root_hash)
reference_kid, _ = await self.get_node_by_hash(node_hash, store_id)

return merkle_blob.get_lineage_by_key_id(reference_kid)
reference_index = merkle_blob.key_to_index[reference_kid]
lineage = merkle_blob.get_lineage_with_indexes(reference_index)
result: list[InternalNode] = []
for index, node in itertools.islice(lineage, 1, None):
assert isinstance(node, RawInternalMerkleNode)
result.append(
InternalNode(
hash=node.hash,
left_hash=merkle_blob.get_hash_at_index(node.left),
right_hash=merkle_blob.get_hash_at_index(node.right),
)
)
return result

async def get_internal_nodes(self, store_id: bytes32, root_hash: Optional[bytes32] = None) -> list[InternalNode]:
async with self.db_wrapper.reader() as reader:
Expand Down
14 changes: 1 addition & 13 deletions chia/data_layer/util/merkle_blob.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from chia_rs.datalayer import KeyId, TreeIndex, ValueId

from chia.data_layer.data_layer_util import InternalNode, ProofOfInclusion, ProofOfInclusionLayer, Side, internal_hash
from chia.data_layer.data_layer_util import ProofOfInclusion, ProofOfInclusionLayer, Side, internal_hash
from chia.types.blockchain_format.sized_bytes import bytes32
from chia.util.hash import std_hash
from chia.util.ints import int64, uint8, uint32
Expand Down Expand Up @@ -232,18 +232,6 @@ def get_lineage_with_indexes(self, index: TreeIndex) -> list[tuple[TreeIndex, Ra
lineage.append((index, node))
return lineage

def get_lineage_by_key_id(self, key_id: KeyId) -> list[InternalNode]:
index = self.key_to_index[key_id]
lineage = self.get_lineage_with_indexes(index)
internal_nodes: list[InternalNode] = []
for _, node in lineage[1:]:
assert isinstance(node, RawInternalMerkleNode)
left_node = self.get_raw_node(node.left)
right_node = self.get_raw_node(node.right)
internal_nodes.append(InternalNode(bytes32(node.hash), bytes32(left_node.hash), bytes32(right_node.hash)))

return internal_nodes

def update_entry(
self,
index: TreeIndex,
Expand Down

0 comments on commit 0068102

Please sign in to comment.