Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

drop MerkleBlob.get_lineage_by_key_id() #19238

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading