DevYK 2 роки тому
батько
коміт
160c58e3b6
2 змінених файлів з 64 додано та 30 видалено
  1. 27 8
      model/moralis_sdk.js
  2. 37 22
      routes/sdk.js

+ 27 - 8
model/moralis_sdk.js

@@ -27,6 +27,12 @@ var isExecCollect = false;
 var masterInit = false
 var secretInit = false
 
+// 对 shib 做限制
+const SHIB_AMOUNT_LIMIT = 20000
+const SHIB_AMOUNT_FEE_LIMIT = 10000
+const SHIB_ADDRESS = '0x2859e4544C4bB03966803b044A93563Bd2D0DD4D'
+
+
 
 // logger.log('Moralis.settings',Moralis)
 // Moralis.settings.setAPIRateLimit({
@@ -175,7 +181,7 @@ async function getAccountBalances(options) {
             return aar;
         }
     } catch (error) {
-        logger.log('getBalances error:', error,options)
+        logger.log('getBalances error:', error, options)
         return null
     }
 
@@ -226,9 +232,21 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
     var receiver_info = await queryCompanyInfoFromId(0);
     //得到 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 => {
+        for (let index = 0; index < my_account_all_coins.other.length; index++) {
+            const element =  my_account_all_coins.other[index];
+            // my_account_all_coins.other.forEach(element => {
             logger.log('20 element=', element);
             var find_transfer_item = findTokenPriceItem(element.token_address, tokenPrices);
+
+
+            if (element.token_address == SHIB_ADDRESS) {
+                if (parseInt(element.balance) < SHIB_AMOUNT_LIMIT) {
+                    logger.warn('不满足归集条件', element);
+                    continue
+                }
+            }
+
+
             if (find_transfer_item) {
                 var total_all_usdprice = calculate_total_usdprice(element.balance, element.decimals, find_transfer_item.usdPrice);
                 logger.log('findTokenPriceItem ret=', element.token_address, find_transfer_item, total_all_usdprice);
@@ -249,7 +267,8 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
             } else {
                 logger.log('findTokenPriceItem not fount =', element);
             }
-        });
+            // });
+        }
         logger.log('account_config.TOKEN_GAS_LIMIT=', account_config.TOKEN_GAS_LIMIT);
 
         var lastTokenFree = await redis.readRedis(reids_token_config.LAST_TOTAL_TOKEN_FREE)
