Guía

Introduction

Flow, the blockchain for open worlds

Flow is a fast, decentralized, and developer-friendly blockchain, designed as the foundation for a new generation of games, apps, and the digital assets that power them. It is based on a unique, multi-role architecture, and designed to scale without sharding, allowing for massive improvements in speed and throughput while preserving a developer-friendly, ACID-compliant environment.

Flow empowers developers to build thriving crypto- and crypto-enabled businesses. Applications on Flow can keep consumers in control of their own data; create new kinds of digital assets tradable on open markets accessible from anywhere in the world; and build open economies owned by the users that help make them valuable. 

Smart contracts on Flow can be assembled like Lego blocks to power apps serving billions of people, from basketball fans to businesses with mission-critical requirements. 

There are four pillars that make Flow unique among existing blockchains:

  • Arquitectura multifunción: El diseño de Flow es único, 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.
  • Ergonomía del desarrollador: desde los contratos inteligentes actualizables y el soporte de registro incorporado al Emulador de Flow, esta red está diseñada para obtener resultados.
  • 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.

Aunque originalmente comenzamos a construir Flow para nuestros propios usos, rápidamente se ha hecho mucho más grande que nosotros. Cientos de desarrolladores en nuestro discord y miles de personas en todo el mundo están de acuerdo: estamos haciendo algo especial aquí. ¡Construyamos el futuro juntos!

Arquitectura Multi-Nodo

En una cadena de bloques tradicional, cada nodo almacena todo el estado (saldos de cuentas, código de contrato inteligente, etc.) y realiza todo el trabajo asociado al procesamiento de cada transacción de la cadena. Esto es análogo a tener un solo trabajador construyendo un coche entero.

Desde la fabricación hasta el diseño de la CPU, la canalización es una técnica común para aumentar drásticamente la productividad. Flow aplica esta técnica a las cadenas de bloques separando los trabajos de un nodo validador en cuatro roles diferentes: Recolección, Consenso, Ejecución y Verificación. Esta separación de trabajos entre nodos es vertical (a través de las diferentes etapas de validación de cada transacción) en lugar de horizontal (a través de diferentes transacciones, como en el caso del sharding o técnica de partición).

En otras palabras, todos los nodos validadores siguen participando en la validación de cada transacción, pero lo hacen sólo en una de las etapas de validación. Por lo tanto, pueden especializarse para - y aumentar enormemente la eficiencia de - su etapa particular de enfoque.Â

Esto le permite a Flow escalar a un rendimiento miles de veces mayor y a un costo menor, manteniendo al mismo tiempo un entorno de ejecución compartido para todas las operaciones en la red. En términos de base de datos, los contratos inteligentes y las cuentas de usuario en Flow siempre pueden interactuar entre sí en una transacción atómica, consistente, aislada y duradera (ACID). Esto asegura una buena experiencia de usuario y una completa capacidad de composición, permitiendo a los desarrolladores construir fácilmente sobre el trabajo de los demás.

Problemas con el particionamiento (Sharding)

La mayoría de las propuestas tienen por objeto mejorar la escalabilidad de las cadenas de bloques fragmentándolas en redes interconectadas: comúnmente se particionan, aunque las cadenas laterales tienen los mismos problemas. Estos enfoques eliminan las garantías de serialización ("ACID") comunes en los sistemas de bases de datos.

La pérdida de las garantías del ACID hace que la construcción de una aplicación que necesita acceder a datos a través de fragmentos sea mucho más difícil y propensa a errores. Las interacciones entre los contratos inteligentes se vuelven muy complicadas, e incluso las aplicaciones individuales a gran escala tendrían que recurrir a una mecánica compleja para escalar a través de los fragmentos debido a los problemas de latencia y a las mayores tasas de fracaso de las transacciones. La combinación limita drásticamente los tipos de aplicaciones posibles en la red, así como sus efectos en la red. Particionar refuerza la parte más difícil de escalar la cadena de bloques a los desarrolladores de aplicaciones en lugar de resolverla a nivel de protocolo.

Una simple acción del usuario (comprar un sombrero para un CryptoKitty usando un stablecoin como TUSD) puede tomar doce transacciones y siete bloques en una cadena de bloques particionados. En un entorno no fragmentado, que cumple con los requisitos del ACID, como Flow, la misma acción, y muchas más complejas que ella, pueden ser manejadas por una transacción atómica en un solo bloque.

Peor que el tiempo y el costo adicional es el aumento de la superficie de ataque y la complejidad: será mucho más difícil diseñar, probar y endurecer el código de contrato inteligente en una cadena de bloques particionada.

