Terra has full IBC transfer capability through both Feather.js and Station. Although IBC functionality is not readily exposed through Station’s front end, it can be incorporated into any dApp. It is up to a dApp’s front end to initiate IBC transfers.
Channels are defined when a relayer is set up between Terra and an external chain. For each new connected chain, the channel ID is incremented.
You can use the Map of Zones to find the available channels and their IDs.
Derive Cosmos chain addresses from a Terra address
Cosmos SDK-based blockchains use bech32 to encode the public key for display. Assuming the same private key is used on multiple Cosmos SDK chains, it is possible to decode a Terra address and generate the corresponding public key on another chain.
Here's a quick example using the bech32 JavaScript library:
The following example demonstrates how to send 1 LUNA from Terra to the Osmosis blockchain.
import{
LCDClient,
MnemonicKey,
MsgTransfer,
Coin,
}from'@terra-money/feather.js';
// const lcd = new LCDClient(...);
const mk =newMnemonicKey({
mnemonic:
'satisfy adjust timber high purchase tuition stool faith fine install that you unaware feed domain license impose boss human eager hat rent enjoy dawn',
});
const wallet = lcd.wallet(mk);
// Send 1 LUNA to the Osmosis blockchain.
const transfer =newMsgTransfer(
'transfer',
'channel-1',
newCoin('uluna','1000000'),
'terra1cvw8sundusurqajhurpcfk7yvuzlh92cvkpy28',
'osmo1cl4qw7u35uf77l4scjtv0qej8ycevu4mrdpvmg',
undefined,
(Date.now() +60*1000) *1e6,
'hello world',
);
const tx =await wallet.createAndSignTx({
msgs: [transfer],
chainID:'pisco-1',
});
const result =await lcd.tx.broadcast(tx,'pisco-1');
console.log(result);
Instructions for initializing LCDClient can be found in the common examples section.