El método trace_filter
te permite buscar trazas específicas dentro de un rango de bloques, filtrando por varios criterios como direcciones de origen/destino, rango de bloques y tipos de traza. Esto proporciona una manera poderosa de analizar la actividad de la blockchain para contratos o cuentas específicas.
Este método recupera trazas de transacciones basadas en los criterios de filtro especificados.
Parámetros de filtro
Desde bloque (número de bloque hex o "latest", "earliest", "pending")
Hasta bloque (número de bloque hex o "latest", "earliest", "pending")
Filtrar trazas por direcciones de remitente (array de strings de dirección)
Filtrar trazas por direcciones de destinatario (array de strings de dirección)
Desplazar la traza después del índice dado
Número máximo de trazas a devolver
Array de objetos de traza
Información sobre la acción realizada
Tipo de llamada (p.ej., "call", "delegatecall", "staticcall")
Dirección del remitente
Dirección del destinatario
Gas proporcionado para esta parte de la ejecución
Datos de entrada de la llamada
Valor transferido en wei
Código de inicialización del constructor (para trazas "create")
Dirección del contrato (para trazas "suicide")
Dirección que recibe el reembolso (para trazas "suicide")
Balance del contrato en el momento de la destrucción (para trazas "suicide")
Hash del bloque que contiene esta traza
Número de bloque que contiene esta traza
Resultado de la llamada
Cantidad de gas utilizado
Datos de salida de la llamada
Dirección del contrato creado (para trazas "create")
Código del contrato desplegado (para trazas "create")
Número de subtrazas
Ruta de dirección de la ubicación de la traza en el árbol de llamadas
Hash de la transacción que está siendo trazada
Posición de índice de la transacción en el bloque
Tipo de traza (call, create, suicide)
Mensaje de error si la llamada falló (opcional)
Parámetro | Tipo | Descripción |
---|---|---|
fromBlock | string | Número de bloque inicial (hex) o etiqueta ("latest", "earliest", "pending") |
toBlock | string | Número de bloque final (hex) o etiqueta ("latest", "earliest", "pending") |
fromAddress | array | Array opcional de direcciones de remitente para filtrar |
toAddress | array | Array opcional de direcciones de destinatario para filtrar |
after | integer | Parámetro opcional de paginación - desplazar trazas después del índice dado |
count | integer | Número máximo opcional de trazas a devolver |
{
"jsonrpc": "2.0",
"id": 1,
"result": [
{
"action": {
"callType": "call",
"from": "0x8bbb73bcb5d553b5a556358d27625323fd781d37",
"to": "0x6090a6e47849629b7245dfa1ca21d94cd15878ef",
"gas": "0x12a94",
"input": "0x0000000000000000000000000000000000000000000000000000000000000000",
"value": "0x0"
},
"blockHash": "0x7eb25504e4c202cf3d62fd585d3e238f592c780cca82dacb2ed3cb5b38883add",
"blockNumber": 3928366,
"result": {
"gasUsed": "0xd979",
"output": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
"subtraces": 1,
"traceAddress": [],
"transactionHash": "0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3",
"transactionPosition": 2,
"type": "call"
}
]
}
Se pueden usar diferentes combinaciones de filtros para responder preguntas específicas:
Para encontrar todas las llamadas a un contrato específico:
{
"toAddress": ["0x1234567890123456789012345678901234567890"]
}
Para encontrar todas las transacciones internas desde un contrato:
{
"fromAddress": ["0x1234567890123456789012345678901234567890"]
}
Para encontrar interacciones entre dos direcciones específicas:
{
"fromAddress": ["0x1234567890123456789012345678901234567890"],
"toAddress": ["0xabcdef0123456789abcdef0123456789abcdef01"]
}
Para analizar actividad dentro de un rango de bloques específico:
{
"fromBlock": "0x429d3b",
"toBlock": "0x429d3d"
}
Para conjuntos de resultados grandes, usa los parámetros after
y count
para paginar a través de los resultados:
{ "after": 0, "count": 100, ... }
{ "after": 100, "count": 100, ... }
after
por el valor de count
El método devuelve diferentes tipos de trazas:
--gcmode=archive
y OpenEthereum/Nethermind)