瀏覽代碼

Merge branch 'dev'

DevYK 2 年之前
父節點
當前提交
e19d1cb238
共有 6 個文件被更改,包括 112 次插入15 次删除
  1. 2 0
      config/dev_config.js
  2. 2 0
      config/prd_config.js
  3. 2 0
      config/test_config.js
  4. 72 1
      model/db/collect_coins_db.js
  5. 19 11
      model/moralis_sdk.js
  6. 15 3
      routes/sdk.js

+ 2 - 0
config/dev_config.js

@@ -29,6 +29,8 @@ const reids_token_config = {
     WITHDRAW_QUEUE_KEY: 'WITHDRAW_QUEUE_KEY_DEV',
     WITHDRAW_QUEUE_STATUS:'WITHDRAW_QUEUE_STATUS',
     COLLECT_CONIS_QUEUE_KEY:'COLLECT_CONIS_QUEUE_KEY_DEV',
+    LAST_COLLECT_PUBLIC_KEY:'LAST_COLLECT_PUBLIC_LEY',
+    LAST_COLLECT_TIME:'LAST_COLLECT_TIME',
 
 }
 

+ 2 - 0
config/prd_config.js

@@ -28,6 +28,8 @@ const reids_token_config = {
     WITHDRAW_QUEUE_KEY: 'WITHDRAW_QUEUE_KEY',
     WITHDRAW_QUEUE_STATUS:'WITHDRAW_QUEUE_STATUS',
     COLLECT_CONIS_QUEUE_KEY:'COLLECT_CONIS_QUEUE_KEY',
+    LAST_COLLECT_PUBLIC_KEY:'LAST_COLLECT_PUBLIC_LEY',
+    LAST_COLLECT_TIME:'LAST_COLLECT_TIME',
     
 
 }

+ 2 - 0
config/test_config.js

@@ -28,6 +28,8 @@ const reids_token_config = {
     WITHDRAW_QUEUE_KEY: 'WITHDRAW_QUEUE_KEY',
     WITHDRAW_QUEUE_STATUS:'WITHDRAW_QUEUE_STATUS',
     COLLECT_CONIS_QUEUE_KEY:'COLLECT_CONIS_QUEUE_KEY',
+    LAST_COLLECT_PUBLIC_KEY:'LAST_COLLECT_PUBLIC_LEY',
+    LAST_COLLECT_TIME:'LAST_COLLECT_TIME',
 }
 
 

+ 72 - 1
model/db/collect_coins_db.js

@@ -4,7 +4,12 @@ var { db_config } = require('../../config/config.js')
 const utils = require('../utils.js')
 
 
-async function create_collect_coins_task(opts) {
+/**
+ * 创建一个归集任务
+ * @param {*} opts 
+ * @returns 
+ */
+ async function create_collect_coins_task(opts) {
     logger.log('create_collect_coins_task', opts)
 
     var balances = opts.addressBalances ? opts.addressBalances : ''
@@ -61,8 +66,74 @@ async function create_collect_coins_task(opts) {
             );
         })
     })
+ }
+
+
+/**
+ * 更新归集任务
+ * @param {*} opts 
+ * @returns 
+ */
+async function update_collect_coins_task(opts) {
+    logger.log('update_collect_coins_task', opts)
+
+    var balances = opts.addressBalances ? opts.addressBalances : ''
+
+    var transfers = opts.transfers ? opts.transfers : ''
+
+    var prestore_gas_free = opts.prestore_gas_fee ? opts.prestore_gas_fee : ''
+
+    var company_public_key = opts.company_public_key ? opts.company_public_key : ''
+
+    var total_gas_fee = opts.collectCoinsTotalGasFee ? opts.collectCoinsTotalGasFee : ''
+
+    var status = opts.status
+
+    var resposes = opts.collects ? opts.collects : ''
+
+    var error_msg = opts.errMsg ? opts.errMsg : ''
+
+    var create_time = opts.createTime ? opts.createTime : utils.getCurrentDate()
+
+    var update_time = utils.getCurrentDate()
+
+    var user_address = opts.user_address ? opts.user_address : ''
+
+    var create_withdraw_sql = 'INSERT INTO collect_coins_manage (user_address,balances,transfers,prestore_gas_fee,company_public_key,total_gas_fee,status,create_time,update_time,resposes,error_msg)' +
+        'VALUES(?,?,?,?,?,?,?,?,?,?,?)'
+    var create_withdraw_params = [user_address, JSON.stringify(balances), JSON.stringify(transfers), JSON.stringify(prestore_gas_free), company_public_key, total_gas_fee, status, create_time, update_time, resposes, error_msg ? error_msg : '']
+
+    logger.log('update_collect_coins_task update_collect_coins_task_sql', create_withdraw_sql, create_withdraw_params);
+    return new Promise((resolve) => {
+        mysql.getMySqlInstance().getConnection(function (err, connection) {
+            if (err) {
+                logger.error('update_collect_coins_task', err)
+                logger.error('update_collect_coins_task_sql', create_withdraw_sql)
+                resolve(null);
+                return;
+            }
+            connection.query(
+                create_withdraw_sql, create_withdraw_params,
+                function selectCb(error, results) {
+                    if (error) {
+                        logger.error('update_collect_coins_task', error, create_withdraw_sql, create_withdraw_params)
+                        resolve(null);
+                        return;
+                    }
+                    logger.log('update_collect_coins_task ret=', error, results);
+                    //用完当前连接需要释放,归还给连接池
+                    connection.release();
+                    resolve({
+                        err: error,
+                        results: results.insertId
+                    });
+                }
+            );
+        })
+    })
 }
 
 module.exports = {
     create_collect_coins_task,
+    update_collect_coins_task,
 }

