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

trace_replayTransaction

El método trace_replayTransaction le permite reproducir una transacción y recuperar una variedad de información de rastro incluyendo rastro de ejecución, rastro VM y cambios de estado. Este método proporciona información más detallada que trace_transaction mostrando cómo la transacción cambió el estado.

Casos de Uso

  • Depuración de transacciones complejas con cambios de estado
  • Análisis del consumo de gas para optimización
  • Rastreo de llamadas internas entre contratos
  • Comprensión de cómo el almacenamiento fue modificado por una transacción
  • Verificación de la ejecución de flujos lógicos complejos
  • Auditoría de seguridad con detalle completo de transición de estado
  • Análisis de razones de reversión con contexto detallado
  • Investigación de patrones de acceso a memoria y almacenamiento
  • Validación del comportamiento del contrato como parte de revisiones de auditoría
  • Optimización del código del contrato basado en patrones de ejecución

Detalles del Método

Este método reproduce una transacción y devuelve información detallada de rastro incluyendo rastro VM y diferencias de estado.

Parámetros:

El hash de la transacción a reproducir

Array de tipos de rastreo a incluir en la respuesta

Devuelve:

Objeto resultado con información de rastreo

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 para todas las operaciones en la transacción

Detalles sobre la acción de llamada

Tipo de llamada (call, delegatecall, etc.)

Dirección del remitente

Gas proporcionado para la llamada (hex)

Datos de entrada para la llamada (hex)

Dirección del destinatario

Valor transferido en wei (hex)

Resultado de la llamada

Cantidad de gas utilizado (hex)

Datos de salida de la llamada (hex)

Número de sub-rastros

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

Tipo de operación (call, create, suicide)

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": "0x83806d539d4ea1c140489a06660319c9a303f874",
					"gas": "0x1a1f8",
					"input": "0x",
					"to": "0x1c39ba39e4735cb65978d4db400ddd70a72dc750",
					"value": "0x7a16c911b4d00000"
				},
				"result": {
					"gasUsed": "0x2982",
					"output": "0x"
				},
				"subtraces": 2,
				"traceAddress": [],
				"type": "call"
			}
		],
		"vmTrace": {
			"code": "0x606060...",
			"ops": [
				{
					"cost": 3,
					"ex": {
						"mem": null,
						"push": ["0x60"],
						"store": null,
						"used": 16723979
					},
					"pc": 0,
					"sub": null
				}
			]
		}
	}
}

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"

Notas Importantes

  • Este método requiere que las APIs de rastro estén habilitadas en el nodo Ethereum
  • No todos los clientes de Ethereum soportan este método (principalmente OpenEthereum/Nethermind)
  • La respuesta puede ser muy grande, especialmente con vmTrace habilitado
  • Para información de rastro simple sin cambios de estado, use trace_transaction en su lugar
  • El método es computacionalmente intensivo y puede tardar tiempo en completarse
  • Las transacciones históricas solo pueden rastrearse si el nodo mantiene datos de archivo
  • Diferentes traceTypes afectan significativamente al tamaño de respuesta y tiempo de cálculo
  • Para depurar transacciones más simples, trace_transaction puede ser suficiente
  • Las diferencias de estado son particularmente valiosas para entender cambios de almacenamiento
  • Las transacciones que revierten mostrarán cambios de estado hasta el punto de reversión

Véase también

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