如何通过扫块判断地址充值和提现

  1. 根据区块号从固化块获取block信息: /walletsolidity/getblockbynum

  2. 从block中获取transactions。

  3. 遍历transactions,获取 raw_data.contract。

  4. 遍历raw_data.contract , raw_data.contract.type

    4.1 TRX入账: raw_data.contract.type == transferContract

    检查接受地址和金额是否满足入账条件:/walletsolidity/gettransactioninfobyid
    

    4.2 TRC10入账: raw_data.contract.type == TransferAssetContract

    检查token id、接受地址和金额是否满足入账条件:/walletsolidity/gettransactioninfobyid
    

    4.3 TRC20入账、合约中TRX/TRC10入账:raw_data.contract.type == TriggerSmartContract

    1.判断交易是否成功:
     /walletsolidity/gettransactioninfobyid查询到receipt.result == SUCCESS
    
    2.是否包含transfer(address _to,uint256 _value)事件: 
      /walletsolidity/gettransactioninfobyid
    
    3.如果包含transfer事件,则解析事件,获取事件中的合约地址、转账地址、金额,判断是否入账条件
    
    4.事件解析规则:参考文档:https://cn.developers.tron.network/docs/vm-event#event-%E8%A7%A3%E7%A0%81%E7%A4%BA%E4%BE%8B
    
    5.是否包含内部交易,如果包含,则遍历内部交易
    
      a.如果 internal_transactions.callValueInfo != null & internal_transactions.callValueInfo[i].tokenId == null 说明是合约中进行的是TRX转账,
      参考示例交易:https://api.nileex.io/wallet/gettransactioninfobyid?value=f66cad4376d4f611135c0a8cff4c0927fa36d4310d3c9aab20e80ddcfc8b7728
       internal_transactions.caller是汇款地址
       internal_transactions.transferTo_address是收款地址
       internal_transactions.callValueInfo[i].callValue是转账额
    
      b.如果 internal_transactions.callValueInfo != null & internal_transactions.callValueInfo[0].tokenId != null 说明是合约中进行的是TRC10转账,
      参考示例交易:https://api.nileex.io/wallet/gettransactioninfobyid?value=f66cad4376d4f611135c0a8cff4c0927fa36d4310d3c9aab20e80ddcfc8b7728
        internal_transactions.caller是汇款地址
        internal_transactions.callValueInfo[i].callValue 是转账额
        internal_transactions.callValueInfo[i].tokenId是TRC10 token ID
        internal_transactions.transferTo_address 是收款地址