GithubHelp home page GithubHelp logo

Comments (5)

cwgoes avatar cwgoes commented on August 23, 2024

Might be worth doing fairly soon just as an example for explaining protocol usage.

from ibc.

cwgoes avatar cwgoes commented on August 23, 2024

Packet will contain:

  • Denomination (string)
  • Amount (unsigned integer)

Some nontrivial logic to prefix denominations and reason about alternative source paths.

from ibc.

cwgoes avatar cwgoes commented on August 23, 2024

edit: When reading, replace root-of-trust hash with connection identifier in the following text.

Thoughts on permissionless denomination tracking across chains, for chains A and B:

  • Chain A bank module accepts new connections / channels from any module on another chain.
  • Denominations sent from chain B are prefixed with the hash of the root of trust and the name of the counterparty port of B, e.g. 0x1234/bank for the bank module on chain B with root-of-trust hash 0x1234. No supply limits are enforced, but the bank module on chain A tracks the amount of each denomination sent by chain B and keeps it in a store location which can be queried / proven.
  • Coins sent by chain A to chain B are prefixed in the same way when sent (0x4567/bank if the bank module is running on a hub with root-of-trust hash 0x4567). Outgoing supply is tracked in a store location which can be queried and proven. Chain B is allowed to send back coins prefixed with 0x4567/bank only up to the amount which has been sent to it.

This design has the following properties:

  • Permissionless, no need to whitelist connections, modules, or denominations.
  • Symmetric (just swap A and B - they both implement the same logic).
  • Allows inflationary tokens (e.g. for proof-of-stake) originating on one chain to be sent to the other.
  • Prevents Byzantine-inflation of tokens originating on chain A, on chain A, as a result of chain B's Byzantine behaviour (though any users who sent tokens to chain B are at risk).
  • User-unfriendly naming; will need to be managed via a UI or later nameservice module mapping prefixed denominations to common names ("Atom", "Ethereum").

This does not yet handle the "diamond problem", where a user sends a token originating on chain A to chain B, then to chain D, and wants to return it through D -> C -> A - since the supply is tracked as owned by chain B, chain C cannot serve as the intermediary. I don't know whether dealing with that case should be in-protocol or not - it may be fine to just require the original path of redemption (and if there is frequent liquidity on both paths it will work most of the time). Complexities arising from long redemption paths may lead to the emergence of central chains in the network topology (Hubs).

from ibc.

cwgoes avatar cwgoes commented on August 23, 2024

To-do:

  • Denomination mapping
  • Add more comments describing function behaviour
  • Ensure interfaces all match up
  • Ensure supply tracking works correctly, maintain explicit accounts per channel
  • Consider irregular connection alteration

from ibc.

cwgoes avatar cwgoes commented on August 23, 2024

This will happen in 1.0.0-rc3, not this evening.

edit: Never mind.

from ibc.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.