Transacción de token ERC20

¿Cómo sabe etherscan que una transacción en particular es una transferencia de token ERC20? Si mira aquí: https://rinkeby.etherscan.io/tx/0xa8e4aa4f533e03bd8298f393d50d4ca41dba3368493c481e386d11389008353d etherscan sabe que la cuenta A está transfiriendo tokens de la cuenta B 200. Estoy bastante familiarizado con las consultas de ethereum usando JSON RPC, por lo que me pregunto si esa información está allí en alguna parte.

Gracias

Las firmas de las funciones/eventos de ERC20 se conocen por el estándar y se pueden decodificar a partir de los datos de transacción o el recibo de transacción (para eventos).

Respuestas (2)

Lo sabe porque:

  1. Los contratos implementan la interfaz estándar ERC20
  2. La dirección está llamando a la transfer(address to, uint amount)función en el contrato ERC20
  3. El contrato registra el evento ERC20 estándarTransfer(address to, uint amount)
gracias, ¿sabe cómo puedo capturar dicho evento usando solicitudes JSON RPC? Estoy interesado en eventos pasados ​​asociados con una ICO

Como mínimo, Etherscan observa que la transacción tuvo un evento de acompañamiento con la firma Transfer(address,uint256). No estoy seguro de si también buscan otra compatibilidad con ERC20 en el contrato (por ejemplo name, a symbol, y totalSupply).

gracias, la misma pregunta anterior, ¿sabe cómo puedo capturar dicho evento usando solicitudes JSON RPC? Estoy interesado en eventos pasados ​​asociados con una ICO
¿Qué intentaste hasta ahora y dónde te quedaste atascado?
Puedo obtener el saldo (#of token) de una cuenta usando eth_call (y concatenando 0x70a08231 (el sha3 de la función que escribiste arriba) con la dirección de la cuenta en el campo "datos" y el contrato en el campo "para". Eso funciona como un amuleto, pero para obtener algo significativo, necesitaría saber a qué cuentas se realizaron transferencias; podría obtener una lista de cuentas de las transacciones, pero eso requeriría analizar los bloques por bloque... lo cual puede ser es factible, pero me pregunto si hay una manera fácil. Escuché sobre los eventos, pero no estoy seguro de si me ayudarían en este caso. Gracias.
Sí, los eventos ayudarían. mira eth_getLogs_
¿Tienes algún ejemplo en el que me pueda basar? No estoy seguro de cómo interactuar con eth_getLogs y no puedo encontrar buenos ejemplos en línea. Gracias