Me preguntaba cómo un bloque codifica su conjunto de transacciones. Sé que se genera un Merkle Tree y que codifica una versión Hashed de las transacciones. Pero, ¿el Merkle Tree está incluido en el Bloque que se envía a los otros nodos para su validación? ¿Hay una lista de transacciones que también envió?
En mi entendimiento, cuando un Nodo desea 'Mine', ellos:
<Previous Hash, Nonce, Transactions from 4>
comienzo con un cierto número de 0s.Parece que para validar cada transacción individual (para garantizar que el dinero no se gaste dos veces), sería bueno incluir una lista de transacciones. Pero para verificar que la prueba de trabajo realmente se haya completado, los otros nodos necesitan que el árbol Merkle se ejecute rápidamente.
Es muy posible que también haya una forma de obtener la lista de transacciones de un árbol Merkle, pero no entiendo cómo es ese proceso.
PD: estoy construyendo mi propia implementación de demostración de Python de una moneda de cadena de bloques, de ahí las preguntas más teóricas/menos prácticas.
Gracias.
No puede obtener una lista de transacciones del árbol Merkle.
La raíz del árbol merkle es parte del encabezado del bloque, que como dijiste, permite una verificación rápida de la prueba de trabajo.
Después del encabezado del bloque, cada bloque contiene una lista de transacciones serializadas en el orden en que aparecen en el árbol Merkle. Un bloque completo es un encabezado de bloque + lista de transacciones.
Al validar un bloque, los nodos verificarán:
Para validar un bloque, los nodos deben tener las transacciones reales, incluso una lista es insuficiente.
Pero la pregunta "¿Contiene un bloque X?" es un poco como preguntar "¿Cuál es el sonido de una mano aplaudiendo?". Sería válido decir que un "bloque" no es más que su encabezado de bloque o incluso que ese hash de un bloque es "el bloque". No puede validar un bloque solo a partir de su hash o su encabezado, al igual que no puede validar un bloque sin los datos que aprendió de los bloques anteriores, pero la forma en que obtiene esos datos depende de usted y de la(s) parte(s). ) que le informan sobre el bloque.
Esto es relevante porque hoy en la red de Bitcoin, los bloques generalmente se transmiten sin enviar las transacciones de acuerdo con BIP152; en su lugar, asumimos que el proceso regular de transmisión de transacciones ya le ha dado a cada nodo la mayoría o todas las transacciones y envía a nuestros pares una representación compacta. eso les permite usar sus mempools para descubrir qué había en el bloque. Si les faltan algunos de los datos que necesitan, pueden solicitarlos.
3mrsh