Después de poder verificar los saldos de las cuentas, estoy buscando un método para enumerar todas las transacciones de una cuenta de Ethereum determinada a través del protocolo json-rpc. No he encontrado ningún método adecuado para eso en https://github.com/ethereum/wiki/wiki/JSON-RPC .
Similar a https://etherscan.io/txs?a=0xbb9bc244d798123fde783fcc1c72d3bb8c189413 Estoy tratando de construir un explorador que muestre todas las transacciones de una cuenta determinada.
En ¿Cómo se pueden encontrar todas las transacciones enviadas a una dirección? se hace una pregunta similar pero no estoy buscando una solución a través de un tercero, sino consultando directamente a mi nodo ethereum a través del protocolo json-rpc.
¿Me estoy perdiendo de algo? ¿Es posible hacerlo a través de la interfaz json-rpc?
Si desea crear una exploración como etherscan.io
, debe rastrear todos los datos en la red ethereum y guardar todos los txs en la base de datos.
No existe un método rpc directo para obtener todas las transacciones relacionadas con la cuenta.
La respuesta aceptada a ¿Cómo se pueden encontrar todas las transacciones enviadas a una dirección? no involucra a un tercero.
El script en la respuesta usa la API Web3 Javascript que:
Bajo el capó, se comunica con un nodo local a través de llamadas RPC. web3.js funciona con cualquier nodo Ethereum, que expone una capa RPC.
Por ejemplo, donde el script hace:
var block = eth.getBlock(i, true);
puedes usar JSON-RPCeth_getBlockByNumber
Devuelve información sobre un bloque por número de bloque.
Parámetros
- CANTIDAD|ETIQUETA: número entero de un número de bloque, o la cadena "más antigua", "más reciente" o "pendiente", como en el parámetro de bloque predeterminado.
- Booleano: si es verdadero, devuelve los objetos de transacción completos, si es falso, solo los valores hash de las transacciones.
La API de Javascript lo hace más fácil que emitir solicitudes JSON-RPC, pero puede transferir el script a otro idioma y emitir solicitudes JSON-RPC. Además, tome nota del comentario sobre la respuesta aceptada de que necesitará más que un script para obtener "transacciones internas" .
Los nodos Ethereum conocidos carecen de funcionalidad para obtener la lista de transacciones para la dirección ETH (cuenta).
Para resolver el problema, existe una solución de terceros gratuita y de código abierto: el indexador de transacciones de Ethereum: https://github.com/Adamant-im/ETH-transactions-storage
El Indexer permite explorar transacciones por dirección de Ethereum y obtener un historial de cualquier billetera de usuario con solo un movimiento, como lo hace Etherscan. El indexador está escrito en Python. Funciona como un servicio en segundo plano:
Indexer se conecta al nodo Ethereum y obtiene transacciones utilizando JSON RPC, creando índices de transacciones en la base de datos de Postgres. First Indexer almacenará las transacciones a partir del bloque que indique. Después de eso, buscará nuevos bloques cada 20 segundos y actualizará el índice. Puede cambiar el intervalo.
La herramienta Postgrest publica la API para el indexador de transacciones de Ethereum. Si necesita proporcionar una API pública, use cualquier servidor web como nginx y configure el proxy para el puerto de Postgrest en la configuración.
Después de crear el índice, puede usar solicitudes como
curl -k -X GET "http://localhost:3000/?and=(contract_to.eq.,or(txfrom.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094,txto.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094))&order=time.desc&limit=25"
o
https://yourserver.com/ethtxs?and=(contract_to.eq.,or(txfrom.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094,txto.eq.0x6b924750e56a674a2ad01fbf09c7c9012f16f094))&order=time.desc&limit=25
La solicitud mostrará las últimas 25 transacciones para la dirección de Ethereum 0x6b924750e56a674a2ad01fbf09c7c9012f16f094, ordenadas por marca de tiempo.
Xavier Leprêtre B9lab
from
propiedad. Hay un montón de otros índices para construir en realidad. ¿Puedes agregar un enlace a tu código? Suena como un proyecto interesante.