|
@@ -12,7 +12,7 @@ const logger = require('./logger')
|
|
|
const report = require("./report") //导入 db.js
|
|
|
const BigNumber = require('bignumber.js')
|
|
|
const collect_coins_db = require('./db/collect_coins_db')
|
|
|
-const czz = require('./czz')
|
|
|
+const czz = require('./http_withdraw')
|
|
|
var remote_config_db = require("../model/db/remote_config_db");
|
|
|
|
|
|
/* Moralis init code */
|
|
@@ -232,6 +232,7 @@ const withdraw = async (obj) => {
|
|
|
|
|
|
|
|
|
async function getAccountBalances(options) {
|
|
|
+ logger.log('getAccountBalances fun in', options)
|
|
|
await initMasterSDK();
|
|
|
if (options.chain) {
|
|
|
options.chain = utils.getChainName(options.chain)
|
|
@@ -248,14 +249,15 @@ async function getAccountBalances(options) {
|
|
|
chain: options.chain
|
|
|
}
|
|
|
logger.log('getAccountBalances :', options, balance_opts)
|
|
|
+ var use_moralis_sdk = await remote_config_db.isUseMoralisSDK()
|
|
|
do {
|
|
|
try {
|
|
|
if (options.type == 'native') {
|
|
|
// result = await Moralis.Web3API.account.getNativeBalance(balance_opts);
|
|
|
- result = await getBalances(balance_opts, 'native', 1)
|
|
|
+ result = await getBalances(balance_opts, 'native', use_moralis_sdk)
|
|
|
logger.log('getNativeBalance=', result);
|
|
|
} else {
|
|
|
- result = await getBalances(balance_opts, 'token', 1)
|
|
|
+ result = await getBalances(balance_opts, 'token', use_moralis_sdk)
|
|
|
// result = await Moralis.Web3API.account.getTokenBalances(balance_opts);
|
|
|
logger.log('getTokenBalances=', result);
|
|
|
}
|
|
@@ -362,13 +364,14 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
|
|
|
if (element.token_address.toLowerCase() == '0x8860313deeb10a2863bc05b04b37897044edbda1'.toLowerCase()) {
|
|
|
add_gas_limit_count = 3
|
|
|
}
|
|
|
+ var type = utils.getTokenTransferType(obj.chain)
|
|
|
|
|
|
var obj_20 = {
|
|
|
chain: obj.chain,
|
|
|
contractAddress: element.token_address,
|
|
|
amount: element.balance,
|
|
|
receiver: receiver_info.user_address,
|
|
|
- type: obj.chain == utils.CHAIN_NAME.czz ? 'token' : 'erc20',
|
|
|
+ type: type,
|
|
|
address: obj.address,
|
|
|
usdPrice: find_transfer_item.usdPrice
|
|
|
}
|
|
@@ -383,7 +386,9 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
|
|
|
var lastTokenPrice = await redis.readAppendRedis(reids_token_config.LAST_TOKEN_PRICE, obj.chain, '')
|
|
|
|
|
|
logger.log('LAST_TOKEN_PRICE=', lastTokenPrice);
|
|
|
-
|
|
|
+ if (process.env.NODE_ENV == 'test' || process.env.NODE_ENV == 'dev') {
|
|
|
+ lastTokenPrice = parseInt(account_config.TOKEN_GAS_PRICE);
|
|
|
+ }
|
|
|
if (lastTokenPrice && parseInt(lastTokenPrice) > 0) {
|
|
|
tokenGasPrice = parseInt(tokenCount) * parseInt(lastTokenPrice) * (parseInt(account_config.TOKEN_GAS_LIMIT) * add_gas_limit_count);
|
|
|
ret_a_gas = lastTokenPrice;
|
|
@@ -419,9 +424,15 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
|
|
|
logger.log('LAST_BNB_PRICE=', lastBnbPrice);
|
|
|
if (lastBnbPrice && parseInt(lastBnbPrice) > 0) {
|
|
|
var limitPrice = parseInt(account_config.BNB_GAS_LIMIT)
|
|
|
- if (obj.chain == utils.CHAIN_NAME.czz) {
|
|
|
+
|
|
|
+ if (utils.getChainNameFromChain(obj.chain) != 'bsc') {
|
|
|
limitPrice = 40000
|
|
|
}
|
|
|
+ if (process.env.NODE_ENV == 'test' || process.env.NODE_ENV == 'dev') {
|
|
|
+ lastBnbPrice = parseInt(account_config.BNB_GAS_PRICE);
|
|
|
+ }
|
|
|
+
|
|
|
+ logger.log('LAST_BNB_PRICE limitPrice =', lastBnbPrice, limitPrice);
|
|
|
nativeGasPrice = parseInt(nativeCount) * parseInt(lastBnbPrice) * limitPrice;
|
|
|
ret_a_gas = lastBnbPrice;
|
|
|
} else {
|
|
@@ -528,7 +539,7 @@ async function updateNativeBalance(nativeBalance, obj) {
|
|
|
do {
|
|
|
//上面转账完 BNB 会减去,这里再获取一次
|
|
|
// var native_ret = await Moralis.Web3API.account.getNativeBalance(temp);
|
|
|
- var native_ret = await getBalances(balance_opts, 'native', 1);
|
|
|
+ var native_ret = await getBalances(balance_opts, 'native', 0);
|
|
|
logger.log('更新余额 :', nativeBalance, native_ret, retryCount)
|
|
|
if (nativeBalance != native_ret.balance && BigInt(nativeBalance) < BigInt(native_ret.balance)) {
|
|
|
return native_ret.balance;
|
|
@@ -689,12 +700,15 @@ const transfer_handle = async (obj) => {
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
- //解密
|
|
|
- obj.privateKey = utils.decryptPrivityKey(obj.privateKey);
|
|
|
+ if (utils.getChainNameFromChain(obj.chain) == 'bsc') {
|
|
|
|
|
|
- if (!obj.privateKey) {
|
|
|
- logger.error('decryptPrivityKey error', obj);
|
|
|
- return toJson(-1, null, "decryptPrivityKey error.");
|
|
|
+ //解密
|
|
|
+ obj.privateKey = utils.decryptPrivityKey(obj.privateKey);
|
|
|
+
|
|
|
+ if (!obj.privateKey) {
|
|
|
+ logger.error('decryptPrivityKey error', obj);
|
|
|
+ return toJson(-1, null, "decryptPrivityKey error.");
|
|
|
+ }
|
|
|
}
|
|
|
} catch (error) {
|
|
|
logger.error('decryptPrivityKey error', error.toString(), JSON.stringify(obj));
|
|
@@ -845,6 +859,12 @@ const collectCoins = async (obj) => {
|
|
|
if (typeof obj.tokenPrices == 'string')
|
|
|
obj.tokenPrices = JSON.parse(obj.tokenPrices);
|
|
|
}
|
|
|
+ if (process.env.NODE_ENV == 'dev' && obj.tokenPrices && Array.isArray(obj.tokenPrices.tokenPrice)) {
|
|
|
+ obj.tokenPrices.tokenPrice.push({
|
|
|
+ contract: '0xFF94950Ee8A79c52cC4B0Aa5178C8cEa48A3F3A6',
|
|
|
+ usdPrice: 0.12337863
|
|
|
+ })
|
|
|
+ }
|
|
|
logger.log('tokenPrices=', obj.tokenPrices)
|
|
|
|
|
|
obj.chain = chain;
|
|
@@ -1038,7 +1058,7 @@ async function transfer_(opts) {
|
|
|
if (opts.receiver) {
|
|
|
opts.receiver = utils.trim(opts.receiver)
|
|
|
}
|
|
|
- if (opts.chainId != utils.CHAIN_ID.czz) {
|
|
|
+ if (opts.chainId == utils.CHAIN_ID.bsc_testnet || opts.chainId == utils.CHAIN_ID.bsc_mainnet) {
|
|
|
var options;
|
|
|
// sending 0.5 DAI tokens with 18 decimals on BSC testnet
|
|
|
if (opts.contractAddress) { //如果存在就是代币
|
|
@@ -1083,47 +1103,43 @@ async function transfer_(opts) {
|
|
|
return ret
|
|
|
}
|
|
|
} else {
|
|
|
- switch (opts.chainId) {
|
|
|
- case utils.CHAIN_ID.czz:
|
|
|
- opts.chain = 'czz'
|
|
|
- switch (opts.type) {
|
|
|
- case 'erc20':
|
|
|
- opts.type = 'token'
|
|
|
- break
|
|
|
- }
|
|
|
- var ret = await czz.withdraw(opts)
|
|
|
- if (ret && ret.data && ret.code == 0) {
|
|
|
- return {
|
|
|
- nonce: ret.data.nonce,
|
|
|
- gasPrice: {
|
|
|
- type: "BigNumber",
|
|
|
- hex: "0x" + (ret.data.gasPrice).toString(16)
|
|
|
- },
|
|
|
- gasLimit: {
|
|
|
- type: "BigNumber",
|
|
|
- hex: "0x" + (ret.data.gasLimit).toString(16)
|
|
|
- },
|
|
|
- to: ret.data.to,
|
|
|
- value: {
|
|
|
- type: "BigNumber",
|
|
|
- hex: "0x" + (ret.data.value).toString(16),
|
|
|
- number: ret.data.value
|
|
|
- },
|
|
|
- chain: opts.chain,
|
|
|
- from: ret.data.from,
|
|
|
- hash: ret.data.hash,
|
|
|
- }
|
|
|
- } else if (ret && ret.data && ret.code == 1) {
|
|
|
- return {
|
|
|
- code: 1,
|
|
|
- hash: ret.data.hash,
|
|
|
- create_time: utils.getTimestamp(),
|
|
|
- lifecycle: 24 * 60 * 60 * 1000,
|
|
|
- }
|
|
|
- } else {
|
|
|
- logger.error('czz withdraw error', JSON.stringify(ret), JSON.stringify(opts))
|
|
|
- throw JSON.stringify(ret)
|
|
|
- }
|
|
|
+ if (opts.type != 'native') {
|
|
|
+ opts.type = 'token'
|
|
|
+ }
|
|
|
+ opts.chain = utils.getChainIdToName(opts.chainId)
|
|
|
+ var ret = await czz.withdraw(opts)
|
|
|
+ if (ret && ret.data && ret.code == 0) {
|
|
|
+ return {
|
|
|
+ nonce: ret.data.nonce,
|
|
|
+ gasPrice: {
|
|
|
+ type: "BigNumber",
|
|
|
+ hex: "0x" + (ret.data.gasPrice).toString(16)
|
|
|
+ },
|
|
|
+ gasLimit: {
|
|
|
+ type: "BigNumber",
|
|
|
+ hex: "0x" + (ret.data.gasLimit).toString(16)
|
|
|
+ },
|
|
|
+ to: ret.data.to,
|
|
|
+ value: {
|
|
|
+ type: "BigNumber",
|
|
|
+ hex: "0x" + (ret.data.value).toString(16),
|
|
|
+ number: ret.data.value
|
|
|
+ },
|
|
|
+ chain: opts.chain,
|
|
|
+ from: ret.data.from,
|
|
|
+ hash: ret.data.hash,
|
|
|
+ }
|
|
|
+ } else if (ret && ret.data && ret.code == 1) {
|
|
|
+ return {
|
|
|
+ code: 1,
|
|
|
+ chain: opts.chain,
|
|
|
+ hash: ret.data.txn_hash,
|
|
|
+ create_time: utils.getTimestamp(),
|
|
|
+ lifecycle: 24 * 60 * 60 * 1000,
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ logger.error('czz withdraw error', JSON.stringify(ret), JSON.stringify(opts))
|
|
|
+ throw JSON.stringify(ret)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1142,7 +1158,8 @@ async function pushChainDetailTOQueue(withdraw, request, obj) {
|
|
|
var obj = JSON.parse(obj)
|
|
|
var temp_obj = {
|
|
|
withdraw_id: request.withdraw_id,
|
|
|
- hash: obj.hash,
|
|
|
+ hash: obj.data.hash,
|
|
|
+ chain: obj.data.chain,
|
|
|
create_time: obj.data.create_time,
|
|
|
lifecycle: obj.data.lifecycle
|
|
|
}
|
|
@@ -1175,10 +1192,9 @@ const getAllTokenWithdrawInfoLists = async (obj) => {
|
|
|
const getAllTotkenPrice = async (opts) => {
|
|
|
try {
|
|
|
logger.log('当前环境:', process.env.NODE_ENV);
|
|
|
- logger.log("getAllTotkenPrice in", reids_token_config); // Prints "value"
|
|
|
+ // logger.log("getAllTotkenPrice in", reids_token_config); // Prints "value"
|
|
|
var token_price_key = reids_token_config.TOKENPRICE;
|
|
|
logger.log("getAllTotkenPrice token_price_key=", token_price_key);
|
|
|
- // return await redis.readRedis(token_price_key)
|
|
|
return await redis.readAppendRedis(token_price_key, opts.chain, '')
|
|
|
} catch (error) {
|
|
|
logger.error("getTotkenPrice=", error);
|
|
@@ -1419,11 +1435,13 @@ async function getTokenTransfersV2(opt) {
|
|
|
var tryCount = 4;
|
|
|
var delay = 1000
|
|
|
var interval = 500
|
|
|
+
|
|
|
+ var use_moralis_sdk = await remote_config_db.isUseMoralisSDK()
|
|
|
do {
|
|
|
//主流币
|
|
|
try {
|
|
|
logger.log('getTokenTransfersV2 account getTransactions>>>>>', options);
|
|
|
- t_1 = await getTransferRecord(options, 'native', 1);
|
|
|
+ t_1 = await getTransferRecord(options, 'native', use_moralis_sdk);
|
|
|
logger.log('getTokenTransfersV2 native ret -->>> t_1', t_1);
|
|
|
break
|
|
|
} catch (error) {
|
|
@@ -1460,7 +1478,7 @@ async function getTokenTransfersV2(opt) {
|
|
|
options.to_block = '10000000000'
|
|
|
}
|
|
|
logger.log('getTokenTransfersV2 account getTokenTransfers>>>>>', options);
|
|
|
- t_2 = await getTransferRecord(options, 'token', 1);
|
|
|
+ t_2 = await getTransferRecord(options, 'token', use_moralis_sdk);
|
|
|
logger.log('getTokenTransfersV2 token ret -->>> t_2', t_2);
|
|
|
break
|
|
|
} catch (error) {
|
|
@@ -1522,7 +1540,7 @@ async function getTokenTransfersV2(opt) {
|
|
|
do {
|
|
|
try {
|
|
|
logger.log('getTokenTransfersV2 getTransaction options-->>> ', options);
|
|
|
- const transaction = await getTransferRecord(options, 'hash', 1);
|
|
|
+ const transaction = await getTransferRecord(options, 'hash', use_moralis_sdk);
|
|
|
logger.log('getTokenTransfersV2 getTransaction ret-->>> ', transaction);
|
|
|
return transaction;
|
|
|
} catch (error) {
|
|
@@ -1555,6 +1573,7 @@ function convertChain(chain) {
|
|
|
case utils.CHAIN_NAME.bsc_testnet:
|
|
|
return 'bsc'
|
|
|
}
|
|
|
+ return chain
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1562,12 +1581,12 @@ function convertChain(chain) {
|
|
|
* @param {} opts
|
|
|
*/
|
|
|
async function getTransferRecord(opts, type, use_moralis_sdk_) {
|
|
|
- logger.info('getTransferRecord>>>>>>>>', opts, type)
|
|
|
+ logger.info('getTransferRecord>>>>>>>>', opts, type, use_moralis_sdk_)
|
|
|
//是否使用 moralis sdk 进行查询
|
|
|
var use_moralis_sdk = use_moralis_sdk_
|
|
|
var temp_opts = { ...opts }
|
|
|
|
|
|
- if (temp_opts.chain == utils.CHAIN_NAME.czz) {
|
|
|
+ if (temp_opts.chain != utils.CHAIN_NAME.bsc_mainnet && temp_opts.chain != utils.CHAIN_NAME.bsc_testnet) {
|
|
|
use_moralis_sdk = 0;
|
|
|
} else if (use_moralis_sdk == 0) {
|
|
|
temp_opts.chain = convertChain(temp_opts.chain)
|
|
@@ -1664,7 +1683,7 @@ async function getBalances(opts, type, use_moralis_sdk_) {
|
|
|
var use_moralis_sdk = use_moralis_sdk_
|
|
|
var temp_opts = { ...opts }
|
|
|
|
|
|
- if (temp_opts.chain == utils.CHAIN_NAME.czz) {
|
|
|
+ if (temp_opts.chain != utils.CHAIN_NAME.bsc_mainnet && temp_opts.chain != utils.CHAIN_NAME.bsc_testnet) {
|
|
|
use_moralis_sdk = 0;
|
|
|
} else if (use_moralis_sdk == 0) {
|
|
|
temp_opts.chain = convertChain(temp_opts.chain)
|