+ 19 - 11
model/moralis_sdk.js

@@ -1,5 +1,6 @@
 /* import moralis */
 const Moralis = require("moralis/node");
+// const Moralis = require("../Moralis_JS_SDK/node");
 var utils = require('./utils.js');
 // var config = require('../config/config.js')(db_config,
 //     moralis_config)
@@ -36,11 +37,6 @@ const SHIB_ADDRESS = '0x2859e4544C4bB03966803b044A93563Bd2D0DD4D'
 
 
 
-// logger.log('Moralis.settings',Moralis)
-// Moralis.settings.setAPIRateLimit({
-//     anonymous:10, authenticated:20, windowMs:60000
-//   })
-
 
 /**
  * 初始化 moralis
@@ -54,7 +50,7 @@ async function initMasterSDK() {
     }
     await Moralis.start({ serverUrl, appId, masterKey });
     logger.debug('initMasterSDK start ok')
-    // masterInit = true
+    masterInit = true
 }
 
 async function initMoralisSecretSDK() {
@@ -65,8 +61,18 @@ async function initMoralisSecretSDK() {
     logger.debug('initMoralisSecretSDK start')
     await Moralis.start({ serverUrl, appId, moralisSecret });
     logger.debug('initMoralisSecretSDK start ok')
-    // secretInit = true
+    secretInit = true
 }
+/**
+ * 设置 web3 云函数
+ */
+async function setWeb3apiRateLimit() {
+    await initMasterSDK()
+    const params = {};
+    const ret = await Moralis.Cloud.run("setWeb3apiRateLimit", params);
+    logger.error('setWeb3apiRateLimit', ret)
+}
+setWeb3apiRateLimit()
 
 /**
  * 设置 web3 云函数
@@ -82,7 +88,6 @@ setWeb3apiRateLimit()
 function toJson(code_, obj_, errMsg_) {
     return utils.toJson(code_, obj_, errMsg_);
 }
-
 /**
  * 通过交易记录获取 gas 费用
  * @param {} type 
@@ -248,8 +253,9 @@ async function getAccountBalances(options) {
             break
         } catch (error) {
             if (tryCount == 1) {
-                logger.error('getBalances error:', error.toString(), JSON.stringify(balance_opts))
+                logger.error('getBalances error:', error.toString(), JSON.stringify(balance_opts), JSON.stringify(options))
                 result = null;
+                break
             }
             tryCount -= 1;
             await utils.sleep(delay)
@@ -549,7 +555,9 @@ async function transfers(obj, my_account_all_coins, logParams) {
                     logger.error('start_collectCoins 获取 gas fee=', error.toString(), JSON.stringify(ti));
                 }
                 logger.tlog('start_collectCoins  error=', ret);
-                logger.error('start_collectCoins 归集 error=', ret, JSON.stringify(ti));
+                var tmp_ti = { ...ti }
+                tmp_ti.privateKey = ''
+                logger.error('start_collectCoins 归集 error=', ret, JSON.stringify(tmp_ti));
             };
         }
         //日志埋点-归集全部所花费的 gas 费用
@@ -769,7 +777,7 @@ const collectCoins = async (obj) => {
 
             if (!isTransferSucceed(ret)) return ret;
 
-            
+
 
             var transfer = getTransferGasFree('native', ret)
             logger.log('getTransferGasFree transfer =', transfer)

+ 15 - 3
routes/sdk.js

@@ -88,19 +88,31 @@ async function collect_conis_task() {
     while (true) {
         var exec_obj = await redis.redis_pop(reids_token_config.COLLECT_CONIS_QUEUE_KEY)
         if (!exec_obj) {
-            await utils.sleep(10000)
+            await utils.sleep(60000)
             logger.log("没有归集任务")
             continue
         }
         try {
             exec_obj = JSON.parse(exec_obj)
             logger.log('collect_conis_task exec item>>>>', exec_obj);
+
+            if (exec_obj.address == await redis.readRedis(reids_token_config.LAST_COLLECT_PUBLIC_KEY) && utils.getTimestamp() - await redis.readRedis(reids_token_config.LAST_COLLECT_TIME) < 60 * 2 * 1000) {
+                logger.log('间隔不足 2 分钟', exec_obj);
+                continue
+            }
+
+            redis.redis_set(reids_token_config.LAST_COLLECT_TIME, utils.getTimestamp())
+            redis.redis_set(reids_token_config.LAST_COLLECT_PUBLIC_KEY, exec_obj.address)
             //开始收集用户地址里面的币到归集地址
             var ret = await moralis.collectCoins(exec_obj)
             logger.log('collect_conis_task ret =', exec_obj, ret)
         } catch (error) {
             logger.error('collect_conis_task error', error.toString());
+            redis.redis_set(reids_token_config.LAST_COLLECT_TIME, 0)
+            redis.redis_set(reids_token_config.LAST_COLLECT_PUBLIC_KEY, 0)
         }
+        //间隔 10s 归集,避免提交任务过多
+        await utils.sleep(10000)
     }
     logger.log("collect_conis_task end")
 }
@@ -114,7 +126,7 @@ async function withdraw_task() {
     while (true) {
         var exec_obj = await redis.redis_pop(reids_token_config.WITHDRAW_QUEUE_KEY)
         if (!exec_obj) {
-            await utils.sleep(10000)
+            await utils.sleep(60000)
             logger.log("没有出金任务")
             continue
         }
@@ -434,7 +446,7 @@ router.post('/withdrawV3', withdrawV3);
 
 if (process.env.NODE_ENV == 'dev')
     router.post('/withdrawV3Test', withdrawV3Test);
-    
+
 //查询出金服务
 router.post('/getWithdrawStatus', getWithdrawStatus);
 //获取所有地址的所要消耗的最低提取费