ERC20 代币从交易哈希转移信息
ERC20 Tokens Transferred Information from Transaction Hash
EtherScan 为交易细节提供 API 它是 Geth/Parity 代理 API 名称 eth_getTransactionByHash 的一部分,但我无法获得什么是 ERC20 令牌的信息转移了多少。
我需要代币详细信息和借助交易哈希转移的代币数量。
你用错了API。
要获取ERC20转账信息,您需要交易收据,因为转账信息记录在转账事件日志中。你应该使用 eth_getTransactionReceipt
.
这会给你这样的回复,对于 this 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"
}
}
其中,日志部分很重要。
ERC20 转账日志的格式为Transfer(address from, address to, uint256 value)
。当您使用 Transfer(address,address,uint256)
的 keccak
散列时,您会得到该主题的 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
,如上面的响应所示。
该日志中的下两个值分别是 from
和 to
地址,按照 ETH 的正常方式打包(零填充直到 32 字节)。最后,日志中的 data
是传输的 ERC20 令牌的值(本例中为 BAT)。
发出日志的 address
,在本例中为 0x0d8775f648430679a709e98d2b0cb6250d2887ef
,是代币合约。然后,您可以使用 eth_call
API 从该合约中读取代币符号、名称和小数来读取代币信息。
EtherScan 为交易细节提供 API 它是 Geth/Parity 代理 API 名称 eth_getTransactionByHash 的一部分,但我无法获得什么是 ERC20 令牌的信息转移了多少。
我需要代币详细信息和借助交易哈希转移的代币数量。
你用错了API。
要获取ERC20转账信息,您需要交易收据,因为转账信息记录在转账事件日志中。你应该使用 eth_getTransactionReceipt
.
这会给你这样的回复,对于 this 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"
}
}
其中,日志部分很重要。
ERC20 转账日志的格式为Transfer(address from, address to, uint256 value)
。当您使用 Transfer(address,address,uint256)
的 keccak
散列时,您会得到该主题的 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
,如上面的响应所示。
该日志中的下两个值分别是 from
和 to
地址,按照 ETH 的正常方式打包(零填充直到 32 字节)。最后,日志中的 data
是传输的 ERC20 令牌的值(本例中为 BAT)。
发出日志的 address
,在本例中为 0x0d8775f648430679a709e98d2b0cb6250d2887ef
,是代币合约。然后,您可以使用 eth_call
API 从该合约中读取代币符号、名称和小数来读取代币信息。