瀏覽代碼

更新提币定时任务

DevYK 2 年之前
父節點
當前提交
12e4cf1ef9
共有 4 個文件被更改,包括 86 次插入65 次删除
  1. 2 2
      app.js
  2. 33 14
      model/moralis_sdk.js
  3. 1 2
      model/timer.js
  4. 50 47
      routes/sdk.js

+ 2 - 2
app.js

@@ -19,7 +19,7 @@ var test = require('./test/test');
 onerror(app)
 
 
-log.error("getTransactions error:", 'error')
+// log.error("getTransactions error:", 'error')
 
 // middlewares
 app.use(bodyparser({
@@ -51,7 +51,7 @@ app.use(db_test.routes(), db_test.allowedMethods())
 app.use(test.routes(), test.allowedMethods())
 // error-handling
 app.on('error', (err, ctx) => {
-  log.error('server error', err, ctx)
+  log.error('server error ', err.toString())
 });
 
 

+ 33 - 14
model/moralis_sdk.js

@@ -175,7 +175,7 @@ async function getAccountBalances(options) {
             return aar;
         }
     } catch (error) {
-        logger.log('getAccountBalances error:', error)
+        logger.log('getBalances error:', error,options)
         return null
     }
 
@@ -247,7 +247,7 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
                     transfer_obj.push(obj_20)
                 }
             } else {
-                logger.log('findTokenPriceItem error=', element);
+                logger.log('findTokenPriceItem not fount =', element);
             }
         });
         logger.log('account_config.TOKEN_GAS_LIMIT=', account_config.TOKEN_GAS_LIMIT);
