Test.php 7.5 KB

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