La verdad detrás de Libra, la nueva criptomoneda de Facebook

1
171
Criptomoneda Novatica 241

Resumen

Una década después del nacimiento de Bitcoin, las criptomonedas ya no son cosa de cripto-anarquistas, investigadores o ingenieros aislados, si no que tanto organismos reguladores como gobiernos y grandes empresas ya apuestan por estos nuevos activos digitales y su tecnología subyacente, la cadena de bloques (o blockchain). Recientemente, Facebook presentó Libra, un proyecto con el que pretende promover la emisión de una nueva divisa digital sobre una red blockchain global, la red Libra. El presente artículo realiza un exhaustivo análisis técnico sobre los principales módulos que conforman la implementación de referencia de la red Libra, comparándolo con otros proyectos presentes en el ecosistema. La red Libra no presenta ninguna propuesta innovadora desde un punto de vista técnico (al menos de momento), si no que aglutina mecanismos técnicos probados y cuya funcionalidad ha sido demostrada en otras plataformas blockchain. La red Libra no es tanto una innovación técnica como una disrupción desde el punto de vista de negocio.

Alfonso de la Rocha Gómez-Arevalillo

Experto de Blockchain en el Centro de Competencia de Blockchain de Telefónica.

Alfonso de la Rocha Gómez-Arevalillo

Experto de Blockchain en el Centro de Competencia de Blockchain de Telefónica donde esta a cargo del diseño, investigación y desarrollo de tecnologías basadas en blockchain, sistemas distribuidos y criptografía avanzada. Siempre ha estado muy involucrado con el mundo de la investigación y el desarrollo: desde la investigación de eficiencia energética en centros de datos en la Universidad Politécnica de Madrid, pasando por eficiencia de video y compresión en Ericsson Research, a asegurar protocolos de red utilizando tecnología blockchain en KTH. Es ingeniero de Telecomunicaciones por la Universidad Politécnica de Madrid y el KTH Royal Institute of Technology.

1. Introducción

Una década después del nacimiento de Bitcoin, las criptomonedas ya no son cosa de cripto-anarquistas, maximalistas del nuevo paradigma de descentralización e investigadores, si no que tanto organismos reguladores como gobiernos y grandes empresas ya están apostando fuertemente por estos nuevos activos digitales y su tecnología subyacente, la cadena de bloques (o blockchain). Durante este tiempo, las criptomonedas han demostrado ser un medio eficiente de intercambio para millones de personas en todo el mundo, pero la gran volatilidad de su precio, y el hecho de que no estuvieran reguladas ni respaldadas por grandes corporaciones y gobiernos han provocado que, hasta ahora, no se hayan adoptado de manera masiva.

Libra, la nueva criptomoneda promovida por Facebook, es un intento por resolver esto y favorecer la adopción y el uso de una moneda digital global sobre una red de intercambio internacional basada en la tecnología blockchain (la red Libra).

La criptodivisa Libra será el primer activo digital en ser emitido sobre la red Libra. Este activo estará respaldado en su totalidad por una cesta diversificada de depósitos bancarios, bonos de estados de alta calidad crediticia, y otros instrumentos financieros que aseguren una baja volatilidad en el precio de la divisa. El gobierno de la red, y por tanto de la criptodivisa, estará gestionado por la “Libra Association”, un organismo sin ánimo de lucro formado, al menos inicialmente, por un diverso grupo de miembros fundadores conformado por empresas como Mastercard, Paypal, Visa, Facebook, Ebay, Spotify, etc. De esta forma, Libra pretende ser un intento por conformar una red financiera global sin ánimo de lucro que soporte una divisa digital de baja volatilidad respaldada por un grupo de grandes empresas (y no bancos centrales) que pueda ser utilizada por cualquiera.

Inicialmente, la red Libra consistirá en una red permisionada (solo podrá formarse parte de la red bajo invitación expresa del resto de miembros), aunque su diseño está pensado para que en el futuro la red se pueda abrir a cualquiera (para hacerla realmente global) utilizando un mecanismo de consenso de Proof-of-stake [3]. Esto significa que, aunque cualquier usuario podrá utilizar la red de Libra y enviar transacciones a la red desde sus inicios, solo los miembros de la red (y por tanto de la Libra Association) tendrán derecho a validar transacciones, y así actualizar la información almacenada en la red, hasta que esta no sea abierta con Proof-of-stake a cualquiera.

