DevYK 3 anni fa
parent
commit
02da05feb6

+ 2 - 0
.gitignore

@@ -21,6 +21,8 @@
 
 .env
 
+/logs/*
+
 npm-debug.log*
 纱线调试日志*
 纱线错误日志*

+ 5 - 5
app.js

@@ -9,10 +9,10 @@ const logger = require('koa-logger')
 // const index = require('./routes/index')
 const users = require('./routes/users')
 var sdk = require('./routes/sdk');
-var db_test = require('./routes/db_test');
+var db_test = require('./test/db_test');
 
 require('./model/timer')
-
+const log = require('./model/logger')
 
 var test = require('./test/test');
 // error handler
@@ -35,7 +35,7 @@ app.use(async (ctx, next) => {
   const start = new Date()
   await next()
   const ms = new Date() - start
-  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
+  log.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
 })
 
 // routes
@@ -48,9 +48,9 @@ app.use(db_test.routes(), db_test.allowedMethods())
 app.use(test.routes(), test.allowedMethods())
 // error-handling
 app.on('error', (err, ctx) => {
-  console.error('server error', err, ctx)
+  log.error('server error', err, ctx)
 });
 
 
-console.log('app start');
+log.log('app start');
 module.exports = app

+ 8 - 2
config/dev_config.js

@@ -5,8 +5,8 @@ const cryppt_config = {
 
 
 const timer_config = {
-    OPEN_TIMED_COLLECT_COINS:false
-} 
+    OPEN_TIMED_COLLECT_COINS: false
+}
 
 const account_config = {
     WELLET_PRIVATE_KEY: '4Uz4Jm7Xd1gH+1nFbR0B7hk1ITmsT8O3iAgS/hC0L9TkrqAZoklsQhXl4fA1X+uqpckF4HtnXnMpwng94GvvzsRfXYirfDfboneuzfc0o7s=',
@@ -49,11 +49,17 @@ const moralis_config = {
     DEFAULT_PRIVATE_KEY: "6084c2a5e39fa83d5a119c3a864a442e77287f4b03bad93cef38ec5f44bca630",
 }
 
+
+const logger_config = {
+    BASE_PATH:`${__dirname}/../logs/denetnode`,
+}
+
 module.exports = {
     db_config,
     moralis_config,
     reids_token_config,
     account_config,
     timer_config,
+    logger_config
 }
 

+ 6 - 1
config/prd_config.js

@@ -35,7 +35,7 @@ const db_config = {
     redis: {
         PORT: 6379, // Redis port
         HOST: "denet-chain-prod.y2slbl.clustercfg.memorydb.us-east-1.amazonaws.com", // Redis host
-        USERNAME: null, 
+        USERNAME: null,
         PASSWORD: null,
     },
 }
@@ -48,11 +48,16 @@ const moralis_config = {
     MORALIS_SECRET: ""
 }
 
+const logger_config = {
+    BASE_PATH:`/datalog/denetnode`,
+}
+
 module.exports = {
     db_config,
     moralis_config,
     reids_token_config,
     account_config,
     timer_config,
+    logger_config,
 }
 

+ 8 - 0
config/test_config.js

@@ -47,11 +47,19 @@ const moralis_config = {
     MORALIS_SECRET: "BGlDVjy7054iLDpDcdc9AbH65rZrhj8QIhsThcwF6thNzTnbS2ft8XmM70x4jOpU",
     DEFAULT_PRIVATE_KEY: "6084c2a5e39fa83d5a119c3a864a442e77287f4b03bad93cef38ec5f44bca630",
 }
+
+
+
+const logger_config = {
+    BASE_PATH:`/datalog/denetnode`,
+}
+
 module.exports = {
     db_config,
     moralis_config,
     reids_token_config,
     account_config,
     timer_config,
+    logger_config,
 }
 

+ 0 - 0
model/core/moralis_core.js


+ 87 - 0
model/logger.js

@@ -0,0 +1,87 @@
+// https://blog.csdn.net/crazy_jialin/article/details/121673336
+
+// logger.js
+
+const log4js = require('log4js')
+var { logger_config } = require('../config/config.js')
+
+const BASE_PATH = logger_config.BASE_PATH
+
+log4js.configure({
+    appenders: {
+        consoleOut: {
+            type: 'console',
+            layout: {
+                type: 'colored',
+            },
+        },
+        default: {
+            type: 'file',
+            filename: BASE_PATH+`/denet_node_server_logger`,
+            pattern: 'yyyy-MM-dd.log',
+            alwaysIncludePattern: true, // 当为 true 时,log 文件名会包含之前设置的 pattern 信息 (默认为 false,但是强烈建议开启)
+        },
+        error: {
+            type: 'file',
+            filename: BASE_PATH+`/denet_node_server_logger_error`,
+            pattern: 'yyyy-MM-dd.log',
+            alwaysIncludePattern: true,
+        },
+    },
+    categories: {
+        default: {
+            appenders: ['consoleOut', 'default'],
+            level: 'all',
+        },
+        error: {
+            appenders: ['consoleOut', 'error'],
+            level: 'warn',
+        },
+    },
+})
+
+const defaultLogger = log4js.getLogger('default') // 普通级别的logger,输出到控制台和日期分类的文件
+const errorLogger = log4js.getLogger('error') // 错误信息的logger,输出到控制台和error.log中
+
+module.exports = {
+    // info及以下级别的日志采用default策略,使用call函数改变this指向,否则会导致logger内部this指向报错
+    trace() {
+        return defaultLogger.trace.call(defaultLogger, ...arguments)
+    },
+    debug() {
+        return defaultLogger.debug.call(defaultLogger, ...arguments)
+    },
+    info() {
+        return defaultLogger.info.call(defaultLogger, ...arguments)
+    },
+    log() {
+        return defaultLogger.debug.call(defaultLogger, ...arguments)
+    },
+
+    // warn及以上的日志采用error策略
+    warn() {
+        errorLogger.warn.call(errorLogger, ...arguments)
+    },
+    error() {
+        errorLogger.error.call(errorLogger, ...arguments)
+    },
+    fatal() {
+        errorLogger.fatal.call(errorLogger, ...arguments)
+    },
+    mark() {
+        errorLogger.mark.call(errorLogger, ...arguments)
+    },
+}
+
+
+//use
+// const logger = require('./logger')
+
+// logger.trace('trace log')
+// logger.debug('debug log')
+// logger.info('info log')
+// logger.warn('warn log')
+// logger.error('error log')
+// logger.fatal('fatal log')
+// logger.mark('mark log')
+

+ 67 - 71
model/moralis_sdk.js

@@ -6,7 +6,7 @@ var utils = require('./utils.js');
 var { moralis_config, reids_token_config, account_config } = require('../config/config.js')
 const redis = require("./redis_db")  //导入 db.js
 const mysql = require("./mysql_db")
-
+const logger = require('./logger')
 /* Moralis init code */
 var serverUrl = moralis_config.SERVER_URL;
 var appId = moralis_config.APP_ID;
