Comenzando con TheRPC
Referencia de API
API de Ethereum
Core API
Guías
Ethereum/Trace API/trace_replayBlockTransactions

trace_replayBlockTransactions

El método trace_replayBlockTransactions reproduce todas las transacciones en un bloque especificado y devuelve información detallada de rastreo para cada transacción. Esto proporciona información sobre el flujo de ejecución de las transacciones, permitiendo un análisis detallado y depuración.

Casos de Uso

  • Análisis de flujos de ejecución de transacciones en bloques específicos
  • Depuración de interacciones complejas entre contratos inteligentes
  • Comprensión de cambios de estado a partir de la ejecución de transacciones
  • Auditoría y verificación de resultados de transacciones
  • Investigación para optimización de gas
  • Investigación de transacciones fallidas
  • Investigación y análisis de bloques históricos
  • Prueba del comportamiento del contrato bajo condiciones específicas de bloque
  • Identificación de patrones en múltiples transacciones en un bloque
  • Verificación de reglas de consenso a nivel de transacción

Detalles del Método

Este método reproduce todas las transacciones en un bloque con información detallada de rastreo.

Parámetros:

Número de bloque en formato hexadecimal o etiqueta de bloque (latest, earliest, pending)

Array de tipos de rastreo a incluir en la respuesta

Devuelve:

Array de resultados de rastreo para cada transacción en el bloque

Datos de salida de la transacción

Diferencias de estado causadas por la transacción (si se solicita)

Cambios de estado para una dirección

Array de objetos de rastreo

Detalles sobre la acción de llamada

Tipo de llamada (call, delegatecall, etc.)

Dirección del remitente

Gas proporcionado para la llamada

Datos de entrada para la llamada

Dirección del destinatario

Valor transferido en wei

Resultado de la llamada

Cantidad de gas utilizado

Datos de salida de la llamada

Número de sub-rastros

Ruta de dirección de la ubicación del rastro en el árbol de llamadas

Tipo de rastro

Hash de la transacción

Rastro de ejecución de la máquina virtual (si se solicita)

Bytecode EVM que se está ejecutando

Array de operaciones ejecutadas

Costo de gas de la operación

Resultado de ejecución de la operación

Contador de programa

Información sobre la sub-ejecución de llamada

Ejemplo de Respuesta

{
	"jsonrpc": "2.0",
	"id": 1,
	"result": [
		{
			"output": "0x0000000000000000000000000000000000000000000000000000000000000001",
			"stateDiff": {
				"0x1234567890123456789012345678901234567890": {
					"balance": {
						"*": {
							"from": "0x100",
							"to": "0x110"
						}
					},
					"code": "=",
					"nonce": {
						"*": {
							"from": "0x10",
							"to": "0x11"
						}
					},
					"storage": {
						"0x0000000000000000000000000000000000000000000000000000000000000001": {
							"*": {
								"from": "0x0000000000000000000000000000000000000000000000000000000000000000",
								"to": "0x0000000000000000000000000000000000000000000000000000000000000001"
							}
						}
					}
				}
			},
			"trace": [
				{
					"action": {
						"callType": "call",
						"from": "0x71c7656ec7ab88b098defb751b7401b5f6d8976f",
						"gas": "0x4c40d",
						"input": "0xa9059cbb000000000000000000000000ea674fdde714fd979de3edf0f56aa9716b898ec80000000000000000000000000000000000000000000000002b5e3af16b1880000",
						"to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
						"value": "0x0"
					},
					"result": {
						"gasUsed": "0x9868",
						"output": "0x0000000000000000000000000000000000000000000000000000000000000001"
					},
					"subtraces": 0,
					"traceAddress": [],
					"type": "call"
				}
			],
			"transactionHash": "0x69f8de1af3129dc3b1adb5b3c1577476f737f9335f156e177b48c2ed88f3f7c4",
			"vmTrace": {
				"code": "0x60606040...",
				"ops": [
					{
						"cost": 3,
						"ex": {
							"mem": null,
							"push": ["0x60"],
							"store": null,
							"used": 16723979
						},
						"pc": 0,
						"sub": null
					}
					// Operaciones adicionales...
				]
			}
		}
		// Rastros de transacciones adicionales...
	]
}

Tipos de Rastro

El parámetro traceTypes acepta un array de los siguientes valores:

  • trace: El rastro básico de ejecución de la transacción
  • vmTrace: Un rastro detallado de la ejecución EVM
  • stateDiff: Cambios de estado resultantes de la transacción

Puede solicitar cualquier combinación de estos tipos de rastro.

Formato de Diferencia de Estado

El formato de diferencia de estado utiliza los siguientes símbolos:

  • "=": Sin cambio en el valor
  • "+": El valor fue creado
  • "-": El valor fue eliminado
  • "*": El valor fue modificado, con valores "from" y "to"

Formato de Rastro VM

El rastro VM contiene:

  • code: El bytecode EVM que se está ejecutando
  • ops: Array de operaciones con:
  • cost: Costo de gas de la operación
  • ex: Resultado de ejecución (memoria, pila, almacenamiento)
  • pc: Contador de programa
  • sub: Información para subllamadas

Formato de Rastro

El formato de rastro muestra la ruta de ejecución:

  • action: Detalles sobre la llamada
  • result: Resultado de la llamada
  • subtraces: Número de llamadas hijas
  • traceAddress: Posición en el árbol de llamadas
  • type: Tipo de operación (call, create, suicide)

Notas Importantes

  • Este método es computacionalmente intensivo y puede tardar tiempo en completarse
  • Requiere que las APIs de rastro estén habilitadas en el nodo Ethereum
  • No todos los clientes de Ethereum soportan este método
  • El tamaño de la respuesta puede ser muy grande para bloques con muchas transacciones
  • Considere limitar los tipos de rastro para un mejor rendimiento
  • Los bloques vacíos devolverán un array vacío
  • Los bloques históricos solo pueden rastrearse si el nodo mantiene datos de archivo
  • Para bloques con transacciones complejas, la respuesta podría ser extremadamente grande
  • Cada tipo de rastro añade significativamente al tamaño de la respuesta
  • Diferentes clientes pueden implementar ligeras variaciones de los formatos de rastro

Etiquetas de Bloque

El parámetro blockNumber acepta:

  • Número de bloque codificado en hexadecimal (0x1b4)
  • latest: El bloque minado más reciente
  • earliest: El bloque génesis
  • pending: Bloque actualmente pendiente (transacciones esperando ser minadas)

Véase también

  • trace_block - Obtener rastros básicos para todas las transacciones en un bloque
  • trace_call - Ejecutar y rastrear una llamada sin crear una transacción
  • debug_traceTransaction - Obtener rastro de ejecución detallado para una sola transacción
¡Ayúdanos a Mejorar!
Comparte esta página y ayúdanos a crear un producto aún mejor para ti.