cosmos-sdk/docs/spec/ibc/README.md

2.6 KiB

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.

IBC requires two blockchains with cheaply verifiable rapid finality. 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 provable packets can be sent between the chains.

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 was first outlined in the Cosmos Whitepaper, and later described in more detail by the IBC specification paper. This documentation 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. Definitions
    2. Threat Models
  2. Proofs
    1. Establishing a Root of Trust
    2. Following Block Headers
  3. Messaging Queue
    1. Merkle Proofs for Queues
    2. Naming Queues
    3. Message Contents
    4. Sending a Packet
    5. Receipts
    6. Relay Process
  4. Optimizations
    1. Cleanup
    2. Timeout
    3. Handling Byzantine Failures
  5. Conclusion
  6. 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