Skip to content
    xchain-bitcoin@thorchain
    index.ts
    tsconfig.json
    yarn-error.log
    Packager files
    package.json
    yarn.lock
    Config files
    .replit
    replit.nix
    //Imports
    import { Client, defaultBTCParams } from "@xchainjs/xchain-bitcoin"
    import { baseToAsset } from "@xchainjs/xchain-util"
    import { Network, TxHistoryParams } from "@xchainjs/xchain-client"

    // Query a given address
    const queryWalletBalance = async (client: Client, address: string) => {

    if (client.validateAddress(address) === false) {
    console.log(`Address: ${address} is invalid`);
    return;
    }
    try {
    const balances = await client.getBalance(address)
    if (balances[0] !== undefined) {
    const assetAmount = baseToAsset(balances[0].amount).amount()
    console.log(`Asset address balance is : ${assetAmount} \n`)
    } else {
    console.log(`Address has not balance \n`)
    }

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

    // Query a given transaction hash
    const queryTransactionData = async (client: Client, txId: string) => {

    try {
    console.log(`Urls for tx is: ${client.getExplorerTxUrl(txId)}`)
    const txData = await client.getTransactionData(txId)
    console.log(txData)
    // console.log(`\n ${JSON.stringify(txData)}`)

    } catch (error) {
    console.log(`Caught ${error}`)
    }
    }
    const queryTransactionHistory = async (client: Client, address: string) => {

    try {
    const txHistoryParams: TxHistoryParams = {
    address: address, // Address to get history for
    // offset?: number // Optional Offset
    limit: 5 // Optional Limit of transactions
    // startTime?: Date // Optional start time
    // asset?: string // Optional asset. Result transactions will be filtered by this asset
    }
    const txHistory = await client.getTransactions(txHistoryParams)
    console.log(`The address has ${txHistory.total.toString()} transactions`)
    if ((txHistory).total > 0) {
    txHistory.txs.forEach(tx => console.log(tx.hash)) // printing the hashs
    //console.log((txHistory).txs[0]) // print tx
    }
    } catch (error) {
    console.log(`Caught ${error}`)
    }
    }

    const getTransactionHistory = async (client: Client) => {

    let address = client.getAddress()
    console.log(`Address is: ${address}`)

    try {
    await queryWalletBalance(client, address)
    await queryTransactionHistory(client, address)

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

    const getFeeData = async () => {
    let btcClient = new Client()
    try {
    const fee = await btcClient.getFeeRates()
    console.log(fee)
    const { fast, fastest, average } = await btcClient.getFees()
    console.log(`Fees Fast: ${baseToAsset(fast).amount()} Fastest: ${baseToAsset(fastest).amount()} Average: ${baseToAsset(average).amount()}`)

    } catch (e) {
    console.log(e)
    }
    }

    // Show the query functions of a client.
    const main = async () => {
    // See https://replit.com/@thorchain/Config-and-Set-Up#index.ts for wallet set up examples
    const btcClientEmpty = new Client() // blank client can be used to query

    const address = 'bc1qpmx6747ua83y3mgkgat56ax3dtdx4skpu2f0ta'
    const txId = '88739693538c42d75ed239f62a7d0318f073eea216966786bf57838d6454e8eb'

    await queryWalletBalance(btcClientEmpty, address)
    await queryTransactionData(btcClientEmpty, txId)
    await queryTransactionHistory(btcClientEmpty, address)
    // await getFeeData()
    console.log(`--------------------------------------------------------------------- \n`)

    const phrase = "army van defense carry jealous true garbage claim echo media make crunch"
    const btcInitParams = {
    ...defaultBTCParams,
    phrase: phrase,
    network: Network.Mainnet,
    }

    const btcClient = new Client(btcInitParams)

    await getTransactionHistory(btcClient)
    }

    main()
    .then(() => process.exit(0))
    .catch((err) => console.error(err))