Con todo esto, Libra pretende minimizar las barreras de entrada al sector financiero impuestas actualmente por bancos y reguladores. Ejecutado de manera correcta, esto puede suponer un auténtico cambio de paradigma para el sector financiero, abriendo la puerta a una nueva generación de empresas fintech y disrupciones del sector financiero.

Desde un punto de vista de negocio, por tanto, Libra implica un auténtico avance, ¿pero es así desde un punto de vista técnico? A lo largo de este artículo trataremos de desgranar en un exhaustivo análisis técnico los distintos componentes de la red Libra para entender que ofrece frente a las tecnologías blockchain ya existentes, y como se va a materializar la visión de Facebook de una red financiera global accesible por todos.

Accesible segunda parte del artículo.

2. Análisis técnico

El presente análisis está basado en la implementación de código abierto de referencia de Libra publicada por su equipo técnico en el Github del proyecto [4]. Esto es una implementación preliminar de la red, por lo que la versión que finalmente sea desplegada durante el próximo año podrá presentar ciertas modificaciones respecto a los conceptos presentados aquí.

El análisis se centrará en los principales conceptos y mecanismos detrás de la tecnología blockchain para así compararlos con las propuestas actuales, a saber, el modelo de datos detrás de Libra, la ejecución de transacciones en la red, el lenguaje de programación soportado sobre la red, su algoritmo de consenso, los protocolos de red que utiliza, y su rendimiento.

a. Modelo lógico de datos

La blockchain de Libra está implementada como una base de datos descentralizada visible por todos los validadores y clientes de la red.

Toda la información en Libra se almacena en una única base de datos (o ledger) versionada. La versión del ledger en un instante de tiempo es igual al número de transacciones ejecutadas hasta ese momento. Cada nueva transacción satisfactoria en la red incrementa en uno el número de versión del ledger. En cada versión, la base de datos está formada por una tupla que representa la transacción específica responsable de la generación de esa nueva versión, el resultado de la transacción, y el estado del ledger tras la ejecución de la transacción.

Ilustremos este mecanismo con un ejemplo: si nos encontramos en la version 3 del ledger y enviamos una transacción a la red, tras ejecutar y validar convenientemente la transacción, el estado de la base de datos de Libra se actualizará a la versión 4 almacenando la siguiente información en su estado (info transacción 4, resultado de transacción 4, estado de la base de datos tras transacción 4). Este modelo de almacenamiento supone un cambio importante respecto a otras tecnologías como Bitcoin o Ethereum dónde la información de la red se agrega y almacena en forma de bloques. Este modelo de almacenamiento del estado de la red en un modelo de base de datos utilizado por Libra se asemeja más al utilizado por tecnologías como Corda.

Cualquier cambio en la base de datos de Libra debe estar disparado por una transacción, y los cambios específicos a realizar por parte de esa transacción sobre un activo se definen utilizando scripts de Move. Move es el lenguaje de programación específico soportado por la red Libra, y como Solidity para los smart contract de Ethereum, o los chaincode de Hyperledger Fabric, permite definir en una transacción los cambios específicos a realizar sobre información almacenada en el ledger.

Finalmente, Libra utiliza un modelo de datos para almacenar información en el ledger basado en cuentas. Esto supone que los estados de la red se almacenan siguiendo un modelo de base de datos de clave-valor que mapea claves de dirección de cuentas con valores pertenecientes a la cuenta. Todos los usuarios de la red se identifican en Libra a través de una de estas claves de dirección, y el tipo de valores que pueden almacenar todas estas direcciones de cuentas de usuarios son, por ejemplo, valores de activos (como el balance en Libras de un usuario), una colección de recursos Move (representa nuevos activos digitales ajenos a la divisa Libra), o un conjunto de módulos Move (consistentes en piezas de código ejecutable para modificar el estado de recursos Move). Este modelo de datos basado en cuentas permite acceder de manera unívoca a todos los usuarios, activos y módulos de la red a través de su dirección.

En la Figura 1 se representa un ejemplo del modelo de datos basado en cuentas de Libra. Los óvalos representan recursos y los rectángulos módulos. Una flecha desde un recurso a un módulo indica que ese tipo de recurso ha sido declarado por el módulo en cuestión. Así, la cuenta 0x12… contiene un balance de Currency.T declarado en el módulo Currency.

Account-based data model - Alfonso de la Rocha Gómez-Arevalillo

