const HttpKit = require('./kit/HttpKit') const Config = require('./Config.js') const PrivateConfig = require('./PrivateConfig.js') const chainID = 56 class OneInch {} OneInch.price = async function (fromTokenAddress = '0xe9e7cea3dedca5984780bafc599bd69add087d56', fromTokenDecimals = 18, amount = Config.baseTokenAmount, toTokenAddress = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c') { fromTokenAddress = fromTokenAddress.toLowerCase() toTokenAddress = toTokenAddress.toLowerCase() amount = amount * (10 ** fromTokenDecimals) const url = `https://api.1inch.exchange/v3.0/${chainID}/quote?fromTokenAddress=${fromTokenAddress}&amount=${amount}` + `&toTokenAddress=${toTokenAddress}` const { data: rst } = await HttpKit.get(url) if (!rst || !rst.toToken || !rst.toTokenAmount) { return rst } const toTokenAmount = parseFloat(rst.toTokenAmount) / (10 ** rst.toToken.decimals) const fromTokenAmount = amount / (10 ** fromTokenDecimals) const price = fromTokenAmount / toTokenAmount rst.price = price Config.estimatedGas = rst.estimatedGas if (toTokenAddress.toLowerCase() === '0xe9e7cea3dedca5984780bafc599bd69add087d56') { rst.price = 1 / rst.price } return rst.price } OneInch.swap = async function (fromTokenAddress = '0xe9e7cea3dedca5984780bafc599bd69add087d56', toTokenAddress = '0x111111111117dc0aa78b770fa6a738034120c302', fromTokenDecimals = 18, amount = 100, gas = Config.estimatedGas, fromAddress = PrivateConfig.address, slippage = 1) { amount = amount * (10 ** fromTokenDecimals) const url = `https://api.1inch.exchange/v3.0/${chainID}/swap?fromTokenAddress=${fromTokenAddress}&toTokenAddress=${toTokenAddress}` + `&amount=${amount}&fromAddress=${fromAddress}&slippage=${slippage}` const { data: rst } = await HttpKit.get(url, { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4464.0 Safari/537.36 Edg/91.0.852.0' }) if (rst && rst.toToken && rst.fromToken) { const fromTokenAmount = parseFloat(rst.fromTokenAmount) / (10 ** rst.fromToken.decimals) const toTokenAmount = parseFloat(rst.toTokenAmount) / (10 ** rst.toToken.decimals) rst.price = fromTokenAmount / toTokenAmount } return rst } module.exports = OneInch