@hikaru-fi/sc-calculators
Version:
Package for pool calculations
171 lines (140 loc) • 4.09 kB
JavaScript
import BN from 'bn.js';
import web3Utils from 'web3-utils';
import { poolCalculations } from '../poolMath/weightedPool/weightedPool.mjs';
import { SwapTypes } from '../utils/types.mjs';
import { testPoolConfig } from './testPoolConfig.mjs';
poolCalculations.fromBackendInfo(testPoolConfig);
const testSwapPath = {
"vault": "TXerg8cK6KXYFLw2JyndPgY5HukZyQWi6r",
"swapRoute": [
{
"pool": "TMJjU9WNUHVZzes8ujw73DcN5gneQuMLVz",
"tokenIn": "TAHLygq9zmpSASCkwvExVgxNfGMwjuqQ1u",
"tokenOut": "TApJzmfyYrXd6afvfWLKpqqeBxa7hwS9Cw"
}
],
"swapType": 0,
"swapAmount": "2000000",
"minMaxAmount": "0",
"receiver": "",
"deadline": ""
}
const vs = poolCalculations.calculateSwapResult(testSwapPath, '2000000', 1);
console.log(
`Test frontend swap:\n` +
`${JSON.stringify(vs, null, '\t')}`
)
/**
* @type {import('../poolMath/weightedPool/weightedPool.mjs').RouteInfo}
*/
const sellRoute = {
swapType: 0,
swapRoute: [
{
pool: testPoolConfig[0].poolAddress,
tokenIn: testPoolConfig[0].tokens[0],
tokenOut: testPoolConfig[0].tokens[1]
},
],
vault: testPoolConfig[0].vaultAddress,
swapAmount: '1000000000000',
minMaxAmount: '1313',
receiver: '0x00',
deadline: '0'
}
const sellSwap = poolCalculations.calculateSwapResult(
sellRoute,
'1000000',
1
)
console.log(
`Sell swap:\n` +
JSON.stringify(sellSwap, null, '\t')
)
/**
* @type {import('../poolMath/weightedPool/weightedPool.mjs').RouteInfo}
*/
const buyRoute = {
swapType: 1,
swapRoute: [
{
pool: testPoolConfig[0].poolAddress,
tokenIn: testPoolConfig[0].tokens[0],
tokenOut: testPoolConfig[0].tokens[1]
},
],
vault: testPoolConfig[0].vaultAddress,
swapAmount: '1000000000000',
minMaxAmount: '1313',
receiver: '0x00',
deadline: '0'
}
const buySwap = poolCalculations.calculateSwapResult(
buyRoute,
'100000',
0
)
console.log(
`Buy swap:\n` +
JSON.stringify(buySwap, null, '\t')
)
const noneSwap = {
swapType: SwapTypes.None
}
try {
poolCalculations.calculateSwapResult(
noneSwap,
'1000',
1
)
} catch(err) {
console.log(`None swap exception caught`)
}
const poolTVL = poolCalculations.getPoolTVL(testPoolConfig[2].poolAddress);
console.log(
`Pool TVL: ${poolTVL}`
)
const userTVL = poolCalculations.getUserUSDAmount(testPoolConfig[0].poolAddress, web3Utils.toBN(1), web3Utils.toBN(2));
console.log(
`User TVL: ${userTVL}`
)
const poolBalances = poolCalculations.getPoolTokenBalances(testPoolConfig[0].poolAddress);
console.log(
`Pool balances:\n` +
`${poolBalances}`
)
const userTokens = poolCalculations.getUserTokensInPool(testPoolConfig[0].poolAddress, web3Utils.toBN(1), web3Utils.toBN(2));
console.log(
`User tokens in pool:\n` +
`${userTokens}`
)
const poolTokenCosts = poolCalculations.getPoolTokenCost(testPoolConfig[0].poolAddress);
console.log(
`Pool token costs:\n` +
`${poolTokenCosts}`
)
const userTokenCosts = poolCalculations.getUserTokenCosts(testPoolConfig[0].poolAddress, web3Utils.toBN(1), web3Utils.toBN(2));
console.log(
`User token costs:\n` +
`${userTokenCosts}`
)
const userLPTokens = poolCalculations.calculateLPTokensForSingleToken(
testPoolConfig[1].poolAddress,
testPoolConfig[1].tokens[1],
'33330000',
'166310263800759875482550'
);
console.log(
`Required LP tokens:\n` +
`${userLPTokens}`
)
const er = poolCalculations.getTokenExchangeRate(testPoolConfig[0].tokens[0]);
console.log(
`Exchange rate of token:\n` +
`${er}`
)
const swapLimit = poolCalculations.getPoolSwapLimitForToken(testPoolConfig[0].poolAddress, testPoolConfig[0].tokens[0])
console.log(
`Swap limit:\n`+
`${swapLimit.toString(10)}`
)