@@ -46,14 +46,14 @@ async function getAccountBalances(options) {
     if (options.chain) {
         options.chain = utils.getChainName(options.chain)
     }
-    console.log('getAccountBalances :', options)
+    logger.log('getAccountBalances :', options)
     if (options.type == 'native') {
         var opt_ret = await Moralis.Web3API.account.getNativeBalance(options);
-        console.log('getNativeBalance=', opt_ret);
+        logger.log('getNativeBalance=', opt_ret);
         return opt_ret
     } else {
         var aar = await Moralis.Web3API.account.getTokenBalances(options);
-        console.log('getTokenBalances=', aar);
+        logger.log('getTokenBalances=', aar);
         return aar;
     }
 }
@@ -101,35 +101,35 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
     //得到 20 币 满足 1美刀的 count
     if (Array.isArray(my_account_all_coins.other) && my_account_all_coins.other.length > 0) {
         my_account_all_coins.other.forEach(element => {
-            console.debug('20 element=', element);
+            logger.debug('20 element=', element);
             var find_transfer_item = findTokenPriceItem(element.token_address, tokenPrices);
             var total_all_usdprice = calculate_total_usdprice(element.balance, element.decimals, find_transfer_item.usdPrice);
-            console.debug('findTokenPriceItem ret=', element.token_address, find_transfer_item, total_all_usdprice);
+            logger.debug('findTokenPriceItem ret=', element.token_address, find_transfer_item, total_all_usdprice);
             if (find_transfer_item && total_all_usdprice > 1.0) {
                 tokenCount += 1;
-                console.debug('token > 1.0', tokenCount, element.token_address);
+                logger.debug('token > 1.0', tokenCount, element.token_address);
             }
         });
-        console.log('account_config.TOKEN_GAS_LIMIT=', account_config.TOKEN_GAS_LIMIT);
+        logger.log('account_config.TOKEN_GAS_LIMIT=', account_config.TOKEN_GAS_LIMIT);
 
         tokenGasPrice = parseInt(tokenCount) * parseInt(account_config.TOKEN_GAS_LIMIT) * parseInt(account_config.BNB_GAS_PRICE);
         ret_a_gas = account_config.BNB_GAS_PRICE;
-        console.log('tokenGasPrice=', tokenGasPrice);
+        logger.log('tokenGasPrice=', tokenGasPrice);
     }
 
 
     //计算 native 是否满足 1美刀
