| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- <?php
- namespace app\admin\command;
- use BI\BigInteger;
- use blockchain\TronService;
- use blockchain\Web3Service;
- use IEXBase\TronAPI\Provider\HttpProvider;
- use IEXBase\TronAPI\Tron;
- use think\console\Command;
- use think\console\Input;
- use think\console\input\Option;
- use think\console\Output;
- use think\Exception;
- use think\Log;
- use Tron\Address;
- class Test extends Command
- {
- protected function configure()
- {
- $this->setName('test')
- ->setDescription('测试');
- }
- protected function execute(Input $input, Output $output)
- {
- /**
- * TRON实例化
- */
- $service = TronService::instance('usdt');
- /**
- * 创建地址
- * @returns array ['私钥','地址','16进制地址']
- */
- var_dump($service->createAddress());
- }
- /**
- * tron归集参考,遍历所有有余额的地址,处理归集操作,即可将余额归到一个地址
- * @param array $money_info
- * @param string $summary_address 平台账号地址
- * @param Address $gas_address 提供手续费的地址
- * @return bool
- * @throws Exception
- */
- public function 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);
- 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;
- }
- /**
- * TRON方法示例
- */
- private function trx()
- {
- /**
- * TRON实例化
- */
- $service = TronService::instance('usdt');
- /**
- * 创建地址
- * @returns array ['私钥','地址','16进制地址']
- */
- var_dump($service->createAddress());
- /**
- * 获取主币余额
- * @param string $address 要查询的钱包地址
- */
- var_dump($service->balance('TNUe3TpMjvM5svbQEEgunP91VtsimNSiZY'));
- /**
- * 获取代币余额
- * @param string $address 要查询的钱包地址
- */
- var_dump($service->tokenBalance('TNUe3TpMjvM5svbQEEgunP91VtsimNSiZY'));
- /**
- * 获取钱包地址的代币转账记录
- * @param string $address 要查询的钱包地址
- * @param int $start_time 开始时间 13位时间戳
- */
- var_dump($service->getTransfer('TNUe3TpMjvM5svbQEEgunP91VtsimNSiZY', 0));
- /**
- * 实例化出账地址
- */
- $from = new Address('地址', '私钥', '16位地址');
- /**
- * 实例化收款地址
- */
- $to = new Address('地址');
- /**
- * 主币转账
- * @param Address $from 出账地址
- * @param Address $to 收款地址
- * @param float $amount 转账数量
- */
- var_dump($service->transfer($from, $to, 1));
- /**
- * 代币转账
- * @param Address $from 出账地址
- * @param Address $to 收款地址
- * @param float $amount 转账数量
- */
- var_dump($service->tokenTransfer($from, $to, 1));
- }
- /**
- * BSC/ETH方法示例
- */
- private function web3()
- {
- /**
- * 实例化
- * @param string $chain 网络 可选bsc和eth
- * @param string $contact 代币名,在config.php内配置
- * @param string $private_key 私钥,可选,默认实例化config中配置了私钥的地址
- */
- $service = Web3Service::instance('bsc', 'usdt', '');
- /**
- * 创建地址
- * @return array ['地址','私钥']
- */
- var_dump($service->createAddress());
- /**
- * 获取实例化的代币余额
- * @param string $address 要查询的钱包地址
- */
- var_dump($service->getTokenBalance('0xE32f0a35F11Fd40B1949552C9Bdcfa6D080527C5'));
- /**
- * 获取主币余额
- * @param string $address 要查询的钱包地址
- */
- var_dump($service->getBalance('0xB52cc871c8f15579d9C10fEF36fF95E9dA3fDe69'));
- /**
- * 获取最近的转账记录 不要隔太久,最多支持10000个区块,每个区块大约3秒
- * @param array $from 要查询的来源地址
- * @param array $to 要查询的去向地址
- * @param int $last_time 上次查询的时间
- */
- var_dump($service->getLastTransfer([], ['0xE32f0a35F11Fd40B1949552C9Bdcfa6D080527C5']));
- /**
- * 代币转账
- * 从实例化的地址转出实例化的代币到指定地址
- * @param string $to 接受地址
- * @param int $amount 转账数量
- */
- var_dump($service->transferToken('0xE32f0a35F11Fd40B1949552C9Bdcfa6D080527C5', 1000));
- /**
- * 主币转账
- * 从实例化的地址转出主币到指定地址
- * @param string $to 接受地址
- * @param int $amount 转账数量
- */
- var_dump($service->transfer('0xE32f0a35F11Fd40B1949552C9Bdcfa6D080527C5', 0.001));
- }
- }
|