EtherScan предоставляет API для деталей транзакции. Он является частью API Geth / Parity Proxy с именем eth_getTransactionByHash, но я не могу получить информацию о том, какой токен ERC20 был передан и сколько.
Мне нужны данные токена и номер токена, переданного с помощью Transaction Hash.
Вы используете неправильный API.
Чтобы получить информацию о переводе ERC20, вам нужна квитанция об операции, поскольку информация о переводе записывается в журнал событий перевода. Вы должны использовать eth_getTransactionReceipt
,
Это даст вам ответ, такой как этот, для этот ТХ:
{
"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)
, Когда вы берете keccak
хэш для Transfer(address,address,uint256)
, ты получаешь 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
по теме, как показано в ответе выше.
Следующие два значения в этом журнале from
а также to
адреса соответственно упакованы как обычно для ETH (с нулевым заполнением до 32 байтов). Наконец, data
в журнале находится значение токена ERC20, который был передан (в данном примере BAT).
address
что испускает журнал, 0x0d8775f648430679a709e98d2b0cb6250d2887ef
в данном случае это токен контракта. Затем вы можете прочитать символ токена, имя и десятичные знаки из этого контракта, используя eth_call
API для чтения информации о токене.
Других решений пока нет …