cosmos-sdk/x/ibc/spec
Aditya 97df8b605c
Verify Client on Connection Handshake (#7057)
* verify client state

* add client state to msgs and retrieve in handler

* fix connection msgs

* fixed handshake tests

* fix tests

* fix sim tests

* revert pb edit

* add ValidateClient tests

* Apply suggestions from code review

Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>

* fix tests

* fixed msgs test

* use ibctesting for client state consts

* Apply suggestions from code review

Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>
Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>

* address rest of comments

* rename to ValidateSelfClient and update spec

* lint

* Update x/ibc/02-client/keeper/keeper_test.go

* Update x/ibc/02-client/keeper/keeper_test.go

* complete rest of review

* improve cov

Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com>
Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>
2020-08-20 22:05:41 +00:00
..
01_concepts.md x/ibc-transfer: ADR001 source tracing implementation (#6871) 2020-08-14 17:46:26 -04:00
02_state.md x/ibc: IBC alpha (#5277) 2020-04-08 20:57:52 -04:00
03_state_transitions.md Update IBC events docs and code (#6798) 2020-07-21 12:56:14 -04:00
04_messages.md Verify Client on Connection Handshake (#7057) 2020-08-20 22:05:41 +00:00
05_callbacks.md Proto Auditing: Replace ID with Id (#7032) 2020-08-14 08:55:54 +00:00
06_events.md ibc: TimeoutOnClose support (#7066) 2020-08-20 07:19:57 -04:00
README.md x/ibc-transfer: ADR001 source tracing implementation (#6871) 2020-08-14 17:46:26 -04:00

ibc

Abstract

This paper defines the implementation of the IBC protocol on the Cosmos SDK, the changes made to the specification and where to find each specific ICS spec within the module.

For the general specification please refer to the Interchain Standards.

Contents

  1. Concepts
  2. State
  3. State Transitions
  4. Messages
  5. Callbacks
  6. Events

Implementation Details

As stated above, the IBC implementation on the Cosmos SDK introduces some changes to the general specification, in order to avoid code duplication and to take advantage of the SDK architectural components such as the AnteHandler and transaction routing through Handlers.

Interchain Standards reference

The following list is a mapping from each Interchain Standard to their implementation in the SDK's x/ibc module:

Architecture Decision Records (ADR)

The following ADR provide the design and architecture decision of IBC-related components.

SDK Modules

IBC module architecture

NOTE for auditors: If you're not familiar with the overall module structure from the SDK modules, please check this document as prerequisite reading.

For ease of auditing, every Interchain Standard has been developed in its own package. The development team separated the IBC TAO (Transport, Authentication, Ordering) ICS specifications from the IBC application level specification. The following tree describes the architecture of the directories that the ibc (TAO) and ibc-transfer (ICS20) modules:

x/
├── ibc/
│  ├── 02-client/
│  ├── 03-connection/
│  ├── 04-channel/
│  ├── 05-port/
│  ├── 06-solo/
│  ├── 07-tendermint/
│  ├── 09-localhost/
│  ├── 23-commitment/
│  ├── 24-host/
│  ├── client
│  │   ├── cli
│  │   │   └── cli.go
│  │   └── rest
│  │       └── rest.go
│  ├── keeper
│  │   ├── keeper.go
│  │   └── querier.go
│  ├── types
│  │   ├── errors.go
│  │   └── keys.go
│  ├── handler.go
│  └── module.go
└── ibc-transfer/