.build
.config
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))