import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; import { Message, proto3 } from "@bufbuild/protobuf"; /** * MerklePath is the path used to verify commitment proofs, which can be an * arbitrary structured object (defined by a commitment type). * ICS-23 verification supports membership proofs for nested merkle trees. * The ICS-24 standard provable keys MUST be stored in the lowest level tree with an optional prefix. * The IC24 provable tree may then be stored in a higher level tree(s) that hash up to the root hash * stored in the consensus state of the client. * Each element of the path represents the key of a merkle tree from the root to the leaf. * The elements of the path before the final element must be the path to the tree that contains * the ICS24 provable store. Thus, it should remain constant for all ICS24 proofs. * The final element of the path is the key of the leaf in the ICS24 provable store, * Thus IBC core will append the ICS24 path to the final element of the MerklePath * stored in the counterparty to create the full path to the leaf for proof verification. * Examples: * Cosmos SDK: * The Cosmos SDK commits to a multi-tree where each store is an IAVL tree and all store hashes * are hashed in a simple merkle tree to get the final root hash. Thus, the MerklePath in the counterparty * MerklePrefix has the following structure: ["ibc", ""] * The core IBC handler will append the ICS24 path to the final element of the MerklePath * like so: ["ibc", "{packetCommitmentPath}"] which will then be used for final verification. * Ethereum: * The Ethereum client commits to a single Patricia merkle trie. The ICS24 provable store is managed * by the smart contract state. Each smart contract has a specific prefix reserved within the global trie. * Thus the MerklePath in the counterparty is the prefix to the smart contract state in the global trie. * Since there is only one tree in the commitment structure of ethereum the MerklePath in the counterparty * MerklePrefix has the following structure: ["IBCCoreContractAddressStoragePrefix"] * The core IBC handler will append the ICS24 path to the final element of the MerklePath * like so: ["IBCCoreContractAddressStoragePrefix{packetCommitmentPath}"] which will then be used for final * verification. Thus the MerklePath in the counterparty MerklePrefix is the nested key path from the root hash of the * consensus state down to the ICS24 provable store. The IBC handler retrieves the counterparty key path to the ICS24 * provable store from the MerklePath and appends the ICS24 path to get the final key path to the value being verified * by the client against the root hash in the client's consensus state. * * @generated from message ibc.core.commitment.v2.MerklePath */ export declare class MerklePath extends Message { /** * @generated from field: repeated bytes key_path = 1; */ keyPath: Uint8Array[]; constructor(data?: PartialMessage); static readonly runtime: typeof proto3; static readonly typeName = "ibc.core.commitment.v2.MerklePath"; static readonly fields: FieldList; static fromBinary(bytes: Uint8Array, options?: Partial): MerklePath; static fromJson(jsonValue: JsonValue, options?: Partial): MerklePath; static fromJsonString(jsonString: string, options?: Partial): MerklePath; static equals(a: MerklePath | PlainMessage | undefined, b: MerklePath | PlainMessage | undefined): boolean; } //# sourceMappingURL=commitment_pb.d.ts.map