UNPKG

baluni-api

Version:
54 lines (53 loc) 2.96 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.quotePair = void 0; const ethers_1 = require("ethers"); const Factory_json_1 = __importDefault(require("../../abis/uniswap/Factory.json")); const Pool_json_1 = __importDefault(require("../../abis/uniswap/Pool.json")); const ERC20_json_1 = __importDefault(require("../../abis/common/ERC20.json")); // Assuming you have ERC20 ABI for fetching decimals const constants_1 = require("../../constants"); function quotePair(tokenAAddress, tokenBAddress, chainId) { return __awaiter(this, void 0, void 0, function* () { const uniswapV3FactoryAddress = constants_1.PROTOCOLS[chainId]['uni-v3'].FACTORY; // Connect to the BSC mainnet // const provider = ethers.getDefaultProvider(); const provider = new ethers_1.ethers.providers.JsonRpcProvider(constants_1.NETWORKS[chainId]); // Get the contract instance const factoryContract = new ethers_1.ethers.Contract(uniswapV3FactoryAddress, Factory_json_1.default, provider); const tokenAContract = new ethers_1.ethers.Contract(tokenAAddress, ERC20_json_1.default, provider); const tokenBContract = new ethers_1.ethers.Contract(tokenBAddress, ERC20_json_1.default, provider); // Fetch decimals for both tokens const tokenADecimals = yield tokenAContract.decimals(); const tokenBDecimals = yield tokenBContract.decimals(); const txInputs = [tokenAAddress, tokenBAddress, 3000]; try { const poolAddress = yield factoryContract.getPool(...txInputs); const poolContract = new ethers_1.ethers.Contract(poolAddress, Pool_json_1.default, provider); const slot0 = yield poolContract.slot0(); const { tick } = slot0; const tokenBPrice = 1 / (Math.pow(1.0001, tick) * Math.pow(10, -12)); if (tokenADecimals == 8) { return (tokenBPrice / 1e5) * 2; } else { return tokenBPrice; } } catch (_a) { return false; } }); } exports.quotePair = quotePair;