Los clientes ligeros de Bitcoin ahora pueden sincronizarse con la punta de la cadena de bloques casi instantáneamente, gracias a un nuevo desarrollo habilitado por la startup de bitcoin ZeroSync y su trabajo en pruebas de conocimiento cero (ZK). En última instancia, ZeroSync busca permitir que los nodos completos hagan lo mismo.
Las pruebas ZK permiten a un probador generar una breve declaración matemática que le demuestra al verificador que un cálculo determinado es correcto sin revelar ningún detalle sobre dicho cálculo. Construir esta prueba puede ser costoso desde el punto de vista computacional, pero la declaración que proporciona es siempre muy compacta, independientemente del tamaño de los datos que sirvieron como entrada para el cálculo de la prueba, lo que permite una verificación ultrarrápida de la exactitud de esos datos con certeza matemática. En bitcoin, este truco matemático puede resultar muy útil para nodos y clientes.
Los nodos completos de Bitcoin son notoriamente necesarios para descargar y verificar cada uno de los datos que componen la cadena de bloques, desde sus inicios en enero de 2009 hasta la actualidad. Debido a la dificultad de escalar una configuración tan completa, Satoshi Nakamoto imaginó en el documento técnico de Bitcoin un tipo diferente de cliente que podría verificar sus pagos entrantes sin ejecutar un nodo completo.
Los clientes ligeros de Bitcoin aprovechan un mecanismo de verificación de pago (SPV) simplificado. Al recibir un pago, el cliente consulta los nodos de la red para obtener los encabezados de la cadena más larga. Luego, puede encontrar el bloque al que se agregó la transacción entrante, lo que muestra que los nodos de la red la aceptaron como válida. A medida que se agregan más bloques a la cadena después de ese, más confirmaciones obtiene el cliente ligero de que el pago fue válido y aceptado por la red en un bloque.
Sin necesidad de un cambio consensuado a bitcoin, las pruebas ZK mejoran esta configuración al comprimir los encabezados en una sola prueba. De manera similar a cómo cada bloque de bitcoin comprime efectivamente los datos de sus transacciones en un árbol Merkle e incluye la raíz de ese árbol en su encabezado, el trabajo de ZeroSync toma cada encabezado de bloque de bitcoin y los agrupa en otro árbol Merkle. Este proceso permite sintetizar la cadena de encabezados en un dato breve y liviano: la prueba.
La prueba de la cadena de encabezados puede probar rápidamente si un encabezado de bloque determinado está incluido en la cadena. Luego se puede aprovechar un encabezado de bloque para certificar si se incluyó una transacción específica en ese bloque. Este proceso es muy similar al método SPV descrito anteriormente, pero más eficiente. En lugar de tener que conservar una copia completa de cada encabezado en la cadena de bloques para SPV, con las pruebas ZK el cliente ligero solo necesita almacenar esa pequeña prueba de la cadena de encabezados, pudiendo sincronizarse con el último estado de la cadena en segundos.
En última instancia, lo que la prueba de la cadena de encabezado puede demostrar es que cada bloque de la cadena cumplió con el requisito de dificultad en el momento en que fue minado. En otras palabras, verificar la prueba de la cadena de encabezado permite al usuario o cliente estar seguro de que cada bloque de bitcoin hasta esa altura determinada se extrajo correctamente y cumplió con los criterios de dificultad de extracción en ese momento.
El lanzamiento de la primera prueba ZK de cadena de encabezado completa fue el primer hito de ZeroSync. Para lograr su visión más amplia (proporcionar una verificación completa de la cadena de bloques histórica a nodos completos sin necesidad de que los usuarios la descarguen y procesen), el equipo debe marcar dos casillas más. El segundo llevaría la prueba de la cadena de encabezado a un nivel superior y permitiría que un nodo se sincronice de manera similar a la función Assume Valid de Bitcoin Core. El tercero y último proporcionaría la sincronización completa de la cadena de bloques de bitcoin prevista.
Assume Valid es una opción en Bitcoin Core, habilitada de forma predeterminada, que asume que todos los scripts hasta una altura de bloque determinada son válidos. Esto significa que los nuevos nodos completos que sincronizan la cadena de bloques con la descarga del bloque inicial (IBD) pueden omitir la verificación de los scripts desde el bloque Génesis hasta la altura del bloque establecida por el cliente Bitcoin Core en una versión determinada. Estos scripts son la parte de datos de los Testigos de las transacciones, principalmente las firmas que resuelven los scripts de bloqueo y desbloquean los fondos a gastar, así como bloqueos de tiempo y otras condiciones de gasto programadas. Los usuarios tienen la opción de establecer `assumevalid=0` y obligar a su cliente a realizar una verificación completa de todos los scripts, además de la verificación del resto del contenido del bloque. Sin embargo, la suposición general y bastante segura detrás de habilitar Asumir válido de forma predeterminada es que se ha mostrado suficiente prueba de trabajo hasta esa altura de bloque dada que hace que sea justo creer que los scripts que lo preceden son válidos.
La oferta intermedia de ZeroSync, cuando esté completa, permitirá a los usuarios de bitcoin sincronizar sus nodos de manera similar a un Bitcoin Core IBD predeterminado. El nodo descarga todos los datos desde el inicio de Bitcoin hasta el día de hoy, pero solo verifica los datos de los testigos después de la altura asumida como válida. El conjunto UTXO también es una parte necesaria de la ecuación. Para solucionar esto, ZeroSync aprovecha Utreexo, un proyecto que también busca aumentar la eficiencia en la sincronización de nodos bitcoin. Utreexo proporciona el último conjunto de UTXO en un bloque determinado, y ZeroSync puede agregarlo a su configuración basada en pruebas ZK. El resultado es una prueba de cadena de encabezado mucho más corta y un conjunto UTXO más compacto y eficiente, que los clientes pueden aprovechar para satisfacer sus necesidades de verificación de pagos.
La oferta de primer nivel del equipo irá un paso más allá y permitirá que los nodos se sincronicen con el último estado de bitcoin sin asumir que ningún script sea válido. Utilizando pruebas ZK, los nodos completos podrían lograr una sincronización inicial mucho más rápida con quizás incluso mayores garantías de seguridad que la configuración predeterminada de Bitcoin Core, que utiliza supuesto válido.
Es importante tener en cuenta que incluso si los usuarios de Bitcoin Core desactivan el supuesto válido (verificar todos los scripts y alcanzar supuestos de seguridad similares a los de la oferta de nivel superior de ZeroSync), la mayor propuesta de valor de este último sigue siendo la ganancia sustancial en eficiencia y velocidad para verificar toda esta información. Si bien la cadena de bloques bitcoin actualmente contiene 510 GB de datos, el enfoque de ZeroSync, cuando esté completo, permitirá un proceso mucho más rápido dada la producción de una prueba corta y liviana de poco más de 1 MB, una mejora en el rendimiento de varios órdenes de magnitud con respecto a un IBD estándar. utilizando Bitcoin Core y al mismo tiempo garantizando que se sigan exactamente las mismas reglas de consenso.
Las ganancias en eficiencia serán cada vez más importantes a medida que la cadena de bloques bitcoin siga creciendo bloque tras bloque. Con el tiempo, descargar y verificar toda la cadena podría volverse prohibitivo en términos de ancho de banda y almacenamiento, especialmente en partes del mundo donde el acceso a Internet de alta velocidad y a discos duros más grandes es limitado o costoso.