XchainJS
  • Overview
  • Installation
  • Examples instructions
  • Clients
    • xchain-evm
      • xchain-avax
        • How to Use
      • xchain-arbitrum
        • How to Use
      • xchain-bsc
        • How to Use
      • xchain-ethereum
        • How to Use
    • xchain-utxo
      • xchain-bitcoin
        • How to use
      • xchain-bitcoincash
        • How to Use
      • xchain-dash
      • xchain-doge
        • How to Use
      • xchain-litecoin
        • How to Use
    • xchain-cosmos-sdk
      • xchain-cosmos
        • How to Use
      • xchain-kujira
        • How to Use
      • xchain-mayachain
        • How to Use
      • xchain-thorchain
        • How to Use
    • xchain-binance
      • How to Use
    • xchain-solana
      • How to use
      • Examples
        • Generate address
        • Get balances
        • Get token balance
        • Prepare transaction
        • Make transaction
        • Make token transaction
  • Wallet
  • Protocols
    • THORChain
      • xchain-thorchain-amm
        • How to Use
        • Make swap using THORChain
        • Handle liquidity and savers
        • Open and close loans
      • xchain-thorchain-query
        • How to Use
        • Check transaction status
        • Estimate a swap
      • xchain-midgard
        • How to Use
      • xchain-thornode
        • How to Use
      • xchain-midgard-query
        • How to Use
    • MAYAProtocol
      • xchain-mayachain-amm
        • How to Use
        • Make swap using MAYAChain
      • xchain-mayachain-query
        • How to Use
      • xchain-mayamidgard
        • How to Use
      • xchain-mayanode
        • How to Use
      • xchain-mayamidgard-query
        • How to Use
  • Aggregator
  • Providers
    • xchain-utxo-providers
      • How it Works
    • xchain-evm-providers
      • How it Works
  • Others
    • xchain-crypto
      • How it Works
      • How to Use
    • xchain-util
      • How it Works
      • How to Use
  • Contributors
  • Documentation maintenance
Powered by GitBook
On this page
  • Installation
  • Peer Dependencies
  • Extras
  • Testing
  • Examples
  1. Clients
  2. xchain-cosmos-sdk
  3. xchain-cosmos

How to Use

Previousxchain-cosmosNextxchain-kujira

Last updated 8 months ago

Installation

yarn add @xchainjs/xchain-cosmos

Peer Dependencies

You can visit the package repository to get the updated peer dependencies by looking at the "peerDependencies" object in the "package.json" file.

Extras

Important note: Make sure to install same version of cosmos-client/core as xchain-cosmos is using (currently "@cosmos-client/core": "^0.45.1", ). In other case things might break.

Testing

yarn install
yarn test

Examples

Connect Wallet to New Cosmos Client

Create a new thorchain client Set phrase and network when creating an instance. The network default is Mainnet


//Imports
import { AssetAtom, Client, COSMOS_DECIMAL } from "@xchainjs/xchain-cosmos"
import { assetToBase, baseToAsset, assetAmount } from "@xchainjs/xchain-util"

// Create new instance of the client and query chain for balances.
const connectWallet = async () => {
    let phrase = "phrase"
    const cosmosClient = new Client({phrase})
    let address = cosmosClient.getAddress()
    let isValid = cosmosClient.validateAddress(address)
    console.log(address)
    if(isValid === true){
        try {
            const balance = await cosmosClient.getBalance(address)
            let assetAmount = (baseToAsset(balance[0].amount)).amount()
            console.log(`Adress: ${address} with balance ${assetAmount}`)
            
        } catch (error) {
            console.log(`Caught: ${error} `)
        }
    } else {
        console.log(`Address: ${address} is invalid`)
    }
}

Transfer ATOM using Cosmos Client

Create a new Cosmos client instance Convert amount to transfer to base amount Build transaction.

const transfer = async () => {
    let phrase = "phrase"
    const cosmosclient = new Client({ phrase})
    let amountToTransfer = 0.1
    let amount = assetToBase(assetAmount(amountToTransfer, COSMOS_DECIMAL))
    let recipient = "cosmos1f2hzu2cup9tk427w5tpfysvx9cf4c9wkud0qn9" 
    try {
        const txid = await cosmosclient.transfer({
            "amount": amount,
            "recipient": recipient,
            "memo": "test",
            "asset": AssetAtom,
            "walletIndex": 0 
        })
        console.log(`Transaction sent: ${JSON.stringify(txid)}`)
    } catch (error) {
        console.log(`Caught ${error}`)
    }
}

// Transfer with fee rate set 
    let feeRate = await cosmosClient.getFeeRates()
    try {
        const txid = await cosmosClient.transfer({
            "amount": amount,
            "recipient": recipient,
            "memo": "test",
            "asset": AssetAtom,
            feeRate: feeRate.fastest
        })
        console.log(`Transaction sent: ${txid}`)

    } catch (error) {
         console.log(`Caught: ${error}`)
    }

Get Transaction Data & Transaction History

Retrieve transaction data using transaction hash and address


const transactionData = async () => {
    let txHash = 'insert txHash'
    let phrase = "phrase"
    const cosmosClient = new Client({ phrase})
    try {
        const txData = await cosmosClient.getTransactionData(txHash)
        console.log(`From ${JSON.stringify(txData)}`)
    } catch (error) {
        console.log(`Caught ${error}`)
    }
}

// By default getTransactions() returns the transactions for the current address

const transactionHistory = async () => {
    let phrase = "phrase"
    const cosmosClient = new Client({phrase})
    const address = cosmosClient.getAddress()
    const url = cosmosClient.getExplorerUrl()
    console.log(url)
    try {
        const txHistory = await cosmosClient.getTransactions()
        console.log(`Found ${txHistory.total.toString()}`)
        txHistory.txs.forEach(tx => console.log(tx.hash))   
    } catch (error) {
        console.log(`Caught: ${error}`)
    }
}

Get Transfer Fees

const feeData = async () => {
    let phrase = "phrase"
    const cosmosClient = new Client({ phrase})
    try {
        const {fast, fastest, average} = await cosmosClient.getFees()
        console.log(`Fees Fast: ${baseToAsset(fast).amount()} Fastest: ${baseToAsset(fastest).amount()} Average: ${baseToAsset(average).amount()}`)
    } catch (error) {
        console.log(`Caught ${error}`)
    }
}

Get Network and Explorer Data

// Query Cosmos client for network data and explorer data

const explorerUrl = async () => {
    let phrase = "phrase"
    const cosmosClient = new Client({ phrase})
    let hash = "insert hash"
    try {
        const networkData = cosmosClient.getExplorerUrl()
        console.log(`Explorer url: ${networkData}`)
        const transactionUrl = cosmosClient.getExplorerTxUrl(hash)
        console.log(`Explorer transaction: ${transactionUrl}`)

    } catch (error) {
        console.log(`Caught ${error}`)
    }
}
xchain-cosmos