baluni-api
Version:
Api for baluni-cli
54 lines (53 loc) • 2.96 kB
JavaScript
;
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;