Skip to content
    quoteSaversTS@thorchain
    index.ts
    tsconfig.json
    Packager files
    package.json
    yarn.lock
    Config files
    .replit
    replit.nix
    import { CryptoAmount, Midgard, ThorchainCache, ThorchainQuery, Thornode, SaversWithdraw, EstimateWithdrawSaver, EstimateAddSaver, getSaver, SaversPosition } from '@xchainjs/xchain-thorchain-query'
    import { assetAmount, assetFromStringEx, assetToBase } from '@xchainjs/xchain-util'


    function printDepostSaverQuote(saver: EstimateAddSaver) {
    const expanded = {
    assetAmount: saver.assetAmount.formatedAssetString(),
    estimatedDepositValue: saver.estimatedDepositValue.formatedAssetString(),
    fee: {
    affiliateFee: saver.fee.affiliate.formatedAssetString(),
    asset: saver.fee.asset,
    outbound: saver.fee.outbound.formatedAssetString(),
    },
    expiry: saver.expiry,
    toAddress: saver.toAddress,
    memo: saver.memo,
    estimateWaitTime: saver.estimatedWaitTime,
    saverCapFilledPercent: saver.saverCapFilledPercent,
    slipBasisPoints: saver.slipBasisPoints,
    canAdd: saver.canAddSaver,
    errors: saver.errors,
    }
    console.log(expanded)
    }
    function printWithdrawSaverQuote(saver: EstimateWithdrawSaver) {
    const expanded = {
    assetAmount: saver.expectedAssetAmount.formatedAssetString(),
    fee: {
    affiliate: saver.fee.affiliate.formatedAssetString(),
    asset: saver.fee.asset,
    outbound: saver.fee.outbound.formatedAssetString(),
    },
    expiry: saver.expiry,
    toAddress: saver.toAddress,
    memo: saver.memo,
    estimateWaitTime: saver.estimatedWaitTime,
    slipBasisPoints: saver.slipBasisPoints,
    }
    console.log(expanded)
    }
    function printSaversPosition(saver: SaversPosition) {
    const expanded = {
    depositValue: saver.depositValue.formatedAssetString(),
    redeemableValue: saver.redeemableValue.formatedAssetString(),
    lastAddHeight: saver.lastAddHeight,
    percentageGrowth: saver.percentageGrowth,
    ageInYears: saver.ageInYears,
    ageInDays: saver.ageInDays,
    }
    console.log(expanded)
    }
    /**
    * Estimate add saver function
    * Returns estimate saver object
    */
    const quoteDepositSavers = async (thorchainQuery: ThorchainQuery, cryptoAmount: CryptoAmount) => {

    try {
    const depositSaversQuote = await thorchainQuery.estimateAddSaver(cryptoAmount)
    printDepostSaverQuote(depositSaversQuote)

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

    const estimateWithdrawSaver = async (thorchainQuery: ThorchainQuery, withdrawPos: SaversWithdraw) => {

    try {
    const withdrawSaversQuote = await thorchainQuery.estimateWithdrawSaver(withdrawPos)
    printWithdrawSaverQuote(withdrawSaversQuote)

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

    // Call the function from in()
    const main = async () => {

    const thorchainCache = new ThorchainCache(new Midgard(), new Thornode())
    const thorchainQuery = new ThorchainQuery(thorchainCache)

    console.log(`//------------- Add to Savers Quotes --------------------/`)

    //Params to get from the user interface
    const savingsAmount = 1
    const saversAsset = "BTC.BTC"
    const decimalLength = 8
    // Convert it into a cryptAmount Object
    const cryptoAmountDepositSavers = new CryptoAmount(
    assetToBase(assetAmount(savingsAmount, Number(decimalLength))),
    assetFromStringEx(saversAsset),
    )

    await quoteDepositSavers(thorchainQuery, cryptoAmountDepositSavers)
    await new Promise(resolve => setTimeout(resolve, 1000)); // need wait between calls, end point have hit limits));
    console.log(`\n\n//------------- Savers Position --------------------/`)
    const getSaver: getSaver = {
    asset: assetFromStringEx(saversAsset),
    address: "bc1qy9rjlz5w3tqn7m3reh3y48n8del4y8z42sswx5"
    }

    const saverPos = await thorchainQuery.getSaverPosition(getSaver)
    printSaversPosition(saverPos)
    await new Promise(resolve => setTimeout(resolve, 1000)); // need wait between calls, end point have hit limits));
    console.log(`\n\n//------------- Withdraw from Savers Quotes --------------------/`)

    //Params to get form the user interface
    const withdrawAsset = "BTC.BTC"
    const saverAddress = "bc1qy9rjlz5w3tqn7m3reh3y48n8del4y8z42sswx5"
    const withdrawPercentage = 100 // 0-100

    const basisPoints = withdrawPercentage * 100 // conver % to basis points (0-10,000)

    const withdrawPos: SaversWithdraw = {
    address: saverAddress,
    asset: assetFromStringEx(withdrawAsset),
    withdrawBps: basisPoints,
    }

    await estimateWithdrawSaver(thorchainQuery, withdrawPos)

    }

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