¿Cómo saben las personas que utilizan clientes ligeros la ruta Merkle correcta de las transacciones que han enviado sin conocer el bloque completo?

El usuario A envía una transacción al usuario B. Esas transacciones se agrupan en un árbol Merkle. Tanto el usuario A como el B pueden usar la transacción más la raíz de merkle, más la ruta de merkle para demostrar que la raíz de merkle en el encabezado del bloque es correcta.

Entiendo todo eso... lo que no entiendo es ¿cómo saben A y B la ruta correcta de merkle sin necesitar el bloque completo?

¿Necesitan un proveedor centralizado que procese los bloques para calcularlos por ellos? ¿Es posible hacerlo de forma descentralizada?

Respuestas (2)

El usuario A envía una transacción al usuario B. Esas transacciones se agrupan en un árbol Merkle. Tanto el usuario A como el B pueden usar la transacción más la raíz de merkle, más la ruta de merkle para demostrar que la raíz de merkle en el encabezado del bloque es correcta.

Permítame reformular su pregunta para asegurarnos de que estamos en la misma página:
Alice le paga a Bob. Cuando Alice envía su transacción a la red, aún no está confirmada. La transacción se confirma al incluirse en un bloque. El encabezado del bloque incluye la raíz merkle, que es un compromiso criptográfico con el conjunto de transacciones incluido (en orden).

Ni Alice ni Bob conocen el camino de Merkle en este punto. Según el cliente ligero que estén ejecutando, su billetera solicitará a un par de nodo completo que marque las transacciones que coincidan con un filtro de floración que codifica sus intereses (BIP 37 (obsoleto)), confiarán en un proveedor de servicios para conocer sus direcciones (Electrum, varios servicios de billetera centralizados), o descargan filtros de bloques compactos del lado del cliente que pueden usar localmente para ver si un bloque puede incluir algo de interés (BIP 157/158).

Una vez que el cliente ligero se entera de una transacción que le interesa, solicita el bloque Merkle para la transacción específicamente o el bloque completo de un par de nodo completo o su proveedor de servicios. La estructura de datos del bloque Merkle tiene todos los socios de hash necesarios para volver a rastrear la rama completa desde la hoja de la transacción hasta la raíz, así como el encabezado del bloque (al igual que el bloque completo, por supuesto). ¡Así es como saben!

Como escribió chytrik en otra respuesta, la mayoría de los clientes ligeros siguen la red al sincronizar la cadena de encabezado del bloque. Dado que no analizan los bloques completos, no realizan un seguimiento del libro mayor completo de saldos de bitcoin (el conjunto de salida de transacciones no gastadas) y, por lo tanto, no pueden validar transacciones. Sin embargo, pueden realizar verificaciones básicas de validez en bloques, como si cumplen con el requisito de dificultad actual y si el contenido del encabezado del bloque realmente coincide con el hash dado.

¿Cómo saben A y B la ruta correcta de Merkle sin necesitar el bloque completo?

Muchos clientes ligeros se sincronizarán con la cadena más larga de encabezados, bajo el supuesto de que otros nodos en la red verificarán la validez del contenido completo de esos bloques. (Considere: si cada nodo fuera un cliente ligero, los mineros podrían incluir transacciones no válidas en bloques, ¡y ninguno de los clientes ligeros lo sabría!)

Al solicitar los estados intermedios del árbol merkle de un nodo que tiene el bloque completo, un cliente ligero puede verificar que una transacción en la que el usuario está interesado está efectivamente incluida en un bloque que forma parte de la cadena más larga, de una manera más eficiente. manera que validar la totalidad del bloque en sí (la advertencia es la suposición de validez mencionada anteriormente).

¿Necesitan un proveedor centralizado que procese los bloques para calcularlos por ellos? ¿Es posible hacerlo de forma descentralizada?

Esto depende completamente de la implementación. Algunas billeteras ligeras pueden llamar a un determinado servidor, operado por los desarrolladores de la billetera, por ejemplo. Otros clientes ligeros podrían intentar obtener esta información de nodos aleatorios en la red. Algunos incluso están diseñados para conectarse a su propio nodo.

En última instancia, el nivel más alto de certeza provendrá de ejecutar usted mismo un nodo de validación completa (es decir, un nodo completo). Como les gusta decir a los bitcoiners: no confíes, verifica.