Messages
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
:
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.SourceChannel
is invalid (see 24-host naming requirements).Token
is invalid:Amount
is not positive.Denom
is not a valid IBC denomination as per ADR 001 - Coin Source Tracing.
Sender
is empty.Receiver
is empty or contains more than 2048 bytes.Memo
contains more than 32768 bytes.TimeoutHeight
andTimeoutTimestamp
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.
If the Amount
is set to the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1), then the whole balance of the corresponding denomination will be transferred. The helper function UnboundedSpendLimit
in the types
package of the transfer
module provides the sentinel value that can be used.
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 to attach a source callback to a transfer packet:
{
"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.