A cross-language specification and implementation for generic merkle proofs, primarily for IBC and blockchain interoperability.
ICS 23 is a specification and implementation for a generic merkle proof format designed for blockchain interoperability, particularly within the Cosmos IBC (Inter-Blockchain Communication) ecosystem. It provides a standardized way to create and verify proofs of existence and non-existence for key-value pairs in merkle trees, enabling secure cross-chain communication without requiring custom code for each data store.
Blockchain developers and teams working on Cosmos-based chains, IBC protocol implementers, and anyone building light clients or cross-chain applications that require verifiable merkle proofs.
ICS 23 offers a language-agnostic, binary proof format that works with multiple merkle tree implementations, reducing complexity and enhancing security. Its focus on configuration over custom code allows for easier integration and maintenance compared to ad-hoc proof systems.
Building generic merkle proof format for IBC
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Provides language-agnostic Protobuf specifications and validated implementations in Go and Rust, ensuring consistent proof formats across different blockchain clients and reducing integration friction.
Specifically designed for IBC packet proofs with compatibility for merkle stores like IAVL and CometBFT, making it a seamless choice for Cosmos-based chains and interoperability.
Allows adding new data sources via specification objects rather than custom code, as stated in the README, simplifying maintenance and reducing the risk of errors in proof validation.
Enforces proof structure to prevent key forgery by requiring keys in leaf nodes and avoiding complex formats that could lead to reinterpretation attacks, as highlighted in the limitations section.
Only supports lexicographically ordered stores; it explicitly does not work with popular tries like Ethereum's Patricia Trie, severely limiting its use outside specific blockchain ecosystems.
Lacks batch proofs, which are essential for efficiency in many applications, and the README admits this is a future feature, leaving a gap for current high-performance needs.
With the TypeScript implementation removed due to lack of maintenance, only Go and Rust are officially supported, forcing developers in other languages to build custom solutions or seek alternatives.