price-monitor.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. const OneTask = require('../../libs/one-task')
  2. const OneInch = require('../../libs/web3/1inch')
  3. const BinanceSpot = require('../../libs/binance/binance-spot')
  4. const Config = require('../../config/config')
  5. const showPrices = function(context, task) {
  6. const logger = task.logger
  7. const fileLogger = task.fileLogger
  8. const tokenMap = context.tokenMap
  9. console.clear()
  10. console.info(`-----------------------------------------------------------------------------------------------------------------`)
  11. console.info(`| pair\t\t\t| 1inch\t\t\t\t| binance\t\t| distance\t\t\t|`)
  12. console.info(`-----------------------------------------------------------------------------------------------------------------`)
  13. Object.keys(tokenMap).forEach((tokenHash) => {
  14. const token = tokenMap[tokenHash]
  15. const pair = token.exchange.pair
  16. const OneInchPrice = token.OneInchPrice
  17. const BinancePrice = token.BinancePrice
  18. const distancePrice = BinancePrice - OneInchPrice
  19. if (distancePrice > 0) {
  20. fileLogger.info(`| ${pair}\t\t| ${OneInchPrice}\t\t| ${BinancePrice}\t\t| ${distancePrice}\t\t|`)
  21. }
  22. console.info(`| ${pair}\t\t| ${OneInchPrice}\t\t| ${BinancePrice}\t\t| ${distancePrice}\t\t|`)
  23. })
  24. console.info(`-----------------------------------------------------------------------------------------------------------------`)
  25. logger.info('')
  26. }
  27. const onTickFun = async function() {
  28. const task = this
  29. const context = task.context
  30. const tokenMap = context.tokenMap
  31. const tokenContractAddressList = Object.keys(tokenMap)
  32. // 搜集所有价格数据
  33. for (const tokenHash of tokenContractAddressList) {
  34. const toToken = tokenMap[tokenHash]
  35. const fromIerc20Token = Config.baseIerc20Token
  36. const amount = Config.baseTokenAmount
  37. const OneInchPrice = await OneInch.price(fromIerc20Token.contract, tokenHash, amount)
  38. const BinancePrice = await BinanceSpot.realPrice(toToken.exchange.pair)
  39. toToken.OneInchPrice = OneInchPrice
  40. toToken.BinancePrice = BinancePrice
  41. }
  42. // 绘制帧
  43. showPrices(context, task)
  44. }
  45. const priceMonitor = new OneTask('PriceMonitor',5 * 1000, OneTask.baseInit, onTickFun)
  46. priceMonitor.Start()