sdk-utils
Version:
TEST TEST
266 lines • 14.3 kB
JavaScript
;
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