DevYK пре 3 година
родитељ
комит
41c8ac2d53
3 измењених фајлова са 180 додато и 123 уклоњено
  1. 10 10
      config/dev_config.js
  2. 168 111
      model/moralis_sdk.js
  3. 2 2
      model/redis_db.js

+ 10 - 10
config/dev_config.js

@@ -44,19 +44,19 @@ const db_config = {
         HOST: 'denet-test.csi2lctklqzg.us-east-1.rds.amazonaws.com' //host
     },
 
-    // redis: {
-    //     PORT: 6379, // Redis port
-    //     HOST: "r-bp1ps6my7lzg8rdhwxpi.redis.rds.aliyuncs.com", // Redis host
-    //     USERNAME: null,
-    //     PASSWORD: "Wqsd@2019"
-    // },
-
     redis: {
         PORT: 6379, // Redis port
-        HOST: "denet-test.y2slbl.clustercfg.memorydb.us-east-1.amazonaws.com", // Redis host
-        USERNAME: null, // needs Redis >= 6
-        PASSWORD: null,
+        HOST: "r-bp1ps6my7lzg8rdhwxpi.redis.rds.aliyuncs.com", // Redis host
+        USERNAME: null,
+        PASSWORD: "Wqsd@2019"
     },
+
+    // redis: {
+    //     PORT: 6379, // Redis port
+    //     HOST: "denet-test.y2slbl.clustercfg.memorydb.us-east-1.amazonaws.com", // Redis host
+    //     USERNAME: null, // needs Redis >= 6
+    //     PASSWORD: null,
+    // },
 }
 
 // 设置 moralis sdk 配置文件

+ 168 - 111
model/moralis_sdk.js

@@ -159,7 +159,7 @@ async function getAccountAllCoins(obj) {
  * 判断是否转 gas 费
  * @param {*} my_account_all_coins 
  */
-async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
+async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
     var totalCount = 0;
     var tokenCount = 0;
     var tokenGasPrice = 0;
@@ -171,7 +171,7 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
 
     //需要转账的数组对象
     var transfer_obj = [];
-
+    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 => {
@@ -183,6 +183,16 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
                 if (find_transfer_item && total_all_usdprice > 1.0) {
                     tokenCount += 1;
                     logger.debug('token > 1.0', tokenCount, element.token_address);
+
+                    var obj_20 = {
+                        chain: obj.chain,
+                        contractAddress: element.token_address,
+                        amount: element.balance,
+                        receiver: receiver_info.user_address,
+                        type: 'erc20',
+                        address: obj.address,
+                    }
+                    transfer_obj.push(obj_20)
                 }
             } else {
                 logger.log('findTokenPriceItem error=', element);
@@ -223,9 +233,21 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
                 nativeGasPrice = parseInt(nativeCount) * parseInt(account_config.BNB_GAS_LIMIT) * parseInt(account_config.BNB_GAS_PRICE);
             }
             ret_a_gas = account_config.BNB_GAS_PRICE;
+
+            var real_native_amount = BigInt(nativeAllBalance) - BigInt(nativeGasPrice) - BigInt(tokenGasPrice);
+            var obj_native = {
+                chain: obj.chain,
+                amount: real_native_amount.toString(),
+                receiver: receiver_info.user_address,
+                type: 'native',
+                address: obj.address,
+            }
+            transfer_obj.push(obj_native)
         }
     }
 
+    logger.log('transfer obj=', transfer_obj)
+
     //计算所有币转账所需要的 gas 
     totalCount = nativeCount + tokenCount;
     // var gasPrice = await redis.readRedis(reids_token_config.GASPRICE);
@@ -237,6 +259,9 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
     var service_charge = 0;
     logger.log('total2Gas', total2Gas);
 
