TronAnalyzeServer.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. namespace App\Servers;
  3. use App\Models\BlockInfo;
  4. use App\Models\BlockItems;
  5. use App\Models\CoinType;
  6. use App\Models\Config;
  7. use App\Models\MemberCoins;
  8. use App\Servers\Icon\TronRPC;
  9. use App\Servers\Icon\Utils;
  10. use Illuminate\Support\Facades\DB;
  11. /**
  12. * Tron区块分析模块
  13. */
  14. class TronAnalyzeServer
  15. {
  16. public static function tronAnalyze()
  17. {
  18. $block_info = BlockInfo::where('id', 2)->first();
  19. if($block_info->{'num'}>=$block_info->{'analyze'} - 5 || true){
  20. $tron_block = TronRPC::CreationTron()->getBlockByNum();
  21. }else{
  22. $tron_block=$block_info->{'num'};
  23. }
  24. if ($block_info->{'analyze'} + 6 < $tron_block) {
  25. $analyze = $block_info->{'analyze'} + 1;
  26. $block_deal = TronRPC::CreationTron()->getBlockById($analyze);
  27. if (empty($block_deal)) return false;
  28. DB::beginTransaction();
  29. if (!empty($block_deal['transactions'])) {
  30. //USDT 合约地址 0xdac17f958d2ee523a2206206994597c13d831ec7
  31. // $hy_address = Config::where('key', 'hy_address')->value('value');
  32. $hy_address = '41a614f803b6fd780986a42c78ec9c7f77e6ded13c';
  33. foreach ($block_deal['transactions'] as $t_key=>$deal_info) {
  34. if(empty($deal_info['ret'][0]['contractRet']) || $deal_info['ret'][0]['contractRet']!='SUCCESS'){
  35. continue;
  36. }
  37. // var_dump('---------OK');
  38. $block_item = [];
  39. $pay_data=$deal_info['raw_data']['contract'][0]['parameter']['value'];
  40. $my_hy_address=empty($pay_data['contract_address']) ?'':$pay_data['contract_address'];
  41. if ( $my_hy_address == $hy_address) {
  42. if(empty($pay_data['data']))continue;
  43. $input = $pay_data['data'];
  44. $to = '41'.substr($input, 32, 40);
  45. $value = substr($input, 72);
  46. $money = Utils::int2fund(Utils::hex2dec('0x' . $value), 6);
  47. $to = TronRPC::CreationTron()->getBase58CheckAddress(hex2bin($to));
  48. $block_item = [
  49. 'm_id' => 0,
  50. 'coin_id' => 4,
  51. 'coin_name' => 'USDT',
  52. 'block_num' => $block_info->{'analyze'} + 1,
  53. 'money' => $money,
  54. 'from_a' => TronRPC::CreationTron()->getBase58CheckAddress(hex2bin($pay_data['owner_address'])),
  55. 'hash' => $deal_info['txID'],
  56. 'to_a' => $to,
  57. 'pay_at' => date('Y-m-d H:i:s'),
  58. 'fee_limit' =>empty($deal_info['raw_data']['fee_limit'])?0:$deal_info['raw_data']['fee_limit'],
  59. ];
  60. }
  61. if (!empty($block_item)) {
  62. $member_coin = MemberCoins::where('coin_id', $block_item['coin_id'])->whereIn('address', [$block_item['to_a'],$block_item['from_a']])->first();
  63. if (!empty($member_coin)) {
  64. $block_item['m_id'] = $member_coin->{'m_id'};
  65. $block_item['to_type'] = $block_item['to_a']==$member_coin->{'address'}?1:2;
  66. $item_num = BlockItems::where('m_id', $block_item['m_id'])->where('hash', $block_item['hash'])->where('coin_id', $block_item['coin_id'])->count();
  67. $receipt_trx='TC35X33LLF3ARY1P1HzYZaFngVCH5GKLjv';
  68. if ($item_num <= 0 && $block_item['to_type']==1) {
  69. //添加广播转账信息
  70. $block_item = BlockItems::create($block_item);
  71. $mix_num = 0.01;
  72. if ($block_item['money'] >= $mix_num) {
  73. BroadcastServer::addBroadcast($block_item['coin_id'], $block_item['money'], $member_coin['address'], $member_coin['private'], $receipt_trx, $member_coin['m_id'], $block_item->{'id'}, 1);
  74. }
  75. }elseif ($item_num <= 0 && $block_item['to_type']==2){
  76. if( $block_item['to_a']==$receipt_trx){
  77. $block_item = BlockItems::create($block_item);
  78. //转出成功后天就余额
  79. }
  80. }
  81. }
  82. }
  83. }
  84. }
  85. BlockInfo::where('id', 2)->update(['analyze' => $block_info->{'analyze'} + 1, 'num' => $tron_block]);
  86. DB::commit();
  87. return true;
  88. }
  89. return false;
  90. }
  91. }