Browse Source

token完美封装,测试遇到一个奇怪问题

龚成明 2 years ago
parent
commit
c7dba34cfd

+ 1 - 1
src/config/config.js

@@ -33,7 +33,7 @@ Config.baseToken = {
 }
 
 // 'tokenHash': 'exchange token symbol'
-Config.tokenMap = {
+Config.tokenMapping = {
   '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c': 'BTC',
   '0x2170ed0880ac9a755fd29b2688956bd959f933f8': 'ETH'
 }

+ 12 - 5
src/libs/binance/binance-kit.js

@@ -1,10 +1,12 @@
 const CryptoJS = require('crypto')
+const Config = require("../../config/config");
+const BinanceSpot = require("./binance-spot");
 
-class BinanceTik {
+module.exports = class BinanceKit {
   // 创建签名
   static createSignature(secretKey, data) {
     const hmac = CryptoJS.createHmac('sha256', secretKey)
-    hmac.update(Tik.toQueryString(data))
+    hmac.update(BinanceKit.toQueryString(data))
     return hmac.digest('hex')
   }
 
@@ -19,7 +21,7 @@ class BinanceTik {
 
   // 获取最终QueryURL
   static toFinalQueryURL(url, data, signature) {
-    return `${url}?${Tik.toQueryString(data)}&signature=${signature}`
+    return `${url}?${BinanceKit.toQueryString(data)}&signature=${signature}`
   }
 
   static buildExchangeInfoSymbols(symbols) {
@@ -51,6 +53,11 @@ class BinanceTik {
 
     return filterMap
   }
+  //
+  // static async getLotSizeFilterMap() {
+  //   const pairs = Object.values(Config.tokenMapping).map(coin => `${coin}${Config.baseToken.symbol}` )
+  //   const exchangeInfo = await BinanceSpot.exchangeInfo(pairs)
+  //
+  //   return BinanceKit.parseLotSizeFilterMap(exchangeInfo.symbols)
+  // }
 }
-
-module.exports = BinanceTik

+ 4 - 1
src/libs/binance/test/binance-spot-test.js

@@ -1,6 +1,7 @@
 const BinanceSpot = require('../binance-spot')
 const BinanceKit = require('../binance-kit')
 const logger = require('../../../kit/logger-kit')
+const Config = require('../../../config/config')
 
 async function realPriceTest() {
   logger.info('real price test:')
@@ -10,7 +11,9 @@ async function realPriceTest() {
 
 async function exchangeInfoTest() {
   logger.info('exchange info test:')
-  const exchangeInfo = await BinanceSpot.exchangeInfo()
+  const pairs = Object.values(Config.tokenMapping).map(coin => `${coin}${Config.baseToken.symbol}` )
+  const exchangeInfo = await BinanceSpot.exchangeInfo(pairs)
+
   logger.info(BinanceKit.parseLotSizeFilterMap(exchangeInfo.symbols))
   logger.info('')
 }

+ 26 - 0
src/libs/binance/test/token-test.js

@@ -0,0 +1,26 @@
+const logger = require('../../../kit/logger-kit')
+const IERC20 = require('../../web3/ierc20-token')
+const Context = require('../../context')
+const Config = require('../../../config/config')
+const Token = require('../../token')
+const BinanceKit = require('../binance-kit')
+const BinanceSpot = require('../binance-spot')
+
+async function main() {
+  const pairs = Object.values(Config.tokenMapping).map(coin => `${coin}${Config.baseToken.symbol}` )
+  const exchangeInfo = await BinanceSpot.exchangeInfo(pairs)
+
+  // const lotSizeFilterMap = BinanceKit.parseLotSizeFilterMap(exchangeInfo.symbols)
+  //
+  // const context = new Context()
+  // // const lotSizeFilterMap = await BinanceKit.getLotSizeFilterMap()
+  // logger.info(lotSizeFilterMap)
+  //
+  // await IERC20.batchInit(context, Object.keys(Config.tokenMapping))
+  // logger.info(IERC20)
+  //
+  // await Token.batchInit(context, Object.keys(Config.tokenMapping), lotSizeFilterMap)
+  // logger.info(context)
+}
+
+main()

+ 3 - 0
src/libs/context.js

@@ -0,0 +1,3 @@
+module.exports = class Context {
+  tokenMap
+}

+ 22 - 0
src/libs/token.js

@@ -1,3 +1,6 @@
+const Config = require("../config/config");
+const IERC20 = require("./web3/ierc20-token");
+
 module.exports = class Token {
   exchange = {}
   ierc20 = {}
@@ -9,4 +12,23 @@ module.exports = class Token {
 
     this.ierc20.decimals = ierc20Decimals
   }
+
+  static async init(context, tokenHash, lotSizeFilterMap) {
+    // token初始化
+    const ierc20Decimals = await IERC20.getDecimals(tokenHash)
+    const exchangeSymbol = Config.tokenMapping[tokenHash]
+    const exchangePair = `${exchangeSymbol}${Config.baseToken.symbol}`
+    const exchangeLotSize = lotSizeFilterMap[exchangePair]
+
+    context.tokenMap[tokenHash] = new Token(exchangeSymbol, exchangeLotSize, exchangePair, ierc20Decimals)
+  }
+
+  static async batchInit(context, ierc20TokenAddressList, lotSizeFilterMap) {
+    context.tokenMap = {}
+
+    for (const tokenHash of ierc20TokenAddressList) {
+      // 初始化token
+      await Token.init(context, tokenHash, lotSizeFilterMap)
+    }
+  }
 }

+ 32 - 0
src/libs/web3/ierc20-token.js

@@ -0,0 +1,32 @@
+const SimpleWeb3 = require('./simple-web3')
+const Config = require('../../config/config')
+
+class IERC20 {}
+
+IERC20.batchInit = async function (context, ierc20TokenAddressList) {
+  IERC20.contractMap = {}
+
+  // 初始化token
+  for (const tokenHash of ierc20TokenAddressList) {
+    await IERC20.initTokenByHash(context, tokenHash)
+  }
+}
+
+IERC20.initTokenByHash = async function (context, tokenHash) {
+  // 合约初始化
+  IERC20.contractMap[tokenHash] = new SimpleWeb3.web3.eth.Contract(Config.BASE_ABI, tokenHash)
+}
+
+IERC20.getTokenName = async function (tokenHash) {
+  return await IERC20.contractMap[tokenHash].methods.name().call()
+}
+
+IERC20.getTokenSymbol = async function (tokenHash) {
+  return await IERC20.contractMap[tokenHash].methods.symbol().call()
+}
+
+IERC20.getDecimals = async function (tokenHash) {
+  return await IERC20.contractMap[tokenHash].methods.decimals().call()
+}
+
+module.exports = IERC20

+ 0 - 48
src/libs/web3/simple-ierc20.js

@@ -1,48 +0,0 @@
-const SimpleWeb3 = require('./simple-web3')
-const Config = require('../../config/config')
-const BinanceSpot = require('../binance/binance-spot')
-const BinanceKit = require('../binance/binance-kit')
-const Token = require('../token')
-
-class IERC20 {}
-
-IERC20.batchInit = async function (ierc20TokenAddressList) {
-  IERC20.contractMap = {}
-  IERC20.tokenMap = {}
-
-  const pairs = Object.values(Config.tokenMap).map(coin => `${coin}${Config.baseToken.symbol}` )
-  const exchangeInfo = await BinanceSpot.exchangeInfo(pairs)
-  const lotSizeFilterMap = BinanceKit.parseLotSizeFilterMap(exchangeInfo.symbols)
-
-  for (const tokenHash of ierc20TokenAddressList) {
-    await IERC20.initTokenByHash(tokenHash, lotSizeFilterMap)
-  }
-}
-
-IERC20.initTokenByHash = async function (tokenHash, lotSizeFilterMap) {
-  // 合约初始化
-  IERC20.contractMap[tokenHash] = new SimpleWeb3.web3.eth.Contract(Config.BASE_ABI, tokenHash)
-
-  // 代币初始化
-  const ierc20Decimals = await IERC20.getDecimals(tokenHash)
-  const exchangeSymbol = Config.tokenMap[tokenHash]
-  const exchangePair = `${exchangeSymbol}${Config.baseToken.symbol}`
-  const exchangeLotSize = lotSizeFilterMap[exchangePair]
-
-  // TODO 将tokenMap放到上下文中
-  IERC20.tokenMap[tokenHash] = new Token(exchangeSymbol, exchangeLotSize, exchangePair, ierc20Decimals)
-}
-
-IERC20.getTokenName = async function (tokenHash) {
-  return await IERC20.contractMap[tokenHash].methods.name().call()
-}
-
-IERC20.getTokenSymbol = async function (tokenHash) {
-  return await IERC20.contractMap[tokenHash].methods.symbol().call()
-}
-
-IERC20.getDecimals = async function (tokenHash) {
-  return await IERC20.contractMap[tokenHash].methods.decimals().call()
-}
-
-module.exports = IERC20

+ 5 - 13
src/libs/web3/test/ierc20-test.js

@@ -1,21 +1,13 @@
 const logger = require('../../../kit/logger-kit')
-const IERC20 = require('../simple-ierc20')
+const IERC20 = require('../ierc20-token')
+const Context = require('../../context')
 const Config = require('../../../config/config')
 
 async function main() {
-  await IERC20.batchInit(Object.keys(Config.tokenMap))
-  console.log(IERC20)
+  const context = new Context()
 
-  // for (const tokenHash of Object.keys(Config.tokenMap)) {
-  //   const tokenName = await IERC20.getTokenName(tokenHash)
-  //   const tokenSymbol = await IERC20.getTokenSymbol(tokenHash)
-  //   const tokenDecimals = await IERC20.getDecimals(tokenHash)
-  //   const exchangeSymbol = Config.tokenMap[tokenHash]
-  //
-  //
-  //   logger.info(`${tokenName}, ${tokenSymbol}, ${tokenDecimals}, ${exchangeSymbol}`)
-  //   logger.info('')
-  // }
+  await IERC20.batchInit(context, Object.keys(Config.tokenMapping))
+  logger.info(IERC20)
 }
 
 main()