Flow (FLOW) es un proyecto y token blockchain centrada en ofrecer una alta velocidad de operación y capacidades avanzadas de smart contracts pensados especialmente para el mundo de las DApps, juegos y el mundo DeFi.
Uno de los nuevos proyectos de criptomonedas que está tomando gran impulso en estos momentos es conocido como Flow. ¿La razón? Flow es una blockchain diseñada de principio a fin con el objetivo de ser integrada en juegos y aplicaciones, con lo que es una red blockchain de alta velocidad y una arquitectura modular extremadamente flexible para el desarrollo.
Origen e Historia de Flow
La historia de Flow es una historia relacionada con el boom de las DeFi y las DApps, sobre Ethereum (ETH). A principios de 2018, cuando el mercado aún estaba en alza, Ethereum comenzó a experimentar los límites de su capacidad. Esto le dijo al mundo lo limitada que es su infraestructura para la masificación de la tecnología blockchain, la Web 3.0 y el mundo de las DApps. Si bien, ya se preparaba el desarrollo de Ethereum 2.0, esta era una promesa a futuro. Una situación que originaba un grave problema y muchos quebraderos de cabeza para los desarrolladores de proyectos blockchain.
Pero, como en toda crisis, siempre hay nuevas oportunidades. En ese sentido, la comunidad no se quedó de manos cruzadas, y uno de esos actores es Dapper Labs, empresa conocida por crear la famosa DApp de CryptoKitties. Fundada en 2018, en la ciudad canadiense de Vancouver, Dapper Labs comenzó un interesante proyecto que buscaba dejar atrás de una vez por todas las debilidades de blockchain como Ethereum y, al mismo tiempo, superar sus capacidades, incluso las de las novedades que vendrían con Ethereum 2.0.
La puesta en marcha del desarrollo de Flow comenzó el 15 de agosto de 2019. Fue en ese momento, cuando se realizó la primera venta privada de tokens FLOW. Una venta en la que se colocaron un total de 112 millones de tokens FLOW, a un precio de 0,1 $ por token, para un total acumulado de 11,2 millones de dólares. Estos fondos serían el inicio del desarrollo de FLOW y toda su gran historia.
La presentación de los white paper y el inicio del desarrollo
Tras el éxito de esta primera venta de tokens, en septiembre de 2019, Dapper Labs daba su primer paso al frente con este proyecto presentado el primer white paper de Flow. Bajo el nombre de Flow: Separating Consensus and Compute, este primer white paper sentaba las bases de una nueva forma de hacer funcionar a la tecnología blockchain, revolucionando así dicha tecnología. Sin embargo, este no sería el único white paper liberado, sino que se le unirían dos documentos adicionales demostrando como funciona este proyecto. Estos documentos conocidos como Flow: Execution Verification y Flow: Block Formation and Execution, serían también vitales para demostrar el funcionamiento de la futura red.
Con la publicación de sus white papers comenzó la creación de su software para hacer realidad lo allí plasmado. Esto incluye la implementación del protocolo, la creación del software de los nodos, la integración de su algoritmo de consenso, primitivas criptográficas y más. El trabajo rindió sus frutos en mayo de 2020 cuando finalmente, Dapper Labs hizo público el lanzamiento de su versión beta.
El trabajo continuó y el 6 de agosto de 2020, se realizó otra venta privada de tokens por un total de 134 millones de tokens FLOW, a un precio de 0,1 $ por token y un total 13,4 millones de dólares acumulados. Esta segunda ronda de financiación ha sido usada para acelerar el desarrollo del sistema que en ese momento aún se encuentra en fase beta. Un mes después, exactamente el 22 de septiembre de 2020, se realizó una venta comunitaria de tokens por un total de 60 millones de tokens FLOW, con un valor de 0,1 $ por token y un acumulado de 8,5 millones de dólares, lo que demuestra la confianza de la comunidad en este proyecto.
De momento, Flow aún continúa siendo un proyecto en desarrollo. Su Layer 1, o capa principal aún está inacabada, pero esto no ha limitado al proyecto a poner en marcha potentes aplicaciones descentralizadas sobre su red. De hecho, en la actualidad es posible enviar y recibir criptomonedas, crear DApps, tokens fungibles y tokens no fungibles (NFT), así como marketplaces. Esto ha catapultado el precio del token FLOW desde unos impresionantes 0,1 $ (en su momento de venta inicial) hasta los más de 30 $ en los primeros meses de 2021.
Entendiendo cómo funciona Flow
Ahora bien ¿Qué hace realmente única a la blockchain de Flow? Pues bien, en primer lugar, debemos decir que Flow usa una visión completamente distinta a la que hemos visto de momento en otras blockchain.
El funcionamiento general de una blockchain actual
Por ejemplo, en Bitcoin (BTC) y Ethereum, la computación de transacciones y el logro de un consenso dentro de la red, es un trabajo que va de la mano. Cada transacción en la red es agregada a un bloque, se genera un hash para dicho bloque, se valida el trabajo, se computará el mismo a nivel de nodos (se ejecutan los scripts y smart contracts) y finalmente llega a la blockchain mostrando los resultados de dicho esfuerzo. Repite el proceso con cada bloque y tienes, en resumen, el funcionamiento de una blockchain actual. Todo este esfuerzo es lineal y homogéneo, lo que limita en muchas formas la escalabilidad de la red.
Este sistema funciona muy bien, ha sido largamente probado y es seguro. Los intentos de la comunidad actual sin embargo, buscan paralelizar dicho sistema. Es decir, mantener la misma linealidad, pero dividiendo el trabajo en varias instancias, para que al final todo se reensamble y el resultado final sea el mismo. Con esto, se mantiene un esquema seguro (lineal y homogéneo), pero al dividirse el trabajo entre varios, el trabajo se realiza mucho más rápido, ganando escalabilidad y velocidad. Sin embargo, esto hace que los sistemas sean más complejos (si eres programador sabes el dolor de cabeza que un “thread” o “hilo de ejecución” puede causar en ciertas condiciones) y la escalabilidad aún tiene límites.
Un cambio drástico en las reglas
Pero Flow, cambia radicalmente esto. Para ello, los desarrolladores de Flow han creado un sistema en el que pueden coexistir diversos roles, roles que son llevados a cabo por sus nodos, cada uno de ellos con un objetivo bien específico. Esto permite dividir las tareas entrantes (las transacciones que envías) en formas únicas, de tal forma que resulta más sencillo atenderlas.
Así, por ejemplo, si una transacción interactúa con un smart contract avanzado (ej: una interacción con una DApp), dicha transacción se divide en dos partes: la primera, donde está la metadata de la transacción (quien la envía, direcciones, y demás). Y, la segunda, la interacción con el smart contact como tal, el cual debe ser invocado (desde su dirección), ejecutado y ofrecer una respuesta a nuestro usuario (que es visible en la blockchain). Adicional a esto, todo este proceso debe verificarse, cumplir con las reglas de consenso y finalmente ser incluido en la blockchain. Si estuviéramos en Ethereum, estas tareas se realizan de forma lineal (de forma lenta y costosa).
Pero en Flow, la primera y segunda parte van a un tipo de nodo (llamado Nodo de Ejecución), mientras que las tareas de consenso, verificación y almacenamiento son asignadas a tipos de nodos específicos para cada tarea. Como cada uno de estos puntos requiere de un trabajo computacional específico (algunos requieren más potencia que otros), dividir el trabajo hace que al final atender grandes volúmenes de información sea más sencillo y rápido de hacer ¿Resultado? Flow ha creado una red blockchain de funcionamiento heterogéneo (con nodos asignados para distintos roles), con paralelismo y una escalabilidad que crece con el número de nodos dentro de la red.
¿Quieres una explicación más sencilla que esta? Míralo de la siguiente manera, no es lo mismo tener un restaurante en el que ocupes todas las posiciones (desde chef, pasando por mesero, hasta cajero), que contar con un equipo que te apoye en cada tarea, y especialmente, si tu restaurante tiene una gran demanda y afluencia de comensales. Lo primero, sería el sistema actual de muchas blockchain, mientras que lo segundo, sería Flow.
Explorando a fondo el funcionamiento de Flow
Ahora que conocemos como funciona de forma general Flow, es bueno conocer como lo hace realidad. En primer lugar, Flow es un proyecto con una arquitectura multifunción pensada en la divisibilidad de asignaciones y tareas. Esto es esencial, porque la arquitectura de red de Flow, si bien es compleja, es mucho menos problemática que otras opciones como el caso de Lightning Network, Plasma o el sharding de Ethereum 2.0. Dicho esto, primero exploremos cómo se dividen sus nodos y cuáles son sus roles.
Nodos dentro de Flow
En Flow, como ya mencionamos, existen diferentes roles y tipos de nodos, cada uno especializado o dedicado a una tarea específica dentro de la red. Entre estos tipos de nodos tenemos:
Nodos de Recolección
Los nodos de recolección son nodos que cuentan con un gran ancho de banda, los cuales se agrupan en clúster y que cooperan entre sí. La tarea de estos nodos es administrar el grupo de transacciones y recopilar transacciones bien formadas para proponerlas a los nodos de consenso. Es decir, tienen una funcionalidad muy parecida a lo que sería la mempool de nodos como los de Bitcoin o Ethereum.
Las transacciones dentro de Flow se asignan a un clúster determinado de forma pseudoaleatoria mediante el hash de transacción. Así, una transacción bien formada debe incluir credenciales del nodo de recolección que almacena dicha transacción.
Para lograr esto, estos nodos toman cada transacción bien formada y aplican un hash al texto de esa transacción, además agregan una firma a la transacción para indicar dos cosas: primero, que está bien formada; y segundo, que se comprometerá a almacenar el texto de la transacción hasta que los nodos de ejecución hayan terminado de procesarlo. Cada grupo recopila transacciones, las reúne en colecciones y envía una garantía de colección firmada por una gran mayoría del grupo a los nodos de consenso.
Así ya tenemos un primer espacio donde se clasifican las transacciones de una forma tal que el paralelismo en la ejecución es posible prácticamente sin riesgos. Adicional a esto, para convertirte en un operador de nodo de recolección debes hacer un staking de mínimo, 250 mil FLOW, ganando comisiones por tu buen trabajo en todo momento. Sí, Flow es una red que usa un derivado del protocolo Proof of Stake (PoS).
Nodos de Consenso
Este segundo tipo de nodos se encargan de formar y proponer bloques respetando las reglas del protocolo de consenso HotStuff de Flow. El trabajo de los nodos de consenso comienza con la validación de los hashes de las colecciones de transacciones enviadas por los nodos de recolección. En este punto, verifican que dichas colecciones hayan sido aceptadas por la mayoría del clúster de recolección a la que la transacción fue asignada.
Una vez se realiza esta verificación, los nodos de consenso comienzan con la creación de los bloques y finalizan el proceso por medio de una votación. En este punto, mientras más nodos participen, mayor será el nivel de descentralización de la red y su seguridad. En este punto, el protocolo HotStuff ha limitado la participación a 100 votantes, pero dichos votantes son elegidos de forma aleatoria dentro del grupo de nodos de consenso disponible, la idea tras esto es mantener la mayor participación posible dentro del sistema sin restar velocidad. Los desarrolladores de Flow aún están trabajando sobre la posibilidad de aumentar este número, pero de momento el esquema usado es seguro.
Para evitar ataques al sistema (las conocidas “fallas bizantinas”), los nodos de consenso tienen unos requisitos de ejecución bastante pequeños, por lo que no se requieren de potentes equipos para tener un nodo de consenso. Además, el uso de ancho de banda es pequeño también, lo que evita la necesidad de tener conexiones de Internet ultrarrápidas. Sin embargo, quizás un punto en contra es que, para ejecutar un nodo de consenso se necesitan de 500 mil FLOW en staking, lo que al precio actual son aproximadamente, 15 millones de dólares, lo que lo convierte en un nodo bastante costoso en comparación con otras redes.
Nodos de Ejecución
El papel de los nodos de ejecución es bastante claro: ejecutar transacciones, mantener el estado de ejecución, un almacén de datos verificable criptográficamente para todas las cuentas de usuario y estados de contratos inteligentes, así como de responder a las consultas relacionadas con él. Son en palabras más sencillas, las neuronas de lo que vendría a ser el cerebro de Flow.
El trabajo de los nodos de ejecución comienza cuando estos reciben los datos de las transacciones que vienen de los nodos de recolección. En dichas transacciones, están las operaciones de transacción sencillas, como los smarts contracts a ser ejecutados, y todo ello es computado por los nodos de ejecución. La salida producida por los nodos de ejecución es luego verificada por los nodos de validación.
Debido a que son el epicentro del procesamiento de datos de Flow, los nodos de ejecución requieren de equipos con cierto nivel de potencia computacional. De hecho, a mayor potencia, más rápida será la ejecución de todo este trabajo computacional necesario. En este punto, Flow deja algo muy en claro: puede escalar usando números (más nodos dentro de la red) o usando hardware más potente (que ejecuta todo más rápido). La unión de ambas ventajas es lo que permite que Flow tenga una escalabilidad envidiable frente a otras blockchains.
Para evitar las trampas, los nodos de ejecución deben generar un hash por cada salida de un trabajo generado. Así, cuando los nodos de ejecución terminan con la colección de transacciones recibidas desde los nodos de recolección, estos revelan el hash, lo incluyen en los datos que son enviados a los nodos de consenso, y de allí a los nodos de verificación.
Por último, cualquier trampa en este punto puede ser detectada (usando el hash relacionado con la salida de datos) y de hacerlo, se castiga al nodo en cuestión. Un castigo en este tipo de nodo tiene un importante peso económico, en especial cuando pensamos en el costo de instalar un nodo de ejecución, para el que se debe realizar un staking de 1.250.000 token FLOW (38,75 millones de dólares).
Nodos de Verificación
Estos nodos tienen la tarea de confirmar la corrección del trabajo realizado por los nodos de ejecución. Los nodos de verificación individuales sólo verifican una pequeña cantidad del cálculo total, pero colectivamente verifican cada cálculo muchas veces en paralelo. Así logran verificar los recibos de ejecución proporcionados por los nodos de ejecución y emiten aprobaciones de resultados. Un algoritmo de clasificación determina qué partes del recibo de ejecución de los nodos de ejecución debe consultar el nodo de verificación para comprobar que se calcularon correctamente.
En última instancia, estos nodos mantienen honestos a los nodos de ejecución; este equilibrio de poder mantiene los criterios de acceso, seguridad y verificabilidad de la descentralización. Es altamente tolerante a fallas bizantinas porque incluso si hay una cantidad sustancial de errores bizantinos en el grupo de nodos de verificación, los nodos de consenso aún deben aprobar que las transacciones que firmaron fueron revisadas por una cantidad crítica de la red.
Para ejecutar un nodo de verificación es necesario realizar un staking de mínimo de 135.000 tokens FLOW (aproximadamente 4,185 millones de dólares)
Nodos de Acceso
Los nodos de acceso son los que permiten enviar y recibir transacciones dentro de la red Flow y sus distintos nodos. Son por decirlo de una forma, las autopistas que interconectan los nodos de Flow. La idea es que esta red sea lo suficientemente grande como para que cualquier persona, en cualquier parte del mundo pueda acceder a los recursos de Flow y hacer uso de ellos. Sin embargo, no realizan ninguna otra tarea. Estos nodos además son de fácil instalación, y no requiere de ningún stake para su funcionamiento.
Cadence, un lenguaje de programación potente y muy sencillo
El lenguaje de programación Cadence, es un lenguaje de programación nativo para smart contracts dentro de Flow. Su objetivo es ser un lenguaje sencillo, legible, orientado a recursos y seguro.
Un dato curioso de Cadence, es que es uno de los primeros lenguajes de programación orientados a recursos, y la idea surgió de un proyecto que muchos en la comunidad quizás aborrezcan un poco: Libra de Facebook (ahora Diem, y en el futuro quien sabe que nombre tendrá).
Cadence, se cero usando una aproximación al lenguaje de programación Move, usado en Libra. Move, fue un avance bien recibido, la comunidad elogio sus capacidades y oportunidades, y aprovechando eso, Dapper Labs, tomo lo aprendido y lo aplico en Cadence.
Así, Cadence es un lenguaje capaz de representar la propiedad de los activos y las propiedades de los activos digitales directamente en el lenguaje de programación. Esto es especialmente útil, porque elimina la necesidad de reflejar tales propiedades en un smart contract, y en su lugar, al ser definidos, el lenguaje de programación se encarga de hacer esto de forma automática y nativa. Con ello se elimina mucho trabajo intermedio de programación, se evitan errores, y se crean smart contracts más seguros.
Contratos Inteligentes Actualizables, otro gran avance en Flow
Otro de los avances de Flow es su capacidad para actualizar smart contracts. Esto quizás te parezca raro, pero actualizar un smart contract en redes como Ethereum, es realmente un dolor de cabeza. “Actualizar” en estas redes en realidad es crear un nuevo smart contract, y cambiar toda la estructura de la DApp para que apunte al nuevo smart contract en su nueva dirección. Esto genera problemas de toda índole, y resulta muy molesto tanto para usuarios como para los desarrolladores.
Para solucionar esto, Flow permite el despliegue de los smart contracts de tal manera que estos pueden ser actualizados de forma incremental. Así, los desarrolladores pueden enviar mejoras al smart contracts que automáticamente generan una nueva versión del mismo que será visible para los usuarios. Los usuarios por su parte tienen la capacidad de elegir si confiar o no, en una determinada versión del smart contract. Y, de hecho, una vez que un usuario confía en una versión de ese smart contract, cambiar la misma requiere de una acción específica por parte del usuario.
Este sistema equilibra las necesidades de los usuarios de estar informados sobre el tipo de código con el que están tratando. Y, al mismo tiempo, permite a los desarrolladores la flexibilidad de ajustar su código por un tiempo limitado después de su publicación.
HotStuff, un protocolo de consenso veloz
Otra de las mejoras de Flow es su protocolo de consenso HotStuff. Aquí en Bit2Me, hemos hablado de protocolos de consenso rápidos, como PoET (quizás el protocolo más rápido del mundo blockchain), PoA, PoW, DPoS o PoS. Sin embargo, HotStuff es quizás el único protocolo de consenso capaz de medirse frente a frente al protocolo PoET.
HotStuff es un protocolo que comenzó su desarrollo en 2018, y que fue presentado finalmente en julio de 2019, por sus desarrolladores Maofan Yin, Dahlia Malkhi, Michael K. Reiter, Guy Golan Gueta y Ittai Abraha, todos estudiantes de la Universidad de Cornell. La idea tras HotStuff es crear un protocolo BFT rápido, seguro y escalable.
Para lograr esto, HotStuff funciona como un sistema de resolución del problema SMR (State Machine Replication). Este problema indica que un conjunto de máquinas deberían ser capaces de resolver los “comandos” enviados a sus sistemas, de forma tal que ese conjunto de máquinas, tomen una pequeña parte del trabajo, lo computen, repliquen el mismo, y el resultado final, sea el trabajo completado sin errores en el proceso de verificación global del sistema.
Para lograr esto, HotStuff implementa una solución de computación distribuida (como el protocolo de consenso de cualquier blockchain) que es resistente a fallas bizantinas. ¿Lo nuevo? HotStuff es extremadamente eficiente logrando ese trabajo, hasta el punto en que el consenso usando este sistema puede ser alcanzado en 0,1 segundos, y comenzar la validación en réplicas, en tan solo 5 ms.
Esto lo podemos ver en práctica en Flow, de hecho, te sorprenderá que el tiempo de producción de bloque de Flow es de 1 segundo. Es decir, cada segundo, Flow está generando un bloque, el cual da respuesta a un conjunto bien definido de transacciones de la red, de esta forma, la validación de transacciones es casi instantánea, y el sistema puede servir fácilmente a miles de usuarios sin problemas.
Características del proyecto
- Arquitectura multi-nodo nativa. El diseño de Flow es unico, permitiendo que la red se amplíe para servir a miles de millones de usuarios sin alterar o reducir la descentralización del consenso.
- Programación orientada a los recursos. Los contratos inteligentes en Flow están escritos en Cadence, un lenguaje de programación más fácil y seguro para los activos y aplicaciones cripto. De hecho, la legibilidad de Cadence frente a Solidity, JavaScript o Python, es uno de los principales puntos a favor del mismo, recibiendo elogios por ello.
- Ergonomía del desarrollador. Flow cuenta con características únicas pensadas para los programadores. Comenzado con el hecho de que sus smart contracts son actualizables, hasta el soporte de registro incorporado al Emulador de Flow, con el fin de hacer más sencilla la labor de desarrollo.
- Integración del consumidor. Flow se diseñó para los consumidores convencionales, con pasarelas de pago que fijan un camino seguro y de baja fricción desde el dinero fiat hasta la criptomoneda.
- Sin necesidad de sharding para escalar. Una de las grandes ventajas de Flow es que, para su escalabilidad, no es necesario aplicar sharding en la red. Esto hace mucho más sencillo el desarrollo de la blockchain, evitando problemas en la generación de un registro de transacciones final coherente.
Sin embargo, la que quizás sea la característica más llamativa de Flow, va dirigida al público y al fácil uso de la tecnología blockchain. Esta característica es la capacidad de crear cuentas inteligentes de usuarios. Esta es una capacidad nativa de Flow que permite crear una cuenta unida a un smart contract dentro de la red. Con ello se busca un control de acceso a la cuenta más automatizado y seguro, especialmente bajo ciertos criterios de uso online de dichas cuentas.
Pero, quizás el mayor pro de esto es que, con este sistema es posible deshacerte de las seed phrase o claves para recuperar el control de una cuenta. De hecho, si pierdes acceso a una cuenta, solamente deberás iniciar el proceso de recuperación de la misma, según ha sido programado.
Distribución de tokens
La distribución de tokens en Flow está dividida en tres etapas. La primera comenzó con el inicio de la beta de la red mainnet, el 15 de mayo de 2020. En este punto, la era operada sin necesidad de tokens o hacer staking, lo que permitía a los early adopters de la red, ejecutar cualquier tipo de nodo con un sencillo pago en fiat (usando tarjeta de crédito/débito) u otras criptomonedas.
La segunda etapa comenzó el 1 de octubre de 2020, con la creación de 1,25 mil millones de tokens FLOW. En ese momento se pusieron en circulación todos los tokens FLOW que fueron vendidos en las tres ventas anteriores (dos privadas, una comunitaria). Para evitar manipulaciones de precio, la emisión se realizó con un lock de fondos, evitando que se genere un alud de mercado que afectará negativamente el proyecto y sus primeros compradores del token. El lock de fondos es por dos años.
En la gráfica se puede ver cómo se distribuyeron los 1,25 mil millones de tokens generados.
Finalmente, la tercera fase es donde comienza el sistema de recompensas por staking. Este sistema dio inicio el 15 de diciembre 2020. La idea es que para dentro de dos años (comenzando desde 1 octubre de 2022) se hayan distribuido un total superior a los 800 millones de tokens adicionales a los 1,25 mil millones ya creados. Ciertamente, este es un alto nivel de inflación en un periodo de tiempo tan corto. Pero, la idea de esto es fomentar el uso del sistema, y luego sostenerlo en base a las capacidades del mismo.
Además, vale destacar que de esos 1,25 mil millones de tokens creados inicialmente, se desbloquearán en distintos tramos de tiempo. La finalidad de este proceso es el de evitar derribar el valor del token con una saturación de mercado.
Futuro del proyecto
Flow es un proyecto con mucho que hacer para declararse fuera de su beta. Y, sin embargo, destaca como uno de los proyectos blockchain más potentes de la actualidad. Dapper Labs sigue desarrollando activo este proyecto y, de hecho, se ha hecho con una fuerza enorme para lograrlo, no solo financiera, sino también de usuarios empresariales que apuestan fuertemente por su tecnología. En ese sentido, es mucho lo que seguramente nos queda por ver de Flow y, muchas de esas cosas, serán buenas noticias.