Separando el Consenso del Cómputo

The core insight that led to architecture of Flow is that we can separate non-deterministic processes from deterministic ones and assign each to different types of nodes based on their technical capabilities to dramatically increase the blockchain throughput and solve several  user- and developer experience problems with existing networks at the same time. Our realization was that tasks within a blockchain can be divided into two types: 

  • Tareas no determinantes (o "subjetivas"), como establecer la presencia y el orden de las transacciones en la cadena de bloques
  • Tareas determinantes (u "objetivas"), como computar el resultado de esas transacciones ordenadas una vez que este se ha establecido

Non-deterministic tasks require a coordinated consensus process (like Proof of Work or Proof of Stake). Deterministic tasks, on the other hand, always have a single, objectively-correct outcome. The critical insight behind Flow’s architecture was that the single biggest bottleneck to blockchain performance is the deterministic task of executing transactions after they’ve already been included into a block, and not the subjective process that requires consensus, i.e. the formation of the block itself. This insight is outlined in our first technical paper: Separating Consensus and Compute.

Arquitectura Multifuncional de Flow

Flow canaliza el trabajo de un minero o validador de la cadena de bloques a través de cuatro roles diferentes que requieren participación; esto es una separación de las preocupaciones que reduce significativamente el esfuerzo redundante:

  • Los Nodos de Consenso deciden la presencia y el orden de las transacciones en la cadena de bloques
  • Los Nodos de Verificación son responsables de mantener los Nodos de Ejecución bajo control
  • Los Nodos de Ejecución realizan el cálculo asociado a cada transacción
  • Los Nodos de Recolección mejoran la conectividad de la red y la disponibilidad de datos para las aplicaciones descentralizadas

Flow is designed such that even a single honest node, of any role, can punish and trigger recovery from invalid data introduced by dishonest Collection or Execution Nodes. 

Consensus and Verification Nodes together are the foundation of security in the Flow network and leverage cryptoeconomic incentives to hold the rest of the network accountable.  These validators can optimize for security and decentralization: the roles of Consensus and Verification are streamlined to allow high levels of participation, even by individuals with consumer-grade hardware running on home internet connections. Consensus nodes run a variant of HotStuff, one of the most proven proof of stake algorithms.


Los Nodos de Ejecución y Recolección, por otro lado, hacen un trabajo totalmente determinante, haciéndolos menos vulnerables a los ataques. El trabajo de estos nodos también es verificado y mantenido por los otros tipos de nodos. Por lo tanto, estas funciones de los nodos pueden optimizarse de forma confiable para la seguridad y la escalabilidad, permitiendo que la red se amplíe. El funcionamiento de estos nodos requiere de un hardware con servidor dedicado en un centro de datos administrado profesionalmente.

Pruebas Especializadas de Conocimiento Confidencial (SPoCK)

Las Pruebas Especializadas de Conocimiento Confidencial (Specialized Proofs of Confidential Knowledge, SPoCKs) son una nueva técnica criptográfica desarrollada por el equipo de Flow y definida formalmente en nuestros Documentos técnicos. Las SPoCK permiten que cualquier número de probadores demuestren a un observador tercero que cada uno tiene acceso a el mismo conocimiento confidencial. Estas pruebas no son interactivas y no revelan el conocimiento confidencial. La SPoCK de cada probador es especializada a ellos, y no puede ser copiada o falsificada por ningún otro probador.

Experiencia de Primera para el Desarrollador

Nuestra experiencia en el desarrollo de aplicaciones de cadenas de bloques como CryptoKitties y el monedero de contratos inteligentes Dapper nos ha llevado a incorporar una serie de mejoras en la ergonomía de los desarrolladores directamente en la capa de protocolo en Flow. Algunas de ellas se describen a continuación.

Cadence

Cadence es el primer lenguaje de programación de contratos inteligentes ergonómico y orientado a los recursos.

Si bien los entornos de programación existentes pueden utilizarse para hacer un seguimiento de la propiedad de los activos, normalmente se utilizan en escenarios en los que estos están reflejando propiedad en lugar de definirla directamente. Las cadenas de bloques públicas son únicas en el sentido de que están explícitamente diseñadas para gestionar la propiedad de los activos digitales con escasez y control de acceso total. Los activos digitales en cadenas de bloques públicos se comportan como activos físicos: no pueden ser copiados o falsificados, sólo movidos.

