Heliax
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Help
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # Interblockchain Communication Protocol (IBC): Summary This set of notes hopes to give a quick overview of the IBC [paper] (https://github.com/cosmos/ibc/raw/old/papers/2020-05/build/paper.pdf).*(in progress)* ## Introduction IBC provides a mechanism by which separate, sovereign replicated ledgers can safely, voluntarily interact with a minimum requisite common interface. Ledgers hosting IBC are required to provide functions for - consensus transcript verification - cryptographic commitment proof generation In fact, ledgers in IBC are defined as their light client consensus validation functions, thus broadening the scope of what a "ledger" could mean in the context of IBC. Modules on each ledger determine semantics of the packets which are sent between them, thus enabling data payloads in IBC packets to be opaque to the protocol. As a pertinent example for Het Paxos, packets could contain vote information where accounts **(?)** on one ledger vote in ballots of another. **TCP/IP for blockchains**: Just as TCP/IP defines the protocol which which two hosts may communicate, leaving the construction of complex topologies to higher protocols, IBC defines a protocol by which two ledgers communication while higher-level protocols may establish multiple bidirectional links between ledgers for multi-ledger applications. Furthering the analogy to TCP/IP, payload data is opaque to IBC packets and IBC allows one ledger to reason about the state of a module on another. ## Protocol scope and properties ### Scope The protocol is defined between modules on two ledgers, but is designed for safe simultaneous use between any number of modules on any number of ledgers in arbitrary topologies. ### Interfaces IBC provides modules a set of functions similar to those provided to interact with another module on the same ledger: opening and closing connections/channels, choosing connection/channel/packet delivery options, sending/receiving data packets on an established connection and channel and inspecting connection/channel status. It requires that the underlying ledgers enjoy finality properties and have cheaply-verifiable consensus transcripts (so as to be verifiable by a light client with much less computation or storage than a full node). For the network, IBC only stipulates eventual data delivery, no authentication, synchrony or ordering properties are assumed. ### Operation 1. Data relay: Messages are physically realayed from one ledger to another by monitoring "relayer processes", which monitor a set of ledgers implementing IBC scanning for state changes and requesting transaction execution on another ledger when outgoing packets are committed. 2. Data confidentiality and legibility: Only the minimum data for correct operation of IBC need be made available. **add table describing data** 3. Reliability: The protocol assigns a sequence number to each packet sent over an IBC channelwhich is checked by the IBC handler on the receiving ledger, and provides a method for the sending ledger to verify receipt of a packet. The sending ledger also cryptographically commits to the sent packets which the receiving ledger verifies. Datagrams altered in transit are consequently rejected. IBC also supports unordered channels. 4. Flow control: IBC *does not* provide specific protocol-level provisions for compute-level or economic-level flow control. It may however reject packets based on stipulations by higher-level protocols. 5. Authentication: The sending ledger must commit to its outgoing packet, which the receiving ledger verifies. 6. Statefulness: Points 3, 4 and 5 require that IBC initialize and maintain state information for each datastream, which is split between clients, connections and channels. A client object contains information about the consensus state of the counterparty ledger. A connection object contains a specific pair of named identifiers agreed upon by both ledgers, which uniquely identifies the connection between them. A channel object contains information concerning negotiated encoding and multiplexing options as well as state and sequence numbers (see point 3). These three objects are described in detail in the next section. 7. Multiplexing: IBC allows any number of channels to be associated with a single connection, with each channel having a uniquely identified data-stream over which packets may be sent. Channels may be one-to-many or many-to-one (in terms of modules), and the number of channels per connection is in principle unbounded. ## Host ledger requirements 1. Module system: Self-contained, potentially mutually distrusting packages of code should be able to be safely executed on the same ledger, and be identified and manipulated by a controller module/execution environment. 2. Key/value store interface: Values should be able to be read, written and deleted. 3. Consensus state introspection: Host ledgers must be able to determine their current height, consensus state and a bounded number of previous consensus states. 4. Timestamp access: To support timeouts, host ledgers should provide a current Unix-style timestamp. 5. Port system: The IBC handler should be able to allow different modules to bind to uniquely named ports. Ports are allocated on a FIFO basis and cannot be bound to more than one module at a time, but a module may bind to multiple ports. Reserved ports are also supported when the ledger is first started. 6. Exception/rollback: A transcation can abort execution and revert to a previous state, excluding gas and fees. 7. Host ledgers must be have eventual data-availability. ## Protocol Structure ### Clients The client encapsulates the properties that consensus algorithms of ledgers implementing IBC need to satisfy. A *validity predicate* is an algorithm used to verify the consensus transcript and state-subcomponents of another ledger. > validity predicate + state (assumed correct) = light client A light client is used to verify updates to the state of another ledger which the other ledger's consensus algo has agreed upon and reject any possible updates which the other ledger's consensus algo has not agreed upon. IBC is agnostic to internal operations of ledgers as well as their consensus algorithms. Light client verifications must have *finality* i.e. verified blocks cannot be reverted.

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully