WIN-2308041133\Administrator 6 달 전
부모
커밋
c8afffb144
4개의 변경된 파일182개의 추가작업 그리고 2개의 파일을 삭제
  1. 2 2
      application/admin/command/Test.php
  2. 154 0
      application/admin/controller/general/Txmx.php
  3. 23 0
      application/common/model/GasLog.php
  4. 3 0
      application/config.php

+ 2 - 2
application/admin/command/Test.php

@@ -40,8 +40,8 @@ class Test extends Command
     /**
      * tron归集参考,遍历所有有余额的地址,处理归集操作,即可将余额归到一个地址
      * @param array $money_info
-     * @param string $summary_address
-     * @param Address $gas_address
+     * @param string $summary_address  平台账号地址
+     * @param Address $gas_address   提供手续费的地址
      * @return bool
      * @throws Exception
      */

+ 154 - 0
application/admin/controller/general/Txmx.php

@@ -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;
+    }
 }

+ 23 - 0
application/common/model/GasLog.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace app\common\model;
+
+use think\Model;
+
+/**
+ * 会员余额日志模型
+ */
+class GasLog Extends Model
+{
+
+    // 表名
+    protected $name = 'gas_log';
+    // 开启自动写入时间戳字段
+    protected $autoWriteTimestamp = 'int';
+    // 定义时间戳字段名
+    protected $createTime = 'createtime';
+    protected $updateTime = 'updatetime';
+    // 追加属性
+    protected $append = [];
+
+}

+ 3 - 0
application/config.php

@@ -290,6 +290,7 @@ return [
                 'usdt' => [
 //                    'address' => '0x55d398326f99059fF775485246999027B3197955',//USDT合约地址
                     'address' => '0x8f5f8daC38461E5b1A6b230D30433f8A593CCD57',//USDT测试合约地址
+                    'gas_address' => '1919810',//手续费账号地址
                     'decimal' => 18,
 //                    'decimal' => 18,
                     'private_key' => '0294f6a2b958585b6bf07b44ceeb1c0eb18796e64e2ecc107c0d4df8fcc0a646', //私钥
@@ -318,6 +319,8 @@ return [
             'tokens' => [
                 'usdt' => [
                     'address' => 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',
+                    'hex_address' => '',
+                    'gas_address' => '114514',
                     'decimal' => 6,
                     'private_key' => '',  //私钥
                 ]