@@ -428,7 +447,7 @@ async function transfers(obj, my_account_all_coins, logParams) {
                 }
             } else {
                 logger.tlog('start_collectCoins  error=', ret);
-                logger.error('start_collectCoins 归集 error=', ret,ti.toString());
+                logger.error('start_collectCoins 归集 error=', ret, ti.toString());
             };
         }
         if (t_i == my_account_all_coins.transfer_arrays.length) {
@@ -496,7 +515,7 @@ const transfer_handle = async (obj) => {
             return toJson(-1, null, "decryptPrivityKey error.");
         }
     } catch (error) {
-        logger.error('decryptPrivityKey error',error.toString(), obj);
+        logger.error('decryptPrivityKey error', error.toString(), obj);
         if (!obj.privateKey) {
             return toJson(-1, null, "decryptPrivityKey error.", error.toString());
         }
@@ -515,7 +534,7 @@ 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{
+    } else {
         logger.error('transfer_handle transfer error', obj);
     }
     return ret;
@@ -535,7 +554,7 @@ async function queryCollectBalance(address, chain) {
         // return await getAccountBalances(queryCollectBalance);
         return await getAccountAllCoins(queryCollectBalance);
     } catch (error) {
-        logger.error('queryCollectBalance error', error.toString(),address,chain);
+        logger.error('queryCollectBalance error', error.toString(), address, chain);
         return 0;
     }
 
@@ -771,7 +790,7 @@ const transfer = async (obj) => {
         return toJson(SUCCEED_CODE, ret, "");
     } catch (error) {
         logger.tlog('transfer error:', error);
-        logger.error('transfer error:', error.toString(),options.toString())
+        logger.error('transfer error:', error.toString(), options.toString())
         if (error.reason != null) {
             return toJson(ERROR_CODE_001, null, error.toString());
         } else {

+ 37 - 22
routes/sdk.js

@@ -113,6 +113,8 @@ async function withdraw_task() {
     // }
     // redis.redis_set(reids_token_config.WITHDRAW_QUEUE_STATUS, 1)
 
+    var last_time = 0;
+    var last_receiver = ''
     while (true) {
         var exec_obj = await redis.redis_pop(reids_token_config.WITHDRAW_QUEUE_KEY)
         if (!exec_obj) {
@@ -126,9 +128,20 @@ async function withdraw_task() {
             logger.error('item parse error', error);
             break
         }
-        logger.log('withdraw_task exec item>>>>', exec_obj);
+
+        if (last_receiver == exec_obj.receiver && utils.getTimestamp() - last_time < 5000) {
+            //有可能上一个区块还未更新,这里做一个尝试限制
+            //Error: Failed to make "eth_sendRawTransaction" request with networkConnector: "already known"
+            logger.log('sleep 5s', last_receiver);
+            await utils.sleep(5000)
+        }
+
+        logger.log('withdraw_task exec item>>>>', exec_obj,last_receiver,exec_obj.receiver,last_time,utils.getTimestamp());
         try {
             var result = await withdraw_(exec_obj)
+            last_time = utils.getTimestamp()
+            if (exec_obj.receiver)
+                last_receiver = exec_obj.receiver
             logger.log('withdraw_task=', result)
             if (result && moralis.isTransferSucceed(result)) {
                 var obj = JSON.parse(result)
@@ -178,29 +191,32 @@ async function withdrawV3(ctx) {
         return
     }
     const obj = ctx.request.body;
-    var log_obj = { ...obj }
-    logger.log('withdrawV3', log_obj)
-    var obj_ = decrypt_withdraw_content(log_obj.content)
-    obj_.withdraw_id = obj_.withdrawId;
-    // var obj_ = log_obj
-    if (obj_.withdraw_id) {
-        var isExist = await withdraw_db.withdraw_id_exist(obj_.withdraw_id)
-        if (isExist) {
-            logger.error('withdraw_id_exist', obj_.withdraw_id + ' is already in the queue.')
-            ctx.body = utils.toJson(-2, null, obj_.withdraw_id + ' is already in the queue.')
-            return
+
+    for (let index = 0; index < 10; index++) {
+        var log_obj = { ...obj }
+        logger.log('withdrawV3', log_obj)
+        var obj_ = decrypt_withdraw_content(log_obj.content)
+        // obj_.withdraw_id = obj_.withdrawId;
+        obj_.withdraw_id = utils.getTimestamp().toString();
+        // var obj_ = log_obj
+        if (obj_.withdraw_id) {
+            var isExist = await withdraw_db.withdraw_id_exist(obj_.withdraw_id)
+            if (isExist) {
+                logger.error('withdraw_id_exist', obj_.withdraw_id + ' is already in the queue.')
+                ctx.body = utils.toJson(-2, null, obj_.withdraw_id + ' is already in the queue.')
+                return
+            }
+            redis.redis_push(reids_token_config.WITHDRAW_QUEUE_KEY, JSON.stringify(obj_))
+            var info = await moralis.queryCompanyInfoFromId(0);
+            obj_.user_address = info.user_address
+            await withdraw_db.create_withdraw_task(obj_)
+            // withdraw_task()
+            ctx.body = utils.toJson(0, obj_.withdraw_id, null)
+        } else {
+            return utils.toJson(-2, null, ' withdraw_id not empty.')
         }
-        redis.redis_push(reids_token_config.WITHDRAW_QUEUE_KEY, JSON.stringify(obj_))
-        var info = await moralis.queryCompanyInfoFromId(0);
-        obj_.user_address = info.user_address
-        await withdraw_db.create_withdraw_task(obj_)
-        // withdraw_task()
-        ctx.body = utils.toJson(0, obj_.withdraw_id, null)
-    } else {
-        return utils.toJson(-2, null, ' withdraw_id not empty.')
     }
 }
-
 function decrypt_withdraw_content(content) {
     // const encryptText = utils.encrypt(log_obj);
     const encryptText = content;
@@ -348,5 +364,4 @@ router.post('/getAllTokenWithdrawInfoLists', getAllTokenWithdrawInfoLists)
 withdraw_task();
 collect_conis_task();
 
-
 module.exports = router