UNPKG

sdk-utils

Version:

TEST TEST

266 lines 14.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCloseToTickPrice = exports.getTokenValue = exports.getRemainQuota = exports.getSqrtPrice = exports.getTick = exports.collect = exports.workers = exports.poolInfo = exports.getAllowance = exports.getTokenSymbol = exports.getTokenAddress = exports.T = exports.checkFaucet = exports.faucet = exports.report = exports.performance = exports.riskManagement = exports.strategyEntities = exports.getTokenList = exports.getSingleStrategy = exports.getPositionInfo = exports.getPoolPrice = exports.getPoolHourPrices = exports.getGPRankList = exports.getDayTvl = exports.getCreatStrategyinfo = exports.getinvestList = exports.changeMetamaskChain = exports.isETHAddress = exports.getBalance = exports.toPrecision = exports.connect = exports.Trace = exports.logout = exports.sleep = exports.div = exports.mul = exports.sub = exports.add = exports.createAccount = exports.divest = exports.switching = exports.addInvest = exports.invest = exports.withdraw = exports.deposit = exports.approveToken = void 0; const lib_config_1 = require("./lib_config"); const lib_abi_1 = require("./lib_abi"); const lib_utils_1 = require("./lib.utils"); var execute_1 = require("./execute"); Object.defineProperty(exports, "approveToken", { enumerable: true, get: function () { return execute_1.approveToken; } }); Object.defineProperty(exports, "deposit", { enumerable: true, get: function () { return execute_1.deposit; } }); Object.defineProperty(exports, "withdraw", { enumerable: true, get: function () { return execute_1.withdraw; } }); Object.defineProperty(exports, "invest", { enumerable: true, get: function () { return execute_1.invest; } }); Object.defineProperty(exports, "addInvest", { enumerable: true, get: function () { return execute_1.addInvest; } }); Object.defineProperty(exports, "switching", { enumerable: true, get: function () { return execute_1.switching; } }); Object.defineProperty(exports, "divest", { enumerable: true, get: function () { return execute_1.divest; } }); Object.defineProperty(exports, "createAccount", { enumerable: true, get: function () { return execute_1.createAccount; } }); var lib_utils_2 = require("./lib.utils"); Object.defineProperty(exports, "add", { enumerable: true, get: function () { return lib_utils_2.add; } }); Object.defineProperty(exports, "sub", { enumerable: true, get: function () { return lib_utils_2.sub; } }); Object.defineProperty(exports, "mul", { enumerable: true, get: function () { return lib_utils_2.mul; } }); Object.defineProperty(exports, "div", { enumerable: true, get: function () { return lib_utils_2.div; } }); Object.defineProperty(exports, "sleep", { enumerable: true, get: function () { return lib_utils_2.sleep; } }); Object.defineProperty(exports, "logout", { enumerable: true, get: function () { return lib_utils_2.logout; } }); Object.defineProperty(exports, "Trace", { enumerable: true, get: function () { return lib_utils_2.Trace; } }); Object.defineProperty(exports, "connect", { enumerable: true, get: function () { return lib_utils_2.connect; } }); Object.defineProperty(exports, "toPrecision", { enumerable: true, get: function () { return lib_utils_2.toPrecision; } }); Object.defineProperty(exports, "getBalance", { enumerable: true, get: function () { return lib_utils_2.getBalance; } }); Object.defineProperty(exports, "isETHAddress", { enumerable: true, get: function () { return lib_utils_2.isETHAddress; } }); Object.defineProperty(exports, "changeMetamaskChain", { enumerable: true, get: function () { return lib_utils_2.changeMetamaskChain; } }); var graphql_1 = require("./graphql"); Object.defineProperty(exports, "getinvestList", { enumerable: true, get: function () { return graphql_1.getinvestList; } }); Object.defineProperty(exports, "getCreatStrategyinfo", { enumerable: true, get: function () { return graphql_1.getCreatStrategyinfo; } }); Object.defineProperty(exports, "getDayTvl", { enumerable: true, get: function () { return graphql_1.getDayTvl; } }); Object.defineProperty(exports, "getGPRankList", { enumerable: true, get: function () { return graphql_1.getGPRankList; } }); Object.defineProperty(exports, "getPoolHourPrices", { enumerable: true, get: function () { return graphql_1.getPoolHourPrices; } }); Object.defineProperty(exports, "getPoolPrice", { enumerable: true, get: function () { return graphql_1.getPoolPrice; } }); Object.defineProperty(exports, "getPositionInfo", { enumerable: true, get: function () { return graphql_1.getPositionInfo; } }); Object.defineProperty(exports, "getSingleStrategy", { enumerable: true, get: function () { return graphql_1.getSingleStrategy; } }); Object.defineProperty(exports, "getTokenList", { enumerable: true, get: function () { return graphql_1.getTokenList; } }); Object.defineProperty(exports, "strategyEntities", { enumerable: true, get: function () { return graphql_1.strategyEntities; } }); Object.defineProperty(exports, "riskManagement", { enumerable: true, get: function () { return graphql_1.riskManagement; } }); Object.defineProperty(exports, "performance", { enumerable: true, get: function () { return graphql_1.performance; } }); Object.defineProperty(exports, "report", { enumerable: true, get: function () { return graphql_1.report; } }); Object.defineProperty(exports, "faucet", { enumerable: true, get: function () { return graphql_1.faucet; } }); Object.defineProperty(exports, "checkFaucet", { enumerable: true, get: function () { return graphql_1.checkFaucet; } }); exports.T = lib_utils_1.Trace; /** * 根据token symbol获取address * @param token_symbol * @returns */ function getTokenAddress(token_symbol) { return lib_config_1.tokenAddres[lib_config_1.userInfo.chainID][token_symbol]; } exports.getTokenAddress = getTokenAddress; /** * 根据token address,获取symbol * @param token_address * @returns */ function getTokenSymbol(token_address) { let symbol = lib_utils_1.findToken(lib_config_1.tokenAddres[lib_config_1.userInfo.chainID], token_address); return symbol || "unknow"; } exports.getTokenSymbol = getTokenSymbol; /** * 获取授权值 * @param token_address * @param type * @returns */ async function getAllowance(token_address, type) { let destina_address = lib_config_1.ContractAddress[lib_config_1.userInfo.chainID].mulBank; if (type === "deposit") { } else if (type === "invest") { destina_address = lib_config_1.ContractAddress[lib_config_1.userInfo.chainID].v3strategy; } return await lib_utils_1.getAllowance(token_address, destina_address); } exports.getAllowance = getAllowance; /** * 池子存的数量 * @param token_address * @returns */ async function poolInfo(token_address) { let decimal = await lib_utils_1.getDecimal(token_address); let mulBankContract = new lib_utils_1.web3.eth.Contract(lib_abi_1.MULBANK, lib_config_1.ContractAddress[lib_config_1.userInfo.chainID].mulBank); let _totalShare = await mulBankContract.methods.getTotalShare(token_address).call({ from: lib_config_1.userInfo.account }); let totalShare = lib_utils_1.convertBigNumberToNormal(_totalShare, decimal); let res = await mulBankContract.methods.poolInfo(token_address).call({ from: lib_config_1.userInfo.account }); let tokenContract = new lib_utils_1.web3.eth.Contract(lib_abi_1.ERC20, res.shareToken); let _shareTokenTotalSupply = await tokenContract.methods.totalSupply().call({ from: lib_config_1.userInfo.account }); let shareTokenTotalSupply = lib_utils_1.convertBigNumberToNormal(_shareTokenTotalSupply, decimal); let shareTokenBalance = await lib_utils_1.getBalance(res.shareToken); let reward = '0'; if (+shareTokenTotalSupply <= 0) { reward = '0'; } else { reward = (+shareTokenBalance - (+shareTokenBalance * +totalShare / +shareTokenTotalSupply)).toFixed(8); } return { data: { supplyToken: res.supplyToken, shareToken: res.shareToken, shareTokenBalance: shareTokenBalance, reward: reward, totalBorrow: lib_utils_1.convertBigNumberToNormal(res.totalBorrow, decimal), loss: lib_utils_1.convertBigNumberToNormal(res.loss, decimal), totalDeposit: lib_utils_1.convertBigNumberToNormal(res.totalDeposit, decimal), } }; } exports.poolInfo = poolInfo; /** * 投资前查询创建的账户信息 * @returns */ async function workers() { let mulWorkContract = new lib_utils_1.web3.eth.Contract(lib_abi_1.MULWORK, lib_config_1.ContractAddress[lib_config_1.userInfo.chainID].mulWork); let res = await mulWorkContract.methods.workers(lib_config_1.userInfo.account).call({ from: lib_config_1.userInfo.account }); return { data: { createTime: res.createTime, created: res.created, lastWorkTime: res.lastWorkTime, power: res.power, totalProfit: res.totalProfit, workerId: res.workerId } }; } exports.workers = workers; /** * 拿fee * @param sid * @returns */ async function collect(sid) { let v3strategyContract = new lib_utils_1.web3.eth.Contract(lib_abi_1.UNISWAPV3STRATEGY, lib_config_1.ContractAddress[lib_config_1.userInfo.chainID].v3strategy); let res = await v3strategyContract.methods.collect(+sid).call({ from: lib_config_1.userInfo.account }); return { data: { fee0: lib_utils_1.convertBigNumberToNormal(res.fee0, 6), fee1: lib_utils_1.convertBigNumberToNormal(res.fee1, 18), } }; } exports.collect = collect; /** * * @param token0_address * @param token1_address * @param ratio 价格 * @returns */ function getTick(token0_address, token1_address, price) { let space = 60; if (Number(token0_address) > Number(token1_address)) { let temp = token0_address; token0_address = token1_address; token1_address = temp; } let ans = Math.floor(Math.log2(1 / price * 1e12) / Math.log2(1.0001)); if (Math.log2(1 / price * 1e12) > 0) { if (ans % space >= space / 2) { ans = ans + space - ans % space; } else { ans = ans - ans % space; } return ans.toString(); } else { return (ans - (200 - Math.abs(ans) % space)).toString(); } } exports.getTick = getTick; /** * 获取池子的价格(暂时只有 usdc/eth) * @param token0_address * @param token1_address * @returns */ async function getSqrtPrice(token0_address, token1_address) { if (Number(token0_address) > Number(token1_address)) { [token0_address, token1_address] = [token1_address, token0_address]; } let v3poolContract = new lib_utils_1.web3.eth.Contract(lib_abi_1.UNISWAPV3POOL, lib_config_1.ContractAddress[lib_config_1.userInfo.chainID].v3pool); let res = await v3poolContract.methods.slot0().call({ from: lib_config_1.userInfo.account }); let temp = Math.pow(res.sqrtPriceX96 / (Math.pow(2, 96)), 2); return 1 / temp * 1e12; } exports.getSqrtPrice = getSqrtPrice; /** * 获取投资最大值 * @param token0_address * @param token1_address * @returns */ async function getRemainQuota(token0_address, token1_address) { let mulWorkContract = new lib_utils_1.web3.eth.Contract(lib_abi_1.MULWORK, lib_config_1.ContractAddress[lib_config_1.userInfo.chainID].mulWork); let remain0 = await mulWorkContract.methods.getRemainQuota(lib_config_1.userInfo.account, token0_address).call({ from: lib_config_1.userInfo.account }); let remain1 = await mulWorkContract.methods.getRemainQuota(lib_config_1.userInfo.account, token1_address).call({ from: lib_config_1.userInfo.account }); return { data: { token0: token0_address, symbol0: getTokenSymbol(token0_address), remain0: lib_utils_1.convertBigNumberToNormal(remain0, await lib_utils_1.getDecimal(token0_address)), token1: token1_address, symbol1: getTokenSymbol(token1_address), remain1: lib_utils_1.convertBigNumberToNormal(remain1, await lib_utils_1.getDecimal(token1_address)), } }; } exports.getRemainQuota = getRemainQuota; /** *算出对应token的量 sqrtPrice = sqrt(b/a) * 2^96 = sqrt(1.0001^tick) * 2^96 * @param type * @param token0_address * @param token1_address * @param priceLower * @param priceCurrent * @param priceUpper * @param amount * @returns c * b / (c - b) * (b - a); c a 互换位置 */ async function getTokenValue(type, token0_address, token1_address, priceLower, priceCurrent, priceUpper, amount) { let v3poolContract = new lib_utils_1.web3.eth.Contract(lib_abi_1.UNISWAPV3POOL, lib_config_1.ContractAddress[lib_config_1.userInfo.chainID].v3pool); let res = await v3poolContract.methods.slot0().call({ from: lib_config_1.userInfo.account }); let resultAmount = 0; let tickLower = getTick(token0_address, token1_address, priceLower); let tickUpper = getTick(token0_address, token1_address, priceUpper); if (+tickLower > +tickUpper) { [tickLower, tickUpper] = [tickUpper, tickLower]; } let sqrtPricelower = Math.sqrt(Math.pow(1.0001, +tickLower)); let sqrtPriceupper = Math.sqrt(Math.pow(1.0001, +tickUpper)); let a = sqrtPricelower; let b = res.sqrtPriceX96 / (Math.pow(2, 96)); let c = sqrtPriceupper; if (type === "token0") { //usdt let temp = c * b / (c - b) * (b - a); resultAmount = temp / 1e12 * amount; } else { //eth let temp = (c - b) / (b - a) / (b * c); resultAmount = temp * 1e12 * amount; } return { amount: resultAmount }; } exports.getTokenValue = getTokenValue; /** * 拿tick上的价格 * @param token0_address * @param token1_address * @param price * @returns */ function getCloseToTickPrice(token0_address, token1_address, price) { let tick = getTick(token0_address, token1_address, price); return 1 / Math.pow(1.0001, +tick) * 1e12; } exports.getCloseToTickPrice = getCloseToTickPrice; //# sourceMappingURL=index.js.map