informalsystems / informalsystems/hermes

Multihop PoC

Open
#3,940 0 comments 0 reactions 2 assignees Claimed by @joaotav View on GitHub
A: tracking I: logic O: multi-hop O: new-feature
Dominant language
Rust
Stars
505
Forks
399
PR merge metrics
No merged PRs in 30d

Description

## Summary

PoC implementation for multihop.

### IBC specification

- [ics-033](https://github.com/cosmos/ibc/tree/main/spec/core/ics-033-multi-hop)
- Might need updates with changes we make
- [ics-004](https://github.com/cosmos/ibc/blob/main/spec/core/ics-004-channel-and-packet-semantics/README.md)
- Search for `multihop` to understand on-chain handling
- [ics-003](https://github.com/cosmos/ibc/blob/main/spec/core/ics-003-connection-semantics/README.md)
- Search for `multihop` to understand on-chain handling

### ibc-go PoC implementation
- [Repository](https://github.com/polymerdao/ibc-go/tree/polymer/multihop-main)
- Includes new/changed protos (to include and use in some `ibc-proto-rs` branch)
- Might need to make changes (forked Dec 2023)

### Protos
- [x] Update `ibc-proto-rs` (@romac)
- https://github.com/cosmos/ibc-proto-rs/pull/206

### Channel CLIs

- [x] [`tx chan-open-init`](https://github.com/informalsystems/hermes/blob/master/crates/relayer-cli/src/commands/tx/channel.rs)
- [x] https://github.com/informalsystems/hermes/issues/3950
- [x] [`tx chan-open-try`](https://github.com/informalsystems/hermes/blob/master/crates/relayer-cli/src/commands/tx/channel.rs)
- [x] https://github.com/informalsystems/hermes/issues/3987
- [x] [`tx chan-open-ack`](https://github.com/informalsystems/hermes/blob/master/crates/relayer-cli/src/commands/tx/channel.rs)
- [x] https://github.com/informalsystems/hermes/issues/4049
- [x] [`tx chan-open-confirm`](https://github.com/informalsystems/hermes/blob/master/crates/relayer-cli/src/commands/tx/channel.rs)
- [x] https://github.com/informalsystems/hermes/issues/4055
- [x] [`create channel`](https://github.com/informalsystems/hermes/blob/master/crates/relayer-cli/src/commands/create/channel.rs)
- [x] https://github.com/informalsystems/hermes/issues/4062

### Hermes
- [ ] Add multihop support to packet relaying
- [ ] https://github.com/informalsystems/hermes/issues/4084

### Lesser priority

- [ ] Add multihop support to `tx chan-close-init`
- [ ] Add multihop support to `tx chan-close-confirm`
- [ ] Add multihop support to `tx ft-transfer`

---
### Task overview
- [x] Implement `MultihopProof`
- [x] Implement `GenerateMultihopProof`
- [ ] Should look at the spec and figure out the best approach for Hermes, write a multihop ADR
- e.g. `calcProofHeights` should actually be something like `updateClientsAndGetProofHeights`
- `queryIntermediateProofs` could be done in parallel with `updateClientsAndGetProofHeights`
- [ ] Add multihop proofs to:
- [x] chann_open_try
- [x] ack
- [x] confirm
- [ ] close
- [ ] close_confirm
- [ ] recv_packet
- [ ] acknowledgement
- [ ] timeout
- [ ] timeout_on_close,
- [ ] Implement `ChanCloseFrozen`
- [ ] Monitor spanned client states
- [ ] Trigger `ChanCloseFrozen` to both channel ends
- [ ] Events - need to adapt as some change to include multihop connections (e.g. `send_packet`, etc)
- [ ] Upgrade a channel from single-hop to multi-hop, perform all required checks when upgrading (ie. that the connections are open, etc.)
____

#### For Admin Use

- [ ] Not duplicate issue
- [ ] Appropriate labels applied
- [ ] Appropriate milestone (priority) applied
- [ ] Appropriate contributors tagged
- [ ] Contributor assigned/self-assigned

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.