const CryptoJS = require('crypto') module.exports = class BinanceKit { // 创建签名 static createSignature(secretKey, data) { const hmac = CryptoJS.createHmac('sha256', secretKey) hmac.update(BinanceKit.toQueryString(data)) return hmac.digest('hex') } // 将map转换为queryString static toQueryString(data) { let queryString = '' for (let key in data) { queryString = queryString + `${key}=${data[key]}&` } return queryString.substring(0, queryString.length - 1) } // 获取最终QueryURL static toFinalQueryURL(url, data, signature) { return `${url}?${BinanceKit.toQueryString(data)}&signature=${signature}` } static buildExchangeInfoSymbols(symbols) { let buffer = '' let isFirst = true for (const symbol of symbols) { if (isFirst) { isFirst = false buffer = `["${symbol}"` } else { buffer = `${buffer},"${symbol}"` } } return `${buffer}]` } static parseLotSizeFilterMap(pairInfoList) { if (pairInfoList === undefined) throw new Error('exchange info symbols is undefined!') const filterMap = {} pairInfoList.forEach(function (pairInfo) { const lotSizeFilter = pairInfo.filters.filter(filterObj => filterObj.filterType === 'LOT_SIZE')[0] filterMap[pairInfo.symbol] = Math.log10(1 / parseFloat(lotSizeFilter.stepSize)) }) return filterMap } }