|
@@ -7,7 +7,7 @@ var { moralis_config, reids_token_config, account_config } = require('../config/
|
|
const redis = require("./redis_db") //导入 db.js
|
|
const redis = require("./redis_db") //导入 db.js
|
|
const mysql = require("./mysql_db")
|
|
const mysql = require("./mysql_db")
|
|
const logger = require('./logger')
|
|
const logger = require('./logger')
|
|
-
|
|
|
|
|
|
+const report = require("./report") //导入 db.js
|
|
const BigNumber = require('bignumber.js')
|
|
const BigNumber = require('bignumber.js')
|
|
/* Moralis init code */
|
|
/* Moralis init code */
|
|
var serverUrl = moralis_config.SERVER_URL;
|
|
var serverUrl = moralis_config.SERVER_URL;
|
|
@@ -134,8 +134,6 @@ const withdraw = async (obj) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
async function getAccountBalances(options) {
|
|
async function getAccountBalances(options) {
|
|
await initMasterSDK();
|
|
await initMasterSDK();
|
|
if (options.chain) {
|
|
if (options.chain) {
|
|
@@ -310,6 +308,7 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
|
|
totalCount: ret_total_count, //一共归集次数
|
|
totalCount: ret_total_count, //一共归集次数
|
|
aGasPrice: ret_a_gas, //单个 gas 费用
|
|
aGasPrice: ret_a_gas, //单个 gas 费用
|
|
get_service_charge: service_charge,//是否需要服务费
|
|
get_service_charge: service_charge,//是否需要服务费
|
|
|
|
+ transfer_obj: transfer_obj,
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
@@ -363,11 +362,12 @@ async function updateNativeBalance(nativeBalance, obj) {
|
|
}
|
|
}
|
|
|
|
|
|
//20 and native 归集
|
|
//20 and native 归集
|
|
-async function transfers(obj, my_account_all_coins) {
|
|
|
|
-
|
|
|
|
|
|
+async function transfers(obj, my_account_all_coins, logParams) {
|
|
// 优化后的归集
|
|
// 优化后的归集
|
|
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) {
|
|
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;
|
|
var t_i = 0;
|
|
|
|
+ var totalGasFee = 0;
|
|
|
|
+ var collects = []
|
|
for (let index = 0; index < my_account_all_coins.transfer_arrays.length; index++) {
|
|
for (let index = 0; index < my_account_all_coins.transfer_arrays.length; index++) {
|
|
var ti = my_account_all_coins.transfer_arrays[index]
|
|
var ti = my_account_all_coins.transfer_arrays[index]
|
|
logger.tlog('ti=', ti)
|
|
logger.tlog('ti=', ti)
|
|
@@ -383,11 +383,34 @@ async function transfers(obj, my_account_all_coins) {
|
|
if (isTransferSucceed(ret)) {
|
|
if (isTransferSucceed(ret)) {
|
|
logger.tlog('start_collectCoins respose...', ret);
|
|
logger.tlog('start_collectCoins respose...', ret);
|
|
t_i += 1
|
|
t_i += 1
|
|
|
|
+
|
|
|
|
+ collects.push(ret);
|
|
|
|
+ //缓存当前交易的 gas 费用
|
|
|
|
+ if (ret && ti.contractAddress) {
|
|
|
|
+ var tr = getTransferGasFree('token', ret)
|
|
|
|
+ // tr.totalGasFree
|
|
|
|
+ totalGasFee += parseInt(tr.totalGasFree);
|
|
|
|
+ } else {
|
|
|
|
+ var tr = getTransferGasFree('native', ret)
|
|
|
|
+ // tr.totalGasFree
|
|
|
|
+ totalGasFee += parseInt(tr.totalGasFree);
|
|
|
|
+ }
|
|
} else {
|
|
} else {
|
|
logger.tlog('start_collectCoins error=', ret);
|
|
logger.tlog('start_collectCoins error=', ret);
|
|
};
|
|
};
|
|
}
|
|
}
|
|
if (t_i == my_account_all_coins.transfer_arrays.length) {
|
|
if (t_i == my_account_all_coins.transfer_arrays.length) {
|
|
|
|
+ //日志埋点-归集全部所花费的 gas 费用
|
|
|
|
+ logParams.collectCoinsTotalGasFee = totalGasFee.toString();
|
|
|
|
+ logger.log('归集日志上报:', logParams);
|
|
|
|
+ logParams.type = report.REPORT_TYPE.collect_coins
|
|
|
|
+ //日志埋点-归集的响应
|
|
|
|
+ logParams.results = collects
|
|
|
|
+ var info = await queryCompanyInfoFromId(0);
|
|
|
|
+ logParams.receiver_address_total_balance_after = await queryCollectBalance(info.user_address, obj.chain)
|
|
|
|
+ //日志埋点-日志上报
|
|
|
|
+ report.logReport(logParams)
|
|
|
|
+
|
|
return toJson(0, null, '所有币归集成功.');
|
|
return toJson(0, null, '所有币归集成功.');
|
|
} else {
|
|
} else {
|
|
return toJson(-1, null, '归集失败.');
|
|
return toJson(-1, null, '归集失败.');
|
|
@@ -465,6 +488,25 @@ const transfer_handle = async (obj) => {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
+async function queryCollectBalance(address, chain) {
|
|
|
|
+ // var t_chain = utils.getChainName(chain)
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ var queryCollectBalance = {
|
|
|
|
+ address: address,
|
|
|
|
+ chain: chain
|
|
|
|
+ }
|
|
|
|
+ logger.log('queryCollectBalance', queryCollectBalance)
|
|
|
|
+ // 查询归集地址余额
|
|
|
|
+ // return await getAccountBalances(queryCollectBalance);
|
|
|
|
+ return await getAccountAllCoins(queryCollectBalance);
|
|
|
|
+ } catch (error) {
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
/**
|
|
/**
|
|
* 用户充币地址的币转移到归集地址
|
|
* 用户充币地址的币转移到归集地址
|
|
@@ -479,7 +521,15 @@ const collectCoins = async (obj) => {
|
|
//1、拿到当前账户所有的币
|
|
//1、拿到当前账户所有的币
|
|
//2、是否满足交易费 如果不满足则 归集地址转移 币count * 手续费 到充币地址
|
|
//2、是否满足交易费 如果不满足则 归集地址转移 币count * 手续费 到充币地址
|
|
//3、遍历所有币,开始转移到归集地址
|
|
//3、遍历所有币,开始转移到归集地址
|
|
|
|
+
|
|
|
|
+ // 日志上报的参数
|
|
|
|
+ var logParams = {};
|
|
|
|
+
|
|
var my_account_all_coins = await getAccountAllCoins(obj);
|
|
var my_account_all_coins = await getAccountAllCoins(obj);
|
|
|
|
+
|
|
|
|
+ //埋点日志-转账之前的充币地址余额
|
|
|
|
+ logParams.addressBalances = { ...my_account_all_coins };
|
|
|
|
+
|
|
logger.log('collectCoins=', my_account_all_coins)
|
|
logger.log('collectCoins=', my_account_all_coins)
|
|
//得到币价格
|
|
//得到币价格
|
|
if (process.env.NODE_ENV == 'dev') {
|
|
if (process.env.NODE_ENV == 'dev') {
|
|
@@ -497,11 +547,33 @@ const collectCoins = async (obj) => {
|
|
obj.chain = chain;
|
|
obj.chain = chain;
|
|
//计算 gas 费用 是否需要归集
|
|
//计算 gas 费用 是否需要归集
|
|
var transFerGasFree = await computeTransferGasFree(obj, my_account_all_coins, obj.tokenPrices);
|
|
var transFerGasFree = await computeTransferGasFree(obj, my_account_all_coins, obj.tokenPrices);
|
|
|
|
+
|
|
|
|
+ //埋点日志- 需要归集的 native token
|
|
|
|
+ if (transFerGasFree.transfer_obj && Array.isArray(transFerGasFree.transfer_obj)) {
|
|
|
|
+ logParams.transfers = []
|
|
|
|
+ for (let index = 0; index < transFerGasFree.transfer_obj.length; index++) {
|
|
|
|
+ const element = transFerGasFree.transfer_obj[index];
|
|
|
|
+ logParams.transfers.push({ ...element })
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
logger.log('computeTransferGasFree=', transFerGasFree)
|
|
logger.log('computeTransferGasFree=', transFerGasFree)
|
|
|
|
+ logger.log(' logParams.transfers=', logParams.transfers)
|
|
if (transFerGasFree) {
|
|
if (transFerGasFree) {
|
|
// return
|
|
// return
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // var infos = await queryCompanyInfoFromId(0);
|
|
|
|
+
|
|
|
|
+ // var temp_obj = { ...obj }
|
|
|
|
+ // temp_obj.address = infos.user_address;
|
|
|
|
+ // temp_obj.chain = chain;
|
|
|
|
+
|
|
|
|
+ // var tempCollectBalance = await queryCollectBalance(infos.user_address, chain)
|
|
|
|
+
|
|
|
|
+ // var tempCollectBalance = await getAccountAllCoins(temp_obj);
|
|
|
|
+ // logger.log('tempCollectBalance', tempCollectBalance)
|
|
|
|
+
|
|
//是否需要归集
|
|
//是否需要归集
|
|
if (transFerGasFree.totalCount > 0) {
|
|
if (transFerGasFree.totalCount > 0) {
|
|
//需要转移 gas 费
|
|
//需要转移 gas 费
|
|
@@ -516,12 +588,18 @@ const collectCoins = async (obj) => {
|
|
// 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
|
|
address: info.user_address, //todo 正式环境需要替换从 mysql read
|
|
}
|
|
}
|
|
|
|
+ //埋点日志-预存 gas 付费
|
|
|
|
+ logParams.prestore_gas_fee = { ...obj_wd };
|
|
|
|
+
|
|
|
|
+ logParams.receiver_address_total_balance_before = await queryCollectBalance(info.user_address, chain)
|
|
|
|
+ logParams.company_public_key = info.user_address
|
|
logger.log('开始充值 gas ', obj_wd)
|
|
logger.log('开始充值 gas ', obj_wd)
|
|
var ret = await withdraw(obj_wd)
|
|
var ret = await withdraw(obj_wd)
|
|
logger.log('充值完成 gas ', ret)
|
|
logger.log('充值完成 gas ', ret)
|
|
|
|
|
|
if (!isTransferSucceed(ret)) return ret;
|
|
if (!isTransferSucceed(ret)) return ret;
|
|
|
|
|
|
|
|
+
|
|
var transfer = getTransferGasFree('native', ret)
|
|
var transfer = getTransferGasFree('native', ret)
|
|
logger.log('getTransferGasFree transfer =', transfer)
|
|
logger.log('getTransferGasFree transfer =', transfer)
|
|
if (transfer && transfer.nativeValue > 0) {
|
|
if (transfer && transfer.nativeValue > 0) {
|
|
@@ -536,7 +614,7 @@ const collectCoins = async (obj) => {
|
|
obj.chain = chain;
|
|
obj.chain = chain;
|
|
obj.transFerGasFree = transFerGasFree;
|
|
obj.transFerGasFree = transFerGasFree;
|
|
logger.log('transfers--->', obj);
|
|
logger.log('transfers--->', obj);
|
|
- var ret = await transfers(obj, my_account_all_coins);
|
|
|
|
|
|
+ var ret = await transfers(info, my_account_all_coins, logParams);
|
|
logger.log('归集结果=', ret);
|
|
logger.log('归集结果=', ret);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
@@ -816,6 +894,9 @@ module.exports = {
|
|
isTransferSucceed,
|
|
isTransferSucceed,
|
|
getTransferRecordGasFree,
|
|
getTransferRecordGasFree,
|
|
pushCollectConisObj,
|
|
pushCollectConisObj,
|
|
|
|
+ getTransferGasFree,
|
|
|
|
+ queryCollectBalance,
|
|
|
|
+ queryCompanyInfoFromId,
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|