Las raices
La publicación del documento técnico de Bitcoin por Satoshi Nakomoto, introdujo la noción de Salida de transacciones no gastadas (UTXO). UTXO es un modelo contable, donde el saldo se calcula sumando todos los valores incluidos en los resultados de la transacción, que puede gastar un usuario. Para comprender mejor cómo se realiza el cálculo del saldo, considere el siguiente ejemplo. Alice desea enviar 5 BTC a Charles. Al mismo tiempo, Bob también quiere enviar 3 BTC a Charles. Por lo tanto, crean dos transacciones con salida de 5 BTC y salida de 3 BTC, a la dirección pública de Charles. En ese momento, Charles puede gastar 8 BTC (es decir, la suma de 5 BTC + 3 BTC de las transacciones de Alice y Bob), que es su saldo (suponiendo que Charles no fuera el destinatario de ninguna otra transacción). Cada nodo en la red Bitcoin almacena un conjunto UTXO, lo que significa una colección de todas las salidas aún no gastadas. Cuando Charles gasta sus 8 BTC, las salidas de 5 BTC y 3 BTC de Alice y Bob se eliminarán del UTXO. De esta manera, si Charles intenta crear otra transacción, los nodos en la red de Bitcoin detectarán fácilmente que ya no tiene salidas para gastar y rechazarán dicha transacción. De esta manera, el modelo UTXO evita el llamado "doble gasto". Es importante tener en cuenta que el modelo UTXO no permite que la salida se gaste parcialmente. En el ejemplo anterior, en caso de que Charles quiera enviar 2 BTC a Dave, está obligado a gastar los 3 BTC completos de la transacción de Alice. Entonces, crea 2 transacciones: una con 2 salidas BTC a la dirección pública de Dave y otra con 1 salida BTC para sí mismo. Este último se llama "salida de cambio".
Máquina de estado universal
Se introdujo un paradigma diferente para las transacciones, el "modelo de cuenta", con el lanzamiento de la cadena de bloques Ethereum. En un modelo de cuenta, en lugar de registrar el conjunto completo de salidas de transacciones no gastadas, un nodo almacena directamente un conjunto de cuentas y sus saldos correspondientes. De esta manera, el propietario de la cuenta no necesita crear "salidas de cambio" para gastar partes de su saldo. Si bien esto puede sonar más intuitivo, en realidad, el modelo de cuenta es más exigente que el UTXO. De hecho, los nodos están obligados a almacenar cuentas indefinidamente junto con su nonce asociado. El nonce es un número que se actualiza cada vez que un usuario envía una transacción y es crucial para proporcionar un pedido a las transacciones y, por lo tanto, evitar el "doble gasto" (ya que las transacciones se extraen de acuerdo con su pedido). El requisito de realizar un seguimiento indefinido de cuentas y nonces es muy oneroso, ya que conduce a graves problemas de almacenamiento que solo pueden empeorar con el tiempo. Se han propuesto modelos contables alternativos, que resuelven el problema de seguimiento de nonce. Desafortunadamente, generalmente no se tienen en cuenta, debido a las operaciones excesivamente engorrosas que imponen a los usuarios finales.
Inyectando privacidad
La cruzada por la privacidad había comenzado con los vasos, que son servicios centralizados creados para evitar que los espectadores vinculen las entradas y salidas de usuarios específicos, combinándolos en una sola transacción. Monero fue el primero en lanzar una implementación confiable y no interactiva de vasos a través de las Transacciones Confidenciales de Anillo (RingCTs). Además, introducen la capacidad de ocultar las cantidades negociadas. Para ocultar las cantidades en las transacciones, Monero utiliza compromisos, estructuras criptográficas que permiten a los usuarios ocultar y vincular un valor, y algoritmos de conocimiento cero para demostrar que los valores que se están negociando son positivos y están dentro de un rango determinado (por lo que no se puede gastar más que el saldo real). La protección contra el doble gasto se logra mediante el uso de imágenes clave, que son exclusivas de cada salida. Zcash adopta un enfoque incluso diferente al hacer que las transacciones sean privadas al tiempo que brinda protección contra el doble gasto. Su enfoque prevé el almacenamiento de salidas de transacciones (llamadas "notas") en un árbol Merkle. Por lo tanto, se requiere que el gastador demuestre el conocimiento de la apertura del compromiso y la capacidad de satisfacer las condiciones de gasto. Se produce un "anulador" único para evitar el doble gasto de los productos. Zether y Quisquis proponen modelos de cuenta, en los cuales el usuario es capaz de actualizar los compromisos de los señuelos. La desventaja del modelo es el hecho de que la cantidad de actualizaciones de la cuenta crece de manera superlineal con respecto a la cantidad de transacciones generadas, lo que significa que las transacciones requieren mucho almacenamiento, lo cual es costoso en la cadena de bloques.
Fénix: el pájaro inmortal
Phoenix es nuestro nuevo modelo de transacción que evoluciona el modelo UTXO propuesto por Zcash y extiende la funcionalidad a salidas no ofuscadas. Siendo el primero en abordar la privacidad para preservar los contratos inteligentes, Dusk Network también ha sido el primero en experimentar la inadecuación de los modelos de tx existentes para preservar la privacidad de los que gastan en productos transparentes. De hecho, los otros modelos tx son utilizados por plataformas de contratos públicos inteligentes o por redes orientadas a la privacidad que no proporcionan capacidades de contratos inteligentes (y, por lo tanto, no manejan los resultados públicos, como los reembolsos de gas). Para abordar este problema, diseñamos Phoenix, que garantiza la confidencialidad incluso cuando los usuarios gastan resultados públicos como recompensas de oferta ciega o cambio de gas (a través de la inclusión de resultados no ofuscados en un árbol de Merkle). Dentro de Phoenix, las salidas públicas y confidenciales se almacenan dentro de un árbol Merkle. Sin embargo, se definen como diferentes tipos de resultados, por lo que un usuario no puede gastar resultados comprometidos como transparentes. Los usuarios simplemente deben proporcionar una prueba de conocimiento del camino a la raíz del árbol Merkle y de la apertura del compromiso. El uso de Phoenix permite a Dusk Network lograr un mayor nivel de privacidad que Zcash. Phoenix reemplazará el modelo de transacción UTXO / RingCT dentro de Dusk Network.
Zedger: preservación de la privacidad basada en cuentas para XSC
Zedger es un modelo de transacción híbrido creado por Dusk Network. Zedger complementa Phoenix al proporcionar capacidades basadas en cuentas para admitir la funcionalidad de Contrato de seguridad confidencial (XSC). Zedger combina los UTXO con las cuentas para crear un modelo compatible que permita al emisor explotar una amplia gama de funcionalidades y, al mismo tiempo, preservar la confidencialidad de las transacciones, sin la necesidad de ningún tercero de confianza. Zedger es el primer modelo de transacción con soporte integrado para transacciones de liquidación y redención de valores sin fideicomiso pero conformes. Además, Zedger evita que los usuarios aprobados previamente posean más de una cuenta, admite la distribución de dividendos y la votación, e incluso maneja transferencias limitadas, donde los receptores no pueden exceder el umbral de propiedad de un activo, cuando dicho parámetro está configurado en el XSC del activo contrato. Zedger es la piedra angular de la tecnología central de Dusk Network para los casos de uso relacionados con la seguridad y será el modelo de transacción predeterminado para XSC.
¿Emocionado por Phoenix y Zedger? Actualizaremos esta publicación con los enlaces a los documentos de investigación y el código una vez publicado.