# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: ibc/core/commitment/v1/commitment.proto
# plugin: python-betterproto
# This file has been @generated

from dataclasses import dataclass
from typing import List

import betterproto

from ..... import ics23 as ____ics23__


@dataclass(eq=False, repr=False)
class MerkleRoot(betterproto.Message):
    """
    MerkleRoot defines a merkle root hash.
     In the Cosmos SDK, the AppHash of a block header becomes the root.
    """

    hash: bytes = betterproto.bytes_field(1)


@dataclass(eq=False, repr=False)
class MerklePrefix(betterproto.Message):
    """
    MerklePrefix is merkle path prefixed to the key.
     The constructed key from the Path and the key will be append(Path.KeyPath,
     append(Path.KeyPrefix, key...))
    """

    key_prefix: bytes = betterproto.bytes_field(1)


@dataclass(eq=False, repr=False)
class MerklePath(betterproto.Message):
    """
    MerklePath is the path used to verify commitment proofs, which can be an
     arbitrary structured object (defined by a commitment type).
     MerklePath is represented from root-to-leaf
    """

    key_path: List[str] = betterproto.string_field(1)


@dataclass(eq=False, repr=False)
class MerkleProof(betterproto.Message):
    """
    MerkleProof is a wrapper type over a chain of CommitmentProofs.
     It demonstrates membership or non-membership for an element or set of
     elements, verifiable in conjunction with a known commitment root. Proofs
     should be succinct.
     MerkleProofs are ordered from leaf-to-root
    """

    proofs: List["____ics23__.CommitmentProof"] = betterproto.message_field(1)
