Test.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <?php
  2. namespace app\admin\command;
  3. use blockchain\TronService;
  4. use blockchain\Web3Service;
  5. use IEXBase\TronAPI\Provider\HttpProvider;
  6. use IEXBase\TronAPI\Tron;
  7. use think\console\Command;
  8. use think\console\Input;
  9. use think\console\input\Option;
  10. use think\console\Output;
  11. use think\Exception;
  12. use think\Log;
  13. use Tron\Address;
  14. class Test extends Command
  15. {
  16. protected function configure()
  17. {
  18. $this->setName('test')
  19. ->setDescription('测试');
  20. }
  21. protected function execute(Input $input, Output $output)
  22. {
  23. }
  24. /**
  25. * tron归集参考,遍历所有有余额的地址,处理归集操作,即可将余额归到一个地址
  26. * @param array $money_info
  27. * @param string $summary_address
  28. * @param Address $gas_address
  29. * @return bool
  30. * @throws Exception
  31. */
  32. public function summary(array $money_info, string $summary_address, Address $gas_address): bool
  33. {
  34. //实例化TRON
  35. $service = TronService::instance('usdt');
  36. //实例化出款地址[有Usdt余额的用户钱包]
  37. $address = new Address($money_info['address'], $money_info['privateKey'], $money_info['hexAddress']);
  38. //获取代币余额
  39. $balance = $service->tokenBalance($money_info['address']);
  40. //USDT余额大于0,触发归集
  41. if ($balance > 0) {
  42. //查询地址中主币【GAS费余额】
  43. $trx_balance = $service->balance($money_info['address']);
  44. if ($trx_balance < 30) {
  45. //如果主币小于30个,即gas费不够【BSC的gas费需要比较少,大约0.001个bnb就不少了,按照实际情况设置】
  46. //计算要达到30个trx需要再转几个给用户地址
  47. $trade_trx = ceil(30 - $trx_balance);
  48. //处理手续费转账,从系统地址分配gas给用户
  49. //查询系统地址的TRX余额
  50. $gas_trx_balance = $service->balance($gas_address->address);
  51. //系统地址TRX余额不足,退出处理
  52. if ($gas_trx_balance < $trade_trx + 2) {
  53. Log::error('手续费账户余额不足');
  54. return false;
  55. }
  56. try {
  57. //执行转账
  58. $res = $service->transfer($gas_address, $address, $trade_trx);
  59. if (isset($res->txID)) {
  60. Log::error('转账TRX交易哈希:' . $res->txID);
  61. return true;
  62. } else {
  63. Log::error('转账TRX失败');
  64. return false;
  65. }
  66. } catch (\Exception $e) {
  67. Log::error('转账TRX失败' . $e->getMessage());
  68. return false;
  69. }
  70. } else {
  71. //账户内TRX充足,执行USDT转账交易
  72. try {
  73. //将账户内的USDT余额转入归集指定地址
  74. $res = $service->tokenTransfer($address, new Address($summary_address), $balance);
  75. @file_put_contents('trasfer.txt', json_encode($res), FILE_APPEND);
  76. if ($res['status']) {
  77. Log::error('转账交易哈希:' . $res['data']->txID);
  78. return true;
  79. } else {
  80. Log::error('转账失败' . $res['msg']);
  81. return false;
  82. }
  83. } catch (\Exception $e) {
  84. Log::error('转账失败' . $e->getMessage());
  85. return false;
  86. }
  87. }
  88. }
  89. return true;
  90. }
  91. /**
  92. * TRON方法示例
  93. */
  94. private function trx()
  95. {
  96. /**
  97. * TRON实例化
  98. */
  99. $service = TronService::instance('usdt');
  100. /**
  101. * 创建地址
  102. * @returns array ['私钥','地址','16进制地址']
  103. */
  104. var_dump($service->createAddress());
  105. /**
  106. * 获取主币余额
  107. * @param string $address 要查询的钱包地址
  108. */
  109. var_dump($service->balance('TNUe3TpMjvM5svbQEEgunP91VtsimNSiZY'));
  110. /**
  111. * 获取代币余额
  112. * @param string $address 要查询的钱包地址
  113. */
  114. var_dump($service->tokenBalance('TNUe3TpMjvM5svbQEEgunP91VtsimNSiZY'));
  115. /**
  116. * 获取钱包地址的代币转账记录
  117. * @param string $address 要查询的钱包地址
  118. * @param int $start_time 开始时间 13位时间戳
  119. */
  120. var_dump($service->getTransfer('TNUe3TpMjvM5svbQEEgunP91VtsimNSiZY', 0));
  121. /**
  122. * 实例化出账地址
  123. */
  124. $from = new Address('地址', '私钥', '16位地址');
  125. /**
  126. * 实例化收款地址
  127. */
  128. $to = new Address('地址');
  129. /**
  130. * 主币转账
  131. * @param Address $from 出账地址
  132. * @param Address $to 收款地址
  133. * @param float $amount 转账数量
  134. */
  135. var_dump($service->transfer($from, $to, 1));
  136. /**
  137. * 代币转账
  138. * @param Address $from 出账地址
  139. * @param Address $to 收款地址
  140. * @param float $amount 转账数量
  141. */
  142. var_dump($service->tokenTransfer($from, $to, 1));
  143. }
  144. /**
  145. * BSC/ETH方法示例
  146. */
  147. private function web3()
  148. {
  149. /**
  150. * 实例化
  151. * @param string $chain 网络 可选bsc和eth
  152. * @param string $contact 代币名,在config.php内配置
  153. * @param string $private_key 私钥,可选,默认实例化config中配置了私钥的地址
  154. */
  155. $service = Web3Service::instance('bsc', 'usdt', '');
  156. /**
  157. * 创建地址
  158. * @return array ['地址','私钥']
  159. */
  160. var_dump($service->createAddress());
  161. /**
  162. * 获取实例化的代币余额
  163. * @param string $address 要查询的钱包地址
  164. */
  165. var_dump($service->getTokenBalance('0xE32f0a35F11Fd40B1949552C9Bdcfa6D080527C5'));
  166. /**
  167. * 获取主币余额
  168. * @param string $address 要查询的钱包地址
  169. */
  170. var_dump($service->getBalance('0xB52cc871c8f15579d9C10fEF36fF95E9dA3fDe69'));
  171. /**
  172. * 获取最近的转账记录 不要隔太久,最多支持10000个区块,每个区块大约3秒
  173. * @param array $from 要查询的来源地址
  174. * @param array $to 要查询的去向地址
  175. * @param int $last_time 上次查询的时间
  176. */
  177. var_dump($service->getLastTransfer([], ['0xE32f0a35F11Fd40B1949552C9Bdcfa6D080527C5']));
  178. /**
  179. * 代币转账
  180. * 从实例化的地址转出实例化的代币到指定地址
  181. * @param string $to 接受地址
  182. * @param int $amount 转账数量
  183. */
  184. var_dump($service->transferToken('0xE32f0a35F11Fd40B1949552C9Bdcfa6D080527C5', 1000));
  185. /**
  186. * 主币转账
  187. * 从实例化的地址转出主币到指定地址
  188. * @param string $to 接受地址
  189. * @param int $amount 转账数量
  190. */
  191. var_dump($service->transfer('0xE32f0a35F11Fd40B1949552C9Bdcfa6D080527C5', 0.001));
  192. }
  193. }