1inch.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const HttpKit = require('./kit/HttpKit')
  2. const Config = require('./Config.js')
  3. const PrivateConfig = require('./PrivateConfig.js')
  4. const chainID = 56
  5. class OneInch {}
  6. OneInch.price = async function (fromTokenAddress = '0xe9e7cea3dedca5984780bafc599bd69add087d56',
  7. fromTokenDecimals = 18,
  8. amount = Config.baseTokenAmount,
  9. toTokenAddress = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c') {
  10. fromTokenAddress = fromTokenAddress.toLowerCase()
  11. toTokenAddress = toTokenAddress.toLowerCase()
  12. amount = amount * (10 ** fromTokenDecimals)
  13. const url = `https://api.1inch.exchange/v3.0/${chainID}/quote?fromTokenAddress=${fromTokenAddress}&amount=${amount}` +
  14. `&toTokenAddress=${toTokenAddress}`
  15. const { data: rst } = await HttpKit.get(url)
  16. if (!rst || !rst.toToken || !rst.toTokenAmount) {
  17. return rst
  18. }
  19. const toTokenAmount = parseFloat(rst.toTokenAmount) / (10 ** rst.toToken.decimals)
  20. const fromTokenAmount = amount / (10 ** fromTokenDecimals)
  21. const price = fromTokenAmount / toTokenAmount
  22. rst.price = price
  23. Config.estimatedGas = rst.estimatedGas
  24. if (toTokenAddress.toLowerCase() === '0xe9e7cea3dedca5984780bafc599bd69add087d56') {
  25. rst.price = 1 / rst.price
  26. }
  27. return rst.price
  28. }
  29. OneInch.swap = async function (fromTokenAddress = '0xe9e7cea3dedca5984780bafc599bd69add087d56',
  30. toTokenAddress = '0x111111111117dc0aa78b770fa6a738034120c302',
  31. fromTokenDecimals = 18,
  32. amount = 100,
  33. gas = Config.estimatedGas,
  34. fromAddress = PrivateConfig.address,
  35. slippage = 1) {
  36. amount = amount * (10 ** fromTokenDecimals)
  37. const url = `https://api.1inch.exchange/v3.0/${chainID}/swap?fromTokenAddress=${fromTokenAddress}&toTokenAddress=${toTokenAddress}`
  38. + `&amount=${amount}&fromAddress=${fromAddress}&slippage=${slippage}`
  39. const { data: rst } = await HttpKit.get(url, {
  40. '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'
  41. })
  42. if (rst && rst.toToken && rst.fromToken) {
  43. const fromTokenAmount = parseFloat(rst.fromTokenAmount) / (10 ** rst.fromToken.decimals)
  44. const toTokenAmount = parseFloat(rst.toTokenAmount) / (10 ** rst.toToken.decimals)
  45. rst.price = fromTokenAmount / toTokenAmount
  46. }
  47. return rst
  48. }
  49. module.exports = OneInch