|
@@ -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);
|
|
|
|
|
|
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)
|
|
|
+
|
|
|
|
|
|
totalCount = nativeCount + tokenCount;
|
|
|
|
|
@@ -237,6 +259,9 @@ async function computeTransferGasFree(my_account_all_coins, tokenPrices) {
|
|
|
var service_charge = 0;
|
|
|
logger.log('total2Gas', total2Gas);
|
|
|
|
|
|
+
|
|
|
+ my_account_all_coins.transfer_arrays = transfer_obj
|
|
|
+
|
|
|
|
|
|
if (nativeAllBalance < total2Gas) {
|
|
|
if (tokenCount > 0) {
|
|
@@ -303,118 +328,146 @@ async function updateNativeBalance(nativeBalance, obj) {
|
|
|
|
|
|
|
|
|
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;
|
|
|
-
|
|
|
-
|
|
|
- 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);
|
|
|
-
|
|
|
- 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);
|
|
|
-
|
|
|
-
|
|
|
- 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)
|
|
|
+
|
|
|
+ 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);
|
|
|
-
|
|
|
- }
|
|
|
+ logger.tlog('start_collectCoins error=', ret);
|
|
|
+ t_err.push(ret)
|
|
|
+ };
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- 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);
|
|
|
-
|
|
|
- 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(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.');
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
@@ -507,9 +560,13 @@ const collectCoins = async (obj) => {
|
|
|
if (typeof obj.tokenPrices == 'string')
|
|
|
obj.tokenPrices = JSON.parse(obj.tokenPrices);
|
|
|
|
|
|
+ obj.chain = chain;
|
|
|
|
|
|
- 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) {
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
|
|
|
if (transFerGasFree.totalCount > 0) {
|