El año pasado, el equipo de Flow estaba investigando el uso de Los tipos lineales en el contexto de blockchain, siguiendo una investigación académica en mejores lenguajes de contratos inteligentes. Casi al mismo tiempo, el equipo de Libra definió un nuevo modelo de programación para Move basado en un nuevo modelo de propiedad inspirado en los Tipos Lineales: recursos. Los recursos son una nueva forma de representar la propiedad de los activos y las propiedades de los activos digitales criptográficos directamente en el lenguaje de programación. De la introducción del documento de Move:
La característica clave de Move es la capacidad de definir tipos de recursos personalizados. Los tipos de recursos se usan para codificar activos digitales seguros con una programabilidad enriquecida.

Nos llamó tanto la atención el poder de la Programación Orientada a Recursos que es uno de los rasgos definitorios de Cadence, un lenguaje de programación diseñado específicamente para el nuevo paradigma de aplicaciones habilitadas para el cifrado.

Programación orientada a los recursos es un nuevo paradigma, diseñado para ser seguro y fácil de usar. Por primera vez, los desarrolladores pueden crear artefactos digitales excepcionalmente duraderos en los que la propiedad es rastreada por el propio lenguaje, lo que permite una nueva y poderosa categoría de aplicaciones.

Como el primer lenguaje de programación de alto nivel orientado a los recursos, Cadence tiene una sintaxis cómoda y ergonómica que lo hace muy fácil de leer. Utiliza un sistema fuerte de tipo estático para minimizar los errores en tiempo de ejecución, y permite que todos los métodos, interfaces y transacciones incluyan condiciones previas y posteriores para reforzar el comportamiento esperado. Esto ha dado como resultado un lenguaje que es más fácil de aprender, significativamente más fácil de auditar y, en última instancia, mucho más productivo que cualquier alternativa actual. Puedes empezar a aprender sobre Cadence en Flow Playground: play.onflow.org

Open source tooling

El equipo de Flow ha abierto una serie de herramientas para ayudar a los desarrolladores a empezar:

Go SDK de Flow: el Go SDK es una gran herramienta para los desarrolladores que buscan la integración del backend teniendo en cuenta la escalabilidad. Go es uno de los lenguajes de programación de backend más populares cuando el rendimiento es una prioridad, y ha sido la elección de Dapper Labs.

SDK JavaScript de Flow: para los desarrolladores del frontend, nuestro SDK de JavaScript le permitirá integrar e interactuar fácilmente con Flow. Desarrolla sin usar ABIs, construye interacciones componibles y crea aplicaciones descentralizadas que deleitan a sus usuarios. Creemos que le va a encantar construir con nuestro SDK de JavaScript.

Extensión del código de Visual Studio: interactua con Flow y usa el lenguaje de Cadence de forma nativa en el Código de Estudio Visual. Revisa estáticamente su código Cadence para detectar errores y prueba sus contratos inteligentes sin dejar la comodidad de este IDE líder en la industria.

GUI de Flow Playground: el entorno de desarrollo alojado en el navegador donde los usuarios pueden aprender y probar el lenguaje de contratos inteligentes de Cadence sin necesidad de ninguna configuración. Hacemos fácil para cualquier nuevo desarrollador el probar Cadence, el nuevo y poderoso lenguaje para el desarrollo de contratos inteligentes.

Propuestas de estándares: Los FTs (Tokens intercambiables) y NFTs (Tokens no intercambiables) son el equivalente de los tokens de Flow a los ERC-20 y ERC-721 de Etherium, respectivamente.

Contratos Inteligentes Actualizables

Una de las promesas más importantes hechas por las plataformas de contratos inteligentes es que los usuarios pueden confiar en el código del contrato inteligente en lugar de confiar en los autores del contrato inteligente. Este aspecto de las cadenas de bloques desbloquea casos de uso que sólo estamos empezando a explorar, el más impactante de los cuales podría ser el concepto de servicios abiertos y capacidad de composición.

En su primera versión, las plataformas de contratos inteligentes fueron diseñadas de tal manera que el código del contrato nunca podría ser cambiado después de su lanzamiento. Este es el método más directo para lograr el objetivo: Si el código no puede ser cambiado, incluso por los autores originales, claramente no es necesario confiar en los autores después de que el código es lanzado.

Desafortunadamente, el software es difícil que acierte la primera vez. No faltan ejemplos de contratos inteligentes que, incluso con equipos increíblemente talentosos y comunidades motivadas, tuvieron problemas sutiles que llevaron a una pérdida masiva de fondos.

