Lima, Perú
+5113014109

¿Qué es Flow? Una blockchain para DApps de alta velocidad

¿Qué es Flow? Una blockchain para DApps de alta velocidad


Flow no funciona como la mayoría de las blockchain que conocemos. De hecho, lo único de su funcionamiento en común con otras blockchain es el uso de un protocolo de consenso y una red de nodos, del resto, bien podemos decir que Flow es un mundo alienígena. 

En primer lugar, Flow se aleja de las construcciones monolíticas y monotareas de los nodos. Por ejemplo, en Bitcoin, los mineros solo pueden minar bloques, su tarea es esa y nada más. Mientras que los nodos velan porque los bloques generados cumplan con las reglas generales del protocolo para que sean aceptados e incluidos en la blockchain. Este modelo ha sido probado y es seguro, pero tiene un problema: es lento. Para reconocer el problema basta con ver que Bitcoin y las blockchain derivadas que usan este modelo no son rápidas, e incluso, usando protocolos como PoS, la velocidad final es limitada.

 

https://lh3.googleusercontent.com/tKkkgRXHEtl5pXs9V_Rwcy7sJ-HQKtI0rUJhYZHg-hEBlwWZdgk2Kz4xW5hKG2GhR2aELa-i611HKBRzyDb9MvQ0lJPVfL01OmOkn2EpRHU3A5G8m3TRBMkegew6gw

Un cambio de paradigma

Sin embargo, Flow cambia radicalmente esto. Para ello, Flow crea nodos con roles muy específicos, y los une por medio de una red de comunicación asincrónica. De esta manera, los nodos pueden dedicarse a sus tareas específicas, enviar y recibir mensajes entre sí, y al terminar, generan un bloque, mientras continúan con la generación del siguiente.  El cambio con respecto al modo tradicional, es que los roles permiten a los nodos de Flow dividir el tratamiento de las transacciones. 

Así, la validación, ejecución y generación de bloques, se realizan en forma asincrónica en sus respectivos nodos, y cuando todo se ha completado, el bloque de transacciones se puede considerar como ejecutado, a la vez que no se abandona con el procesamiento de las próximas transacciones y bloques.

Una comparación muy sencilla para entender esta diferencia es la siguiente: imagina que intentas resolver 1000 ejercicios de matemáticas. Si usas el modelo tradicional blockchain, este te pedirá que realices ejercicio por ejercicio. Mientras que, si usas el modelo de Flow, puedes tomar esos 1000 ejercicios, dividirlos entre tus ayudantes, resolverlos en paralelo, y al final emitir sus resultados en orden.

Este modelo de red diseñado por Flow se conoce como red heterogénea de alta paralelismo, y es la clave de su altísima velocidad, rendimiento y escalabilidad prácticamente ilimitada. 

Nodos dentro de Flow

La heterogeneidad de Flow, proviene de los roles que sus nodos pueden ocupar. En tal caso, Flow ha creado los siguientes tipos de nodos:

Recolección

Los nodos de recolección tienen como tarea recopilar y administrar las transacciones que se realizan en la red. Esta es una tarea que exige un alto ancho de banda, ya que son los responsables de enviar y recibir mensajes a la red, y sincronizar el funcionamiento del resto de nodos para procesar las transacciones que tienen lugar en Flow. 

Para maximizar la eficiencia de esta tarea, los nodos de recolección son capaces de agruparse en subredes y cooperar entre ellos. Esto tiene un fin muy claro: hacer que las transacciones tratadas por un clúster, no sean tratadas por otro clúster, y se generan así, problemas como el doble gasto entre otros. En pocas palabras, los nodos de recolección clasifican las transacciones, las marcan con un hash y se aseguran de que las mismas solo puedan ser procesadas por el resto de nodos conectados a ese clúster en específico. 

Consenso

Los nodos de consenso tienen la tarea de formar y proponer bloques respetando las reglas del protocolo de consenso Flow. Para realizar esta tarea, los nodos de consenso conectados a un clúster de recolección, requieren a las mismas transacciones que están a la espera de ser procesadas. 

Una vez reciben estas transacciones, comienzan con el proceso de verificación y votación del bloque generado. Cuando el umbral de votaciones para aceptar el bloque es alcanzado, los nodos de consenso firman el bloque y emiten su veredicto como bloque finalizado. 

Ejecución

