Lectura de datos de transacciones fuera del nodo

Estoy conectado a un nodo Ethereum (ejecutando Geth) que administro y puedo conectarme mediante RPC. Puedo acceder a web3 en la terminal después de emitir geth console. Puedo acceder y ejecutar las llamadas a la función RPC como se indica en la documentación aquí . Tengo que cambiar entre diferentes bibliotecas como webpy y web3.js, por lo que una implementación en cualquiera debería estar bien.

Dado un hash de transacción, puedo obtener los detalles de la transacción, digamos usando web3.eth.getTransaction(transaction_hash). Pero todos los detalles que obtengo solo incluyen: hash, input, nonce, from, to, transaction_index, value, v, r, s.

Lo que tengo curiosidad es cómo accede este sitio web al resto de los detalles ricos en cuanto a cuántos tokens se transfirieron. Más específicamente, ¿cómo podemos leer (dado el remitente y la dirección del contrato involucrados en una transacción) el valor de los tokens transferidos, es decir, el parámetro de valor de la llamada a la función ?

Una instantánea de tales detalles del sitio web anterior. (¿ Cómo se descubre la transferencia de tokens , que se muestra en la imagen a continuación)

ingrese la descripción de la imagen aquí

¿Es del campo de entrada? Si es así, ¿cómo se interpreta el hexadecimal a los valores reales y la función llamada?

Respuestas (2)

Lo más probable es que estén escuchando los eventos generados por cada contrato inteligente y los indexen en su base de datos local.

Los contratos inteligentes estándar compatibles con ERC20 generan un Transfer()evento con cada transacción. Si desea monitorear todos los eventos generados por un contrato inteligente, puede suscribir a su cliente a allEvents

Para acceder al nombre de la función que fue llamada, el nombre de los parámetros de la función, los tipos de los parámetros (uint256, dirección, etc.) y el valor de esos parámetros, necesita decodificar el campo "Input Data" .

Una manera fácil de decodificar los datos de entrada es usar un decodificador ya creado, como ethereum-input-data-decoder .

Los eventos no son una forma confiable de acceder a estos datos porque muchas funciones de contratos no activan eventos, y nunca puede estar seguro de que el evento le proporcione el verdadero valor de los parámetros.