TronAnalyzeServer.php 4.4 KB

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