Los nodos de ejecución son los encargados de ejecutar las instrucciones que se encuentran dentro de las transacciones. La computación de estas instrucciones se hace en paralelo, aprovechando las ventajas del lenguaje de programación usado en los smarts contracts de Flow, y la libertad operacional que brinda el rol de nodo de ejecución. 

El trabajo de estos nodos depende en un principio de la información de los nodos de recolección y nodos de consenso. Si una transacción se encuentra aprobada por un nodo de recolección y pasa a un nodo de consenso para ser incluida en el próximo (o próximos bloques), entonces los nodos de ejecución comienzan a computar sus instrucciones para saber el estado final de esas instrucciones. Si las operaciones son válidas, entonces el estado final será válido, pero en caso de que falle o se viole alguna regla del sistema, el estado de la ejecución fallará. En todo caso, los nodos de ejecución sólo calculan estos estados sin que ellos modifiquen de alguna manera la información de la blockchain.

Una vez terminado el trabajo de los nodos de validación, el estado final de la ejecución se envía a los nodos de consenso, junto con una pequeña prueba de verificación que es incluida en la información de ese bloque, para que pase al último nivel.

Una ventaja de usar este sistema es que los nodos de ejecución son decisivos en la escalabilidad. De hecho, mientras más potente sea el hardware de un nodo de validación, más rápido computará las transacciones. Así, este modelo permite que Flow pueda escalar de forma exponencial, porque al agregarse nuevos nodos y estos sean más potentes, más rápida podrá ejecutar estas instrucciones y mayor velocidad tendrá la blockchain.

Validación

Los nodos de validación tienen una tarea muy sencilla y específica: revisar que el trabajo de los nodos de recolección, consenso y ejecución haya sido realizado de forma correcta. Para ello, los nodos de validación verifican los hashes generados por cada uno de los nodos anteriores y con la aceptación de los mismos, pueden estar seguros de que el trabajo ha sido realizado de forma correcta. En este punto, los nodos de validación envían a la red la notificación de un bloque recién generado, y se prosigue con la revisión del próximo bloque.

HotStuff, orquestando el funcionamiento de la red

El nombre de HotStuff es con el que se conoce al protocolo de consenso de Flow, y está construido de principio a fin, para ser muy rápido. 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. 

De hecho, si conoces Libra de Facebook y has leído sus whitepaper, verás que HotStuff es el protocolo de consenso usado para este proyecto. Dicho protocolo usa un un sistema de resolución del problema SMR (State Machine Replication) para su funcionamiento. Este problema indica que, un conjunto de máquinas debería ser capaz 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. Esta es precisamente la base del funcionamiento heterogéneo y paralelo de la red Flow, y es completamente resistente a fallas bizantinas, asegurando así la seguridad de la red frente a distintos problemas. 

Pero cuando hablamos de que HotStuff es rápido, ¿A qué tan rápido nos referimos? Pues bien, HotStuff en Flow puede pasar de recolectar transacciones a comenzar su validación, en apenas 5 ms, y terminar el proceso de producción, en menos de 1 segundo. De hecho, 1 segundo es el tiempo de producción real, pero se ha llevado a 2,5 segundos para mantener una mejor sincronización a nivel de red. 

Cadence y smarts contracts en Flow

Cadence es el nombre con el que se conoce al lenguaje de programación para smart contracts de Flow. Este lenguaje es un derivado directo del lenguaje Move, el mismo que fue desarrollado por la empresa Facebook para su criptomoneda Libra. Su principal ventaja es que es un lenguaje dirigido a recursos, que es capaz de representar accesos a smarts contracts, propiedades o funciones on-chain de forma completamente nativa. 

Esto permite, por ejemplo, que Flow pueda crear smart contracts autoactualizables. Es decir, puedes enviar un smart contracts a la red Flow, y en caso de que quieras actualizarlo, puedes hacerlo gracias a un sistema de versiones incremental. Así, el desarrollador puede liberar en la red una versión, y en caso de corregir algún error, liberar la siguiente versión con la corrección, que rápidamente será asignada al resto de recursos que hacen uso de dicho smart contracts sin mayores problemas. Para aceptar los cambios, el usuario solo debe llamar al smart contract y si hay un cambio, será informado del mismo, pidiendo que autorice la nueva versión o, por el contrario, siga usando la versión anterior si lo desea. 





Enlace fuente

Post Relacionados
× ¿Cómo puedo ayudarte? Available from 09:00 to 18:00