Figura 1: Account-based data model.

Al contrario que en Bitcoin o en Corda, Libra no utiliza un modelo de transacción UTXO, dónde la historia de los activos se modela a través del consumo de entradas y salidas; si no que utiliza un modelo basado en cuentas análogo al utilizado por Ethereum, dónde la historia de un activo se determina a través de los cambios producidos sobre una dirección específico en el sistema.

b. Ejecución de transacciones

La única forma de modificar el estado de la base de datos en la red Libra es a través de una transacción.

Son los usuarios de la red los encargados de emitir estas transacciones, y como en muchas otras blockchains, las transacciones en Libra deben ser deterministas (la salida de su ejecución debe ser siempre la misma independientemente de las veces que se ejecute); y hermiticas (toda la información requerida para ejecutar la transacción debe estar disponible en la versión actual del ledger).

Tal y como ocurre en Ethereum y otras redes de blockchain, se utiliza el concepto del gas para regir la demanda de capacidad computacional de la red. Todas las transacciones incurren en un gasto de gas asociado al nivel de congestión actual de la red. Con esto, se pretende reducir la demanda de uso del sistema en escenarios de congestión, el sistema está diseñado de manera que las comisiones de gas sean bajas si la red se encuentra operando a niveles de demanda normales y la capacidad computacional es suficiente, disparándose en el caso de que se detecte un aumento de la demanda. Esto sirve para evitar posibles ataques de denegación de servicio en la red. Todo esto se regula, como en Ethereum, a través del precio y el coste de gas. Así, el coste del gas determina el esfuerzo computacional requerido para ejecutar la transacción, y el precio del gas las comisiones a pagar por cada unidad de gas. De esta forma, si un usuario quiere que su transacción se priorice, y que el tiempo de espera para su validación sea bajo, deberá asignarle un precio de gas alto.

Como avanzábamos en la sección anterior, las transacciones en Libra utilizan scripts de Move para determinar los cambios sobre la base de datos a ejecutar por una transacción. Inicialmente solo están disponibles los módulos Move asociados a la divisa Libra, pero en el futuro se pretende abrir la implementación y el despliegue de nuevos módulos y recursos Move a cualquier miembro de la red, de manera que cualquiera pueda emitir su propio activo digital, y realizar operaciones y transacciones con él.

En Libra, la ejecución de transacciones y la ejecución del ledger se realiza de manera independiente (ver Figura 2). Cuando una transacción es enviada a la red, (i) la primera acción que un nodo validador realiza es verificar que las firmas de la transacción son válidas (es decir, que incluye la firma del emisor de la transacción). (ii) Acto seguido, se ejecuta el código del “prólogo”. El prólogo es un script de Move que autentica al emisor de la transacción, y se asegura que tiene suficiente balance en Libras, y que la transacción no es una copia de una transacción anterior (evitando así ataques de replay [5]). (iii) Una vez el prólogo de la transacción ha finalizado satisfactoriamente, la máquina virtual de Move comprueba que el código a ejecutar por la transacción es correcto (a través de la validación del bytecode de los recursos y módulos de Move involucrados en la misma); (iv) si esta verificación es correcta, la transacción se publica bajo la dirección el usuario emisor de la transacción; (v) y con todo conveniente verificado y publicado la transacción es ejecutada, se realizan las operaciones de escrituras pertinentes, y se emiten cualquier evento asociado a la transacción; (vi) finalmente, la máquina virtual ejecuta el “epílogo de la transacción”, un script Move análogo al prólogo que se encarga de cobrar al usuario el coste de ejecución de la transacción e incrementar el número de secuencia del emisor (esta variable se utiliza para evitar posibles ataques de replay [5])

Transaction execution flow - Alfonso de la Rocha Gómez-Arevalillo
Figura 2: Transaction execution flow.

c. Move: El lenguaje de programación de Libra

Move es un nuevo lenguaje de programación creado para la ejecución de código sobre la red de Libra.

Move está diseñado para permitir (i) la ejecución de transacciones lo más generales y flexibles posibles a través de scripts; (ii) permitir la implementación de código y tipos de datos definidos por usuarios (a través de recursos y módulos); (iii) y soportar la extensibilidad e implementación de configuraciones adicionales en el protocolo de Libra a través de scripts de Move.

En Move un recurso no puede copiarse si no solo moverse. Además, los tipos de recursos solo pueden ser creados y destruidos por el módulo que declaró dicho tipo. Todas estas garantías están aseguradas a través de la máquina virtual de Move, sobre la que se ejecuta todo el código de los scripts de Move. Existe un documento específico [1] dónde se pueden consultar todos los detalles sobre el lenguaje, por lo que no nos extenderemos más al respecto en este análisis (el análisis exhaustivo de Move puede ser objeto de un artículo independiente). De manera muy general, Move puede interpretarse como el Solidity de Libra.

d. Consenso BFT

En Libra, el consenso entre todos los nodos validadores sobre el estado de la base de datos común se adquiere a través de un algoritmo de consenso Byzantine Fault Tolerant (BFT), el LibraBFT.

LibraBFT es un algoritmo de consenso inspirado en otro conocido algoritmo BFT, HotStuff.

Los algoritmos BFT están diseñados para que se pueda alcanzar consenso en el sistema incluso si 1/3 de los nodos de la red son maliciosos, están comprometidos, o fallan en su operación.

El funcionamiento del LibraBFT es el siguiente: cada vez que un validador recibe una transacción de un cliente, lo comparte con el resto de validadores a través de un protocolo de mempool (agregación común de memoria). Este protocolo agrega todas las transacciones pendientes de validación. LibraBFT está basado en rondas, y en cada ronda un validador asume el papel de líder y propone un bloque de nuevas transacciones para emitir un certificado de validez de todas las transacciones anteriores. Estos bloques no representan almacenamiento de información en el ledger, como ocurre en otras tecnologías de blockchain, si no que es una abstracción para representar la agrupación de transacciones e historias.

Cada validador recibe el bloque propuesto por el líder y verifica sus reglas de votación para determinar si debe votar o no el bloque certificado recibido (en función de los cambios propuestos en la transacción en cuestión). Una vez verificada la ejecución de la transacción, cada validador comparte su voto con el líder, y si el número de votos recibidos asegura un consenso BFT (>= 2f +1, dónde f representa el número de nodos fallidos en la red) todos los validadores actualizan su base de datos al nuevo estado.

LibraBFT proporciona seguridad y vitalidad en el modelo de sincronía parcial como ocurre en otras conocidas implementaciones de algoritmos BFT como Casper (Ethereum), y Tendermint (Cosmos, BigchainDB).

e. Protocolos de red

Como cualquier otra tecnología blockchain, Libra requiere de una serie de protocolos de red subyacentes para permitir la comunicación entre todos los nodos del sistema para que (al menos) los nodos validadores sean capaces de alcanzar un consenso.

El protocolo de red sobre el que se implementa la red de Libra está inspirado en el conocido proyecto libp2p.

Libp2p es un proyecto promovido por los creadores de IPFS que implementa un protocolo de comunicación distribuida. Se utiliza en conocidos e innovadores proyectos del ecosistema blockchain como Parity Substrate o IPFS.

La capa de comunicación de Libra implementa conocidos mecanismos del campo de los sistemas distribuidos como el Multiaddr para el direccionamiento de dispositivos, el uso de un sistema de mensajería segura sobre TCP, Noise para autenticación y cifrado punto a punto, Yamux para la multiplexación de distintos flujos de comunicación sobre una misma conexión, o protocolos de gossiping para el descubrimiento de dispositivos.

La autenticación de nodos en la red se realiza mediante el mismo servicio utilizado por los scripts de validación. Un smart contract en la red almacena todas las claves públicas de los nodos con permiso de acceso en la red, y esta información es utilizada para autenticar a los nodos. Cualquier cambio en el estado de un nodo validador se refleja en este smart contract, de manera que, para unirse a la red de validadores, la clave pública del nuevo validador deberá ser incluida en este smart contract (resolviéndose así el permisionado en la red).

f. Rendimiento

Una de las principales limitaciones actuales de las redes blockchain es su rendimiento. Todavía es pronto para determinar si la red de Libra será capaz de acomodar toda la carga que pueda tener en producción, y todavía no se ha publicado ninguna evaluación de rendimiento formal de la implementación de referencia. No obstante, y tal y como se describe en su whitepaper [2], Libra ha sido inicialmente diseñado para soportar como mínimo 1000 transacciones por segundo con un tiempo de finalidad de transacción de 10 segundos (unos valores mucho más ambiciosos de los planteados actualmente por tecnologías como Ethereum, Bitcoin o Hyperledger Fabric).

De acuerdo con las estimaciones iniciales del equipo técnico, los nodos validadores requerirán un ancho de banda de 40 Mbps, una CPU capaz de soportar 1000 verificaciones por segundo, y un sistema de almacenamiento SSD de, preferiblemente, alrededor de 16TB para soportar la carga anteriormente planteada. Esto no parecen unos requisitos excesivamente preocupantes para ninguno de los miembros iniciales de cara a soportar la carga inicialmente planteada en los nodos validadores.

3. Preguntas abiertas

Tras este análisis, se nos plantean algunas preguntas no tratadas en la implementación técnica de referencia de Libra, pero que sería interesante conocer de cara al despliegue productivo de la red:

  • Ahora mismo los únicos recursos de Move disponibles en la red de Libra son los asociados a la divisa de Libra, pero ¿de qué van a ser capaces los desarrolladores cuando se permita el despliegue e implementación de otros recursos y módulos de Move? ¿Quién tendrá permiso para desplegar y hacer uso de estos nuevos recursos desplegados sobre la red? El que cualquier usuario, y no solo los nodos validadores, sea capaz de desplegar sus propios recursos y módulos Move otorgaría gran flexibilidad y potencia al sistema.
  • Inicialmente Libra se plantea como una red permisionada que eventualmente se convertirá en una red abierta basada en Proof-of-stake pero, ¿cómo se realizará esta transición? ¿Cómo funcionará o evolucionará el permisionado en la red antes de que la red se abra de manera completa? ¿Será necesario algún tipo de KYC o AML para poder empezar a formar parte o utilizar la red una vez esta se regule convenientemente? (Actualmente este no es el caso).
  • Y relacionado con la privacidad, ¿se plantea algún tipo de mecanismo de privacidad en la red? En la implementación actual todas las direcciones de usuarios y las transacciones son públicas, por lo que cualquiera puede ver lo que está ocurriendo en la red, ¿va a ser esto siempre así?
  • Otra de las grandes limitaciones para la adopción masiva de la tecnología blockchain ha sido siempre la experiencia de usuario, ¿cómo espera Libra resolver problemas como la pérdida de claves por parte de usuarios, el uso de wallets, o la necesidad de gas para la ejecución de transacciones por parte de los usuarios?
  • Finalmente, y relacionado con el rendimiento, ¿se espera la implementación de algún protocolo de nivel 2 o mecanismos de escalabilidad sobre Libra para tratar de incrementar la carga soportada por la red? Si Libra aspira a ser una red global, tal y como plantea Facebook, deberá ser capaz de soportar una gran carga para la que, probablemente, esta tecnología no esté todavía preparada.
    Estos son algunos de los interrogantes técnicos que, presupongo, deberán ser resueltos en el corto plazo para que Libra pueda ser una tecnología productiva. Os invito a tratar de encontrar respuestas viables a estas preguntas e incluso a proponerlas dentro de los foros de desarrollo de Libra (Libra es un proyecto de código abierto por lo que cualquiera puede contribuir).

4. Conclusiones

Tal y como se ha podido ver a lo largo de todo el análisis, Libra no plantea una gran disrupción o innovación desde un punto de vista técnico respecto a las tecnologías actuales. Todos los conceptos presentados en la implementación de referencia de Libra ya han sido estudiados y probados en mayor o menor medida por otras propuestas tecnológicas de blockchain. No obstante, Libra agrega de manera muy elegante y en una misma propuesta tecnológica todos los mecanismos que han demostrado funcionar en otras plataformas, implementando así una propuesta solvente y capaz de cumplir las ambiciosas promesas planteadas para el proyecto desde la dimensión de negocio.

Referencias

[1] Blackshear, S., Cheng, E., Dill, D. L., Gao, V., Maurer, B., Nowacki, T., … & Zakian, T. Move: A language with programmable resources.

[2] Amsden, Z., Arora, R., Bano, S., et. al. The Libra Blockchain.

[3] Frankenfield, J. (2019). Proof of Stake (PoS). Investopedia. https://www.investopedia.com/terms/p/proof-stake-pos.asp. Último acceso: 12 de abril 2020.

[4] GitHub. Libre. https://github.com/libra/libra. Último acceso: 12 de abril 2020

[5] Syverson, P. (1994). A taxonomy of replay attacks. NAVAL RESEARCH LAB WASHINGTON DC.