¿Cuándo exactamente se validan las transacciones?

Tengo algunos vacíos en mi comprensión del ciclo de vida de la transacción que quiero que alguien me ayude a llenarlos especialmente con la validación.

Lo que entiendo sobre el ciclo de vida con mis preguntas:

1) El usuario firma la transacción a través de la aplicación de billetera y la transmite a la red blockchain.

La pregunta en este paso es: ¿la aplicación de billetera realiza algún tipo de validación de transacciones que requiera verificar todo el historial de la cadena de bloques en este nivel?


2) La transacción transmitida ahora se envía a muchos nodos en la red, y estos nodos reenvían/"propagan" las transacciones a otros nodos hasta que todos los nodos tengan esta transacción en su "grupo de transacciones no confirmadas".

Dime si me estoy equivocando en alguna parte o no en el orden correcto


3) Cada minero elegirá algunas transacciones y comenzará la minería (haciendo la prueba de trabajo hasta encontrar un hash correcto)

En este nivel, cuando el minero selecciona las transacciones, ¿realiza una validación de cada transacción que requiere un escaneo completo del historial de la cadena de bloques?


4) Cuando el minero resuelva el bloque, transmitirá ese bloque junto con el valor hash que produjo a la red blockchain de la misma manera que la transacción se transmitió a algunos nodos y se propagó al resto. Luego, los nodos analizarán el encabezado del bloque para verificar si produce o no el mismo hash para que puedan aceptar ese bloque.

La pregunta aquí es: ¿los nodos realizan otra validación en todas las transacciones enviadas con el encabezado del bloque para verificar que sean transacciones reales y no falsas creadas por el minero que resolvió el bloque?

¿Las validaciones de estas transacciones requieren una verificación con todo el historial de la cadena de bloques?

Sé cómo los árboles de merkle hacen hash de transacciones múltiples y que cualquier modificación al hash de una transacción cambiará el valor de la raíz de merkle, pero mi pregunta aquí es ¿cómo es eso útil? ¿El minero que ya falsificó alguna de las transacciones no tendría la raíz Merkle correcta para todas las transacciones en el bloque ya que él es quien las agregó en primer lugar? Mi punto es ¿cómo ayuda la raíz de merkle? que valor agrega ¿Qué tipo de ataque previene?


La última pregunta es el consenso, por su definición es que todos los nodos están de acuerdo en que están al mismo nivel que el nuevo bloque. Conozco el PoW, pero ¿cómo todos los nodos verifican y se comunican entre sí para reconocer que todos obtuvieron el mismo bloque?

Respuestas (1)

La pregunta en este paso es: ¿la aplicación de billetera realiza algún tipo de validación de transacciones que requiera verificar todo el historial de la cadena de bloques en este nivel?

Depende de la billetera.

En general, es probable que una billetera haga alguna validación como una verificación de cordura para garantizar que la transacción que crea sea válida y que los nodos de la red la acepten. Por lo general, verificarán que las firmas sean válidas y que la transacción sea válida, suponiendo que las transacciones anteriores de las que gasta también sean válidas.

Si esas transacciones anteriores son válidas es una historia diferente. Hay diferentes modelos de validación y seguridad que se emplean. Pero, en general, una billetera solo almacenará y reconocerá una transacción como tal cuando crea que es válida. Luego se basará en la suposición de que es válido (ya sea que lo haya validado o tenga algún otro medio para creer que es válido) para que no necesite volver a validar la transacción más adelante.

2) La transacción transmitida ahora se envía a muchos nodos en la red, y estos nodos reenvían/"propagan" las transacciones a otros nodos hasta que todos los nodos tengan esta transacción en su "grupo de transacciones no confirmadas".

Eso es correcto. Pero en esta etapa, los nodos validan la transacción utilizando el historial de transacciones completo antes de transmitir la transacción a otros pares. Tenga en cuenta que no revalidan transacciones anteriores ni buscan linealmente a través de la cadena de bloques. Más bien, tienen bases de datos e índices que hacen que la validación de transacciones sea extremadamente rápida.

Además, no todos los nodos necesitan tener la transacción o haber visto la transacción. Tampoco hay forma de saber si todos los nodos han visto y validado una transacción en particular.

La pregunta aquí es: ¿los nodos realizan otra validación en todas las transacciones enviadas con el encabezado del bloque para verificar que sean transacciones reales y no falsas creadas por el minero que resolvió el bloque?

Ingenuamente (y previamente), sí. Una implementación simple simplemente volvería a validar cada transacción recibida en un bloque.

Una implementación más rápida (y lo que hace Bitcoin Core ahora) es almacenar en caché si una transacción en particular se ha validado antes y si era válida. Entonces, cuando pasa por un bloque, en lugar de volver a validar todas las transacciones que el nodo ha visto antes, simplemente llama al resultado de la validación previamente. Esto se puede hacer fácilmente restringiendo el mempool (grupo de transacciones no confirmadas) a transacciones que serían válidas si se incluyeran en el siguiente bloque. Entonces, si una transacción que se recibe en un bloque se encuentra en el mempool, se sabe que es válida y no es necesario volver a validarla.

Sé cómo los árboles de merkle hacen hash de transacciones múltiples y que cualquier modificación al hash de una transacción cambiará el valor de la raíz de merkle, pero mi pregunta aquí es ¿cómo es eso útil? ¿El minero que ya falsificó alguna de las transacciones no tendría la raíz Merkle correcta para todas las transacciones en el bloque ya que él es quien las agregó en primer lugar? Mi punto es ¿cómo ayuda la raíz de merkle? que valor agrega ¿Qué tipo de ataque previene?

La raíz merkle no tiene nada que ver con la validez de la transacción.

El merkle tiene dos propósitos: garantizar que todas las transacciones se incluyan en el hash del bloque y demostrar que una transacción en particular estaba en un bloque sin necesidad del bloque en sí.

Dado que la raíz de merkle es parte del encabezado del bloque, y dado que es el hash de todas las transacciones en un bloque, sirve para confirmar todas esas transacciones en el encabezado del bloque y en la Prueba de trabajo. Simplemente garantiza que el hash del bloque también cubra las transacciones.

El árbol merkle utilizado para producir la raíz merkle también significa que cualquier persona con un bloque completo puede producir una prueba simple de que una transacción se incluyó en un bloque en particular. Esto es útil para las billeteras SPV. No prueba que una transacción sea válida y no tiene efecto sobre si una transacción es válida. Un minero podría incluir una transacción no válida y sería parte del árbol merkle. Esto no hace que esa transacción sea válida, ni tampoco hace que el bloque sea válido.

La última pregunta es el consenso, por su definición es que todos los nodos están de acuerdo en que están al mismo nivel que el nuevo bloque. Conozco el PoW, pero ¿cómo todos los nodos verifican y se comunican entre sí para reconocer que todos obtuvieron el mismo bloque?

ellos no; no hay necesidad de. Se llega a un consenso porque los nodos están conectados entre sí y transmiten bloques entre sí. Debido a que cada nodo está programado para seguir la cadena de bloques con la mayor parte del trabajo y hacer todo lo posible para garantizar que sus pares aprendan lo que cree que es la mejor cadena de bloques, la red naturalmente logra el consenso sin ningún tipo de acuerdo o reconocimiento. Al depender de que los nodos cambien para usar la cadena de bloques válida con la mayor parte del trabajo, los nodos convergerán en la misma cadena de bloques y eventualmente, una cadena de bloques tendrá la mayor parte del trabajo.