Open AdityaSripal opened 10 months ago
The Cosmos SDK has evolved to enhance inter-blockchain communication with multi-hop verification capabilities. This update streamlines the verification process across multiple blockchain hops, allowing for more complex routing of data and ensuring the integrity of cross-chain interactions. The modifications uniformly apply multi-hop verification logic to connections, channels, and packet handling, simplifying the codebase and expanding the functionality of the IBC protocol.
File Path | Change Summary |
---|---|
.../03-connection/keeper/multihop.go |
Introduced multi-hop membership and non-membership proof functionality. |
.../03-connection/keeper/verify.go |
Updated verification functions to handle multi-hop scenarios using connectionHops . |
.../04-channel/keeper/handshake.go |
Added commitmenttypes import and modified channel handling logic for multi-hop proofs. |
.../04-channel/keeper/packet.go |
Unified packet commitment verification logic for single and multi-hop scenarios. |
.../04-channel/keeper/timeout.go |
Consolidated timeout verification logic for packet sequences and receipts for all scenarios. |
.../04-channel/types/expected_keepers.go |
Modified ConnectionKeeper interface to support multi-hop verification methods. |
"In the ledger's weave, where data hops and skips, 🐰 A rabbit conjures code with adept little flips. Through Cosmos it bounds, with proofs in its grip, Ensuring each blockchain can make its own trip."
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?
@coderabbitai review
If it helps, you can run all multi-hop tests like:
go test ./modules/core/04-channel/keeper -run TestMultihopTestSuite -v
The channel, packet, timeout single hop test cases were replicated for multi-hop (plus some extra cases).
See modules/core/04-channel/keeper --> multihop_*_test.go
Description
This is a POC of a better abstraction of multihop proofs in my opinion. It moves multihop concerns down to the 03-connection layer so verification is opaque from 04 point of view whether it is multihop proof or not.
It requires breaking the connection verify APIs but since this should only be called by other core libraries i think this is ok.
There are still 2 places where multihop is explicitly handled by 04-channel. It is used in ChanCloseFrozen which I think is fine, since this is an explicit handler for the multihop case. And it is needed in timeout packet since we need to get the timestamp of the counterparty consensus state through the multiple hops as part of 04-channel logic. Perhaps there's a cleaner way to abstract this.
closes: #XXXX
Commit Message / Changelog Entry
see the guidelines for commit messages. (view raw markdown for examples)
Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why.
docs/
) or specification (x/<module>/spec/
).godoc
comments.Files changed
in the Github PR explorer.Codecov Report
in the comment section below once CI passes.Summary by CodeRabbit
New Features
Enhancements
Refactor
ConnectionKeeper
interface to handle multi-hop connection paths.