UNPKG

ufomarketplace-sdk

Version:

SDK to interact with set ufo marketplace contracts

178 lines 9.52 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.approveTokenToRouter = exports.swapForExactInput = exports.swapForExactOutput = exports.getTokenBalance = exports.getToken1Token2Rate = exports.getWETHPrice = exports.getWMATICPrice = void 0; const constants_1 = require("./constants/constants"); const ethers_1 = require("ethers"); const quickswap_sdk_1 = require("quickswap-sdk"); const ERC20_json_1 = __importDefault(require("./abis/ERC20.json")); const UniswapV2Router02_json_1 = __importDefault(require("./abis/UniswapV2Router02.json")); const MAX_INT = ethers_1.BigNumber.from('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'); function getWMATICPrice(networkId) { return __awaiter(this, void 0, void 0, function* () { let rpcAddr, usdtAddr, wMaticAddr; rpcAddr = constants_1.RPCS[networkId]; usdtAddr = constants_1.USDT_ADDR[networkId]; wMaticAddr = constants_1.WMATIC_ADDR[networkId]; return getTokenPrice(rpcAddr, usdtAddr, 6, wMaticAddr, 18, networkId); }); } exports.getWMATICPrice = getWMATICPrice; function getWETHPrice(networkId) { return __awaiter(this, void 0, void 0, function* () { let rpcAddr, usdcAddr, wEthAddr; rpcAddr = constants_1.RPCS[networkId]; usdcAddr = constants_1.USDC_ADDR[networkId]; wEthAddr = constants_1.WETH_ADDR[networkId]; return getTokenPrice(rpcAddr, usdcAddr, 6, wEthAddr, 18, networkId); }); } exports.getWETHPrice = getWETHPrice; function getToken1Token2Rate(networkId, token1, token2) { return __awaiter(this, void 0, void 0, function* () { let rpcAddr, token1Addr, token2Addr; rpcAddr = constants_1.RPCS[networkId]; token1Addr = constants_1.COIN_ADDR[token1][networkId]; token2Addr = constants_1.COIN_ADDR[token2][networkId]; return getTokenPrice(rpcAddr, token2Addr, constants_1.COIN_ADDR[token2]['decimal'], token1Addr, constants_1.COIN_ADDR[token1]['decimal'], networkId); }); } exports.getToken1Token2Rate = getToken1Token2Rate; function getTokenBalance(networkId, token, wallet) { return __awaiter(this, void 0, void 0, function* () { let rpcAddr, tokenAddr; rpcAddr = constants_1.RPCS[networkId]; tokenAddr = constants_1.COIN_ADDR[token][networkId]; const provider = ethers_1.ethers.providers.getDefaultProvider(rpcAddr); const cryptoContract = new ethers_1.Contract(tokenAddr, ERC20_json_1.default.abi, provider); try { const balance = yield cryptoContract.balanceOf(wallet); return ethers_1.ethers.utils.formatUnits(balance.toString(), constants_1.COIN_ADDR[token]["decimal"]).toString(); } catch (e) { console.log(e); return "0"; } }); } exports.getTokenBalance = getTokenBalance; function getTokenPrice(rpcProvider, sourceAddr, sourceDecimal, destination, destDecimal, networkId) { return __awaiter(this, void 0, void 0, function* () { const provider = ethers_1.ethers.providers.getDefaultProvider(rpcProvider); const usd = new quickswap_sdk_1.Token(networkId, sourceAddr, sourceDecimal); const token = new quickswap_sdk_1.Token(networkId, destination, destDecimal); try { const pair = yield quickswap_sdk_1.Fetcher.fetchPairData(usd, token, provider); const route = new quickswap_sdk_1.Route([pair], token); return route.midPrice.toSignificant(6); } catch (e) { console.log("get Token price error", e); return '0'; } }); } function swapForExactOutput(amountOut, networkId, signer, inputTokenType, outputTokenType) { return __awaiter(this, void 0, void 0, function* () { let sourceTokenAddr, destTokenAddr; sourceTokenAddr = constants_1.COIN_ADDR[inputTokenType][networkId]; destTokenAddr = constants_1.COIN_ADDR[outputTokenType][networkId]; const routerContract = new ethers_1.Contract(constants_1.ROUTER_ADDR[networkId], UniswapV2Router02_json_1.default.abi, signer); const address = yield signer.getAddress(); return swapExactOutputTokens(sourceTokenAddr, destTokenAddr, amountOut, routerContract, address, signer); }); } exports.swapForExactOutput = swapForExactOutput; function swapForExactInput(amountIn, networkId, signer, inputTokenType, outputTokenType) { return __awaiter(this, void 0, void 0, function* () { let sourceTokenAddr, destTokenAddr; sourceTokenAddr = constants_1.COIN_ADDR[inputTokenType][networkId]; destTokenAddr = constants_1.COIN_ADDR[outputTokenType][networkId]; const routerContract = new ethers_1.Contract(constants_1.ROUTER_ADDR[networkId], UniswapV2Router02_json_1.default.abi, signer); const address = yield signer.getAddress(); return swapExactInputTokens(sourceTokenAddr, destTokenAddr, amountIn, routerContract, address, signer); }); } exports.swapForExactInput = swapForExactInput; function approveTokenToRouter(tokenType, networkId, signer) { return __awaiter(this, void 0, void 0, function* () { let tokenAddr = constants_1.COIN_ADDR[tokenType][networkId]; const token1 = new ethers_1.Contract(tokenAddr, ERC20_json_1.default.abi, signer); return yield token1.approve(constants_1.ROUTER_ADDR[networkId], MAX_INT); }); } exports.approveTokenToRouter = approveTokenToRouter; function swapExactInputTokens(address1, address2, amountExactInput, routerContract, accountAddress, signer) { return __awaiter(this, void 0, void 0, function* () { const tokens = [address1, address2]; const time = Math.floor(Date.now() / 1000) + 200000; const deadline = ethers_1.ethers.BigNumber.from(time); const token1 = new ethers_1.Contract(address1, ERC20_json_1.default.abi, signer); const tokenDecimals = yield getDecimals(token1); const amountIn = ethers_1.ethers.utils.parseUnits(amountExactInput, tokenDecimals); const amountOut = yield routerContract.callStatic.getAmountsOut(amountIn, tokens); const wMaticAddress = yield routerContract.WETH(); if (address1 === wMaticAddress) { // Eth -> Token return yield routerContract.swapExactETHForTokens(amountOut[1], tokens, accountAddress, deadline, { value: amountIn }); } else if (address2 === wMaticAddress) { // Token -> Eth return yield routerContract.swapExactTokensForETH(amountIn, amountOut[1], tokens, accountAddress, deadline); } else { return yield routerContract.swapExactTokensForTokens(amountIn, amountOut[1], tokens, accountAddress, deadline); } }); } function swapExactOutputTokens(address1, address2, amountExactOut, routerContract, accountAddress, signer) { return __awaiter(this, void 0, void 0, function* () { const tokens = [address1, address2]; const time = Math.floor(Date.now() / 1000) + 200000; const deadline = ethers_1.ethers.BigNumber.from(time); const token2 = new ethers_1.Contract(address2, ERC20_json_1.default.abi, signer); const tokenDecimals = yield getDecimals(token2); const amountOut = ethers_1.ethers.utils.parseUnits(amountExactOut, tokenDecimals); const amountIn = yield routerContract.callStatic.getAmountsIn(amountOut, tokens); const wethAddress = yield routerContract.WETH(); if (address1 === wethAddress) { // Eth -> Token return yield routerContract.swapETHForExactTokens(amountOut, tokens, accountAddress, deadline, { value: amountIn[0], }); } else if (address2 === wethAddress) { // Token -> Eth return yield routerContract.swapTokensForExactETH(amountIn[0], amountOut, tokens, accountAddress, deadline); } else { return yield routerContract.swapTokensForExactTokens(amountIn[0], amountOut, tokens, accountAddress, deadline); } }); } function getDecimals(token) { return __awaiter(this, void 0, void 0, function* () { const decimals = yield token .decimals() .then((result) => { return result; }) .catch((error) => { console.log('No tokenDecimals function for this token, set to 0'); return 0; }); return decimals; }); } //# sourceMappingURL=utils.js.map