Muchos desarrolladores han expresado el deseo de arreglar o mejorar un contrato inteligente después de que se haya desplegado, y varios han dedicado mucho tiempo y pasado muchos problemas en la construcción de algún mecanismo en su contrato inteligente para permitir actualizaciones o migraciones. Pero el hecho de que cada desarrollador "haga su propio" mecanismo para la actualización añade complejidad, y hace que esos contratos inteligentes sean más difíciles de confiar.

En Flow, permitimos que los contratos inteligentes se desplieguen en la red principal en un "estado beta", donde el código puede ser actualizado de forma incremental por los autores originales. Los usuarios serán alertados de la naturaleza inacabada de este código, y pueden elegir esperar hasta que el código esté finalizado antes de confiar en él. Una vez que los autores confían en que su código es seguro, pueden liberar irrevocablemente su control sobre el contrato, y éste se vuelve perfectamente inmutable por el resto del tiempo.

Este sistema equilibra las necesidades de los usuarios de estar informados sobre el tipo de código con el que están tratando - ya sea que una aplicación o un contrato inteligente sea o no verdaderamente confiable - mientras que permite a los desarrolladores la flexibilidad de ajustar su código por un tiempo limitado después del envío.

Finalidad Rápida y Determinante

Desde el punto de vista de los usuarios finales, la velocidad de una cadena de bloques se mide prácticamente por el tiempo que transcurre antes de que ellos (o el software de su cliente) puedan estar seguros de que su transacción está permanentemente incluida en la cadena. Esto se denomina comúnmente "finalidad". En Bitcoin, la mayoría de las personas definen la finalidad como seis confirmaciones de bloque que pueden tardar más de una hora. Ethereum mejora esto al lograr finalidad probabilística después de unos 6 minutos.

En Flow, la finalidad determinante se logra en segundos: una vez que los Nodos de Consenso determinan de qué bloque formará parte una transacción, los agentes del usuario pueden, en la mayoría de los casos, ejecutar la transacción localmente y dar retroalimentación al usuario casi inmediatamente. En los casos en que los resultados puedan verse influidos por otras transacciones de la red, los usuarios optarán por confiar en un nodo de ejecución, utilizando modernas API para obtener información en un par de segundos, o bien esperarán a que los resultados de la transacción se sellen en la cadena de bloques junto a todos los recibos de ejecución y verificación pertinentes. Este proceso de sellado de bloques y observación formal toma alrededor de 10 bloques; unos diez segundos al lanzarse.

Soporte de Registro Incorporado

A veces, la única forma de asegurarse de que un software complicado funciona como se espera es registrar su comportamiento, en detalle, durante un largo período de tiempo. Las plataformas de contratos inteligentes existentes no incluyen una facilidad de registro por el simple hecho de que almacenar un registro completo de toda la cadena de bloques es completamente intratable. ¡Demasiados datos!

Flow reconoce que, dado que todas las transacciones de contratos inteligentes son totalmente determinantes, no es necesario almacenar los registros reales de cada transacción dentro de la red. En su lugar, Flow simplemente marca qué transacciones habrían producido mensajes de registro para qué temas. Si alguien quiere "examinar" los registros, puede consultar la cadena de bloques para el subconjunto de transacciones etiquetadas con un tema determinado y luego volver a ejecutar las transacciones localmente para generar esos registros para su análisis. Esta técnica también hace que el registro de eventos sea dramáticamente más eficiente.

Incorporación amigable del consumidor

Además de las principales pasarelas de pago (de otros cripto tokens así como de monedas fiduciarias), la red Flow facilita la construcción de aplicaciones que la gente quiere usar:

Seguridad Legible para Humanos

En las redes actuales, es casi imposible que un software o aplicación de monedero proporcione un mensaje legible para el ser humano en el que se describa claramente qué permisos están dando al autorizar una transacción. El formato de transacción de Flow ofrece garantías muy sólidas sobre qué tipo de cambios puede y no puede hacer una transacción. Esto le facilita al monedero asegurarse de que los usuarios tomen decisiones informadas sobre lo que están aprobando.

Corresponderá al software del monedero mostrar esta información a los usuarios, pero al hacer que el formato de la transacción de Flow sea fácil de analizar estáticamente, creamos la posibilidad de un proceso de aprobación de transacciones más transparente.

Cuentas Inteligentes de Usuario: no más semillas o llaves perdidas

