Relación entre transacción Trie y recibos Trie

Al leer el papel amarillo , puedo ver que cada encabezado de bloque incluye el hash Keccak 256 de la raíz del trie para transacciones y recibos de transacciones. Me cuesta entender cómo y dónde se crean.

¿Cómo se relacionan el Trie de transacciones y el Trie de recibos de transacciones para un bloque dado?

¿Es cierto que, a medida que se actualiza el estado mundial al pasar por las transacciones, las transacciones y los recibos de transacciones se almacenan en sus respectivos intentos?

Respuestas (2)

Los intentos de transacciones y los intentos de recepción de transacciones son, de hecho , estructuras de datos independientes con distintas raíces almacenadas en el encabezado de la cadena de bloques y difieren tanto en el propósito como en el contenido .

Propósito :

  • Intentos de transacción : registra los vectores de solicitud de transacción

  • Intentos de recepción de transacciones : registra el resultado de la transacción

Contenido :

Parámetros utilizados en la composición de un Transaction Trie [detalles en la sección 4.3 del libro amarillo] :

  • mientras tanto,
  • precio de la gasolina,
  • límite de gases,
  • recipiente,
  • valor de transferencia,
  • valores de firma de transacción, y
  • inicialización de la cuenta (si la transacción es del tipo de creación de contrato) o datos de la transacción (si la transacción es una llamada de mensaje)

Parámetros utilizados en la composición de un recibo de transacción Trie [detalles en la sección 4.4.1 del libro amarillo] :

  • estado posterior a la transacción,
  • el gas acumulado utilizado,
  • el conjunto de registros creados a través de la ejecución de la transacción, y
  • el filtro Bloom compuesto de información en esos registros
Gracias zanzu, ¿los recibos de las transacciones siempre están en el mismo bloque? Si es así, ¿se almacenan en el mismo orden?
@atomh33ls. Si y si. Esto queda claro a partir de las ecuaciones para la raíz de transacciones, Ht, y la raíz de recibos, Hr, en la ecuación 29, las cuales están indexadas en el índice de transacciones en bloque, i.
Ah si gracias; Creo que te refieres a He para la raíz del recibo. Los componentes Ht y He de la ecuación 28 también son relevantes.
@atomh33ls. Sí, lo siento, reemplace Hr con He en mi comentario anterior (¡hubiera sido demasiado fácil si la raíz de los recibos hubiera sido denotada por Hr! :o))
¿Qué quieres decir con transaction request vectors@zanzu?

En https://blog.ethereum.org/2015/11/15/merkling-in-ethereum Vitalik Buterin dio un ejemplo del uso de los diferentes árboles (transacciones, recibos, árboles de estado).

  • ¿Se ha incluido esta transacción en un bloque en particular?
  • Dime todas las instancias de un evento de tipo X (por ejemplo, un contrato de crowdfunding que alcanza su objetivo) emitido por esta dirección en los últimos 30 días
  • ¿Cuál es el saldo actual de mi cuenta?
  • ¿Existe esta cuenta?
  • Pretenda ejecutar esta transacción en este contrato. ¿Cuál sería la salida?

El primero es manejado por el árbol de transacciones ; el tercero y cuarto son manejados por el árbol de estados, y el segundo por el árbol de recibos . Los primeros cuatro son bastante sencillos de calcular; el servidor simplemente encuentra el objeto, busca la rama de Merkle (la lista de hashes que van desde el objeto hasta la raíz del árbol) y responde al cliente ligero con la rama. el quintotambién es manejado por el árbol de estado, pero la forma en que se calcula es más compleja. Aquí, necesitamos construir lo que se puede llamar una prueba de transición de estado de Merkle. Esencialmente, es una prueba que hace la afirmación "si ejecuta la transacción T en el estado con raíz S, el resultado será un estado con raíz S', con log L y salida O" ("salida" existe como un concepto en Ethereum porque cada transacción es una llamada de función; no es teóricamente necesario).

Los recibos son básicamente para probar registros y eventos .