Interchain Accounts
Overview
The following repository contains a basic example of an Interchain Accounts authentication module and serves as a developer guide for teams that wish to use interchain accounts functionality.
The Interchain Accounts module is currently under active development and has been moved to the ibc-go
repository here. Interchain Accounts is aiming to release in Q1 2022.
This repository will be updated regularly to consume pre-release versions of ibc-go
equipped with the Interchain Accounts module.
Developer Documentation
Interchain Accounts developer docs can be found on the IBC documentation website.
https://ibc.cosmos.network/main/app-modules/interchain-accounts/overview.html
Setup
- Clone this repository and build the application binary
git clone https://github.com/cosmos/interchain-accounts.git
cd interchain-accounts
make install
- Download and install an IBC relayer. The following demo is supported by Hermes v0.9.0, and this is currently the recommended relayer.
cargo install --version 0.9.0 ibc-relayer-cli --bin hermes --locked
- Bootstrap two chains and create an IBC connection
make init
- Start the relayer
make start-rly
Demo
NOTE: For the purposes of this demo the setup scripts have been provided with a set of hardcoded mnemonics that generate deterministic wallet addresses used below.
export DEMOWALLET_1=$(icad keys show demowallet1 -a --keyring-backend test --home ./data/test-1) && echo $DEMOWALLET_1;
export DEMOWALLET_2=$(icad keys show demowallet2 -a --keyring-backend test --home ./data/test-2) && echo $DEMOWALLET_2;
Registering an Interchain Account via IBC
Register an Interchain Account using the intertx register
cmd.
Here the message signer is used as the account owner.
icad tx intertx register --from $DEMOWALLET_1 --connection-id connection-0 --chain-id test-1 --home ./data/test-1 --node tcp://localhost:16657 --keyring-backend test -y
icad query intertx interchainaccounts connection-0 $DEMOWALLET_1 --home ./data/test-1 --node tcp://localhost:16657
export ICA_ADDR=$(icad query intertx interchainaccounts connection-0 $DEMOWALLET_1 --home ./data/test-1 --node tcp://localhost:16657 -o json | jq -r '.interchain_account_address') && echo $ICA_ADDR
Funding the Interchain Account wallet
Allocate funds to the new Interchain Account wallet by using the bank send
cmd.
Note this is executed on the host chain to provide the account with an initial balance to execute transactions.
icad q bank balances $ICA_ADDR --chain-id test-2 --node tcp://localhost:26657
icad tx bank send $DEMOWALLET_2 $ICA_ADDR 10000stake --chain-id test-2 --home ./data/test-2 --node tcp://localhost:26657 --keyring-backend test -y
icad q bank balances $ICA_ADDR --chain-id test-2 --node tcp://localhost:26657
Sending Interchain Account transactions
Send Interchain Accounts transactions using the intertx submit
cmd.
This command accepts a generic sdk.Msg
JSON payload or path to JSON file as an arg.
- Example 1: Staking Delegation
cat ./data/test-2/config/genesis.json | jq -r '.app_state.genutil.gen_txs[0].body.messages[0].validator_address'
icad tx intertx submit \
'{
"@type":"/cosmos.staking.v1beta1.MsgDelegate",
"delegator_address":"cosmos15ccshhmp0gsx29qpqq6g4zmltnnvgmyu9ueuadh9y2nc5zj0szls5gtddz",
"validator_address":"cosmosvaloper1qnk2n4nlkpw9xfqntladh74w6ujtulwnmxnh3k",
"amount": {
"denom": "stake",
"amount": "1000"
}
}' --connection-id connection-0 --from $DEMOWALLET_1 --chain-id test-1 --home ./data/test-1 --node tcp://localhost:16657 --keyring-backend test -y
icad tx intertx submit [path/to/msg.json] --connection-id connection-0 --from $DEMOWALLET_1 --chain-id test-1 --home ./data/test-1 --node tcp://localhost:16657 --keyring-backend test -y
icad q staking delegations-to cosmosvaloper1qnk2n4nlkpw9xfqntladh74w6ujtulwnmxnh3k --home ./data/test-2 --node tcp://localhost:26657
icad tx intertx submit \
'{
"@type":"/cosmos.bank.v1beta1.MsgSend",
"from_address":"cosmos15ccshhmp0gsx29qpqq6g4zmltnnvgmyu9ueuadh9y2nc5zj0szls5gtddz",
"to_address":"cosmos10h9stc5v6ntgeygf5xf945njqq5h32r53uquvw",
"amount": [
{
"denom": "stake",
"amount": "1000"
}
]
}' --connection-id connection-0 --from $DEMOWALLET_1 --chain-id test-1 --home ./data/test-1 --node tcp://localhost:16657 --keyring-backend test -y
icad tx intertx submit [path/to/msg.json] --connection-id connection-0 --from $DEMOWALLET_1 --chain-id test-1 --home ./data/test-1 --node tcp://localhost:16657 --keyring-backend test -y
icad q bank balances $ICA_ADDR --chain-id test-2 --node tcp://localhost:26657
Collaboration
Please use conventional commits https://www.conventionalcommits.org/en/v1.0.0/
chore(bump): bumping version to 2.0
fix(bug): fixing issue with...
feat(featurex): adding feature...