How to use

Installation

yarn add @xchainjs/xchain-arbitrum

Following peer dependencies have to be installed into your project. These are not included in @xchainjs/xchain-arbitrum.

yarn add @xchainjs/xchain-evm @xchainjs/xchain-evm-providers @xchainjs/xchain-client @xchainjs/xchain-crypto @xchainjs/xchain-util axios ethers

Client Testing

yarn install
yarn test

Basic Usage Example

// Imports
import { Client, defaultArbParams } from "@xchainjs/xchain-arbitrum"
import { FeeOption } from "@xchainjs/xchain-client"
import { assetToBase, baseToAsset, assetAmount, Asset, Chain  } from "@xchainjs/xchain-util"

Connect wallet to new Arbitrum Chain Client

Network default is Testnet

// Create arbitrum asset
const TestnetUSDCAsset: Asset = {
  chain: 'ARB',
  symbol: 'USDC-0x179522635726710dd7d2035a81d856de4aa7836c',
  ticker: 'USDC',
  synth: false,
}
// Create new Arbitrum Client Instance
const connectWallet = async () => {
    defaultArbParams.phrase = "phrase"
    const arbitrumClient = new Client(defaultArbParams)
    let address = arbitrumClient.getAddress()
    console.log(`Address: ${address}`)
    let isValid = arbitrumClient.validateAddress(address)
    if( isValid === true ){
        try {
            const balance = await arbitrumClient.getBalance(address)
            let assetAmount = (baseToAsset(balance[1].amount)).amount()
            console.log(`With balance: ${assetAmount}`)
    
        } catch (error) {
            console.log(`Caught: ${error}`)
        }
    }
}

Transfer Arbitrum using arbitrumClient

const transferArbitrum = async () => {
    let amountToTransfer = 0.1
    let recipient = "address"
    defaultArbParams.phrase = "phrase"
    const arbitrumClient = new Client(defaultArbParams)
    let amount = assetToBase(assetAmount(amountToTransfer, 18))
    console.log("Building transaction", JSON.stringify(amount.amount()))
    try {
        const txid = await arbitrumClient.transfer({ 
            "asset": TestnetUSDCAsset,
            "amount": amount,
            "recipient":recipient,
            feeOption: FeeOption.Fast,
        })
        console.log(`Transaction sent: ${txid}`)
    } catch (error) {
        console.log(`Caught: ${error}`)
    } 
}

Get fees

const returnFees = async () => {
    defaultArbParams.phrase = "phrase"
    const arbitrumClient = new Client(defaultArbParams)
    let amountToTransfer = 20
    let amount = assetToBase(assetAmount(amountToTransfer, 18))
    let recipient = "recipient"
    try {
        const txParams: TxParams = {
            walletIndex: 0,
            asset: TestnetUSDCAsset,
            amount: amount,
            recipient: recipient,
        }
        const {fast, fastest, average} = await arbitrumClient.getFees(txParams)
        console.log(`Fees Fast: ${baseToAsset(fast).amount()} Fastest: ${baseToAsset(fastest).amount()} Average: ${baseToAsset(average).amount()}`)    } catch (error) {
        console.log(`Caught: ${error}`)
    }
}

Get transaction Data & History

const transactionData = async () => {
    defaultArbParams.phrase = "phrase"
    const arbitrumClient = new Client(defaultArbParams)
    let hash = "0x60721cf788b7cd4e56acf6479e71dfbd12e6c79c15e76595e4e52409bf686d4c"

    try {
        const txData = await arbitrumClient.getTransactionData(hash)
        console.log(`From ${JSON.stringify(txData)}`)
    } catch (error) {
        console.log(`Caught: ${error}`)
    }
}
// Address History
const transactionHistory = async () => {
    defaultArbParams.phrase = "phrase"
    const arbitrumClient = new Client(defaultArbParams)
    let Address = arbitrumClient.getAddress()

    try {
        const txHistory = await arbitrumClient.getTransactions({address: Address, limit: 4 })
        console.log(`Found ${txHistory.total.toString()}`)
        txHistory.txs.forEach(tx => console.log(tx.hash))
    } catch (error) {
        console.log(`Caught: ${error}`)
    }
}