|
|
@@ -4,11 +4,18 @@ namespace app\admin\controller\general;
|
|
|
|
|
|
use app\admin\model\Admin;
|
|
|
use app\common\controller\Backend;
|
|
|
+use app\common\model\GasLog;
|
|
|
+use blockchain\TronService;
|
|
|
+use blockchain\Web3Service;
|
|
|
use fast\Random;
|
|
|
+use think\Config;
|
|
|
+use think\Log;
|
|
|
use think\Session;
|
|
|
use think\Validate;
|
|
|
use app\common\model\Txjl;
|
|
|
use think\Db;
|
|
|
+use Tron\Address;
|
|
|
+
|
|
|
/**
|
|
|
* 个人配置
|
|
|
*
|
|
|
@@ -121,4 +128,151 @@ class Txmx extends Backend
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
+// 归集(把所有用户的USDT归集到指定地址)
|
|
|
+ public function summary(){
|
|
|
+ $trcUsdtAddress = Config::get('blockchain.trc.tokens.usdt.address');
|
|
|
+ $trcgasAddress = Config::get('blockchain.trc.tokens.usdt.gas_address');
|
|
|
+ $bscUsdtAddress = Config::get('blockchain.bsc.tokens.usdt.address');
|
|
|
+ $bscgasAddress = Config::get('blockchain.bsc.tokens.usdt.gas_address');
|
|
|
+ var_dump($trcUsdtAddress);
|
|
|
+ var_dump($trcgasAddress);
|
|
|
+ var_dump($bscUsdtAddress);
|
|
|
+ var_dump($bscgasAddress);die();
|
|
|
+ $list = Db::name('user_usdt_address')->where('last_recharge','>',0)->select();
|
|
|
+ foreach ($list as $key => $value) {
|
|
|
+ $trx_money_info = [
|
|
|
+ 'address' => $value['trx_address'],
|
|
|
+ 'hexAddress' => $value['trx_16_address'],
|
|
|
+ 'privateKey' => $value['trx_key '],
|
|
|
+ ];
|
|
|
+ $this->trx_summary($trx_money_info,$trcUsdtAddress,$trcgasAddress );
|
|
|
+ $bsc_money_info = [
|
|
|
+ 'address' => $value['bsc_address'],
|
|
|
+ 'privateKey' => $value['bsc_address '],
|
|
|
+ ];
|
|
|
+ $this->bsc_summary($bsc_money_info,$bscUsdtAddress,$bscgasAddress );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ public function trx_summary(array $money_info, string $summary_address, Address $gas_address): bool
|
|
|
+ {
|
|
|
+ //实例化TRON
|
|
|
+ $service = TronService::instance('usdt');
|
|
|
+ //实例化出款地址[有Usdt余额的用户钱包]
|
|
|
+ $address = new Address($money_info['address'], $money_info['privateKey'], $money_info['hexAddress']);
|
|
|
+ //获取代币余额
|
|
|
+ $balance = $service->tokenBalance($money_info['address']);
|
|
|
+ //USDT余额大于0,触发归集
|
|
|
+ if ($balance > 0) {
|
|
|
+ //查询地址中主币【GAS费余额】
|
|
|
+ $trx_balance = $service->balance($money_info['address']);
|
|
|
+ if ($trx_balance < 30) {
|
|
|
+ //如果主币小于30个,即gas费不够【BSC的gas费需要比较少,大约0.001个bnb就不少了,按照实际情况设置】
|
|
|
+ //计算要达到30个trx需要再转几个给用户地址
|
|
|
+ $trade_trx = ceil(30 - $trx_balance);
|
|
|
+ //处理手续费转账,从系统地址分配gas给用户
|
|
|
+ //查询系统地址的TRX余额
|
|
|
+ $gas_trx_balance = $service->balance($gas_address->address);
|
|
|
+ //系统地址TRX余额不足,退出处理
|
|
|
+ if ($gas_trx_balance < $trade_trx + 2) {
|
|
|
+ Log::error('手续费账户余额不足');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ //执行转账
|
|
|
+ $res = $service->transfer($gas_address, $address, $trade_trx);
|
|
|
+ GasLog::create(['to_address' => $address, 'num' =>$trade_trx , 'type' =>'trx']);
|
|
|
+ if (isset($res->txID)) {
|
|
|
+ Log::error('转账TRX交易哈希:' . $res->txID);
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ Log::error('转账TRX失败');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('转账TRX失败' . $e->getMessage());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //账户内TRX充足,执行USDT转账交易
|
|
|
+ try {
|
|
|
+ //将账户内的USDT余额转入归集指定地址
|
|
|
+ $res = $service->tokenTransfer($address, new Address($summary_address), $balance);
|
|
|
+ @file_put_contents('trasfer.txt', json_encode($res), FILE_APPEND);
|
|
|
+ if ($res['status']) {
|
|
|
+ Log::error('转账交易哈希:' . $res['data']->txID);
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ Log::error('转账失败' . $res['msg']);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('转账失败' . $e->getMessage());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ public function bsc_summary(array $money_info, string $summary_address, Address $gas_address): bool
|
|
|
+ {
|
|
|
+ //实例化TRON
|
|
|
+ $service = Web3Service::instance('bsc', 'usdt', '');
|
|
|
+ //实例化出款地址[有Usdt余额的用户钱包]
|
|
|
+ $address = new Address($money_info['address'], $money_info['privateKey'], $money_info['hexAddress']);
|
|
|
+ //获取代币余额
|
|
|
+ $balance = $service->getTokenBalance($money_info['address']);
|
|
|
+ //USDT余额大于0,触发归集
|
|
|
+ if ($balance > 0) {
|
|
|
+ //查询地址中主币【GAS费余额】
|
|
|
+ $trx_balance = $service->getBalance($money_info['address']);
|
|
|
+ if ($trx_balance < 0.001) {
|
|
|
+ //如果主币小于30个,即gas费不够【BSC的gas费需要比较少,大约0.001个bnb就不少了,按照实际情况设置】
|
|
|
+ //计算要达到30个trx需要再转几个给用户地址
|
|
|
+ $trade_trx = ceil(30 - $trx_balance);
|
|
|
+ //处理手续费转账,从系统地址分配gas给用户
|
|
|
+ //查询系统地址的TRX余额
|
|
|
+ $gas_trx_balance = $service->getBalance($gas_address->address);
|
|
|
+ //系统地址TRX余额不足,退出处理
|
|
|
+ if ($gas_trx_balance < $trade_trx + 2) {
|
|
|
+ Log::error('手续费账户余额不足');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ //执行转账
|
|
|
+ $res = $service->transfer($address, $trade_trx);
|
|
|
+ GasLog::create(['to_address' => $address, 'num' =>$trade_trx , 'type' =>'bsc']);
|
|
|
+ if (isset($res->txID)) {
|
|
|
+ Log::error('转账BSC交易哈希:' . $res->txID);
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ Log::error('转账BSC失败');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('转账BSC失败' . $e->getMessage());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //账户内TRX充足,执行USDT转账交易
|
|
|
+ try {
|
|
|
+ //将账户内的USDT余额转入归集指定地址
|
|
|
+ $res = $service->transferToken($address, new Address($summary_address), $balance);
|
|
|
+ @file_put_contents('trasfer.txt', json_encode($res), FILE_APPEND);
|
|
|
+ if ($res['status']) {
|
|
|
+ Log::error('转账交易哈希:' . $res['data']->txID);
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ Log::error('转账失败' . $res['msg']);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('转账失败' . $e->getMessage());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|