From 69b4cba2cf06c978662b8d91169bc1d53642b9e0 Mon Sep 17 00:00:00 2001 From: Carlos Rodriguez Date: Tue, 16 Jul 2024 16:20:58 +0200 Subject: [PATCH] docs: update transfer docs with support for path forwarding (#6813) * docs: path forwarding * create ICS20 v1 folder for pre-v9 transfer docs * clean up * clarification * nil forwarding hops * fix link * lint + added info about v2 channels * lint: new line * Apply suggestions from code review Co-authored-by: DimitrisJim * update images --------- Co-authored-by: DimitrisJim --- docs/docs/01-ibc/01-overview.md | 1 - docs/docs/02-apps/01-transfer/01-overview.md | 43 ++++++ docs/docs/02-apps/01-transfer/04-messages.md | 24 ++- docs/docs/02-apps/01-transfer/05-events.md | 70 +++++---- .../02-apps/01-transfer/08-authorizations.md | 14 +- docs/docs/02-apps/01-transfer/09-client.md | 28 ++++ .../01-transfer/10-ICS20-v1/01-overview.md | 142 ++++++++++++++++++ .../01-transfer/10-ICS20-v1/02-state.md | 17 +++ .../10-ICS20-v1/03-state-transitions.md | 41 +++++ .../01-transfer/10-ICS20-v1/04-messages.md | 63 ++++++++ .../01-transfer/10-ICS20-v1/05-events.md | 61 ++++++++ .../01-transfer/10-ICS20-v1/06-metrics.md | 21 +++ .../01-transfer/10-ICS20-v1/07-params.md | 97 ++++++++++++ .../10-ICS20-v1/08-authorizations.md | 60 ++++++++ .../01-transfer/10-ICS20-v1/09-client.md | 98 ++++++++++++ .../01-transfer/10-ICS20-v1/_category_.json | 5 + .../images/forwarding-3-chains-dark.png | Bin 0 -> 65220 bytes .../images/forwarding-3-chains-light.png | Bin 0 -> 53492 bytes 18 files changed, 747 insertions(+), 38 deletions(-) create mode 100644 docs/docs/02-apps/01-transfer/10-ICS20-v1/01-overview.md create mode 100644 docs/docs/02-apps/01-transfer/10-ICS20-v1/02-state.md create mode 100644 docs/docs/02-apps/01-transfer/10-ICS20-v1/03-state-transitions.md create mode 100644 docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md create mode 100644 docs/docs/02-apps/01-transfer/10-ICS20-v1/05-events.md create mode 100644 docs/docs/02-apps/01-transfer/10-ICS20-v1/06-metrics.md create mode 100644 docs/docs/02-apps/01-transfer/10-ICS20-v1/07-params.md create mode 100644 docs/docs/02-apps/01-transfer/10-ICS20-v1/08-authorizations.md create mode 100644 docs/docs/02-apps/01-transfer/10-ICS20-v1/09-client.md create mode 100644 docs/docs/02-apps/01-transfer/10-ICS20-v1/_category_.json create mode 100644 docs/docs/02-apps/01-transfer/images/forwarding-3-chains-dark.png create mode 100644 docs/docs/02-apps/01-transfer/images/forwarding-3-chains-light.png diff --git a/docs/docs/01-ibc/01-overview.md b/docs/docs/01-ibc/01-overview.md index 8306fcaef8a..3342ec6a581 100644 --- a/docs/docs/01-ibc/01-overview.md +++ b/docs/docs/01-ibc/01-overview.md @@ -5,7 +5,6 @@ sidebar_position: 1 slug: /ibc/overview --- - # Overview :::note Synopsis diff --git a/docs/docs/02-apps/01-transfer/01-overview.md b/docs/docs/02-apps/01-transfer/01-overview.md index 1e308eb3fdf..bcadb09af5f 100644 --- a/docs/docs/02-apps/01-transfer/01-overview.md +++ b/docs/docs/02-apps/01-transfer/01-overview.md @@ -112,6 +112,49 @@ chain #1 -> ... -> chain #(n-1) -> final chain`). These services could provide m The only viable alternative for clients (at the time of writing) to tokens with multiple connection hops, is to connect to all chains directly and perform relevant queries to each of them in the sequence. ::: +## Forwarding + +:::info +Token forwarding and unwinding is supported only on ICS20 v2 transfer channels. +::: + +Forwarding allows tokens to be routed to a final destination through multiple (up to 8) intermediary +chains. With forwarding, it's also possible to unwind IBC vouchers to their native chain, and forward +them afterwards to another destination, all with just a single transfer transaction on the sending chain. + +### Forward tokens + +Native tokens or IBC vouchers on any chain can be forwarded through intermediary chains to reach their +final destination. For example, given the topology below, with 3 chains and a transfer channel between +chains A and B and between chains B and C: + +![Light Mode Forwarding](./images/forwarding-3-chains-light.png#gh-light-mode-only)![Dark Mode Forwarding](./images/forwarding-3-chains-dark.png#gh-dark-mode-only) + +Native tokens on chain `A` can be sent to chain `C` through chain `B`. The routing is specified by the +source port ID and channel ID of choice on every intermediary chain. In this example, there is only one +forwarding hop on chain `B` and the port ID, channel ID pair is `transfer`, `channelBToC`. Forwarding of +a multi-denom collections of tokens is also allowed (i.e. forwarding of tokens of different denominations). + +### Unwind tokens + +Taking again as an example the topology from the previous section, we assume that native tokens on chain `A` +have been transfered to chain `C`. The IBC vouchers on chain `C` have the denomination trace +`transfer/channelCtoB/transfer/channelBtoA`, and with forwarding it is possible to submit a transfer message +on chain `C` and automatically unwind the vouchers through chain `B` to chain `A`, so that the tokens recovered +on the origin chain regain their native denomination. In order to execute automatic unwinding, the transfer +module does not require extra user input: the unwind route is encoded in the denomination trace with the +pairs of destination port ID, channel ID that are added on every chain where the tokens are received. + +Please note that unwinding of vouchers is only allowed when vouchers of a single IBC denomination are +transferred (i.e. it is not possible to unwind vouchers of two different IBC denominations, since they +come from different source chains). + +### Unwind tokens and then forward + +Unwinding and forwarding can be used in combination, so that vouchers are first unwound to their origin chain +and then forwarded to a final destination. The same restriction as in the unwinding case applies: only vouchers +of a single IBC denomination can be used. + ## Locked funds In some [exceptional cases](/architecture/adr-026-ibc-client-recovery-mechanisms#exceptional-cases), a client state associated with a given channel cannot be updated. This causes that funds from fungible tokens in that channel will be permanently locked and thus can no longer be transferred. diff --git a/docs/docs/02-apps/01-transfer/04-messages.md b/docs/docs/02-apps/01-transfer/04-messages.md index 43cdf32a3e2..e6523f0fddc 100644 --- a/docs/docs/02-apps/01-transfer/04-messages.md +++ b/docs/docs/02-apps/01-transfer/04-messages.md @@ -23,10 +23,25 @@ type MsgTransfer struct { TimeoutTimestamp uint64 Memo string Tokens []sdk.Coin + Forwarding *Forwarding +} + +type Forwarding struct { + Unwind bool + Hops []Hop +} + +type Hop struct { + PortId string + ChannelId string } ``` -This message is expected to fail if: +:::info +Multi-denom token transfers and token forwarding are features supported only on ICS20 v2 transfer channels. +::: + +If `Forwarding` is `nil`, this message is expected to fail if: - `SourcePort` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators). - `SourceChannel` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)). @@ -39,6 +54,11 @@ This message is expected to fail if: - `Memo` contains more than 32768 bytes. - `TimeoutHeight` and `TimeoutTimestamp` are both zero. +If `Forwarding` is not `nil`, then to use forwarding you must either set `Unwind` to true or provide a non-empty list of `Hops`. Setting both `Unwind` to true and providing a non-empty list of `Hops` is allowed, but the total number of hops that is formed as a combination of the hops needed to unwind the tokens and the hops to forward them afterwards to the final destination must not exceed 8. When using forwarding, timeout must be specified using only `TimeoutTimestamp` (i.e. `TimeoutHeight` must be zero). Please note that the timeout timestamp must take into account the time that it may take tokens to be forwarded through the intermediary chains. Additionally, please note that the `MsgTransfer` will fail if: + +- `Hops` is not empty, and the number of elements of `Hops` is greater than 8, or either the `PortId` or `ChannelId` of any of the `Hops` is not a valid identifier. +- `Unwind` is true, and either the number of elements in `Tokens` is greater than 1, or `SourcePort` and `SourceChannel` are not empty strings (they must be empty because they are set by the transfer module, since it has access to the denomination trace information and is thus able to know the source port ID, channel ID to use in order to unwind the tokens). If `Unwind` is true, the transfer module expects the tokens in `MsgTransfer` to not be native to the sending chain (i.e. they must be IBC vouchers). + Please note that the `Token` field is deprecated and users should now use `Tokens` instead. If `Token` is used then `Tokens` must be empty. Similarly, if `Tokens` is used then `Token` should be left empty. This message will send a fungible token to the counterparty chain represented by the counterparty Channel End connected to the Channel End with the identifiers `SourcePort` and `SourceChannel`. @@ -61,3 +81,5 @@ For example, the following memo field is used by the [callbacks middleware](../. ``` You can find more information about other applications that use the memo field in the [chain registry](https://github.com/cosmos/chain-registry/blob/master/_memo_keys/ICS20_memo_keys.json). + +Please note that the memo field is always meant to be consumed only on the final destination chain. This means that the transfer module will guarantee that the memo field in the intermediary chains is empty. diff --git a/docs/docs/02-apps/01-transfer/05-events.md b/docs/docs/02-apps/01-transfer/05-events.md index ebd936d1615..3c5cf3782ec 100644 --- a/docs/docs/02-apps/01-transfer/05-events.md +++ b/docs/docs/02-apps/01-transfer/05-events.md @@ -9,45 +9,49 @@ slug: /apps/transfer/events ## `MsgTransfer` -| Type | Attribute Key | Attribute Value | -|--------------|---------------|-----------------| -| ibc_transfer | sender | \{sender\} | -| ibc_transfer | receiver | \{receiver\} | -| ibc_transfer | tokens | \{jsonTokens\} | -| ibc_transfer | memo | \{memo\} | -| message | module | transfer | +| Type | Attribute Key | Attribute Value | +|--------------|-----------------|------------------------| +| ibc_transfer | sender | \{sender\} | +| ibc_transfer | receiver | \{receiver\} | +| ibc_transfer | tokens | \{jsonTokens\} | +| ibc_transfer | memo | \{memo\} | +| ibc_transfer | forwarding_hops | \{jsonForwardingHops\} | +| message | module | transfer | ## `OnRecvPacket` callback -| Type | Attribute Key | Attribute Value | -|-----------------------|---------------|------------------| -| fungible_token_packet | sender | \{sender\} | -| fungible_token_packet | receiver | \{receiver\} | -| fungible_token_packet | tokens | \{jsonTokens\} | -| fungible_token_packet | memo | \{memo\} | -| fungible_token_packet | success | \{ackSuccess\} | -| fungible_token_packet | error | \{ackError\} | -| denomination | trace_hash | \{hex_hash\} | -| denomination | denom | \{jsonDenom\} | -| message | module | transfer | +| Type | Attribute Key | Attribute Value | +|-----------------------|-----------------|------------------------| +| fungible_token_packet | sender | \{sender\} | +| fungible_token_packet | receiver | \{receiver\} | +| fungible_token_packet | tokens | \{jsonTokens\} | +| fungible_token_packet | memo | \{memo\} | +| fungible_token_packet | forwarding_hops | \{jsonForwardingHops\} | +| fungible_token_packet | success | \{ackSuccess\} | +| fungible_token_packet | error | \{ackError\} | +| denomination | trace_hash | \{hex_hash\} | +| denomination | denom | \{jsonDenom\} | +| message | module | transfer | ## `OnAcknowledgePacket` callback -| Type | Attribute Key | Attribute Value | -|-----------------------|-----------------|------------------| -| fungible_token_packet | sender | \{sender\} | -| fungible_token_packet | receiver | \{receiver\} | -| fungible_token_packet | tokens | \{jsonTokens\} | -| fungible_token_packet | memo | \{memo\} | -| fungible_token_packet | acknowledgement | \{ack.String()\} | -| fungible_token_packet | success / error | \{ack.Response\} | -| message | module | transfer | +| Type | Attribute Key | Attribute Value | +|-----------------------|-----------------|------------------------| +| fungible_token_packet | sender | \{sender\} | +| fungible_token_packet | receiver | \{receiver\} | +| fungible_token_packet | tokens | \{jsonTokens\} | +| fungible_token_packet | memo | \{memo\} | +| fungible_token_packet | forwarding_hops | \{jsonForwardingHops\} | +| fungible_token_packet | acknowledgement | \{ack.String()\} | +| fungible_token_packet | success / error | \{ack.Response\} | +| message | module | transfer | ## `OnTimeoutPacket` callback -| Type | Attribute Key | Attribute Value | -|---------|-----------------|-----------------| -| timeout | refund_receiver | \{receiver\} | -| timeout | refund_tokens | \{jsonTokens\} | -| timeout | memo | \{memo\} | -| message | module | transfer | +| Type | Attribute Key | Attribute Value | +|---------|-----------------|------------------------| +| timeout | refund_receiver | \{receiver\} | +| timeout | refund_tokens | \{jsonTokens\} | +| timeout | memo | \{memo\} | +| timeout | forwarding_hops | \{jsonForwardingHops\} | +| message | module | transfer | diff --git a/docs/docs/02-apps/01-transfer/08-authorizations.md b/docs/docs/02-apps/01-transfer/08-authorizations.md index 575f3d7337b..d9e71fac46f 100644 --- a/docs/docs/02-apps/01-transfer/08-authorizations.md +++ b/docs/docs/02-apps/01-transfer/08-authorizations.md @@ -4,6 +4,7 @@ sidebar_label: Authorizations sidebar_position: 8 slug: /apps/transfer/authorizations --- + # `TransferAuthorization` `TransferAuthorization` implements the `Authorization` interface for `ibc.applications.transfer.v1.MsgTransfer`. It allows a granter to grant a grantee the privilege to submit `MsgTransfer` on its behalf. Please see the [Cosmos SDK docs](https://docs.cosmos.network/v0.47/modules/authz) for more details on granting privileges via the `x/authz` module. @@ -17,12 +18,10 @@ The granter may be able to specify the list of addresses that they allow to rece It takes: - a `SourcePort` and a `SourceChannel` which together comprise the unique transfer channel identifier over which authorized funds can be transferred. - - a `SpendLimit` that specifies the maximum amount of tokens the grantee can transfer. The `SpendLimit` is updated as the tokens are transferred, unless the sentinel value of the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1) is used for the amount, in which case the `SpendLimit` will not be updated (please be aware that using this sentinel value will grant the grantee the privilege to transfer **all** the tokens of a given denomination available at the granter's account). The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. This `SpendLimit` may also be updated to increase or decrease the limit as the granter wishes. - - an `AllowList` list that specifies the list of addresses that are allowed to receive funds. If this list is empty, then all addresses are allowed to receive funds from the `TransferAuthorization`. - - an `AllowedPacketData` list that specifies the list of memo strings that are allowed to be included in the memo field of the packet. If this list is empty, then only an empty memo is allowed (a `memo` field with non-empty content will be denied). If this list includes a single element equal to `"*"`, then any content in `memo` field will be allowed. +- an `AllowedForwarding` list that specifies the combinations of source port ID/channel ID pairs through which the tokens are allowed to be forwarded until final destination. Please note that granters are expected to specify the unwinding route of IBC vouchers if they wish to allow grantees to unwind the vouchers to their native chain (i.e. grantees cannot make use of the `Unwind` flag and must also set the source port ID, channel ID pairs required to unwind the vouchers in the forwarding `Hops` field). Setting a `TransferAuthorization` is expected to fail if: @@ -32,6 +31,7 @@ Setting a `TransferAuthorization` is expected to fail if: - the source channel ID is invalid - there are duplicate entries in the `AllowList` - the `memo` field is not allowed by `AllowedPacketData` +- the forwarding hops do not match any of the combinations specified in `AllowedForwarding` Below is the `TransferAuthorization` message: @@ -54,5 +54,13 @@ type Allocation struct { // allow list of memo strings, an empty list prohibits all memo strings; // a list only with "*" permits any memo string AllowedPacketData []string + // Optional list of allowed combinations of source port ID/channel ID pairs + // through which the tokens are allowed to be forwarded until final + // destination + AllowedForwarding []AllowedForwarding +} + +type AllowedForwarding struct { + Hops []Hop } ``` diff --git a/docs/docs/02-apps/01-transfer/09-client.md b/docs/docs/02-apps/01-transfer/09-client.md index 64ec2bd6ad1..c3799f2fbcf 100644 --- a/docs/docs/02-apps/01-transfer/09-client.md +++ b/docs/docs/02-apps/01-transfer/09-client.md @@ -19,6 +19,34 @@ The `query` commands allow users to query `transfer` state. simd query ibc-transfer --help ``` +#### Transactions + +The `tx` commands allow users to interact with the controller submodule. + +```shell +simd tx ibc-transfer --help +``` + +#### `transfer` + +The `transfer` command allows users to execute cross-chain token transfers from the source port ID and channel ID on the sending chain. + +```shell +simd tx ibc-transfer transfer [src-port] [src-channel] [receiver] [coins] [flags] +``` + +Multiple tokens can be transferred on the same transaction by specifying a comma-separated list +of amount and denomination (e.g. `100uatom,100uosmo`) in the `coins` option. + +The additional flags that can be used with the command are: + +- `--packet-timeout-height` to specify the timeout block height in the format `{revision}-{height}`. The default value is `0-0`, which effectively disables the timeout. Timeout height can only be absolute, therefore this option must be used in combination with `--absolute-timeouts` set to true. +- `--packet-timeout-timestamp` to specify the timeout timestamp in nanoseconds. The timeout can be either relative (fromthe current UTC time) or absolute. The default value is 10 minutes (and thus relative). The timeout is disabled when set to 0. +- `--absolute-timeouts` to interpret the timeout timestamp as an aboslute value (when set to true). The default value is false (and thus the timeout timeout is considered relative to current UTC time). +- `--memo` to specify the memo string to be sent along with the transfer packet. If forwarding is used, then the memo string will be carried through the intermediary chains to the final destination. +- `--forwarding` to specify forwarding information in the form of a comma separated list of source port ID/channel ID pairs at each intermediary chain (e.g. `transfer/channel-0,transfer/channel-1`). +- `--unwind` to specify if the tokens must be automatically unwound to there origin chain. This option can be used in combination with `--forwarding` to forward the tokens to the final destination after unwinding. When this flag is true, the `coins` option must specify a single coin. + #### `total-escrow` The `total-escrow` command allows users to query the total amount in escrow for a particular coin denomination regardless of the transfer channel from where the coins were sent out. diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/01-overview.md b/docs/docs/02-apps/01-transfer/10-ICS20-v1/01-overview.md new file mode 100644 index 00000000000..fa98a8683bf --- /dev/null +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/01-overview.md @@ -0,0 +1,142 @@ +--- +title: Overview +sidebar_label: Overview +sidebar_position: 1 +slug: /apps/transfer/ics20-v1/overview +--- + +:::warning +This document is relevant only for fungible token transfers over channels on v1 of the ICS-20 protocol. +::: + +# Overview + +:::note Synopsis +Learn about what the token Transfer module is +::: + +## What is the Transfer module? + +Transfer is the Cosmos SDK implementation of the [ICS-20](https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer) protocol, which enables cross-chain fungible token transfers. + +## Concepts + +### Acknowledgements + +ICS20 uses the recommended acknowledgement format as specified by [ICS 04](https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope). + +A successful receive of a transfer packet will result in a Result Acknowledgement being written +with the value `[]byte{byte(1)}` in the `Response` field. + +An unsuccessful receive of a transfer packet will result in an Error Acknowledgement being written +with the error message in the `Response` field. + +### Denomination trace + +The denomination trace corresponds to the information that allows a token to be traced back to its +origin chain. It contains a sequence of port and channel identifiers ordered from the most recent to +the oldest in the timeline of transfers. + +This information is included on the token's base denomination field in the form of a hash to prevent an +unbounded denomination length. For example, the token `transfer/channelToA/uatom` will be displayed +as `ibc/7F1D3FCF4AE79E1554D670D1AD949A9BA4E4A3C76C63093E17E446A46061A7A2`. The human readable denomination +is stored using `x/bank` module's [denom metadata](https://docs.cosmos.network/main/build/modules/bank#denom-metadata) +feature. You may display the human readable denominations by querying balances with the `--resolve-denom` flag, as in: + +```shell +simd query bank balances [address] --resolve-denom +``` + +Each send to any chain other than the one it was previously received from is a movement forwards in +the token's timeline. This causes trace to be added to the token's history and the destination port +and destination channel to be prefixed to the denomination. In these instances the sender chain is +acting as the "source zone". When the token is sent back to the chain it previously received from, the +prefix is removed. This is a backwards movement in the token's timeline and the sender chain is +acting as the "sink zone". + +It is strongly recommended to read the full details of [ADR 001: Coin Source Tracing](/architecture/adr-001-coin-source-tracing) to understand the implications and context of the IBC token representations. + +## UX suggestions for clients + +For clients (wallets, exchanges, applications, block explorers, etc) that want to display the source of the token, it is recommended to use the following alternatives for each of the cases below: + +### Direct connection + +If the denomination trace contains a single identifier prefix pair (as in the example above), then +the easiest way to retrieve the chain and light client identifier is to map the trace information +directly. In summary, this requires querying the channel from the denomination trace identifiers, +and then the counterparty client state using the counterparty port and channel identifiers from the +retrieved channel. + +A general pseudo algorithm would look like the following: + +1. Query the full denomination trace. +2. Query the channel with the `portID/channelID` pair, which corresponds to the first destination of the + token. +3. Query the client state using the identifiers pair. Note that this query will return a `"Not +Found"` response if the current chain is not connected to this channel. +4. Retrieve the client identifier or chain identifier from the client state (eg: on + Tendermint clients) and store it locally. + +Using the gRPC gateway client service the steps above would be, with a given IBC token `ibc/7F1D3FCF4AE79E1554D670D1AD949A9BA4E4A3C76C63093E17E446A46061A7A2` stored on `chainB`: + +1. `GET /ibc/apps/transfer/v1/denom_traces/7F1D3FCF4AE79E1554D670D1AD949A9BA4E4A3C76C63093E17E446A46061A7A2` -> `{"path": "transfer/channelToA", "base_denom": "uatom"}` +2. `GET /ibc/apps/transfer/v1/channels/channelToA/ports/transfer/client_state"` -> `{"client_id": "clientA", "chain-id": "chainA", ...}` +3. `GET /ibc/apps/transfer/v1/channels/channelToA/ports/transfer"` -> `{"channel_id": "channelToA", port_id": "transfer", counterparty: {"channel_id": "channelToB", port_id": "transfer"}, ...}` +4. `GET /ibc/apps/transfer/v1/channels/channelToB/ports/transfer/client_state" -> {"client_id": "clientB", "chain-id": "chainB", ...}` + +Then, the token transfer chain path for the `uatom` denomination would be: `chainA` -> `chainB`. + +### Multiple hops + +The multiple channel hops case applies when the token has passed through multiple chains between the original source and final destination chains. + +The IBC protocol doesn't know the topology of the overall network (i.e connections between chains and identifier names between them). For this reason, in the multiple hops case, a particular chain in the timeline of the individual transfers can't query the chain and client identifiers of the other chains. + +Take for example the following sequence of transfers `A -> B -> C` for an IBC token, with a final prefix path (trace info) of `transfer/channelChainC/transfer/channelChainB`. What the paragraph above means is that even in the case that chain `C` is directly connected to chain `A`, querying the port and channel identifiers that chain `B` uses to connect to chain `A` (eg: `transfer/channelChainA`) can be completely different from the one that chain `C` uses to connect to chain `A` (eg: `transfer/channelToChainA`). + +Thus the proposed solution for clients that the IBC team recommends are the following: + +- **Connect to all chains**: Connecting to all the chains in the timeline would allow clients to + perform the queries outlined in the [direct connection](#direct-connection) section to each + relevant chain. By repeatedly following the port and channel denomination trace transfer timeline, + clients should always be able to find all the relevant identifiers. This comes at the tradeoff + that the client must connect to nodes on each of the chains in order to perform the queries. +- **Relayer as a Service (RaaS)**: A longer term solution is to use/create a relayer service that + could map the denomination trace to the chain path timeline for each token (i.e `origin chain -> +chain #1 -> ... -> chain #(n-1) -> final chain`). These services could provide merkle proofs in + order to allow clients to optionally verify the path timeline correctness for themselves by + running light clients. If the proofs are not verified, they should be considered as trusted third + parties services. Additionally, client would be advised in the future to use RaaS that support the + largest number of connections between chains in the ecosystem. Unfortunately, none of the existing + public relayers (in [Golang](https://github.com/cosmos/relayer) and + [Rust](https://github.com/informalsystems/ibc-rs)), provide this service to clients. + +:::tip +The only viable alternative for clients (at the time of writing) to tokens with multiple connection hops, is to connect to all chains directly and perform relevant queries to each of them in the sequence. +::: + +## Locked funds + +In some [exceptional cases](/architecture/adr-026-ibc-client-recovery-mechanisms#exceptional-cases), a client state associated with a given channel cannot be updated. This causes that funds from fungible tokens in that channel will be permanently locked and thus can no longer be transferred. + +To mitigate this, a client update governance proposal can be submitted to update the frozen client +with a new valid header. Once the proposal passes the client state will be unfrozen and the funds +from the associated channels will then be unlocked. This mechanism only applies to clients that +allow updates via governance, such as Tendermint clients. + +In addition to this, it's important to mention that a token must be sent back along the exact route +that it took originally in order to return it to its original form on the source chain (eg: the +Cosmos Hub for the `uatom`). Sending a token back to the same chain across a different channel will +**not** move the token back across its timeline. If a channel in the chain history closes before the +token can be sent back across that channel, then the token will not be returnable to its original +form. + +## Security considerations + +For safety, no other module must be capable of minting tokens with the `ibc/` prefix. The IBC +transfer module needs a subset of the denomination space that only it can create tokens in. + +## Channel Closure + +The IBC transfer module does not support channel closure. diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/02-state.md b/docs/docs/02-apps/01-transfer/10-ICS20-v1/02-state.md new file mode 100644 index 00000000000..1d8207b58ef --- /dev/null +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/02-state.md @@ -0,0 +1,17 @@ +--- +title: State +sidebar_label: State +sidebar_position: 2 +slug: /apps/transfer/ics20-v1/state +--- + +:::warning +This document is relevant only for fungible token transfers over channels on v1 of the ICS-20 protocol. +::: + +# State + +The IBC transfer application module keeps state of the port to which the module is binded and the denomination trace information as outlined in [ADR 001](/architecture/adr-001-coin-source-tracing). + +- `Port`: `0x01 -> ProtocolBuffer(string)` +- `DenomTrace`: `0x02 | []bytes(traceHash) -> ProtocolBuffer(DenomTrace)` diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/03-state-transitions.md b/docs/docs/02-apps/01-transfer/10-ICS20-v1/03-state-transitions.md new file mode 100644 index 00000000000..6e31bd5c298 --- /dev/null +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/03-state-transitions.md @@ -0,0 +1,41 @@ +--- +title: State Transitions +sidebar_label: State Transitions +sidebar_position: 3 +slug: /apps/transfer/ics20-v1/state-transitions +--- + +:::warning +This document is relevant only for fungible token transfers over channels on v1 of the ICS-20 protocol. +::: + +# State transitions + +## Send fungible tokens + +A successful fungible token send has two state transitions depending if the transfer is a movement forward or backwards in the token's timeline: + +1. Sender chain is the source chain, *i.e* a transfer to any chain other than the one it was previously received from is a movement forwards in the token's timeline. This results in the following state transitions: + + - The coins are transferred to an escrow address (i.e locked) on the sender chain. + - The coins are transferred to the receiving chain through IBC TAO logic. + +2. Sender chain is the sink chain, *i.e* the token is sent back to the chain it previously received from. This is a backwards movement in the token's timeline. This results in the following state transitions: + + - The coins (vouchers) are burned on the sender chain. + - The coins are transferred to the receiving chain through IBC TAO logic. + +## Receive fungible tokens + +A successful fungible token receive has two state transitions depending if the transfer is a movement forward or backwards in the token's timeline: + +1. Receiver chain is the source chain. This is a backwards movement in the token's timeline. This results in the following state transitions: + + - The leftmost port and channel identifier pair is removed from the token denomination prefix. + - The tokens are unescrowed and sent to the receiving address. + +2. Receiver chain is the sink chain. This is a movement forwards in the token's timeline. This results in the following state transitions: + + - Token vouchers are minted by prefixing the destination port and channel identifiers to the trace information. + - The receiving chain stores the new trace information in the store (if not set already). + - The vouchers are sent to the receiving address. diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md b/docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md new file mode 100644 index 00000000000..703054ae1ec --- /dev/null +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/04-messages.md @@ -0,0 +1,63 @@ +--- +title: Messages +sidebar_label: Messages +sidebar_position: 4 +slug: /apps/transfer/ics20-v1/messages +--- + +:::warning +This document is relevant only for fungible token transfers over channels on v1 of the ICS-20 protocol. +::: + +# Messages + +## `MsgTransfer` + +A fungible token cross chain transfer is achieved by using the `MsgTransfer`: + +```go +type MsgTransfer struct { + SourcePort string + SourceChannel string + Token sdk.Coin + Sender string + Receiver string + TimeoutHeight ibcexported.Height + TimeoutTimestamp uint64 + Memo string +} +``` + +This message is expected to fail if: + +- `SourcePort` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators). +- `SourceChannel` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)). +- `Token` is invalid: + - `Amount` is not positive. + - `Denom` is not a valid IBC denomination as per [ADR 001 - Coin Source Tracing](/architecture/adr-001-coin-source-tracing). +- `Sender` is empty. +- `Receiver` is empty or contains more than 2048 bytes. +- `Memo` contains more than 32768 bytes. +- `TimeoutHeight` and `TimeoutTimestamp` are both zero. + +This message will send a fungible token to the counterparty chain represented by the counterparty Channel End connected to the Channel End with the identifiers `SourcePort` and `SourceChannel`. + +The denomination provided for transfer should correspond to the same denomination represented on this chain. The prefixes will be added as necessary upon by the receiving chain. + +### Memo + +The memo field was added to allow applications and users to attach metadata to transfer packets. The field is optional and may be left empty. When it is used to attach metadata for a particular middleware, the memo field should be represented as a json object where different middlewares use different json keys. + +For example, the following memo field is used by the [callbacks middleware](../../../04-middleware/02-callbacks/01-overview.md) to attach a source callback to a transfer packet: + +```jsonc +{ + "src_callback": { + "address": "callbackAddressString", + // optional + "gas_limit": "userDefinedGasLimitString", + } +} +``` + +You can find more information about other applications that use the memo field in the [chain registry](https://github.com/cosmos/chain-registry/blob/master/_memo_keys/ICS20_memo_keys.json). diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/05-events.md b/docs/docs/02-apps/01-transfer/10-ICS20-v1/05-events.md new file mode 100644 index 00000000000..cea5b596cf1 --- /dev/null +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/05-events.md @@ -0,0 +1,61 @@ +--- +title: Events +sidebar_label: Events +sidebar_position: 5 +slug: /apps/transfer/ics20-v1/events +--- + +:::warning +This document is relevant only for fungible token transfers over channels on v1 of the ICS-20 protocol. +::: + +# Events + +## `MsgTransfer` + +| Type | Attribute Key | Attribute Value | +|--------------|-----------------|-----------------| +| ibc_transfer | sender | \{sender\} | +| ibc_transfer | receiver | \{receiver\} | +| ibc_transfer | tokens | \{jsonTokens\} | +| ibc_transfer | memo | \{memo\} | +| ibc_transfer | forwarding_hops | `nil` | +| message | module | transfer | + +## `OnRecvPacket` callback + +| Type | Attribute Key | Attribute Value | +|-----------------------|-----------------|-----------------| +| fungible_token_packet | sender | \{sender\} | +| fungible_token_packet | receiver | \{receiver\} | +| fungible_token_packet | tokens | \{jsonTokens\} | +| fungible_token_packet | memo | \{memo\} | +| fungible_token_packet | forwarding_hops | `nil` | +| fungible_token_packet | success | \{ackSuccess\} | +| fungible_token_packet | error | \{ackError\} | +| denomination | trace_hash | \{hex_hash\} | +| denomination | denom | \{jsonDenom\} | +| message | module | transfer | + +## `OnAcknowledgePacket` callback + +| Type | Attribute Key | Attribute Value | +|-----------------------|-----------------|------------------| +| fungible_token_packet | sender | \{sender\} | +| fungible_token_packet | receiver | \{receiver\} | +| fungible_token_packet | tokens | \{jsonTokens\} | +| fungible_token_packet | memo | \{memo\} | +| fungible_token_packet | forwarding_hops | `nil` | +| fungible_token_packet | acknowledgement | \{ack.String()\} | +| fungible_token_packet | success / error | \{ack.Response\} | +| message | module | transfer | + +## `OnTimeoutPacket` callback + +| Type | Attribute Key | Attribute Value | +|---------|-----------------|-----------------| +| timeout | refund_receiver | \{receiver\} | +| timeout | refund_tokens | \{jsonTokens\} | +| timeout | memo | \{memo\} | +| timeout | forwarding_hops | `nil` | +| message | module | transfer | diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/06-metrics.md b/docs/docs/02-apps/01-transfer/10-ICS20-v1/06-metrics.md new file mode 100644 index 00000000000..f788429fd10 --- /dev/null +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/06-metrics.md @@ -0,0 +1,21 @@ +--- +title: Metrics +sidebar_label: Metrics +sidebar_position: 6 +slug: /apps/transfer/ics20-v1/metrics +--- + +:::warning +This document is relevant only for fungible token transfers over channels on v1 of the ICS-20 protocol. +::: + +# Metrics + +The IBC transfer application module exposes the following set of [metrics](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/advanced/09-telemetry.md). + +| Metric | Description | Unit | Type | +|:--------------------------------|:------------------------------------------------------------------------------------------|:----------------|:--------| +| `tx_msg_ibc_transfer` | The total amount of tokens transferred via IBC in a `MsgTransfer` (source or sink chain) | token | gauge | +| `ibc_transfer_packet_receive` | The total amount of tokens received in a `FungibleTokenPacketData` (source or sink chain) | token | gauge | +| `ibc_transfer_send` | Total number of IBC transfers sent from a chain (source or sink) | transfer | counter | +| `ibc_transfer_receive` | Total number of IBC transfers received to a chain (source or sink) | transfer | counter | diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/07-params.md b/docs/docs/02-apps/01-transfer/10-ICS20-v1/07-params.md new file mode 100644 index 00000000000..ca3b20a5acd --- /dev/null +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/07-params.md @@ -0,0 +1,97 @@ +--- +title: Params +sidebar_label: Params +sidebar_position: 7 +slug: /apps/transfer/ics20-v1/params +--- + +:::warning +This document is relevant only for fungible token transfers over channels on v1 of the ICS-20 protocol. +::: + +# Parameters + +The IBC transfer application module contains the following parameters: + +| Name | Type | Default Value | +| ---------------- | ---- | ------------- | +| `SendEnabled` | bool | `true` | +| `ReceiveEnabled` | bool | `true` | + +The IBC transfer module stores its parameters in its keeper with the prefix of `0x03`. + +## `SendEnabled` + +The `SendEnabled` parameter controls send cross-chain transfer capabilities for all fungible tokens. + +To prevent a single token from being transferred from the chain, set the `SendEnabled` parameter to `true` and then, depending on the Cosmos SDK version, do one of the following: + +- For Cosmos SDK v0.46.x or earlier, set the bank module's [`SendEnabled` parameter](https://github.com/cosmos/cosmos-sdk/blob/release/v0.46.x/x/bank/spec/05_params.md#sendenabled) for the denomination to `false`. +- For Cosmos SDK versions above v0.46.x, set the bank module's `SendEnabled` entry for the denomination to `false` using `MsgSetSendEnabled` as a governance proposal. + +:::warning +Doing so will prevent the token from being transferred between any accounts in the blockchain. +::: + +## `ReceiveEnabled` + +The transfers enabled parameter controls receive cross-chain transfer capabilities for all fungible tokens. + +To prevent a single token from being transferred to the chain, set the `ReceiveEnabled` parameter to `true` and then, depending on the Cosmos SDK version, do one of the following: + +- For Cosmos SDK v0.46.x or earlier, set the bank module's [`SendEnabled` parameter](https://github.com/cosmos/cosmos-sdk/blob/release/v0.46.x/x/bank/spec/05_params.md#sendenabled) for the denomination to `false`. +- For Cosmos SDK versions above v0.46.x, set the bank module's `SendEnabled` entry for the denomination to `false` using `MsgSetSendEnabled` as a governance proposal. + +:::warning +Doing so will prevent the token from being transferred between any accounts in the blockchain. +::: + +## Queries + +Current parameter values can be queried via a query message. + + + +```protobuf +// proto/ibc/applications/transfer/v1/query.proto + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1; +} +``` + +To execute the query in `simd`, you use the following command: + +```bash +simd query ibc-transfer params +``` + +## Changing Parameters + +To change the parameter values, you must make a governance proposal that executes the `MsgUpdateParams` message. + + + +```protobuf +// proto/ibc/applications/transfer/v1/tx.proto + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + // signer address (it may be the address that controls the module, which defaults to x/gov unless overwritten). + string signer = 1; + + // params defines the transfer parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} +``` diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/08-authorizations.md b/docs/docs/02-apps/01-transfer/10-ICS20-v1/08-authorizations.md new file mode 100644 index 00000000000..6ba1de76ac4 --- /dev/null +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/08-authorizations.md @@ -0,0 +1,60 @@ +--- +title: Authorizations +sidebar_label: Authorizations +sidebar_position: 8 +slug: /apps/transfer/ics20-v1/authorizations +--- + +:::warning +This document is relevant only for fungible token transfers over channels on v1 of the ICS-20 protocol. +::: + +# `TransferAuthorization` + +`TransferAuthorization` implements the `Authorization` interface for `ibc.applications.transfer.v1.MsgTransfer`. It allows a granter to grant a grantee the privilege to submit `MsgTransfer` on its behalf. Please see the [Cosmos SDK docs](https://docs.cosmos.network/v0.47/modules/authz) for more details on granting privileges via the `x/authz` module. + +More specifically, the granter allows the grantee to transfer funds that belong to the granter over a specified channel. + +For the specified channel, the granter must be able to specify a spend limit of a specific denomination they wish to allow the grantee to be able to transfer. + +The granter may be able to specify the list of addresses that they allow to receive funds. If empty, then all addresses are allowed. + +It takes: + +- a `SourcePort` and a `SourceChannel` which together comprise the unique transfer channel identifier over which authorized funds can be transferred. +- a `SpendLimit` that specifies the maximum amount of tokens the grantee can transfer. The `SpendLimit` is updated as the tokens are transferred, unless the sentinel value of the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1) is used for the amount, in which case the `SpendLimit` will not be updated (please be aware that using this sentinel value will grant the grantee the privilege to transfer **all** the tokens of a given denomination available at the granter's account). The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. This `SpendLimit` may also be updated to increase or decrease the limit as the granter wishes. +- an `AllowList` list that specifies the list of addresses that are allowed to receive funds. If this list is empty, then all addresses are allowed to receive funds from the `TransferAuthorization`. +- an `AllowedPacketData` list that specifies the list of memo strings that are allowed to be included in the memo field of the packet. If this list is empty, then only an empty memo is allowed (a `memo` field with non-empty content will be denied). If this list includes a single element equal to `"*"`, then any content in `memo` field will be allowed. + +Setting a `TransferAuthorization` is expected to fail if: + +- the spend limit is nil +- the denomination of the spend limit is an invalid coin type +- the source port ID is invalid +- the source channel ID is invalid +- there are duplicate entries in the `AllowList` +- the `memo` field is not allowed by `AllowedPacketData` + +Below is the `TransferAuthorization` message: + +```go +func NewTransferAuthorization(allocations ...Allocation) *TransferAuthorization { + return &TransferAuthorization{ + Allocations: allocations, + } +} + +type Allocation struct { + // the port on which the packet will be sent + SourcePort string + // the channel by which the packet will be sent + SourceChannel string + // spend limitation on the channel + SpendLimit sdk.Coins + // allow list of receivers, an empty allow list permits any receiver address + AllowList []string + // allow list of memo strings, an empty list prohibits all memo strings; + // a list only with "*" permits any memo string + AllowedPacketData []string +} +``` diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/09-client.md b/docs/docs/02-apps/01-transfer/10-ICS20-v1/09-client.md new file mode 100644 index 00000000000..d55b8531271 --- /dev/null +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/09-client.md @@ -0,0 +1,98 @@ +--- +title: Client +sidebar_label: Client +sidebar_position: 9 +slug: /apps/transfer/ics20-v1/client +--- + +:::warning +This document is relevant only for fungible token transfers over channels on v1 of the ICS-20 protocol. +::: + +# Client + +## CLI + +A user can query and interact with the `transfer` module using the CLI. Use the `--help` flag to discover the available commands: + +### Query + +The `query` commands allow users to query `transfer` state. + +```shell +simd query ibc-transfer --help +``` + +#### Transactions + +The `tx` commands allow users to interact with the controller submodule. + +```shell +simd tx ibc-transfer --help +``` + +#### `transfer` + +The `transfer` command allows users to execute cross-chain token transfers from the source port ID and channel ID on the sending chain. + +```shell +simd tx ibc-transfer transfer [src-port] [src-channel] [receiver] [coins] [flags] +``` + +The `coins` parameter accepts the amount and denomination (e.g. `100uatom`) of the tokens to be transferred. + +The additional flags that can be used with the command are: + +- `--packet-timeout-height` to specify the timeout block height in the format `{revision}-{height}`. The default value is `0-0`, which effectively disables the timeout. Timeout height can only be absolute, therefore this option must be used in combination with `--absolute-timeouts` set to true. +- `--packet-timeout-timestamp` to specify the timeout timestamp in nanoseconds. The timeout can be either relative (fromthe current UTC time) or absolute. The default value is 10 minutes (and thus relative). The timeout is disabled when set to 0. +- `--absolute-timeouts` to interpret the timeout timestamp as an aboslute value (when set to true). The default value is false (and thus the timeout timeout is considered relative to current UTC time). +- `--memo` to specify the memo string to be sent along with the transfer packet. If forwarding is used, then the memo string will be carried through the intermediary chains to the final destination. + +#### `total-escrow` + +The `total-escrow` command allows users to query the total amount in escrow for a particular coin denomination regardless of the transfer channel from where the coins were sent out. + +```shell +simd query ibc-transfer total-escrow [denom] [flags] +``` + +Example: + +```shell +simd query ibc-transfer total-escrow samoleans +``` + +Example Output: + +```shell +amount: "100" +``` + +## gRPC + +A user can query the `transfer` module using gRPC endpoints. + +### `TotalEscrowForDenom` + +The `TotalEscrowForDenom` endpoint allows users to query the total amount in escrow for a particular coin denomination regardless of the transfer channel from where the coins were sent out. + +```shell +ibc.applications.transfer.v1.Query/TotalEscrowForDenom +``` + +Example: + +```shell +grpcurl -plaintext \ + -d '{"denom":"samoleans"}' \ + localhost:9090 \ + ibc.applications.transfer.v1.Query/TotalEscrowForDenom +``` + +Example output: + +```shell +{ + "amount": "100" +} +``` diff --git a/docs/docs/02-apps/01-transfer/10-ICS20-v1/_category_.json b/docs/docs/02-apps/01-transfer/10-ICS20-v1/_category_.json new file mode 100644 index 00000000000..3ea1fff9668 --- /dev/null +++ b/docs/docs/02-apps/01-transfer/10-ICS20-v1/_category_.json @@ -0,0 +1,5 @@ +{ + "label": "ICS20 v1", + "position": 10, + "link": null +} diff --git a/docs/docs/02-apps/01-transfer/images/forwarding-3-chains-dark.png b/docs/docs/02-apps/01-transfer/images/forwarding-3-chains-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3da5c63f6ec542a2f25e031d23d38c46e6bd7be0 GIT binary patch literal 65220 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 z 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 Iv@`Di1LHQ5o&W#< literal 0 HcmV?d00001