|
@@ -301,6 +301,7 @@ async function getAccountAllCoins(obj) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 判断是否转 gas 费
|
|
* 判断是否转 gas 费
|
|
* @param {*} my_account_all_coins
|
|
* @param {*} my_account_all_coins
|
|
@@ -345,7 +346,7 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
|
|
contractAddress: element.token_address,
|
|
contractAddress: element.token_address,
|
|
amount: element.balance,
|
|
amount: element.balance,
|
|
receiver: receiver_info.user_address,
|
|
receiver: receiver_info.user_address,
|
|
- type: 'erc20',
|
|
|
|
|
|
+ type: obj.chain == utils.CHAIN_NAME.czz ? 'token' : 'erc20',
|
|
address: obj.address,
|
|
address: obj.address,
|
|
usdPrice: find_transfer_item.usdPrice
|
|
usdPrice: find_transfer_item.usdPrice
|
|
}
|
|
}
|
|
@@ -356,7 +357,8 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
|
|
}
|
|
}
|
|
// });
|
|
// });
|
|
}
|
|
}
|
|
- var lastTokenPrice = await redis.readRedis(reids_token_config.LAST_TOKEN_PRICE)
|
|
|
|
|
|
+ // var lastTokenPrice = await redis.readRedis(reids_token_config.LAST_TOKEN_PRICE)
|
|
|
|
+ var lastTokenPrice = await redis.readAppendRedis(reids_token_config.LAST_TOKEN_PRICE, obj.chain, '')
|
|
|
|
|
|
logger.log('LAST_TOKEN_PRICE=', lastTokenPrice);
|
|
logger.log('LAST_TOKEN_PRICE=', lastTokenPrice);
|
|
|
|
|
|
@@ -389,10 +391,16 @@ async function computeTransferGasFree(obj, my_account_all_coins, tokenPrices) {
|
|
nativeCount = 1;
|
|
nativeCount = 1;
|
|
logger.log('native > 1.0', tokenCount);
|
|
logger.log('native > 1.0', tokenCount);
|
|
|
|
|
|
- var lastBnbPrice = await redis.readRedis(reids_token_config.LAST_BNB_PRICE)
|
|
|
|
|
|
+ // var lastBnbPrice = await redis.readRedis(reids_token_config.LAST_BNB_PRICE)
|
|
|
|
+
|
|
|
|
+ var lastBnbPrice = await redis.readAppendRedis(reids_token_config.LAST_BNB_PRICE, obj.chain, '')
|
|
logger.log('LAST_BNB_PRICE=', lastBnbPrice);
|
|
logger.log('LAST_BNB_PRICE=', lastBnbPrice);
|
|
if (lastBnbPrice && parseInt(lastBnbPrice) > 0) {
|
|
if (lastBnbPrice && parseInt(lastBnbPrice) > 0) {
|
|
- nativeGasPrice = parseInt(nativeCount) * parseInt(lastBnbPrice) * parseInt(account_config.BNB_GAS_LIMIT);
|
|
|
|
|
|
+ var limitPrice = parseInt(account_config.BNB_GAS_LIMIT)
|
|
|
|
+ if (obj.chain == utils.CHAIN_NAME.czz) {
|
|
|
|
+ limitPrice = 40000
|
|
|
|
+ }
|
|
|
|
+ nativeGasPrice = parseInt(nativeCount) * parseInt(lastBnbPrice) * limitPrice;
|
|
ret_a_gas = lastBnbPrice;
|
|
ret_a_gas = lastBnbPrice;
|
|
} else {
|
|
} else {
|
|
nativeGasPrice = parseInt(nativeCount) * parseInt(account_config.BNB_GAS_LIMIT) * parseInt(account_config.BNB_GAS_PRICE);
|
|
nativeGasPrice = parseInt(nativeCount) * parseInt(account_config.BNB_GAS_LIMIT) * parseInt(account_config.BNB_GAS_PRICE);
|
|
@@ -636,6 +644,7 @@ const transfer_handle = async (obj) => {
|
|
obj.privateKey = info.user_private_key;
|
|
obj.privateKey = info.user_private_key;
|
|
// if (process.env.NODE_ENV != 'dev') {
|
|
// if (process.env.NODE_ENV != 'dev') {
|
|
logger.log('readCompanyPriveteKeyFromMysql=', obj.privateKey)
|
|
logger.log('readCompanyPriveteKeyFromMysql=', obj.privateKey)
|
|
|
|
+ obj.address = info.user_address
|
|
// }
|
|
// }
|
|
} else {
|
|
} else {
|
|
//读取用户充币地址对应的私钥
|
|
//读取用户充币地址对应的私钥
|
|
@@ -672,11 +681,13 @@ const transfer_handle = async (obj) => {
|
|
if (ret && obj.contractAddress) {
|
|
if (ret && obj.contractAddress) {
|
|
var tr = getTransferGasFree('token', ret)
|
|
var tr = getTransferGasFree('token', ret)
|
|
logger.debug('cache setkey token LAST_TOTAL_TOKEN_FREE getTransferGasFree', tr)
|
|
logger.debug('cache setkey token LAST_TOTAL_TOKEN_FREE getTransferGasFree', tr)
|
|
- redis.redis_set(reids_token_config.LAST_TOKEN_PRICE, tr.gasFee);
|
|
|
|
|
|
+ // redis.redis_set(reids_token_config.LAST_TOKEN_PRICE, tr.gasFee);
|
|
|
|
+ redis.writeAppendRedis(reids_token_config.LAST_TOKEN_PRICE, obj.chain, '', tr.gasFee);
|
|
} else {
|
|
} else {
|
|
var tr = getTransferGasFree('native', ret)
|
|
var tr = getTransferGasFree('native', ret)
|
|
logger.debug('cache setkey LAST_TOTAL_BNB_FREE getTransferGasFree', tr)
|
|
logger.debug('cache setkey LAST_TOTAL_BNB_FREE getTransferGasFree', tr)
|
|
- redis.redis_set(reids_token_config.LAST_BNB_PRICE, tr.gasFee);
|
|
|
|
|
|
+ // redis.redis_set(reids_token_config.LAST_BNB_PRICE, tr.gasFee);
|
|
|
|
+ redis.writeAppendRedis(reids_token_config.LAST_BNB_PRICE, obj.chain, '', tr.gasFee);
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
var tm_obj = { ...obj }
|
|
var tm_obj = { ...obj }
|
|
@@ -741,7 +752,7 @@ const collectCoins = async (obj) => {
|
|
var test_json = '{"tokenPrice": [{"contract": "0x0000000000000000000000000000000000000000", "usdPrice": 400}, {"contract": "0x03716F32f72c692a0B355fa04639669E3341B94e", "usdPrice": 0.1}]}'
|
|
var test_json = '{"tokenPrice": [{"contract": "0x0000000000000000000000000000000000000000", "usdPrice": 400}, {"contract": "0x03716F32f72c692a0B355fa04639669E3341B94e", "usdPrice": 0.1}]}'
|
|
obj.tokenPrices = JSON.parse(test_json);
|
|
obj.tokenPrices = JSON.parse(test_json);
|
|
} else {
|
|
} else {
|
|
- obj.tokenPrices = await redis.readRedis(reids_token_config.TOKENPRICE)
|
|
|
|
|
|
+ obj.tokenPrices = await redis.readAppendRedis(reids_token_config.TOKENPRICE, chain, '')
|
|
if (!obj.tokenPrices) {
|
|
if (!obj.tokenPrices) {
|
|
logger.error('readRedis TOKENPRICE error')
|
|
logger.error('readRedis TOKENPRICE error')
|
|
return 'readRedis error'
|
|
return 'readRedis error'
|
|
@@ -906,12 +917,16 @@ const transfer = async (obj) => {
|
|
if (obj.privateKey != null) {
|
|
if (obj.privateKey != null) {
|
|
opts.privateKey = obj.privateKey;
|
|
opts.privateKey = obj.privateKey;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (obj.address) {
|
|
|
|
+ opts.fromAddress = obj.address
|
|
|
|
+ }
|
|
try {
|
|
try {
|
|
var ret = await transfer_(opts)
|
|
var ret = await transfer_(opts)
|
|
return toJson(SUCCEED_CODE, ret, "");
|
|
return toJson(SUCCEED_CODE, ret, "");
|
|
} catch (error) {
|
|
} catch (error) {
|
|
logger.tlog('transfer error:', error);
|
|
logger.tlog('transfer error:', error);
|
|
- logger.error('重要消息-重要消息-重要消息 transfer error:', error.toString(), JSON.stringify(options))
|
|
|
|
|
|
+ logger.error('重要消息-重要消息-重要消息 transfer error:', error.toString(), JSON.stringify(opts))
|
|
if (error.reason != null) {
|
|
if (error.reason != null) {
|
|
return toJson(ERROR_CODE_001, null, error.toString());
|
|
return toJson(ERROR_CODE_001, null, error.toString());
|
|
} else {
|
|
} else {
|
|
@@ -955,8 +970,33 @@ async function transfer_(opts) {
|
|
} else {
|
|
} else {
|
|
switch (opts.chainId) {
|
|
switch (opts.chainId) {
|
|
case utils.CHAIN_ID.czz:
|
|
case utils.CHAIN_ID.czz:
|
|
|
|
+ opts.chain = 'czz'
|
|
var ret = await czz.withdraw(opts)
|
|
var ret = await czz.withdraw(opts)
|
|
- return ret
|
|
|
|
|
|
+ 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 {
|
|
|
|
+ logger.error('czz withdraw error', JSON.stringify(ret), JSON.stringify(opts))
|
|
|
|
+ throw ret
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -976,13 +1016,14 @@ const getAllTokenWithdrawInfoLists = async (obj) => {
|
|
/**
|
|
/**
|
|
* 获取代币价格 -> usdPrice
|
|
* 获取代币价格 -> usdPrice
|
|
*/
|
|
*/
|
|
-const getAllTotkenPrice = async () => {
|
|
|
|
|
|
+const getAllTotkenPrice = async (opts) => {
|
|
try {
|
|
try {
|
|
logger.log('当前环境:', process.env.NODE_ENV);
|
|
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;
|
|
var token_price_key = reids_token_config.TOKENPRICE;
|
|
logger.log("getAllTotkenPrice token_price_key=", token_price_key);
|
|
logger.log("getAllTotkenPrice token_price_key=", token_price_key);
|
|
- return await redis.readRedis(token_price_key)
|
|
|
|
|
|
+ // return await redis.readRedis(token_price_key)
|
|
|
|
+ return await redis.readAppendRedis(token_price_key, opts.chain, '')
|
|
} catch (error) {
|
|
} catch (error) {
|
|
logger.error("getTotkenPrice=", error);
|
|
logger.error("getTotkenPrice=", error);
|
|
return toJson(ERROR_CODE_001, null, error.toString());
|
|
return toJson(ERROR_CODE_001, null, error.toString());
|
|
@@ -1339,7 +1380,19 @@ async function getTokenTransfersV2(opt) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// function test_() {
|
|
|
|
+// var temp_opts = {}
|
|
|
|
+// var bsc_ = utils.CHAIN_NAME.bsc_mainnet
|
|
|
|
+// switch (bsc_) {
|
|
|
|
+// case utils.CHAIN_NAME.bsc_mainnet:
|
|
|
|
+// case utils.CHAIN_NAME.bsc_testnet:
|
|
|
|
+// temp_opts.chain = 'bsc'
|
|
|
|
+// break
|
|
|
|
+// }
|
|
|
|
+// console.log('temp_opts', temp_opts);
|
|
|
|
+// }
|
|
|
|
|
|
|
|
+// test_();
|
|
|
|
|
|
/**
|
|
/**
|
|
* 获取交易记录 token,native
|
|
* 获取交易记录 token,native
|
|
@@ -1351,9 +1404,15 @@ async function getTransferRecord(opts, type, use_moralis_sdk_) {
|
|
var use_moralis_sdk = use_moralis_sdk_
|
|
var use_moralis_sdk = use_moralis_sdk_
|
|
var temp_opts = { ...opts }
|
|
var temp_opts = { ...opts }
|
|
|
|
|
|
-
|
|
|
|
if (temp_opts.chain == utils.CHAIN_NAME.czz) {
|
|
if (temp_opts.chain == utils.CHAIN_NAME.czz) {
|
|
use_moralis_sdk = 0;
|
|
use_moralis_sdk = 0;
|
|
|
|
+ } else if (use_moralis_sdk == 0) {
|
|
|
|
+ switch (temp_opts.chain) {
|
|
|
|
+ case utils.CHAIN_NAME.bsc_mainnet:
|
|
|
|
+ case utils.CHAIN_NAME.bsc_testnet:
|
|
|
|
+ temp_opts.chain = 'bsc'
|
|
|
|
+ break
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
if (use_moralis_sdk) {
|
|
if (use_moralis_sdk) {
|
|
@@ -1435,6 +1494,8 @@ async function getTransferRecord(opts, type, use_moralis_sdk_) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 获取 token or native 余额
|
|
* 获取 token or native 余额
|
|
* @param {*} opts
|
|
* @param {*} opts
|
|
@@ -1445,9 +1506,15 @@ async function getBalances(opts, type, use_moralis_sdk_) {
|
|
var use_moralis_sdk = use_moralis_sdk_
|
|
var use_moralis_sdk = use_moralis_sdk_
|
|
var temp_opts = { ...opts }
|
|
var temp_opts = { ...opts }
|
|
|
|
|
|
-
|
|
|
|
if (temp_opts.chain == utils.CHAIN_NAME.czz) {
|
|
if (temp_opts.chain == utils.CHAIN_NAME.czz) {
|
|
use_moralis_sdk = 0;
|
|
use_moralis_sdk = 0;
|
|
|
|
+ } else if (use_moralis_sdk == 0) {
|
|
|
|
+ switch (temp_opts.chain) {
|
|
|
|
+ case utils.CHAIN_NAME.bsc_mainnet:
|
|
|
|
+ case utils.CHAIN_NAME.bsc_testnet:
|
|
|
|
+ temp_opts.chain = 'bsc'
|
|
|
|
+ break
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
if (use_moralis_sdk) {
|
|
if (use_moralis_sdk) {
|
|
@@ -1460,8 +1527,12 @@ async function getBalances(opts, type, use_moralis_sdk_) {
|
|
if (type == 'native') {
|
|
if (type == 'native') {
|
|
temp_opts.type = 'native'
|
|
temp_opts.type = 'native'
|
|
var ret = await account_mysql.getAccountBalances(temp_opts)
|
|
var ret = await account_mysql.getAccountBalances(temp_opts)
|
|
- if (ret) {
|
|
|
|
|
|
+ if (ret && Array.isArray(ret.data.results) && ret.data.results.length > 0) {
|
|
return ret.data.results[0]
|
|
return ret.data.results[0]
|
|
|
|
+ } else return {
|
|
|
|
+ "type": "native",
|
|
|
|
+ "balance": "",
|
|
|
|
+ "responseType": "yqcx"
|
|
}
|
|
}
|
|
} else if (type == 'token') {
|
|
} else if (type == 'token') {
|
|
temp_opts.type = 'token'
|
|
temp_opts.type = 'token'
|