+    //需要转账的 obj
+    my_account_all_coins.transfer_arrays = transfer_obj
+
     //如果当前的钱不够  gas
     if (nativeAllBalance < total2Gas) {
         if (tokenCount > 0) {//出现 token 需要转移手续费
@@ -303,118 +328,146 @@ async function updateNativeBalance(nativeBalance, obj) {
 
 //20 and native 归集
 async function transfers(obj, my_account_all_coins) {
-    var address = obj.address;
-    var chain = obj.chain;
-    var tokenPrices = obj.tokenPrices;
-    logger.log('tokenPrices=', tokenPrices, my_account_all_coins);
-
-    var nativeValue = my_account_all_coins.native.balance;
-
-    if (!my_account_all_coins || !tokenPrices) return 'error.'
 
-    logger.log(' my_account_all_coins.other.lenth=', my_account_all_coins.other.length);
-
-    var isUpdateNativeBalance = 0;
-
-    //token 归集
-    if (my_account_all_coins.other && Array.isArray(my_account_all_coins.other) && my_account_all_coins.other.length > 0) {
-        var available = Array.isArray(tokenPrices.tokenPrice) && tokenPrices.tokenPrice.length > 0
-        if (!available) return -1;
-        for (let i = 0; i < my_account_all_coins.other.length; ++i) {
-            var transfer_item = my_account_all_coins.other[i];
-            if (my_account_all_coins.other[i].token_address != null) {
-                var find_transfer_item = findTokenPriceItem(transfer_item.token_address, tokenPrices);
-                //todo 计算 token 币价格 * token美元单价 
-                if (find_transfer_item && calculate_total_usdprice(transfer_item.balance, transfer_item.decimals, find_transfer_item.usdPrice) > 1.0) {
-                    var info = await queryCompanyInfoFromId(0);
-                    var obj_20 = {
-                        chain: obj.chain,
-                        contractAddress: transfer_item.token_address,
-                        amount: transfer_item.balance,
-                        receiver: info.user_address,
-                        type: 'erc20',
-                        address: address,
-                    }
-                    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)
-                    logger.log('start_collectCoins erc20 respose...', ret);
-
-                    //更新 native 金额
-                    if (!isTransferSucceed(ret)) return ret;
-
-                    var transfer = getTransferGasFree('token', ret)
-                    if (transfer && transfer.totalGasFree > 0) {
-                        logger.log('start_collectCoins 20 tempNativeValue=', my_account_all_coins.native.balance)
-                        var tempNativeValue = reduceNativeValue(nativeValue, transfer.totalGasFree)
-                        my_account_all_coins.native.balance = tempNativeValue.toString();
-                        logger.log('start_collectCoins 20  udpateNativeValue=', tempNativeValue);
-                    } else return "get native value error."
-                } else {
-                    logger.error('find_transfer_item error.', transfer_item);
-                }
+    // 优化后的归集
+    if (my_account_all_coins && my_account_all_coins.transfer_arrays && Array.isArray(my_account_all_coins.transfer_arrays) && my_account_all_coins.transfer_arrays.length > 0) {
+        var t_i = 0;
+        for (let index = 0; index < my_account_all_coins.transfer_arrays.length; index++) {
+            var ti = my_account_all_coins.transfer_arrays[index]
+            logger.tlog('ti=', ti)
+            var ret = await start_collectCoins(ti)
+            //更新 native 金额
+            if (isTransferSucceed(ret)) {
+                logger.tlog('start_collectCoins  respose...', ret);
+                t_i += 1
             } else {
-                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.');
-            }
+                logger.tlog('start_collectCoins  error=', ret);
+                t_err.push(ret)
+            };
         }
-    }
-
-    //native 归集
-    if (my_account_all_coins.native) {
-        logger.log('查询本地余额参数=', obj)
-        if (obj.chain) {
-            obj.chain = utils.getChainName(obj.chain)
+        if(t_i == my_account_all_coins.transfer_arrays.length){
+            return toJson(0, null, '所有币归集成功.');
+        }else {
+            return toJson(-1, null, '归集失败.');
         }
-
-        obj.chain = chain;
-        logger.log('查询本地余额 after', my_account_all_coins.native)
-        var find_native_item = findTokenPriceItem('0x0000000000000000000000000000000000000000', tokenPrices);
-        //todo 计算 token 币价格 * token美元单价
-        if (find_native_item) {
-            var nativeCoins = calculate_total_usdprice(my_account_all_coins.native.balance, '18', find_native_item.usdPrice);
-            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);
-
-
-            if (nativeCoins > 1.0) {
-                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);
-
-                logger.log('native.balance>>>', nativeBalance)
-                logger.log('aGasPrice>>>', gasPrice)
-                logger.log('gasLimint>>>', gasLimit)
-
-                var real_native_amount = nativeBalance - gasPrice * gasLimit;
-                logger.log('start_collectCoins native amount:', real_native_amount.toString());
-                var info = await queryCompanyInfoFromId(0);
-                obj = {
-                    chain: chain,
-                    amount: real_native_amount.toString(),
-                    receiver: info.user_address,
-                    type: 'native',
-                    address: address,
-                }
-                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.');
-            }
-        } else {
-            logger.error('native Must be greater than  a dollar.', obj);
-            return toJson(-1, null, 'native Must be greater than  a dollar.');
-        }
-    }
+    } else {
+        return toJson(-1, null, 'transfer conditions are not met.');
+    }
+
+
+    //v0.1 版本归集
+    // var address = obj.address;
+    // var chain = obj.chain;
+    // var tokenPrices = obj.tokenPrices;
+    // logger.log('tokenPrices=', tokenPrices, my_account_all_coins);
+
+    // var nativeValue = my_account_all_coins.native.balance;
+
+    // if (!my_account_all_coins || !tokenPrices) return 'error.'
+
+    // logger.log(' my_account_all_coins.other.lenth=', my_account_all_coins.other.length);
+
+    // var isUpdateNativeBalance = 0;
+
+    // //token 归集
+    // if (my_account_all_coins.other && Array.isArray(my_account_all_coins.other) && my_account_all_coins.other.length > 0) {
+    //     var available = Array.isArray(tokenPrices.tokenPrice) && tokenPrices.tokenPrice.length > 0
+    //     if (!available) return -1;
+    //     for (let i = 0; i < my_account_all_coins.other.length; ++i) {
+    //         var transfer_item = my_account_all_coins.other[i];
+    //         if (my_account_all_coins.other[i].token_address != null) {
+    //             var find_transfer_item = findTokenPriceItem(transfer_item.token_address, tokenPrices);
+    //             //todo 计算 token 币价格 * token美元单价 
+    //             if (find_transfer_item && calculate_total_usdprice(transfer_item.balance, transfer_item.decimals, find_transfer_item.usdPrice) > 1.0) {
+    //                 var info = await queryCompanyInfoFromId(0);
+    //                 var obj_20 = {
+    //                     chain: obj.chain,
+    //                     contractAddress: transfer_item.token_address,
+    //                     amount: transfer_item.balance,
+    //                     receiver: info.user_address,
+    //                     type: 'erc20',
+    //                     address: address,
+    //                 }
+    //                 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)
+    //                 logger.log('start_collectCoins erc20 respose...', ret);
+
+    //                 //更新 native 金额
+    //                 if (!isTransferSucceed(ret)) return ret;
+
+    //                 var transfer = getTransferGasFree('token', ret)
+    //                 if (transfer && transfer.totalGasFree > 0) {
+    //                     logger.log('start_collectCoins 20 tempNativeValue=', my_account_all_coins.native.balance)
+    //                     var tempNativeValue = reduceNativeValue(nativeValue, transfer.totalGasFree)
+    //                     my_account_all_coins.native.balance = tempNativeValue.toString();
+    //                     logger.log('start_collectCoins 20  udpateNativeValue=', tempNativeValue);
+    //                 } else return "get native value error."
+    //             } else {
+    //                 logger.error('find_transfer_item error.', transfer_item);
+    //             }
+    //         } else {
+    //             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.');
+    //         }
+    //     }
+    // }
+
+    // //native 归集
+    // if (my_account_all_coins.native) {
+    //     logger.log('查询本地余额参数=', obj)
+    //     if (obj.chain) {
+    //         obj.chain = utils.getChainName(obj.chain)
+    //     }
+
+    //     obj.chain = chain;
+    //     logger.log('查询本地余额 after', my_account_all_coins.native)
+    //     var find_native_item = findTokenPriceItem('0x0000000000000000000000000000000000000000', tokenPrices);
+    //     //todo 计算 token 币价格 * token美元单价
+    //     if (find_native_item) {
+    //         var nativeCoins = calculate_total_usdprice(my_account_all_coins.native.balance, '18', find_native_item.usdPrice);
+    //         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);
+
+
+    //         if (nativeCoins > 1.0) {
+    //             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);
+
+    //             logger.log('native.balance>>>', nativeBalance)
+    //             logger.log('aGasPrice>>>', gasPrice)
+    //             logger.log('gasLimint>>>', gasLimit)
+
+    //             var real_native_amount = nativeBalance - gasPrice * gasLimit;
+    //             logger.log('start_collectCoins native amount:', real_native_amount.toString());
+    //             var info = await queryCompanyInfoFromId(0);
+    //             obj = {
+    //                 chain: chain,
+    //                 amount: real_native_amount.toString(),
+    //                 receiver: info.user_address,
+    //                 type: 'native',
+    //                 address: address,
+    //             }
+    //             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.');
+    //         }
+    //     } else {
+    //         logger.error('native Must be greater than  a dollar.', obj);
+    //         return toJson(-1, null, 'native Must be greater than  a dollar.');
+    //     }
+    // }
 }
 
 
@@ -507,9 +560,13 @@ const collectCoins = async (obj) => {
     if (typeof obj.tokenPrices == 'string')
         obj.tokenPrices = JSON.parse(obj.tokenPrices);
 
+    obj.chain = chain;
     //计算 gas 费用 是否需要归集
-    var transFerGasFree = await computeTransferGasFree(my_account_all_coins, obj.tokenPrices);
+    var transFerGasFree = await computeTransferGasFree(obj, my_account_all_coins, obj.tokenPrices);
     logger.log('computeTransferGasFree=', transFerGasFree)
+    if (transFerGasFree) {
+        // return
+    }
 
     //是否需要归集
     if (transFerGasFree.totalCount > 0) {

+ 2 - 2
model/redis_db.js

@@ -30,8 +30,8 @@ if (process.env.NODE_ENV == 'test') {
   }
   // var new_opts = "redis://"+password+"@"+host+":"+port+"/0"
   // "redis://:authpassword@127.0.0.1:6380/4"
-  // REDIS_INSTANCE = new Redis(opts);
-  REDIS_INSTANCE = new Redis.Cluster([opts]);
+  REDIS_INSTANCE = new Redis(opts);
+  // REDIS_INSTANCE = new Redis.Cluster([opts]);
   // REDIS_INSTANCE=new Redis.Cluster([opts]);
 } else if (process.env.NODE_ENV == 'prd') {
   opts = {