ERC20 代币从交易哈希传输信息

Man*_*esh 2 php ethereum web3js erc20 etherscan

EtherScan 提供了一个用于交易细节的 API,它是 Geth/Parity 代理 API 的一部分,名称为 eth_getTransactionByHash,但我无法获得 ERC20 令牌被转移的信息以及转移了多少。

我需要在交易哈希的帮助下传输的令牌详细信息和令牌数量。
在此处输入图片说明

Rag*_*ood 8

您使用了错误的 API。

要获取 ERC20 转账信息,您需要交易收据,因为转账信息记录在转账事件日志中。你应该使用eth_getTransactionReceipt.

对于tx ,这将为您提供如下响应:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "blockHash": "0xc5e5a515898983d1370d40b03fc05ae08be861af746a1577796153a149a1bb20",
    "blockNumber": "0x5ff5dd",
    "contractAddress": null,
    "cumulativeGasUsed": "0xe85fb",
    "from": "0xd7afd4441fccc118b9207b0e136f4ef9319b3c79",
    "gasUsed": "0x9034",
    "logs": [
      {
        "address": "0x0d8775f648430679a709e98d2b0cb6250d2887ef",
        "topics": [
          "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
          "0x000000000000000000000000d7afd4441fccc118b9207b0e136f4ef9319b3c79",
          "0x00000000000000000000000069d9e9aff57ec73582ad1ce441726dba7ea78fe0"
        ],
        "data": "0x0000000000000000000000000000000000000000000001054aefee8ba6d00000",
        "blockNumber": "0x5ff5dd",
        "transactionHash": "0x3265c1461d3f167c756fbc062ae3a2dc279b44a9c3ca2194271d4251cd0c1655",
        "transactionIndex": "0x1b",
        "blockHash": "0xc5e5a515898983d1370d40b03fc05ae08be861af746a1577796153a149a1bb20",
        "logIndex": "0xa",
        "removed": false
      }
    ],
    "logsBloom": "0x04000000002000000200000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000008000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000200010000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "status": "0x1",
    "to": "0x0d8775f648430679a709e98d2b0cb6250d2887ef",
    "transactionHash": "0x3265c1461d3f167c756fbc062ae3a2dc279b44a9c3ca2194271d4251cd0c1655",
    "transactionIndex": "0x1b"
  }
}
Run Code Online (Sandbox Code Playgroud)

其中,这个日志部分很重要。

ERC20 传输日志的格式是Transfer(address from, address to, uint256 value). 当您为 取keccak散列值时Transfer(address,address,uint256),您将获得0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef该主题,如上面的响应所示。

该日志中的下两个值分别是fromto地址,按正常方式为 ETH 打包(填充零直到 32 字节)。最后,data日志中是传输的 ERC20 代币的值(本例中为 BAT)。

address发出日志,0x0d8775f648430679a709e98d2b0cb6250d2887ef在这种情况下,是令牌合同。然后,您可以使用eth_callAPI从该合约中读取代币符号、名称和小数以读取代币信息。

  • “当你使用 Transfer(address,address,uint256) 的 keccak 哈希值时,你会得到 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef”这对我帮助很大,谢谢! (3认同)