DevYK 3 éve
szülő
commit
48ee3b6edb
11 módosított fájl, 308 hozzáadás és 78 törlés
  1. 4 1
      config/dev_config.js
  2. 8 4
      config/prd_config.js
  3. 3 0
      config/test_config.js
  4. 0 1
      model/logger.js
  5. 202 54
      model/moralis_sdk.js
  6. 31 2
      model/mysql_db.js
  7. 1 0
      model/redis_db.js
  8. 2 2
      model/utils.js
  9. 22 8
      package-lock.json
  10. 1 0
      package.json
  11. 34 6
      test/test.js

+ 4 - 1
config/dev_config.js

@@ -14,12 +14,15 @@ const account_config = {
     TOKEN_GAS_LIMIT: '80000',
     BNB_GAS_LIMIT: '21000',
     BNB_GAS_PRICE: '10000000000',
+    TRANSFER_GAS: true,
 }
 
 const reids_token_config = {
     TOKENPRICE: 'TOKENPRICE',
     TOKENWITHDRAW: 'TOKENWITHDRAW',
     GASPRICE: "GASPRICE",
+    LAST_TOTAL_BNB_FREE:'LAST_TOTAL_BNB_FREE',
+    LAST_TOTAL_TOKEN_FREE:'LAST_TOTAL_TOKEN_FREE',
 }
 // 设置数据库配置文件
 const db_config = {
@@ -51,7 +54,7 @@ const moralis_config = {
 
 
 const logger_config = {
-    BASE_PATH:`${__dirname}/../logs/denetnode`,
+    BASE_PATH: `${__dirname}/../logs/denetnode`,
 }
 
 module.exports = {

+ 8 - 4
config/prd_config.js

@@ -8,6 +8,7 @@ const account_config = {
     TOKEN_GAS_LIMIT: '90000',
     BNB_GAS_LIMIT: '21000',
     BNB_GAS_PRICE: '10000000000',
+    TRANSFER_GAS:true,
 }
 
 const cryppt_config = {
@@ -19,6 +20,9 @@ const reids_token_config = {
     TOKENPRICE: 'TOKENPRICE',
     TOKENWITHDRAW: 'TOKENWITHDRAW',
     GASPRICE: "GASPRICE",
+    LAST_TOTAL_BNB_FREE:'LAST_TOTAL_BNB_FREE',
+    LAST_TOTAL_TOKEN_FREE:'LAST_TOTAL_TOKEN_FREE',
+    
 }
 // 设置数据库配置文件
 const db_config = {
@@ -42,10 +46,10 @@ const db_config = {
 
 // 设置 moralis sdk 配置文件
 const moralis_config = {
-    SERVER_URL: "",
-    APP_ID: "",
-    MASTER_KEY: "",
-    MORALIS_SECRET: ""
+    SERVER_URL: "https://ibvcojbk1qau.usemoralis.com:2053/server",
+    APP_ID: "AtqyMPVoEGhT6szQtl4iwsk3GkKHFPdDJJpp3Fs9",
+    MASTER_KEY: "YM89Fna2MK7u1Bb6C0y7yyTUSQm6e4vCNDUfwez6",
+    MORALIS_SECRET: "J0GEeEBh5MVtabeWI6XWuIPWSilnw4HVS6hEiSXJEX4zcN0rlMIGb0EkToUc0lGb"
 }
 
 const logger_config = {

+ 3 - 0
config/test_config.js

@@ -8,6 +8,7 @@ const account_config = {
     TOKEN_GAS_LIMIT: '80000',
     BNB_GAS_LIMIT: '21000',
     BNB_GAS_PRICE: '10000000000',
+    TRANSFER_GAS:true,
 }
 
 const cryppt_config = {
@@ -19,6 +20,8 @@ const reids_token_config = {
     TOKENPRICE: 'TOKENPRICE',
     TOKENWITHDRAW: 'TOKENWITHDRAW',
     GASPRICE: "GASPRICE",
+    LAST_TOTAL_BNB_FREE:'LAST_TOTAL_BNB_FREE',
+    LAST_TOTAL_TOKEN_FREE:'LAST_TOTAL_TOKEN_FREE',
 }
 // 设置数据库配置文件
 const db_config = {

+ 0 - 1
model/logger.js

@@ -85,7 +85,6 @@ module.exports = {
         errorLogger.mark.call(errorLogger, ...arguments)
     },
 
-
     //转账log
     tlog(){
         return transferLogger.debug.call(transferLogger, ...arguments)

+ 202 - 54
model/moralis_sdk.js

@@ -7,6 +7,8 @@ var { moralis_config, reids_token_config, account_config } = require('../config/
 const redis = require("./redis_db")  //导入 db.js
 const mysql = require("./mysql_db")
 const logger = require('./logger')
+
+const BigNumber = require('bignumber.js')
 /* Moralis init code */
 var serverUrl = moralis_config.SERVER_URL;
 var appId = moralis_config.APP_ID;
@@ -35,12 +37,75 @@ function toJson(code_, obj_, errMsg_) {
 }
 
 
+/**
+ * 获取转账的 gas 费
+ * @param {*} type 
+ * @param {*} json 
+ * @returns 
+ */
+function getTransferGasFree(type, json) {
+    var curGasPrice = account_config.BNB_GAS_PRICE
+    var curGasLimit = account_config.TOKEN_GAS_LIMIT
+    var nativeValue = 0;
+    var tokenValue = 0;
+    var code = -1;
+    if (type == 'native') {
+        curGasLimit = account_config.BNB_GAS_LIMIT
+    }
+    var totalGasFree = parseInt(curGasLimit) * parseInt(curGasPrice);
+
+    logger.log('getTransferGasFree json=', json)
+
+    if (json) {
+        var obj = JSON.parse(json)
+        code = obj.code;
+        logger.log('getTransferGasFree obj=', obj)
+        if (obj.data && obj.data.gasPrice && obj.data.gasLimit && obj.data.gasPrice.hex && obj.data.gasLimit.hex) {
+            var curGasPrice = BigNumber(obj.data.gasPrice.hex).toNumber()
+            var curGasLimit = BigNumber(obj.data.gasLimit.hex).toNumber()
+            if (curGasPrice > 0 && curGasLimit > 0) {
+                totalGasFree = curGasPrice * curGasLimit;
+            }
+            logger.log('getTransferGasFree totalGasFree=', curGasPrice, curGasLimit, totalGasFree)
+            if (obj.data.value && obj.data.value.hex) {
+                var value = BigNumber(obj.data.value.hex).toNumber()
+                logger.log('getTransferGasFree native value=', value)
+                if (value != 0) {
+                    nativeValue = value
+                }
+            }
+        }
+    }
+    return {
+        code: code,
+        totalGasFree: totalGasFree,
+        nativeValue: nativeValue,
+        tokenValue: tokenValue,
+    }
+}
+
+/**
+ * 
+ * @param {转账是否成功} json 
+ */
+function isTransferSucceed(json) {
+    if (json) {
+        var obj = JSON.parse(json)
+        return obj.code == 0
+    }
+    return false
+
+}
+
 const withdraw = async (obj) => {
     obj.withdraw = 1;
-    return await transfer(obj);
+    return await transfer_handle(obj);
 }
 
 
+
+
+
 async function getAccountBalances(options) {
     await initMasterSDK();
     if (options.chain) {
@@ -98,6 +163,9 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
     var ret_total_count = 0;
     var ret_a_gas = 0;
 
+    //需要转账的数组对象
+    var transfer_obj = [];
+
     //得到 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 => {
@@ -112,7 +180,13 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
         });
         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);
+        var lastTokenFree = await redis.readRedis(reids_token_config.LAST_TOTAL_TOKEN_FREE)
+        logger.log('LAST_TOTAL_TOKEN_FREE=', lastTokenFree);
+        if (lastTokenFree && reids_token_config.LAST_TOTAL_TOKEN_FREE && parseInt(lastTokenFree) > 0) {
+            tokenGasPrice = parseInt(tokenCount) * parseInt(lastTokenFree);
+        } else {
+            tokenGasPrice = parseInt(tokenCount) * parseInt(account_config.TOKEN_GAS_LIMIT) * parseInt(account_config.BNB_GAS_PRICE);
+        }
         ret_a_gas = account_config.BNB_GAS_PRICE;
         logger.log('tokenGasPrice=', tokenGasPrice);
     }
@@ -130,7 +204,14 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
         if (total_all_usdprice > 1.0) {
             nativeCount = 1;
             logger.debug('native > 1.0', tokenCount);
-            nativeGasPrice = parseInt(nativeCount) * parseInt(account_config.BNB_GAS_LIMIT) * parseInt(account_config.BNB_GAS_PRICE);
+
+            var lastBnbFree = await redis.readRedis(reids_token_config.LAST_TOTAL_BNB_FREE)
+            logger.log('LAST_TOTAL_BNB_FREE=', lastBnbFree);
+            if (lastTokenFree && reids_token_config.LAST_TOTAL_TOKEN_FREE && parseInt(lastTokenFree) > 0) {
+                nativeGasPrice = parseInt(nativeCount) * parseInt(lastBnbFree);
+            } else {
+                nativeGasPrice = parseInt(nativeCount) * parseInt(account_config.BNB_GAS_LIMIT) * parseInt(account_config.BNB_GAS_PRICE);
+            }
             ret_a_gas = account_config.BNB_GAS_PRICE;
         }
     }
@@ -142,8 +223,6 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
     logger.log('totalCount', totalCount);
 
 
-
-
     var total2Gas = nativeGasPrice + tokenGasPrice;
     var service_charge = 0;
     logger.log('total2Gas', total2Gas);
@@ -152,7 +231,7 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
     if (nativeAllBalance < total2Gas) {
         if (tokenCount > 0) {//出现 token 需要转移手续费
             service_charge = 1;
-            total2Gas = (total2Gas - nativeAllBalance);//充手续费
+            // total2Gas = (total2Gas - nativeAllBalance);//充手续费
             logger.log('需要转账=', total2Gas);
         }
     }
@@ -182,6 +261,14 @@ function calculate_total_usdprice(amount, decimals, usdprice) {
 }
 
 
+function addNativeValue(nativeValue, aValue) {
+    return BigInt(nativeValue) + BigInt(aValue)
+}
+
+function reduceNativeValue(nativeValue, rValue) {
+    return BigInt(nativeValue) - BigInt(rValue)
+}
+
 /**
  * todo --> 计算 gas  
  * @param {*} nativeBalance 
@@ -210,6 +297,9 @@ async function transfers(obj, my_account_all_coins) {
     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);
@@ -226,11 +316,12 @@ async function transfers(obj, my_account_all_coins) {
                 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: account_config.WELLET_PUBLIC_KEY,
+                        receiver: info.user_address,
                         type: 'erc20',
                         address: address,
                     }
@@ -239,6 +330,17 @@ async function transfers(obj, my_account_all_coins) {
                     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('token Must be greater than  a dollar.', transfer_item.balance, transfer_item.decimals);
@@ -253,15 +355,7 @@ async function transfers(obj, my_account_all_coins) {
         if (obj.chain) {
             obj.chain = utils.getChainName(obj.chain)
         }
-        logger.log('查询本地余额 before', my_account_all_coins.native)
-        if (isUpdateNativeBalance) {
-            // do {
-            var updateBalance = await updateNativeBalance(my_account_all_coins.native.balance, obj)
-            if (updateBalance)
-                my_account_all_coins.native.balance = updateBalance;
-            else
-                return 'updateNativeBalance error. '
-        }
+
         obj.chain = chain;
         logger.log('查询本地余额 after', my_account_all_coins.native)
         var find_native_item = findTokenPriceItem('0x0000000000000000000000000000000000000000', tokenPrices);
@@ -286,11 +380,11 @@ async function transfers(obj, my_account_all_coins) {
 
             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: account_config.WELLET_PUBLIC_KEY,
+                receiver: info.user_address,
                 type: 'native',
                 address: address,
             }
@@ -307,7 +401,56 @@ async function transfers(obj, my_account_all_coins) {
 
 const start_collectCoins = async (obj) => {
     obj.withdraw = 0;
-    return await transfer(obj);
+    return await transfer_handle(obj);
+}
+
+const transfer_handle = async (obj) => {
+    //提币
+    if (obj.withdraw) {
+        var id = 0
+        if (obj.privateKeyId)
+            id = obj.privateKeyId
+
+        //读取用户充币地址对应的私钥
+        var info = await queryCompanyInfoFromId(id);
+        //提币公司
+        obj.privateKey = info.user_private_key;
+        // if (process.env.NODE_ENV != 'dev') {
+        logger.debug('readCompanyPriveteKeyFromMysql=', obj.privateKey)
+        // }
+    } else {
+        //读取用户充币地址对应的私钥
+        obj.privateKey = await readPriveteKeyFromMysql(obj.address);
+    }
+    if (obj.privateKey && obj.privateKey.results) {
+        obj.privateKey = obj.privateKey.results;
+    }
+
+    if (!obj.privateKey) {
+        return toJson(-1, null, "readPriveteKeyFromMysql error.");
+    }
+
+    //解密
+    obj.privateKey = utils.decryptPrivityKey(obj.privateKey);
+
+    if (!obj.privateKey) {
+        return toJson(-1, null, "decryptPrivityKey error.");
+    }
+
+    var ret = await transfer(obj);
+    if (isTransferSucceed(ret)) {
+        //缓存当前交易的 gas 费用
+        if (ret && obj.contractAddress) {
+            var tr = getTransferGasFree('token', ret)
+            logger.debug('cache key token LAST_TOTAL_TOKEN_FREE getTransferGasFree', tr)
+            redis.redis_set(reids_token_config.LAST_TOTAL_TOKEN_FREE, tr.totalGasFree);
+        } else {
+            var tr = getTransferGasFree('native', ret)
+            logger.debug('cache key LAST_TOTAL_BNB_FREE getTransferGasFree', tr)
+            redis.redis_set(reids_token_config.LAST_TOTAL_BNB_FREE, tr.totalGasFree);
+        }
+    }
+    return ret;
 }
 
 
@@ -329,6 +472,7 @@ const collectCoins = async (obj) => {
 
     //得到币价格
     obj.tokenPrices = await redis.readRedis(reids_token_config.TOKENPRICE)
+    if (!obj.tokenPrices) return 'readRedis error'
     if (typeof obj.tokenPrices == 'string')
         obj.tokenPrices = JSON.parse(obj.tokenPrices);
 
@@ -338,24 +482,38 @@ const collectCoins = async (obj) => {
 
     //是否需要归集
     if (transFerGasFree.totalCount > 0) {
-        //需要转移 gas 费
-        if (parseInt(transFerGasFree.gasPrice) > 0 && transFerGasFree.get_service_charge == 1) {
+        //需要转移 gas 费 
+        //每次都需要充值 gas 费
+        if (account_config.TRANSFER_GAS || (parseInt(transFerGasFree.gasPrice) > 0 && transFerGasFree.get_service_charge == 1)) {
+            var info =await queryCompanyInfoFromId(0);
             var obj_wd = {
                 chain: chain,
                 amount: transFerGasFree.gasPrice,
                 receiver: obj.address,
                 type: 'native',
-                address: account_config.WELLET_PUBLIC_KEY, //todo 正式环境需要替换从 mysql read
+                // address: account_config.WELLET_PUBLIC_KEY, //todo 正式环境需要替换从 mysql read
+                address: info.user_address, //todo 正式环境需要替换从 mysql read
             }
             logger.log('开始充值 gas ', obj_wd)
             var ret = await withdraw(obj_wd)
             logger.log('充值完成 gas ', ret)
 
-            //更新本地余额
-            var updateBalance = await updateNativeBalance(my_account_all_coins.native.balance, obj)
-            if (updateBalance)
-                my_account_all_coins.native.balance = updateBalance;
-            else return "error."
+            if (!isTransferSucceed(ret)) return ret;
+
+            var transfer = getTransferGasFree('native', ret)
+            logger.log('getTransferGasFree transfer =', transfer)
+            if (transfer && transfer.nativeValue > 0) {
+                logger.log('tempNativeValue=', my_account_all_coins.native.balance)
+                var tempNativeValue = addNativeValue(my_account_all_coins.native.balance, transfer.nativeValue)
+                my_account_all_coins.native.balance = tempNativeValue.toString();
+                logger.log('udpateNativeValue=', tempNativeValue);
+            } else return "get native value error."
+
+            // //更新本地余额
+            // var updateBalance = await updateNativeBalance(my_account_all_coins.native.balance, obj)
+            // if (updateBalance)
+            //     my_account_all_coins.native.balance = updateBalance;
+            // else return "error."
         }
 
         obj.chain = chain;
@@ -394,8 +552,16 @@ async function readPriveteKeyFromMysql(address) {
     })
 }
 
+async function queryCompanyInfoFromId(id) {
+    return new Promise(resolve => {
+        mysql.queryCompanyInfoFromId(id).then(ret => {
+            logger.log('readPriveteKeyFromMysql=', ret);
+            resolve(ret);
+        })
+    })
+}
+
 const transfer = async (obj) => {
-    logger.debug("fun transfer in ", obj);
     logger.debug("fun transfer serverUrl ", serverUrl);
     logger.debug("fun transfer appId ", serverUrl);
     logger.debug("fun transfer moralisSecret ", moralisSecret);
@@ -408,7 +574,7 @@ const transfer = async (obj) => {
     opts.type = "erc20"; //native erc20
 
     if (!obj.receiver || !obj.amount || parseInt(obj.amount) <= 0) {
-        logger.error("transfer fun transfer parameter error.",obj.receiver,obj.amount,obj.amount);
+        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) {
@@ -438,26 +604,6 @@ const transfer = async (obj) => {
         opts.privateKey = obj.privateKey;
     }
 
-    //提币
-    if (obj.withdraw) {
-        //提币公司
-        opts.privateKey = account_config.WELLET_PRIVATE_KEY;
-    } else {
-        //读取用户充币地址对应的私钥
-        opts.privateKey = await readPriveteKeyFromMysql(obj.address);
-        if (opts.privateKey && opts.privateKey.results) {
-            opts.privateKey = opts.privateKey.results;
-        }
-    }
-
-    if (!opts.privateKey) {
-        return toJson(-1, null, "decryptPrivityKey error.");
-    }
-
-    //解密
-    opts.privateKey = utils.decryptPrivityKey(opts.privateKey);
-
-    logger.log('decryptPrivityKey privateKey=', opts.privateKey);
     try {
         // sending 0.5 DAI tokens with 18 decimals on BSC testnet
         var options;
@@ -468,14 +614,14 @@ const transfer = async (obj) => {
                 receiver: opts.receiver, //接收钱包地址
                 contractAddress: opts.contractAddress //用户合约地址
             };
-            logger.log("options 20 =", options);
+            logger.tlog("options 20 =", options);
         } else { //ETH or BNB
             options = Moralis.TransferOptions = {
                 type: opts.type,
                 amount: opts.amount,
                 receiver: opts.receiver, //接收钱包地址
             };
-            logger.log("options native =", options, opts.chainId);
+            logger.tlog("options native =", options, opts.chainId);
         }
 
         // Enable web3
@@ -484,10 +630,12 @@ const transfer = async (obj) => {
             chainId: opts.chainId,
             privateKey: opts.privateKey,
         });
+        logger.tlog("options id =", opts.chainId);
         var ret = await Moralis.transfer(options);
+        logger.tlog("transfer 结果 =", ret);
         return toJson(SUCCEED_CODE, ret, "");
     } catch (error) {
-        logger.error('transfer error:', error);
+        logger.tlog('transfer error:', error);
         if (error.reason != null) {
             return toJson(ERROR_CODE_001, null, error.toString());
         } else {
@@ -582,10 +730,10 @@ async function getTokenTransfers(opt) {
             }
             //主流币
             var t_1 = await Moralis.Web3API.account.getTransactions(options);
-            setTransfersDataType('native',t_1.result)
+            setTransfersDataType('native', t_1.result)
             //20币
             var t_2 = await Moralis.Web3API.account.getTokenTransfers(options);
-            setTransfersDataType('token',t_2.result)
+            setTransfersDataType('token', t_2.result)
             let arr = t_1.result;
             let arr1 = t_2.result;
             if (Array.isArray(arr1) && Array.isArray(arr)) {

+ 31 - 2
model/mysql_db.js

@@ -30,6 +30,34 @@ MYSQL_INSTANCE.on('error', function (err) {
 });
 MYSQL_INSTANCE.connect();
 
+function queryCompanyInfoFromId(id) {
+    var sql_main = 'select * from '
+    var sql_table_name = 'company_key_manage'
+    var sql_where = ' WHERE '
+    var sql_where_name = ' id= ? '
+    var sql_where_value = id
+    var new_sql = sql_main.concat(sql_table_name, sql_where, sql_where_name);
+    logger.debug('queryCompanyPrivateKeyFromId new_sql=', new_sql);
+    return new Promise((resolve) => {
+        MYSQL_INSTANCE.query(
+            new_sql, [sql_where_value],
+            function selectCb(err, results) {
+                logger.log('queryCompanyPrivateKeyFromId ret=', err, results);
+                var ret;
+                if (results && Array.isArray(results) && results.length > 0) {
+                    ret = results[0]
+                } else {
+                    ret = null
+                }
+                // resolve 只能传递一个参数
+                resolve({
+                    err: err,
+                    results: ret
+                });
+            }
+        );
+    })
+}
 
 
 /**
@@ -74,7 +102,7 @@ function queryUserPrivateKeyFromUserAddress(user_address) {
  * @param {*} user_address 
  * @returns 
  */
- function queryAllUserPrivateKeyAndUserAddress() {
+function queryAllUserPrivateKeyAndUserAddress() {
     var sql_main = 'select * from '
     var sql_table_name = db_config.mysql.TABLENAME
     var sql_where = ' order by id desc limit 3'
@@ -99,5 +127,6 @@ function queryUserPrivateKeyFromUserAddress(user_address) {
 
 module.exports = {
     queryUserPrivateKeyFromUserAddress,
-    queryAllUserPrivateKeyAndUserAddress
+    queryAllUserPrivateKeyAndUserAddress,
+    queryCompanyInfoFromId,
 };

+ 1 - 0
model/redis_db.js

@@ -31,6 +31,7 @@ if (process.env.NODE_ENV == 'test') {
     connectTimeout: 10000,
   }
   REDIS_INSTANCE = new Redis(opts);
+  // REDIS_INSTANCE=new Redis.Cluster([opts]);
 } else if (process.env.NODE_ENV == 'prd') {
   opts = {
     port: port,

+ 2 - 2
model/utils.js

@@ -25,14 +25,14 @@ function decryptPrivityKey(message) {
     var key = process.env.DENET_CRYPT_KEY //key used in Python
     var iv = process.env.DENET_CRYPT_IV
     logger.log('encrypted=', encrypted);
-    logger.log('decryptPrivityKey key= iv=', key, iv);
+    // 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);
-    logger.log('decrypted==', de_pk);
+    // logger.log('decrypted==', de_pk);
     return de_pk
 }
 

+ 22 - 8
package-lock.json

@@ -1,13 +1,14 @@
 {
-  "name": "koa2node",
+  "name": "denet-node-server",
   "version": "0.1.0",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
-      "name": "koa2node",
+      "name": "denet-node-server",
       "version": "0.1.0",
       "dependencies": {
+        "bignumber.js": "^9.0.2",
         "crypto-js": "^4.1.1",
         "debug": "^4.1.1",
         "dotenv": "^16.0.0",
@@ -3945,9 +3946,9 @@
       "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="
     },
     "node_modules/bignumber.js": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.0.0.tgz",
-      "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
+      "version": "9.0.2",
+      "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.0.2.tgz",
+      "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==",
       "engines": {
         "node": "*"
       }
@@ -10161,6 +10162,14 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/mysql/node_modules/bignumber.js": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.0.0.tgz",
+      "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/mysql/node_modules/safe-buffer": {
       "version": "5.1.2",
       "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -18813,9 +18822,9 @@
       "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="
     },
     "bignumber.js": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.0.0.tgz",
-      "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
+      "version": "9.0.2",
+      "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.0.2.tgz",
+      "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw=="
     },
     "binary-extensions": {
       "version": "1.13.1",
@@ -23859,6 +23868,11 @@
         "sqlstring": "2.3.1"
       },
       "dependencies": {
+        "bignumber.js": {
+          "version": "9.0.0",
+          "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.0.0.tgz",
+          "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
+        },
         "safe-buffer": {
           "version": "5.1.2",
           "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",

+ 1 - 0
package.json

@@ -9,6 +9,7 @@
     "test": "echo \"Error: no test specified\" && exit 1"
   },
   "dependencies": {
+    "bignumber.js": "^9.0.2",
     "crypto-js": "^4.1.1",
     "debug": "^4.1.1",
     "dotenv": "^16.0.0",

+ 34 - 6
test/test.js

@@ -3,8 +3,7 @@ const moralis = require("../model/moralis_sdk")  //导入 db.js
 // https://github.com/luin/ioredis#readme
 
 router.prefix('/denettest');
-
-
+const BigNumber = require('bignumber.js')
 function calculate_total_usdprice(amount, decimals, usdprice) {
     return parseInt(amount) / (10 ** parseInt(decimals)) * parseFloat(usdprice);
     // var new_decimals = 15;
@@ -46,17 +45,46 @@ async function getTransfers(ctx) {
 
     var token_total_usdprice = calculate_total_usdprice('99999999999999999998', '18', 0.1);
 
+
+    var data =
+    {
+        nonce: 118,
+        gasPrice: { type: 'BigNumber', hex: '0x02540be400' },
+        gasLimit: { type: 'BigNumber', hex: '0x5208' },
+        to: '0x7C7401fcc82D1e53C4090561c3e6fde80d74e317',
+        value: { type: 'BigNumber', hex: '0x039696f3392000' },
+        data: '0x',
+        chainId: 97,
+        v: 230,
+        r: '0x075149b50e81da71aa72ee73d1b07e8df6fa2416b97133dc3e2dea19b4ed4c88',
+        s: '0x7d8ac906b85275d63233e8f8ba6c0f5b860e9ebea1bc896346fe81824d9ec9c3',
+        from: '0xAD48D13E77011cFE03fF19729B6A247847AfD28E',
+        hash: '0xb9a75efb6a17325f2decaec9fba30fead7664c13a589fe0ccac02f791a7c84c8',
+        type: null,
+        confirmations: 0
+    }
+
+    var curGasPrice = BigNumber(data.gasPrice.hex)
+    var curGasLimit = BigNumber(data.gasLimit.hex)
+
+    if(curGasLimit > 0)
+    {
+        console.log('curGasLimit', curGasLimit.toNumber())
+    }
+    console.log('curGasPrice', curGasPrice.toNumber())
+
     var a = parseInt('10000000000000000')
     var b = parseInt('100000000000000000')
     console.log(token_total_usdprice, a / b);
     // ctx.body = await moralis.collectCoins(obj);
 
     //提交归集任务
-    if (obj.address) {
-        moralis.pushCollectConisObj(obj)
-    }
+    // if (obj.address) {
+    //     moralis.pushCollectConisObj(obj)
+    // }
+
 
-    ctx.body = 'test pushCollectConisObj';
+    ctx.body = curGasPrice + '-' + curGasLimit;
 
     // await moralis.collectCoins(obj).then((result) => {
     //     ctx.body = result;