cosmos-sdk/docs/spec/ibc
Christopher Goes 773c87e8c0
Add section on closing IBC connections
2018-04-19 16:51:27 +02:00
..
images Clean up optimization section 2018-04-17 16:28:33 +02:00
mvp Move specification.md to README.md, cleanup overview, separate MVP directory 2018-04-17 16:28:33 +02:00
protobuf Added protobuf specifications for ibc messages 2018-04-17 16:28:32 +02:00
README.md Add receipt definition 2018-04-18 14:35:20 +02:00
appendices.md Update layout & fix anchor links 2018-04-17 16:28:34 +02:00
channels-and-packets.md Add receipt definition 2018-04-18 14:35:20 +02:00
conclusion.md Fix a few links 2018-04-17 16:39:33 +02:00
connections.md Add section on closing IBC connections 2018-04-19 16:51:27 +02:00
optimizations.md Update layout & fix anchor links 2018-04-17 16:28:34 +02:00
overview.md Update layout & fix anchor links 2018-04-17 16:28:34 +02:00
references.md Add section on closing IBC connections 2018-04-19 16:51:27 +02:00

README.md

Cosmos Inter-Blockchain Communication (IBC) Protocol

Abstract

This paper specifies the Cosmos Inter-Blockchain Communication (IBC) protocol. The IBC protocol defines a set of semantics for authenticated, strictly-ordered message passing between two blockchains with independent consensus algorithms.

The core IBC protocol is payload-agnostic. On top of IBC, developers can implement the semantics of a particular application, enabling users to transfer valuable assets between different blockchains while preserving, under particular security assumptions of the underlying blockchains, the contractual guarantees of the asset in question - such as scarcity and fungibility for a currency or global uniqueness for a digital kitty-cat.

IBC requires two blockchains with cheaply verifiable rapid finality and Merkle tree substate proofs. The protocol makes no assumptions of block confirmation times or maximum network latency of packet transmissions, and the two consensus algorithms remain completely independent. Each chain maintains a local partial order and inter-chain message sequencing ensures cross-chain linearity. Once the two chains have registered a trust relationship, cryptographically verifiable packets can be sent between the chains.

IBC was first outlined in the Cosmos Whitepaper, and later described in more detail by the IBC specification paper. This document replaces and supersedes both. It explains the requirements and structure of the protocol and provides sufficient detail for both analysis and implementation, including example pseudocode.

Contents

  1. Overview
    1. Summary
    2. Definitions
    3. Threat Models
  2. Connections
    1. Definitions
    2. Requirements
    3. Connection lifecycle
      1. Opening a connection
      2. Following block headers
      3. Closing a connection
  3. Channels & Packets
    1. Background
    2. Definitions
      1. Packet
      2. Receipt
      3. Queue
      4. Channel
    3. Requirements
    4. Sending a packet
    5. Receiving a packet
    6. Packet relayer
  4. Optimizations
    1. Timeouts
    2. Cleanup
    3. Handling Byzantine failures
  5. Conclusion
  6. References
  7. Appendices
    1. Appendix A: Encoding Libraries
    2. Appendix B: IBC Queue Format
    3. Appendix C: Merkle Proof Format
    4. Appendix D: Universal IBC Packets
    5. Appendix E: Tendermint Header Proofs