¿Cómo verifico el saldo de Ethereum y el recuento de transacciones únicas de un contrato inteligente durante un período de tiempo?

Básicamente, quiero poder rastrear el saldo de los contratos inteligentes y las transacciones únicas durante un período de tiempo, como las últimas 24 horas, la última hora, etc.

¿Cuál sería el mejor enfoque para hacer esto? ¿Cómo debo almacenar los datos que obtengo para crear mi API, SQL/NoSQL db?

¡Gracias de antemano!

Respuestas (1)

Puede obtener el saldo de Ether de un contrato inteligente en cualquier bloque utilizando Web3 JSON RPC que se expone a través de bibliotecas Web3 como Web3.js:

obtenersaldo

web3.eth.getBalance(address [, defaultBlock] [, callback])

Como puede ver, esta llamada de función admite una entrada de "bloque", que se puede usar para obtener el saldo de Ether de la dirección especificada en un bloque determinado.

Los bloques no se crean a intervalos perfectos, pero debería poder aproximarse al bloque que necesita suponiendo que el tiempo de bloque promedio es de ~15 segundos.

Luego puede confirmar que tiene el bloque correcto obteniendo el timestampvalor del bloque ( web3.eth.getBlock()) y ajustándolo cuando sea necesario.

Este tipo de lógica está integrada en esta aplicación de JavaScript: ETH Balance Graph ( Código )


Obtener el recuento de transacciones para el contrato es más complicado porque la red no indexa las transacciones entrantes a un contrato.

Mis sugerencias serían rastrear las transacciones que emiten un Evento .

Puede obtener todos los eventos pasados ​​de un contrato usando:

obtenerEventosPasados

myContract.getPastEvents(event[, options][, callback])

A partir de eso, debería tener una idea bastante clara de la actividad del contrato inteligente a lo largo del tiempo. Especialmente si el contrato es un token ERC20, que debe emitir un Transferevento cada vez que se transfieren los tokens y debe emitir el mismo evento cuando se crean los tokens.

Sin embargo, para obtener realmente todas las transacciones internas y externas, debe revisar cada bloque desde que se creó el contrato y buscar esas transacciones (hasta donde yo sé). Esto es lo que hace Etherscan, y no es una tarea trivial.

Si quiero realizar un seguimiento de un determinado contrato, algo similar a un trabajo cron, ¿podría usar suscribirme? Además, si un contrato inteligente no emite un evento, ¿la única solución para rastrear sus transacciones es tenerlas guardadas?
Lo más fuerte que puede hacer es rastrear cada bloque, mirar cada transacción en ese bloque y buscar las que llamen al contrato que le interesa. creado.
¿Hay alguna otra forma de rastrear eventos de una manera más generalizada? ¿Como definir mi propio evento general y usarlo para cada contrato inteligente que quiero rastrear?
Debe ser el desarrollador del contrato para definir un evento que emita su contrato. Es parte del código del contrato. Si usted es el desarrollador del contrato, entonces sí, puede emitir cualquier evento arbitrario que desee prácticamente en cualquier momento.
Solo soy un tercero que busca rastrear los contratos de otras personas: \