-    console.log('isTransferGasFree token count:', tokenCount);
+    logger.log('isTransferGasFree token count:', tokenCount);
     var nativeAllBalance = my_account_all_coins.native.balance;
     var nativeCount = 0
     var nativePriceItem = findTokenPriceItem('0x0000000000000000000000000000000000000000', tokenPrices);//todo 线上环境需要换
-    console.debug('native nativePriceItem=', nativePriceItem, nativeAllBalance);
+    logger.debug('native nativePriceItem=', nativePriceItem, nativeAllBalance);
     if (nativePriceItem) {
         var total_all_usdprice = calculate_total_usdprice(nativeAllBalance, '18', nativePriceItem.usdPrice);
-        console.debug('native total_all_usdprice=', total_all_usdprice);
+        logger.debug('native total_all_usdprice=', total_all_usdprice);
         if (total_all_usdprice > 1.0) {
             nativeCount = 1;
-            console.debug('native > 1.0', tokenCount);
+            logger.debug('native > 1.0', tokenCount);
             nativeGasPrice = parseInt(nativeCount) * parseInt(account_config.BNB_GAS_LIMIT) * parseInt(account_config.BNB_GAS_PRICE);
             ret_a_gas = account_config.BNB_GAS_PRICE;
         }
@@ -138,22 +138,22 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
     //计算所有币转账所需要的 gas 
     totalCount = nativeCount + tokenCount;
     // var gasPrice = await redis.readRedis(reids_token_config.GASPRICE);
-    console.log('nativeAllBalance', nativeAllBalance);
-    console.log('totalCount', totalCount);
+    logger.log('nativeAllBalance', nativeAllBalance);
+    logger.log('totalCount', totalCount);
 
 
 
 
     var total2Gas = nativeGasPrice + tokenGasPrice;
     var service_charge = 0;
-    console.log('total2Gas', total2Gas);
+    logger.log('total2Gas', total2Gas);
 
     //如果当前的钱不够  gas
     if (nativeAllBalance < total2Gas) {
         if (tokenCount > 0) {//出现 token 需要转移手续费
             service_charge = 1;
             total2Gas = (total2Gas - nativeAllBalance);//充手续费
-            console.log('需要转账=', total2Gas);
+            logger.log('需要转账=', total2Gas);
         }
     }
     ret_total_gas_price = total2Gas.toString();
@@ -170,7 +170,7 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
 
 function findTokenPriceItem(token_address, tokenPrices) {
     return tokenPrices.tokenPrice.find(element => {
-        console.log('findTokenPriceItem find=', element.contract, token_address)
+        logger.log('findTokenPriceItem find=', element.contract, token_address)
         return element.contract.toLowerCase() == token_address.toLowerCase();
     })
 }
@@ -188,7 +188,7 @@ async function updateNativeBalance(nativeBalance, obj) {
     do {
         //上面转账完 BNB 会减去,这里再获取一次
         var native_ret = await Moralis.Web3API.account.getNativeBalance(temp);
-        console.log('更新余额 :', native_ret, retryCount)
+        logger.log('更新余额 :', native_ret, retryCount)
         if (nativeBalance != native_ret.balance) {
             return native_ret.balance;
         }
@@ -203,10 +203,10 @@ async function transfers(obj, my_account_all_coins) {
     var address = obj.address;
     var chain = obj.chain;
     var tokenPrices = obj.tokenPrices;
-    console.log('tokenPrices=', tokenPrices, my_account_all_coins);
+    logger.log('tokenPrices=', tokenPrices, my_account_all_coins);
     if (!my_account_all_coins || !tokenPrices) return 'error.'
 
-    console.log(' my_account_all_coins.other.lenth=', my_account_all_coins.other.length);
+    logger.log(' my_account_all_coins.other.lenth=', my_account_all_coins.other.length);
 
     var isUpdateNativeBalance = 0;
 
@@ -228,14 +228,14 @@ async function transfers(obj, my_account_all_coins) {
                         type: 'erc20',
                         address: address,
                     }
-                    console.log('start_collectCoins erc20:', obj_20);
-                    console.log('calculate_total_usdprice 20', calculate_total_usdprice(transfer_item.balance, transfer_item.decimals, '0.1'));
+                    logger.log('start_collectCoins erc20:', obj_20);
+                    logger.log('calculate_total_usdprice 20', calculate_total_usdprice(transfer_item.balance, transfer_item.decimals, '0.1'));
                     isUpdateNativeBalance = 1;
                     var ret = await start_collectCoins(obj_20)
-                    console.log('start_collectCoins erc20 respose...', ret);
+                    logger.log('start_collectCoins erc20 respose...', ret);
                 }
             } else {
-                console.error('token Must be greater than  a dollar.', transfer_item.balance, transfer_item.decimals);
+                logger.error('token Must be greater than  a dollar.', transfer_item.balance, transfer_item.decimals);
                 return toJson(-1, null, 'token Must be greater than  a dollar.');
             }
         }
@@ -243,11 +243,11 @@ async function transfers(obj, my_account_all_coins) {
 
     //native 归集
     if (my_account_all_coins.native) {
-        console.log('查询本地余额参数=', obj)
+        logger.log('查询本地余额参数=', obj)
         if (obj.chain) {
             obj.chain = utils.getChainName(obj.chain)
         }
-        console.log('查询本地余额 before', my_account_all_coins.native)
+        logger.log('查询本地余额 before', my_account_all_coins.native)
         if (isUpdateNativeBalance) {
             // do {
             var updateBalance = await updateNativeBalance(my_account_all_coins.native.balance, obj)
@@ -267,29 +267,29 @@ async function transfers(obj, my_account_all_coins) {
             // } while (native_ret.balance == my_account_all_coins.native.balance);
         }
         obj.chain = chain;
-        console.log('查询本地余额 after', my_account_all_coins.native)
+        logger.log('查询本地余额 after', my_account_all_coins.native)
         var find_native_item = findTokenPriceItem('0x0000000000000000000000000000000000000000', tokenPrices);//todo 线上环境需要换
         var nativeCoins = calculate_total_usdprice(my_account_all_coins.native.balance, '18', find_native_item.usdPrice);
-        console.log('start_collectCoins nativeCoins:', nativeCoins, obj);
-        console.log('start_collectCoins obj:', obj);
-        console.log('start_collectCoins native.balance:', my_account_all_coins.native.balance);
+        logger.log('start_collectCoins nativeCoins:', nativeCoins, obj);
+        logger.log('start_collectCoins obj:', obj);
+        logger.log('start_collectCoins native.balance:', my_account_all_coins.native.balance);
         //todo 计算 token 币价格 * token美元单价
         if (find_native_item && nativeCoins > 1.0) {
-            console.log('native.balance', my_account_all_coins.native.balance)
-            console.log('aGasPrice', obj.transFerGasFree.aGasPrice)
-            console.log('gasLimint', account_config.BNB_GAS_LIMIT)
+            logger.log('native.balance', my_account_all_coins.native.balance)
+            logger.log('aGasPrice', obj.transFerGasFree.aGasPrice)
+            logger.log('gasLimint', account_config.BNB_GAS_LIMIT)
             // var gasPrice = BigInt(obj.transFerGasFree.aGasPrice);
 
             var gasPrice = BigInt(account_config.BNB_GAS_PRICE);
             var gasLimit = BigInt(account_config.BNB_GAS_LIMIT);
             var nativeBalance = BigInt(my_account_all_coins.native.balance);
 
-            console.log('native.balance>>>', nativeBalance)
-            console.log('aGasPrice>>>', gasPrice)
-            console.log('gasLimint>>>', gasLimit)
+            logger.log('native.balance>>>', nativeBalance)
+            logger.log('aGasPrice>>>', gasPrice)
+            logger.log('gasLimint>>>', gasLimit)
 
             var real_native_amount = nativeBalance - gasPrice * gasLimit;
-            console.log('start_collectCoins native amount:', real_native_amount.toString());
+            logger.log('start_collectCoins native amount:', real_native_amount.toString());
 
             obj = {
                 chain: chain,
@@ -298,11 +298,11 @@ async function transfers(obj, my_account_all_coins) {
                 type: 'native',
                 address: address,
             }
-
-            console.log('start_collectCoins native:', obj);
-            console.log('calculate_total_usdprice native', nativeCoins, find_native_item);
+            logger.log('start_collectCoins native:', obj);
+            logger.log('calculate_total_usdprice native', nativeCoins, find_native_item);
             return await start_collectCoins(obj)
         } else {
+            logger.error('native Must be greater than  a dollar.', obj);
             return toJson(-1, null, 'native Must be greater than  a dollar.');
         }
     }
@@ -338,7 +338,7 @@ const collectCoins = async (obj) => {
 
     //计算 gas 费用 是否需要归集
     var transFerGasFree = await computeTransferGasFree(my_account_all_coins, obj.tokenPrices);
-    console.log('computeTransferGasFree=', transFerGasFree)
+    logger.log('computeTransferGasFree=', transFerGasFree)
 
     //是否需要归集
     if (transFerGasFree.totalCount > 0) {
@@ -351,9 +351,9 @@ const collectCoins = async (obj) => {
                 type: 'native',
                 address: account_config.WELLET_PUBLIC_KEY, //todo 正式环境需要替换从 mysql read
             }
-            console.log('开始充值 gas ', obj_wd)
+            logger.log('开始充值 gas ', obj_wd)
             var ret = await withdraw(obj_wd)
-            console.log('充值完成 gas ', ret)
+            logger.log('充值完成 gas ', ret)
 
             //更新本地余额
             var updateBalance = await updateNativeBalance(my_account_all_coins.native.balance, obj)
@@ -364,9 +364,9 @@ const collectCoins = async (obj) => {
 
         obj.chain = chain;
         obj.transFerGasFree = transFerGasFree;
-        console.log('transfers--->', obj);
+        logger.log('transfers--->', obj);
         var ret = await transfers(obj, my_account_all_coins);
-        console.log('归集结果=', ret);
+        logger.log('归集结果=', ret);
         return ret;
     }
     return obj.address + ':不满足归集条件';
@@ -379,10 +379,8 @@ async function execCollectCoinsTask() {
         var obj = collectCoinsArrays.pop();
         //开始收集用户地址里面的币到归集地址
         var ret = await collectCoins(obj);
-        console.log('execCollectCoinsTask=', obj, ret)
+        logger.log('execCollectCoinsTask=', obj, ret)
     }
-    //     resolve('result');
-    // })
 }
 
 
@@ -395,27 +393,27 @@ function pushCollectConisObj(obj) {
 async function readPriveteKeyFromMysql(address) {
     return new Promise(resolve => {
         mysql.queryUserPrivateKeyFromUserAddress(address).then(ret => {
-            console.log('readPriveteKeyFromMysql=', ret);
+            logger.log('readPriveteKeyFromMysql=', ret);
             resolve(ret);
         })
     })
 }
 
 const transfer = async (obj) => {
-    console.debug("fun transfer in ", obj);
-    console.debug("fun transfer serverUrl ", serverUrl);
-    console.debug("fun transfer appId ", serverUrl);
-    console.debug("fun transfer moralisSecret ", moralisSecret);
+    logger.debug("fun transfer in ", obj);
+    logger.debug("fun transfer serverUrl ", serverUrl);
+    logger.debug("fun transfer appId ", serverUrl);
+    logger.debug("fun transfer moralisSecret ", moralisSecret);
     await initMoralisSecretSDK();
     // initSDK(moralisSecret);
-    console.debug("fun transfer start ok ");
+    logger.debug("fun transfer start ok ");
     const opts = {};
     opts.chainId = 'bsc_testnet';
     opts.privateKey = moralis_config.DEFAULT_PRIVATE_KEY;
     opts.type = "erc20"; //native erc20
 
     if (!obj.receiver || !obj.amount || parseInt(obj.amount) <= 0) {
-        console.error("fun transfer parameter error.");
+        logger.error("transfer fun transfer parameter error.",obj.receiver,obj.amount,obj.amount);
         return toJson(ERROR_CODE_001, null, "please check receiver or amount parameter is ok ?");
     }
     if (obj.chain != null) {
@@ -445,8 +443,6 @@ const transfer = async (obj) => {
         opts.privateKey = obj.privateKey;
     }
 
-    //解密私钥
-    var privateKey = '';
     //提币
     if (obj.withdraw) {
         //提币公司
@@ -466,7 +462,7 @@ const transfer = async (obj) => {
     //解密
     opts.privateKey = utils.decryptPrivityKey(opts.privateKey);
 
-    console.log('decryptPrivityKey privateKey=', opts.privateKey);
+    logger.log('decryptPrivityKey privateKey=', opts.privateKey);
     try {
         // sending 0.5 DAI tokens with 18 decimals on BSC testnet
         var options;
@@ -477,14 +473,14 @@ const transfer = async (obj) => {
                 receiver: opts.receiver, //接收钱包地址
                 contractAddress: opts.contractAddress //用户合约地址
             };
-            console.log("options 20 =", options);
+            logger.log("options 20 =", options);
         } else { //ETH or BNB
             options = Moralis.TransferOptions = {
                 type: opts.type,
                 amount: opts.amount,
                 receiver: opts.receiver, //接收钱包地址
             };
-            console.log("options native =", options, opts.chainId);
+            logger.log("options native =", options, opts.chainId);
         }
 
         // Enable web3
@@ -496,7 +492,7 @@ const transfer = async (obj) => {
         var ret = await Moralis.transfer(options);
         return toJson(SUCCEED_CODE, ret, "");
     } catch (error) {
-        console.log('transfer error:', error);
+        logger.error('transfer error:', error);
         if (error.reason != null) {
             return toJson(ERROR_CODE_001, null, error.toString());
         } else {
@@ -522,13 +518,13 @@ const getAllTokenWithdrawInfoLists = async (obj) => {
  */
 const getAllTotkenPrice = async () => {
     try {
-        console.log('当前环境:', process.env.NODE_ENV);
-        console.log("getAllTotkenPrice in", reids_token_config); // Prints "value"
+        logger.log('当前环境:', process.env.NODE_ENV);
+        logger.log("getAllTotkenPrice in", reids_token_config); // Prints "value"
         var token_price_key = reids_token_config.TOKENPRICE;
-        console.log("getAllTotkenPrice token_price_key=", token_price_key);
+        logger.log("getAllTotkenPrice token_price_key=", token_price_key);
         return await redis.readRedis(token_price_key)
     } catch (error) {
-        console.error("getTotkenPrice=", error);
+        logger.error("getTotkenPrice=", error);
         return toJson(ERROR_CODE_001, null, error.toString());
     }
 }
@@ -546,14 +542,14 @@ function setTransfersDataType(type, ret) {
 //hash 0xe09ba3a4c9f7a8902e01af68d0f1f91906f3f7db1195227e61c45c0e86b2630a
 async function getTokenTransfers(opt) {
     await initMasterSDK();
-    console.debug("fun getTokenTransfers in ", opt);
+    logger.debug("fun getTokenTransfers in ", opt);
     const options = {};
     options.type = 'all';
     options.chain = 'bsc_mainnet';
 
     if (opt.chain != null) {
         options.chain = utils.getChainName(opt.chain);
-        console.log('getTokenTransfers=', options.chain);
+        logger.log('getTokenTransfers=', options.chain);
     }
 
     if (opt.order != null) {
@@ -581,7 +577,7 @@ async function getTokenTransfers(opt) {
         options.type = 'transaction_hash';
     }
 
-    console.debug('getTokenTransfers-->>>', options);
+    logger.debug('getTokenTransfers-->>>', options);
     if (options.type == 'all') {//查询主流币和 20 币所有的交易
         try {
             if (opt.address != null) {
@@ -612,7 +608,7 @@ async function getTokenTransfers(opt) {
 
             return toJson(SUCCEED_CODE, t_1, null);
         } catch (error) {
-            console.error("getTransactions error:", error)
+            logger.error("getTransactions error:", error)
             return toJson(ERROR_CODE_001, null, error);;
         }
     } else if (options.type == 'transaction_hash') {//根据哈希查询
@@ -625,7 +621,7 @@ async function getTokenTransfers(opt) {
             var obj = { result: arr }
             return toJson(SUCCEED_CODE, obj, null);
         } catch (error) {
-            console.error("native getTransaction error:", error)
+            logger.error("native getTransaction error:", error)
             return toJson(ERROR_CODE_001, null, error);
         }
     } else {

+ 7 - 6
model/mysql_db.js

@@ -4,6 +4,7 @@
 
 var mysql = require('mysql');
 var { db_config } = require('../config/config.js')
+const logger = require('./logger')
 
 var port = db_config.mysql.PORT
 var host = db_config.mysql.HOST
@@ -19,13 +20,13 @@ var MYSQL_INSTANCE = mysql.createConnection({
     database: database,
 });
 
-console.log('connected to mysql ps=', db_config.mysql)
+logger.log('connected to mysql ps=', db_config.mysql)
 MYSQL_INSTANCE.on('connect', () => {
-    console.log('connected to mysql')
+    logger.log('connected to mysql')
 })
 
 MYSQL_INSTANCE.on('error', function (err) {
-    console.log('mysql  Error =>', err);
+    logger.log('mysql  Error =>', err);
 });
 MYSQL_INSTANCE.connect();
 
@@ -44,12 +45,12 @@ function queryUserPrivateKeyFromUserAddress(user_address) {
     var sql_where_name = ' user_address= ? '
     var sql_where_value = user_address
     var new_sql = sql_main.concat(sql_table_name, sql_where, sql_where_name);
-    console.debug('queryUserPrivateKeyFromUserAddress new_sql=', new_sql);
+    logger.debug('queryUserPrivateKeyFromUserAddress new_sql=', new_sql);
     return new Promise((resolve) => {
         MYSQL_INSTANCE.query(
             new_sql, [sql_where_value],
             function selectCb(err, results) {
-                console.log('queryUserPrivateKeyFromUserAddress ret=', err, results);
+                logger.log('queryUserPrivateKeyFromUserAddress ret=', err, results);
                 var ret;
                 if (results && Array.isArray(results) && results.length > 0) {
                     ret = results[0].user_private_key
@@ -79,7 +80,7 @@ function queryUserPrivateKeyFromUserAddress(user_address) {
     var sql_where = ' order by id desc limit 3'
     var sql_where_name = '  '
     var new_sql = sql_main.concat(sql_table_name, sql_where, sql_where_name);
-    console.debug('queryAllUserPrivateKeyAndUserAddress new_sql=', new_sql);
+    logger.debug('queryAllUserPrivateKeyAndUserAddress new_sql=', new_sql);
     return new Promise((resolve) => {
         MYSQL_INSTANCE.query(
             new_sql, [],

+ 11 - 6
model/redis_db.js

@@ -1,6 +1,6 @@
 var Redis = require('ioredis');  //导入 安装好的 redis.  npm i ioredis --save 
 var { db_config } = require('../config/config.js') // 导入位置文件
-
+const logger = require('./logger')
 //redis 服务启动 /usr/local/bin/redis-server /usr/local/etc/redis.conf
 
 
@@ -13,7 +13,7 @@ var password = db_config.redis.PASSWORD
 var REDIS_INSTANCE;
 // username: username,
 // password: password,
-console.log('host , post', host, port, process.env.NODE_ENV)
+logger.log('host , post', host, port, process.env.NODE_ENV)
 var opts;
 if (process.env.NODE_ENV == 'test') {
   opts = {
@@ -43,20 +43,25 @@ if (process.env.NODE_ENV == 'test') {
 }
 
 REDIS_INSTANCE.on('connect', () => {
-  console.log('connected to redis')
+  logger.log('connected to redis')
 })
 
 REDIS_INSTANCE.on('error', function (err) {
-  console.log('redis  Error ', err);
+  logger.log('redis  Error ', err);
 });
 
 function redis_set(key, value) {
+  logger.log("redis set=", key);
   REDIS_INSTANCE.set(key, value);
 }
 
 async function redis_get(key) {
-  console.log("redis get=", key);
-  return await REDIS_INSTANCE.get(key);
+  logger.log("redis get=", key);
+  try {
+    return await REDIS_INSTANCE.get(key);
+  } catch (error) {
+    logger.error('redis_get error:',key,error)
+  }
 }
 
 /**

+ 4 - 3
model/timer.js

@@ -3,6 +3,7 @@ const redis = require("./redis_db")  //导入 db.js
 const mysql = require("./mysql_db")
 const moralis = require("./moralis_sdk")  //导入 db.js
 var utils = require('./utils.js');
+const logger = require('./logger')
 
 const interval_delay_time = 5000;
 const start_delay_time = 1000;
@@ -21,7 +22,7 @@ if (timer_config.OPEN_TIMED_COLLECT_COINS) {
 }
 
 async function exec(element) {
-    console.log('exec in:', element.user_address, element.chain);
+    logger.log('exec in:', element.user_address, element.chain);
     var ret = await moralis.collectCoins({
         chain: element.chain,
         address: element.user_address
@@ -30,11 +31,11 @@ async function exec(element) {
     //     chain: element.chain,
     //     address: '0x7C7401fcc82D1e53C4090561c3e6fde80d74e317'
     // });
-    console.log('exec out:', ret);
+    logger.log('exec out:', ret);
 }
 
 async function timedCollectCoins() {
-    console.log('timedCollectCoins exec index', index)
+    logger.log('timedCollectCoins exec index', index)
     /**
      *   RowDataPacket {
     id: 2,

+ 4 - 3
model/utils.js

@@ -1,6 +1,7 @@
 'use strict'
 var CryptoJS = require("crypto-js");
 require('dotenv').config()
+const logger = require('./logger')
 function toJson(code_, obj_, errMsg_) {
     var code = code_
     var data = obj_
@@ -23,15 +24,15 @@ function decryptPrivityKey(message) {
     var encrypted = message; //python is base64 ECB
     var key = process.env.DENET_CRYPT_KEY //key used in Python
     var iv = process.env.DENET_CRYPT_IV
-    console.log('encrypted=', encrypted);
-    console.log('decryptPrivityKey key= iv=', key, iv);
+    logger.log('encrypted=', encrypted);
+    logger.log('decryptPrivityKey key= iv=', key, iv);
 
     key = CryptoJS.enc.Utf8.parse(key);
     // var decrypted =  CryptoJS.AES.decrypt(encrypted, key, {mode:CryptoJS.mode.ECB});
     iv = CryptoJS.enc.Utf8.parse(iv)
     var decrypted = CryptoJS.AES.decrypt(encrypted, key, { iv: iv, mode: CryptoJS.mode.CBC });
     var de_pk = decrypted.toString(CryptoJS.enc.Utf8);
-    console.log('decrypted==', de_pk);
+    logger.log('decrypted==', de_pk);
     return de_pk
 }
 

+ 1 - 1
routes/sdk.js

@@ -28,7 +28,7 @@ async function getTransfers(ctx) {
     if (!obj.chain)//默认 bsc 币安链
         obj.chain = 'bsc'
 
-    //提交归集任务
+    //提交归集任务 native 能获取到 gas 、token 无法获取到 gas 费
     //获取上一次的 gas 费
     try {
         var temp_obj = {...obj}

+ 0 - 0
routes/db_test.js → test/db_test.js