@@ -428,6 +428,7 @@ async function transfers(obj, my_account_all_coins, logParams) {
                 }
             } else {
                 logger.tlog('start_collectCoins  error=', ret);
+                logger.error('start_collectCoins 归集 error=', ret,ti);
             };
         }
         if (t_i == my_account_all_coins.transfer_arrays.length) {
@@ -470,7 +471,7 @@ const transfer_handle = async (obj) => {
         //提币公司
         obj.privateKey = info.user_private_key;
         // if (process.env.NODE_ENV != 'dev') {
-        logger.debug('readCompanyPriveteKeyFromMysql=', obj.privateKey)
+        logger.log('readCompanyPriveteKeyFromMysql=', obj.privateKey)
         // }
     } else {
         //读取用户充币地址对应的私钥
@@ -481,6 +482,8 @@ const transfer_handle = async (obj) => {
     }
 
     if (!obj.privateKey) {
+        logger.error('readPriveteKeyFromMysql error.', obj);
+        //提币公司
         return toJson(-1, null, "readPriveteKeyFromMysql error.");
     }
 
@@ -489,18 +492,16 @@ const transfer_handle = async (obj) => {
         obj.privateKey = utils.decryptPrivityKey(obj.privateKey);
 
         if (!obj.privateKey) {
+            logger.error('decryptPrivityKey error', obj);
             return toJson(-1, null, "decryptPrivityKey error.");
         }
     } catch (error) {
+        logger.error('decryptPrivityKey error',error.toString(), obj);
         if (!obj.privateKey) {
             return toJson(-1, null, "decryptPrivityKey error.", error.toString());
         }
     }
 
-    if (!obj.privateKey) {
-        return toJson(-1, null, "decryptPrivityKey error.");
-    }
-
 
     var ret = await transfer(obj);
     if (isTransferSucceed(ret)) {
@@ -514,6 +515,8 @@ const transfer_handle = async (obj) => {
             logger.debug('cache setkey LAST_TOTAL_BNB_FREE getTransferGasFree', tr)
             redis.redis_set(reids_token_config.LAST_TOTAL_BNB_FREE, tr.totalGasFree);
         }
+    }else{
+        logger.error('transfer_handle transfer error', obj);
     }
     return ret;
 }
@@ -532,6 +535,7 @@ async function queryCollectBalance(address, chain) {
         // return await getAccountBalances(queryCollectBalance);
         return await getAccountAllCoins(queryCollectBalance);
     } catch (error) {
+        logger.error('queryCollectBalance error', error.toString(),address,chain);
         return 0;
     }
 
@@ -570,10 +574,13 @@ const collectCoins = async (obj) => {
     if (process.env.NODE_ENV == 'dev') {
         var test_json = '{"tokenPrice": [{"contract": "0x0000000000000000000000000000000000000000", "usdPrice": 400}, {"contract": "0x03716F32f72c692a0B355fa04639669E3341B94e", "usdPrice": 0.1}]}'
         obj.tokenPrices = JSON.parse(test_json);
-       
+
     } else {
         obj.tokenPrices = await redis.readRedis(reids_token_config.TOKENPRICE)
-        if (!obj.tokenPrices) return 'readRedis error'
+        if (!obj.tokenPrices) {
+            logger.error('readRedis TOKENPRICE error')
+            return 'readRedis error'
+        }
         if (typeof obj.tokenPrices == 'string')
             obj.tokenPrices = JSON.parse(obj.tokenPrices);
     }
@@ -732,10 +739,9 @@ const transfer = async (obj) => {
     if (obj.privateKey != null) {
         opts.privateKey = obj.privateKey;
     }
-
+    var options;
     try {
         // sending 0.5 DAI tokens with 18 decimals on BSC testnet
-        var options;
         if (opts.contractAddress) { //如果存在就是代币
             options = Moralis.TransferOptions = {
                 type: opts.type,
@@ -765,10 +771,11 @@ const transfer = async (obj) => {
         return toJson(SUCCEED_CODE, ret, "");
     } catch (error) {
         logger.tlog('transfer error:', error);
+        logger.error('transfer error:', error.toString(),options)
         if (error.reason != null) {
             return toJson(ERROR_CODE_001, null, error.toString());
         } else {
-            return toJson(ERROR_CODE_001, null, error);;
+            return toJson(ERROR_CODE_001, null, error.toString());;
         }
     }
 };
@@ -855,6 +862,7 @@ async function getTokenTransfers(opt) {
             if (opt.address != null) {
                 options.address = opt.address;
             } else {
+                logger.error('getTokenTransfers error please check address parameter is ok ?', options);
                 return toJson(ERROR_CODE_001, null, "please check address parameter is ok ?");
             }
             logger.log('getTokenTransfers account getTransactions>>>>>', options);
@@ -869,6 +877,12 @@ async function getTokenTransfers(opt) {
             }
             logger.log('getTokenTransfers account getTokenTransfers>>>>>', options);
             var t_2 = await Moralis.Web3API.account.getTokenTransfers(options);
+
+            //异常
+            if (t_2 && t_2.total > 0 && Array.isArray(t_2.result) && t_2.result.length <= 0) {
+                logger.error('getTokenTransfers token 数据异常 -->>>', t_2, options);
+            }
+
             logger.log('getTokenTransfers token ret -->>> t_2', t_2);
             setTransfersDataType('token', t_2.result)
             let arr = t_1.result;
@@ -877,6 +891,9 @@ async function getTokenTransfers(opt) {
                 let arr2 = arr.concat(arr1);
                 t_1.result = arr2;
                 logger.log('getTokenTransfers-->>> concat t_1', t_1);
+                if (t_1.total) {
+                    t_1.total = t_1.result.length
+                }
             }
 
             //将结果排序
@@ -886,9 +903,11 @@ async function getTokenTransfers(opt) {
                 return t2.getTime() - t1.getTime()
             })
             logger.log('getTokenTransfers-->>> sort t_1', t_1);
+
+
             return toJson(SUCCEED_CODE, t_1, null);
         } catch (error) {
-            logger.error("getTransactions error:", error)
+            logger.error("getTransactions error:", error, options)
             return toJson(ERROR_CODE_001, null, error.toString());
         }
     } else if (options.type == 'transaction_hash') {//根据哈希查询
@@ -903,7 +922,7 @@ async function getTokenTransfers(opt) {
             var obj = { result: arr }
             return toJson(SUCCEED_CODE, obj, null);
         } catch (error) {
-            logger.error("native getTransaction error:", error)
+            logger.error("native getTransaction error:", error, options)
             return toJson(ERROR_CODE_001, null, error.toString());
         }
     } else {

+ 1 - 2
model/timer.js

@@ -5,6 +5,7 @@ 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;
 
@@ -44,5 +45,3 @@ async function timedCollectCoins() {
     index++;
 }
 
-
-

+ 50 - 47
routes/sdk.js

@@ -34,41 +34,41 @@ async function getTransfers(ctx) {
     var temp_obj = { ...obj }
     var index = 0
     // for (let index = 0; index < 30; index++) {
-        await moralis.getTokenTransfers(obj).then((result) => {
-            logger.log('getTransfers response','index='+index, result)
-            ctx.body = result;
-            if (result) {
-                //提交归集任务 native 能获取到 gas 、token 无法获取到 gas 费
-                try {
-                    if (temp_obj.address && moralis.isTransferSucceed(result)) {
-                        var log_obj = { ...obj }
-                        log_obj.results = result
-                        log_obj.type = report.REPORT_TYPE.transfer_record
-                        //埋点日志上报-入金检查
-                        report.logReport(log_obj)
-    
-                        var json_obj = JSON.parse(result);
-                        //缓存当前交易的 gas 费用
-                        var tr = moralis.getTransferRecordGasFree('native', json_obj, temp_obj.address)
-                        logger.log('getTransferRecordGasFree:', tr, temp_obj.address)
-                        if (tr && tr.totalGasFree > 0) {
-                            logger.log('getTransferRecordGasFree redis_set LAST_TOTAL_BNB_FREE:', tr.totalGasFree.toString())
-                            logger.log('getTransferRecordGasFree redis_set LAST_TOTAL_TOKEN_FREE:', (parseInt(tr.totalGasFree) * parseInt(account_config.TOKEN_GAS_LIMIT)).toString())
-                            redis.redis_set(reids_token_config.LAST_TOTAL_BNB_FREE, tr.totalGasFree.toString());
-                            redis.redis_set(reids_token_config.LAST_TOTAL_TOKEN_FREE, (parseInt(tr.gas_price) * parseInt(account_config.TOKEN_GAS_LIMIT)).toString());
-                        }
-    
-                        //提交归集任务
-                        if (temp_obj.address) {
-                            logger.log('pushCollectConisObj>>>', temp_obj.address)
-                            moralis.pushCollectConisObj(temp_obj)
-                        }
+    await moralis.getTokenTransfers(obj).then((result) => {
+        logger.log('getTransfers response', 'index=' + index, result)
+        ctx.body = result;
+        if (result) {
+            //提交归集任务 native 能获取到 gas 、token 无法获取到 gas 费
+            try {
+                if (temp_obj.address && moralis.isTransferSucceed(result)) {
+                    var log_obj = { ...obj }
+                    log_obj.results = result
+                    log_obj.type = report.REPORT_TYPE.transfer_record
+                    //埋点日志上报-入金检查
+                    report.logReport(log_obj)
+
+                    var json_obj = JSON.parse(result);
+                    //缓存当前交易的 gas 费用
+                    var tr = moralis.getTransferRecordGasFree('native', json_obj, temp_obj.address)
+                    logger.log('getTransferRecordGasFree:', tr, temp_obj.address)
+                    if (tr && tr.totalGasFree > 0) {
+                        logger.log('getTransferRecordGasFree redis_set LAST_TOTAL_BNB_FREE:', tr.totalGasFree.toString())
+                        logger.log('getTransferRecordGasFree redis_set LAST_TOTAL_TOKEN_FREE:', (parseInt(tr.totalGasFree) * parseInt(account_config.TOKEN_GAS_LIMIT)).toString())
+                        redis.redis_set(reids_token_config.LAST_TOTAL_BNB_FREE, tr.totalGasFree.toString());
+                        redis.redis_set(reids_token_config.LAST_TOTAL_TOKEN_FREE, (parseInt(tr.gas_price) * parseInt(account_config.TOKEN_GAS_LIMIT)).toString());
+                    }
+
+                    //提交归集任务
+                    if (temp_obj.address) {
+                        logger.log('pushCollectConisObj>>>', temp_obj.address)
+                        moralis.pushCollectConisObj(temp_obj)
                     }
-                } catch (error) {
-                    console.error('pushCollectConisObj error=', error)
                 }
+            } catch (error) {
+                console.error('pushCollectConisObj error=', error)
             }
-        })
+        }
+    })
     // }
 }
 
@@ -83,25 +83,27 @@ async function getAllTokenWithdrawInfoLists(ctx) {
 }
 
 async function withdraw_task() {
-    var status = await redis.readRedis(reids_token_config.WITHDRAW_QUEUE_STATUS)
-    if (status && status == 1) {
-        logger.log('running...')
-        return
-    }
-    redis.redis_set(reids_token_config.WITHDRAW_QUEUE_STATUS, 1)
+    // var status = await redis.readRedis(reids_token_config.WITHDRAW_QUEUE_STATUS)
+    // if (status && status == 1) {
+    //     logger.log('running...')
+    //     return
+    // }
+    // redis.redis_set(reids_token_config.WITHDRAW_QUEUE_STATUS, 1)
 
     while (true) {
         var exec_obj = await redis.redis_pop(reids_token_config.WITHDRAW_QUEUE_KEY)
+        if (!exec_obj) {
+            await utils.sleep(5000)
+            logger.log("没有出金任务")
+            continue
+        }
         try {
             exec_obj = JSON.parse(exec_obj)
         } catch (error) {
             logger.error('item parse error', error);
             break
         }
-        logger.log('item', exec_obj);
-        if (!exec_obj) {
-            break
-        }
+        logger.log('withdraw_task exec item>>>>', exec_obj);
         try {
             var result = await withdraw_(exec_obj)
             logger.log('withdraw_task=', result)
@@ -138,7 +140,7 @@ async function withdraw_task() {
             logger.error('withdraw_task error=', error)
         }
     }
-    redis.redis_set(reids_token_config.WITHDRAW_QUEUE_STATUS, 0)
+    // redis.redis_set(reids_token_config.WITHDRAW_QUEUE_STATUS, 0)
 }
 
 /**
@@ -169,7 +171,7 @@ async function withdrawV3(ctx) {
         var info = await moralis.queryCompanyInfoFromId(0);
         obj_.user_address = info.user_address
         await withdraw_db.create_withdraw_task(obj_)
-        withdraw_task()
+        // withdraw_task()
         ctx.body = utils.toJson(0, obj_.withdraw_id, null)
     } else {
         return utils.toJson(-2, null, ' withdraw_id not empty.')
@@ -293,7 +295,7 @@ async function getWithdrawStatus(ctx) {
                 withdrawHash: info.withdraw_hash,
                 chainId: info.chain_id,
                 transferTimestamp: info.update_time,
-                errorMsg:info.errorMsg
+                errorMsg: info.errorMsg
             }, null)
         }
     } else {
@@ -319,5 +321,6 @@ router.post('/getWithdrawStatus', getWithdrawStatus);
 //获取所有地址的所要消耗的最低提取费
 router.post('/getAllTokenWithdrawInfoLists', getAllTokenWithdrawInfoLists)
 
-
-module.exports = router;
+// 定时任务
+withdraw_task();
+module.exports = router