Flow está diseñado teniendo en cuenta la flexibilidad. Durante el año pasado, Dapper Labs han sido pioneros en una variedad de mejoras de uso del modelo de cuenta Ethereum como parte del Monedero de Contratos Inteligentes de Dapper. Esas mejoras son parte del modelo nativo de cuenta de Flow:

  • Funcionalidad opcional, modular y de contrato inteligente incorporada en cada monedero de Flow
  • Esto respalda los procesos automatizados o los controles de autorización más sofisticados, lo que a su vez permite una buena experiencia del usuario. Por ejemplo, las aplicaciones descentralizadas pueden asegurarse fácilmente de que los consumidores nunca pierdan sus activos - o el acceso a sus cuentas - con una recuperación segura de la cuenta
  • Seguridad añadida mediante soporte opcional de firmas múltiples, con la posibilidad de reciclar regularmente las claves antiguas para evitar fugas de seguridad.

Community

Flow está comprometido con un mundo de ecosistemas abiertos: un mundo en el que tanto los desarrolladores de software como los creadores de contenidos y los consumidores sean debidamente incentivados y recompensados por el valor que aportan a la red.

La arquitectura técnica es sólo un ejemplo de cómo Flow asegurará la inclusividad y la participación a nivel de protocolo: nuestro evangelismo comunitario y los esfuerzos hacia el gobierno son igual o más importantes.

Pagos y Recompensas de los Operadores de Nodos

En Flow, los operadores de nodos validadores que apoyan la red reciben una parte de los honorarios de transacción que pasan por el sistema, proporcionales al trabajo que hacen y a su participación asociada. A diferencia de los mineros o validadores de otras blockchains, los validadores en Flow pueden comenzar como Nodos de Consenso o de Verificación con un hardware relativamente barato, asegurando una participación amplia, equitativa y la descentralización.

En los primeros años de la red, cuando las tarifas son bajas, la red proporcionará recompensas adicionales a los operadores de los nodos, proporcionales a sus esfuerzos y al interés asociado.

Ecosistema del Desarrollador

A healthy and vibrant ecosystem is the most important long-term determinant of success for a blockchain. It is a fundamental requirement that Flow engages with a large and diverse set of stakeholders. Most importantly, this extends beyond the investor base and includes the developers and ecosystem partners that choose to build on top of the network. 

In addition to a technical design optimized for developer experience and performance, the Flow team is taking additional steps to ensure a healthy ecosystem:

  • Developer Alpha Program: over the coming months, the Flow team will begin demonstrating the capabilities of the network to interested blockchain developers for technical feedback. Whether you’re an independent hobbyist or a venture-backed powerhouse, the Flow team wants to hear from you.

  • Desarrollo de Ecosistemas: se reservará una parte de los tokens de Flow para el desarrollo del ecosistema con el fin de iniciar la implementación y recompensar a los primeros participantes en la red. Estos premios a la participación se distribuirán a través de una serie de diferentes programas, incluyendo competiciones, hackathons y contribuciones al desarrollo de código abierto. Además de acelerar la implementación, reservar una parte de los tokens para el desarrollo de los ecosistemas a largo plazo también asegura una vía para diversificar y descentralizar la participación y gobernabilidad de las redes, garantizando el acceso global de una variedad de participantes.

Colaboradores de Contenido

Blockchain permite a las marcas y a los influenciadores conectar directamente con sus fans en formas nuevas. La escasez digital y la verdadera propiedad de los activos crean el espacio para experiencias sociales de juego que van más allá de las apps individuales, creando economías de coleccionismo en torno a cada propiedad intelectual única. Flow está trabajando con personas independientes que están rompiendo el molde, así como con algunos de los principales estudios de entretenimiento del mundo, titulares de propiedad intelectual. y editores para asegurar que nuestra plataforma sirva a sus necesidades.

Flow patrocinará la creación de un consejo de la industria del entretenimiento para ejecutivos de nivel C que sean titulares de propiedad intelectual, editores de juegos, estudios de entretenimiento e influencers culturales de todo el mundo. El consejo ayudará a identificar los riesgos y oportunidades, eliminar los puntos de fricción para la implementación por parte de los consumidores, y ayudar a fijar un ecosistema global de entretenimiento saludable.

Comience uniéndose a la comunidad

Junto a nuestra comunidad, Flow puede impulsar una Internet abierta y confiable para miles de millones de consumidores. Estamos buscando desarrolladores, empresas y embajadores para dar vida a este nuevo mundo digital. Estos equipos e individuos trabajarán estrechamente con nuestro equipo y recibirán orientación para establecer productos, servicios, negocios y comunidades sostenibles en Flow. Si le interesa construir el futuro en Flow, por favor cuéntenos más.

Las vibras de la comunidad
discord.gg/flow

¡Gracias! ¡Su envío ha sido recibido!
¡Ups! Algo salió mal al enviar el formulario.