Comenzando con TheRPC
Referencia de API
API de Ethereum
Core API
Guías
Ethereum/Debug API/debug_traceBlockByNumber

debug_traceBlockByNumber

El método debug_traceBlockByNumber devuelve un rastreo completo de todos los opcodes invocados de todas las transacciones incluidas en el bloque especificado, identificado por su número de bloque. Este método proporciona información detallada de ejecución de bajo nivel útil para depurar y analizar el comportamiento de las transacciones.

Casos de Uso

  • Depuración de transacciones fallidas en un bloque específico
  • Análisis del flujo de ejecución de contratos inteligentes
  • Optimización y perfilado de uso de gas
  • Auditoría de seguridad de contratos desplegados
  • Verificación del comportamiento de transacciones
  • Comprensión de interacciones complejas entre contratos
  • Análisis de bloques históricos por su número
  • Monitoreo de patrones de ejecución de transacciones
  • Encontrar casos extremos en el diseño de contratos
  • Verificar la ejecución determinista a través de diferentes nodos

Detalles del Método

Este método rastrea la ejecución de todas las transacciones en un bloque, identificado por su número, a nivel de opcode.

Parámetros:

Número de bloque en formato hexadecimal o la etiqueta: latest, earliest, o pending

Opciones de rastreo

Establecer esto a true desactiva la captura de almacenamiento

Establecer esto a true desactiva la captura de memoria

Establecer esto a true desactiva la captura de pila

Usar un trazador personalizado (disponibles: callTracer, prestateTracer, etc.)

Anula el tiempo de espera predeterminado de 5 segundos para el rastreo basado en JavaScript

Devuelve:

Array de rastreos de transacciones dentro del bloque

Gas utilizado por la transacción

Si la transacción falló

El valor de retorno de la transacción

Array de registros estructurados de operaciones EVM

Posición del contador de programa

El opcode ejecutado

Gas restante

Costo de gas para esta operación

Profundidad de llamada

Contenido de memoria EVM (si no está desactivado)

Contenido de pila EVM (si no está desactivado)

Cambios de almacenamiento (si no está desactivado)

Ejemplo de Respuesta (Simplificado)

{
	"jsonrpc": "2.0",
	"id": 1,
	"result": [
		{
			"gas": 21000,
			"failed": false,
			"returnValue": "",
			"structLogs": [
				{
					"pc": 0,
					"op": "PUSH1",
					"gas": 68232,
					"gasCost": 3,
					"depth": 1,
					"stack": [],
					"memory": [],
					"storage": {}
				},
				{
					"pc": 2,
					"op": "MSTORE",
					"gas": 68229,
					"gasCost": 12,
					"depth": 1,
					"stack": ["0x60", "0x40"],
					"memory": [
						"0000000000000000000000000000000000000000000000000000000000000000",
						"0000000000000000000000000000000000000000000000000000000000000000"
					],
					"storage": {}
				}
				// Many more opcode logs...
			]
		}
		// Additional transaction traces...
	]
}

Usando el Formato callTracer

Cuando se utiliza la opción callTracer, la respuesta se formatea como un gráfico de llamadas:

{
	"jsonrpc": "2.0",
	"id": 1,
	"result": [
		{
			"type": "CALL",
			"from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",
			"to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
			"value": "0x0",
			"gas": "0x13458",
			"gasUsed": "0x8fc",
			"input": "0xa9059cbb0000000000000000000000001f9840a85d5af5bf1d1762f925bdaddc4201f984000000000000000000000000000000000000000000000002b5e3af16b1880000",
			"output": "0x0000000000000000000000000000000000000000000000000000000000000001",
			"calls": []
		}
		// Additional call traces...
	]
}

Opciones de Etiquetas de Número de Bloque

El parámetro blockNumber acepta varias etiquetas especiales:

  • latest: Bloque más reciente que ha sido confirmado por la red
  • earliest: Bloque génesis (bloque 0)
  • pending: Bloque pendiente con transacciones en el mempool (aún no minado)

Trazadores Personalizados

El método debug_traceBlockByNumber admite varios trazadores incorporados:

  • callTracer: Captura el gráfico de llamadas de cada ejecución de transacción.
  • prestateTracer: Captura el estado previo de los contratos involucrados.
  • 4byteTracer: Recopila selectores de funciones (primeros 4 bytes de calldata).
  • noopTracer: Simplemente rastrea sin recopilar datos (para pruebas de rendimiento).

Notas Importantes

  • Este método es computacionalmente intensivo y puede llevar tiempo completarse
  • Requiere que las APIs de depuración estén habilitadas en el nodo Ethereum
  • No todos los clientes de Ethereum admiten este método
  • La respuesta puede ser muy grande para bloques con transacciones complejas
  • Considere usar opciones de rastreo para reducir el tamaño de la respuesta si es necesario
  • Especificar un bloque muy antiguo puede requerir un nodo de archivo
  • Para información regular del bloque sin rastreo, use eth_getBlockByNumber
  • Diferentes clientes pueden exponer diferentes opciones de trazador
  • Los trazadores personalizados pueden mejorar significativamente el rendimiento para necesidades de análisis específicas
  • Los rastreos históricos pueden no estar disponibles más allá de ciertas edades de bloque en algunos nodos

Ver también

¡Ayúdanos a Mejorar!
Comparte esta página y ayúdanos a crear un producto aún mejor para ti.