Sfoglia il codice sorgente

价格监视器做的差不多了

龚成明 2 anni fa
parent
commit
e0cd58443f
6 ha cambiato i file con 60 aggiunte e 179 eliminazioni
  1. 13 172
      config/config.js
  2. 2 2
      libs/binance/binance-spot.js
  3. 1 1
      libs/one-task.js
  4. 1 1
      libs/token.js
  5. 1 1
      libs/web3/1inch.js
  6. 42 2
      scripts/monitors/price-monitor.js

+ 13 - 172
config/config.js

@@ -26,7 +26,7 @@ Config.WEB3_RPC_URL = 'https://1rpc.io/bnb'
 // Config.WEB3_RPC_URL = 'https://bsc-dataseed3.binance.org'
 Config.CHAIN_ID = 56
 
-Config.baseToken = {
+Config.baseIerc20Token = {
   contract: '0xe9e7cea3dedca5984780bafc599bd69add087d56',
   decimals: 18,
   symbol: 'BUSD'
@@ -35,177 +35,18 @@ Config.baseToken = {
 // 'tokenHash': 'exchange token symbol'
 Config.tokenMapping = {
   '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c': 'BTC',
-  '0x2170ed0880ac9a755fd29b2688956bd959f933f8': 'ETH'
+  '0x2170ed0880ac9a755fd29b2688956bd959f933f8': 'ETH',
+  '0x7083609fce4d1d8dc0c979aab8c869ea2c873402': 'DOT',
+  '0x0eb3a705fc54725037cc9e008bdede697f62f335': 'ATOM',
+  '0xaec945e04baf28b135fa7c640f624f8d90f1c3a6': 'C98',
+  '0x8ff795a6f4d97e7887c79bea79aba5cc76444adf': 'BCH',
+  '0xbf5140a22578168fd562dccf235e5d43a02ce9b1': 'UNI',
+  '0xe02df9e3e622debdd69fb838bb799e3f168902c5': 'BAKE',
+  '0xf8a0bf9cf54bb92f17374d9e9a321e6a111a51bd': 'LINK',
+  '0x16939ef78684453bfdfb47825f8a5f714f12623a': 'XTZ',
+  '0xae9269f27437f0fcbc232d39ec814844a51d6b8f': 'BURGER',
+  '0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82': 'CAKE',
+  '0xba2ae424d960c26247dd6c32edc70b295c744c43': 'DOGE'
 }
 
-Config.tokenList = [
-  {
-    contract: '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c',
-    decimals: 18,
-    symbol: 'BTC',
-    binanceDecimals: 5
-  },
-
-  {
-    contract: '0x7083609fce4d1d8dc0c979aab8c869ea2c873402',
-    decimals: 18,
-    symbol: 'DOT',
-    binanceDecimals: 2
-  },
-
-  {
-    contract: '0x0eb3a705fc54725037cc9e008bdede697f62f335',
-    decimals: 18,
-    symbol: 'ATOM',
-    binanceDecimals: 2
-  },
-
-  {
-    contract: '0xaec945e04baf28b135fa7c640f624f8d90f1c3a6',
-    decimals: 18,
-    symbol: 'C98',
-    binanceDecimals: 1
-  },
-
-  {
-    contract: '0x47bead2563dcbf3bf2c9407fea4dc236faba485a',
-    decimals: 18,
-    symbol: 'SXP',
-    binanceDecimals: 1
-  },
-
-  {
-    contract: '0xAC51066d7bEC65Dc4589368da368b212745d63E8',
-    decimals: 6,
-    symbol: 'ALICE',
-    binanceDecimals: 2
-  },
-
-  {
-    contract: '0x7f70642d88cf1c4a3a7abb072b53b929b653eda5',
-    decimals: 18,
-    symbol: 'YFII',
-    binanceDecimals: 4
-  },
-
-  {
-    contract: '0x8ff795a6f4d97e7887c79bea79aba5cc76444adf',
-    decimals: 18,
-    symbol: 'BCH',
-    binanceDecimals: 3
-  },
-
-  {
-    contract: '0x2170ed0880ac9a755fd29b2688956bd959f933f8',
-    decimals: 18,
-    symbol: 'ETH',
-    binanceDecimals: 3
-  },
-  
-  {
-    contract: '0xbf5140a22578168fd562dccf235e5d43a02ce9b1',
-    decimals: 18,
-    symbol: 'UNI',
-    binanceDecimals: 1
-  },
-
-  {
-    contract: '0xba2ae424d960c26247dd6c32edc70b295c744c43',
-    decimals: 8,
-    symbol: 'DOGE',
-    binanceDecimals: 0
-  },
-
-  {
-    contract: '0x111111111117dc0aa78b770fa6a738034120c302',
-    decimals: 18,
-    symbol: '1INCH',
-    binanceDecimals: 1
-  },
-
-  {
-    contract: '0x0d8ce2a99bb6e3b7db580ed848240e4a0f9ae153',
-    decimals: 18,
-    symbol: 'FIL',
-    binanceDecimals: 2
-  },
-
-  {
-    contract: '0x1d2f0da169ceb9fc7b3144628db156f3f6c60dbe',
-    decimals: 18,
-    symbol: 'XRP',
-    binanceDecimals: 0
-  },
-
-  {
-    contract: '0x3ee2200efb3400fabb9aacf31297cbdd1d435d47',
-    decimals: 18,
-    symbol: 'ADA',
-    binanceDecimals: 1
-  },
-
-  {
-    contract: '0xcf6bb5389c92bdda8a3747ddb454cb7a64626c63',
-    decimals: 18,
-    symbol: 'XVS',
-    binanceDecimals: 2
-  },
-
-  {
-    contract: '0xa1faa113cbe53436df28ff0aee54275c13b40975',
-    decimals: 18,
-    symbol: 'ALPHA',
-    binanceDecimals: 0
-  },
-
-  {
-    contract: '0xe02df9e3e622debdd69fb838bb799e3f168902c5',
-    decimals: 18,
-    symbol: 'BAKE',
-    binanceDecimals: 1
-  },
-
-  {
-    contract: '0xad6caeb32cd2c308980a548bd0bc5aa4306c6c18',
-    decimals: 18,
-    symbol: 'BAND',
-    binanceDecimals: 1
-  },
-
-  {
-    contract: '0xf8a0bf9cf54bb92f17374d9e9a321e6a111a51bd',
-    decimals: 18,
-    symbol: 'LINK',
-    binanceDecimals: 2
-  },
-
-  {
-    contract: '0x101d82428437127bf1608f699cd651e6abf9766e',
-    decimals: 18,
-    symbol: 'BAT',
-    binanceDecimals: 0
-  },
-
-  {
-    contract: '0x16939ef78684453bfdfb47825f8a5f714f12623a',
-    decimals: 18,
-    symbol: 'XTZ',
-    binanceDecimals: 1
-  },
-
-  {
-    contract: '0xae9269f27437f0fcbc232d39ec814844a51d6b8f',
-    decimals: 18,
-    symbol: 'BURGER',
-    binanceDecimals: 1
-  },
-
-  {
-    contract: '0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82',
-    decimals: 18,
-    symbol: 'CAKE',
-    binanceDecimals: 2
-  }
-]
-
 module.exports = Config

+ 2 - 2
libs/binance/binance-spot.js

@@ -30,7 +30,7 @@ class BinanceSpot {
     this.secretKey = secretKey
   }
 
-  static async realPrice(symbol='BNBUSDT', side=BinanceSpot.TRADE_SIDE.BUY) {
+  static async realPrice(symbol='BNBBUSD', side=BinanceSpot.TRADE_SIDE.BUY) {
     const url = `${BinanceSpot.BASE_URL}/api/v3/depth?symbol=${symbol}&limit=${5}`
 
     const { data: rst } = await HttpKit.get(url)
@@ -39,7 +39,7 @@ class BinanceSpot {
       return 0
     }
 
-    if (side === 'sell') {
+    if (side === BinanceSpot.TRADE_SIDE.SELL) {
       return parseFloat(rst.bids[0][0])
     } else {
       return parseFloat(rst.asks[0][0])

+ 1 - 1
libs/one-task.js

@@ -11,7 +11,7 @@ OneTask.baseInit = async function() {
 
   // 获取lotSizeFilter
   const lotSizeFilterMap = await (async () => {
-    const pairs = Object.values(Config.tokenMapping).map(coin => `${coin}${Config.baseToken.symbol}` )
+    const pairs = Object.values(Config.tokenMapping).map(coin => `${coin}${Config.baseIerc20Token.symbol}` )
     const exchangeInfo = await BinanceSpot.exchangeInfo(pairs)
     return BinanceKit.parseLotSizeFilterMap(exchangeInfo.symbols)
   })()

+ 1 - 1
libs/token.js

@@ -17,7 +17,7 @@ module.exports = class Token {
     // token初始化
     const ierc20Decimals = await IERC20.getDecimals(tokenHash)
     const exchangeSymbol = Config.tokenMapping[tokenHash]
-    const exchangePair = `${exchangeSymbol}${Config.baseToken.symbol}`
+    const exchangePair = `${exchangeSymbol}${Config.baseIerc20Token.symbol}`
     const exchangeLotSize = lotSizeFilterMap[exchangePair]
 
     context.tokenMap[tokenHash] = new Token(exchangeSymbol, exchangeLotSize, exchangePair, ierc20Decimals)

+ 1 - 1
libs/web3/1inch.js

@@ -7,7 +7,7 @@ const chainID = 56
 
 class OneInch {}
 
-OneInch.price = async function(fromTokenAddress = '0xe9e7cea3dedca5984780bafc599bd69add087d56', fromTokenDecimals = 18, amount = Config.baseTokenAmount, toTokenAddress = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c') {
+OneInch.price = async function(fromTokenAddress, toTokenAddress, fromTokenDecimals = 18, amount = Config.baseTokenAmount) {
   fromTokenAddress = fromTokenAddress.toLowerCase()
   toTokenAddress = toTokenAddress.toLowerCase()
   amount = amount * (10 ** fromTokenDecimals)

+ 42 - 2
scripts/monitors/price-monitor.js

@@ -1,9 +1,49 @@
 const OneTask = require('../../libs/one-task')
+const OneInch = require('../../libs/web3/1inch')
+const BinanceSpot = require('../../libs/binance/binance-spot')
+const Config = require('../../config/config')
+
+const showPrices = function(context, task) {
+  const logger = task.logger
+  const tokenMap = context.tokenMap
+
+  console.clear()
+
+  console.info(`---------------------------------------------------------------------------------`)
+  console.info(`| pair\t\t\t| 1inch\t\t\t\t| binance\t\t|`)
+  console.info(`---------------------------------------------------------------------------------`)
+  Object.keys(tokenMap).forEach((tokenHash) => {
+    const token = tokenMap[tokenHash]
+
+    console.info(`| ${token.exchange.pair}\t\t| ${token.OneInchPrice}\t\t| ${token.binancePrice}\t\t|`)
+  })
+  console.info(`---------------------------------------------------------------------------------`)
+  logger.info('')
+}
 
 const onTickFun = async function() {
-  this.logger.info(this.context)
+  const task = this
+  const context = task.context
+  const tokenMap = context.tokenMap
+  const tokenContractAddressList = Object.keys(tokenMap)
+
+  // 搜集所有价格数据
+  for (const tokenHash of tokenContractAddressList) {
+    const toToken = tokenMap[tokenHash]
+    const fromIerc20Token = Config.baseIerc20Token
+    const amount = Config.baseTokenAmount
+
+    const OneInchPrice = await OneInch.price(fromIerc20Token.contract, tokenHash, toToken.ierc20.decimals, amount)
+    const binancePrice = await BinanceSpot.realPrice(toToken.exchange.pair)
+
+    toToken.OneInchPrice = OneInchPrice
+    toToken.binancePrice = binancePrice
+  }
+
+  // 绘制帧
+  showPrices(context, task)
 }
 
-const priceMonitor = new OneTask('PriceMonitor',1000, OneTask.baseInit, onTickFun)
+const priceMonitor = new OneTask('PriceMonitor',5 * 1000, OneTask.baseInit, onTickFun)
 
 priceMonitor.Start()