Obtenga todas las cuentas que han interactuado con el contrato

Además de recorrer todas las transacciones desde que se extrajo el contrato, ¿hay alguna manera de obtener todas las cuentas que interactuaron con un contrato (o enviaron una transacción a una dirección) convenientemente usando la API web3 estándar que funcionará para todos los navegadores (Mist/Metamask /Paridad)?

Respuestas (1)

Estaba enfrentando exactamente el mismo problema y la solución más fácil que encontré fue usar la función de paridad trace :

web3.trace.filter({"fromBlock": "STARTING_BLOCK_NUMBER", "toAddress": [YOUR_CONTRACT_ADDRESS]}

Recuerde iniciar la paridad en un modo de archivo para poder aprovechar la indexación de almacenamiento adicional:

parity --tracing on --pruning archive
Bien, pero ¿hay alguna manera de hacerlo con la API estándar que también funcione con Metamask/Mist?
Sí, pero es muy ineficiente ya que requiere examinar todas las transacciones. Es por eso que parity agregó indexación en modo de seguimiento para acelerar la búsqueda.
Eso es lo que temía, sería genial ver esta funcionalidad agregada a la API general.
@SamuelBarnes Jakub tiene motivos para que la API general sea realmente ineficiente y tendrá muchos problemas con las funciones asíncronas y las funcionalidades de filtros de la API. Intente usarlo o use otra API externa como etherscan.io
Las API centralizadas de @Gawey no son buenas, la pregunta es si hay una manera sin bucles. Entendemos que no lo hay. Encontré una solución para mi caso de uso que implica alterar el diseño del contrato, pero lamentablemente es una solución específica para las circunstancias del contrato.