Llevando ecosistemas de desarrollo moderno a contratos inteligentes.
Ethereum y cadenas de bloques similares se enfrentan a una crisis de escalabilidad. Escalar Ethereum es crucial para la utilidad y adopción de la red, y las tarifas de transacción actuales ciertamente no son constructivas para ese fin: hacer cualquier cosa que no sea la más simple de las DApps es imposible.
Este infame problema ha demostrado ser muy difícil de resolver sin comprometer la seguridad y la descentralización. Piet Hein dijo que un problema digno de ataque demuestra su valor al contraatacar, y la escalabilidad de la cadena de bloques ciertamente ha sido un matón medio.
Sin embargo, las discusiones actuales sobre escalabilidad generalmente carecen de una idea clave, que tal vez sea tan importante como aumentar el rendimiento de las transacciones y reducir las tarifas. Las limitaciones de procesamiento de la cadena de bloques no son la única restricción que hace que las DApps complejas sean imposibles. Centrarse solo en la escalabilidad computacional es un error; para crear estas DApps imposibles debemos hacer más que eso.
Hay una segunda restricción presente en Ethereum que debe abordarse para abordar realmente el problema de la escalabilidad: la escalabilidad del contenido¹. Para explicar qué significa la escalabilidad de contenido, citaremos el artículo fundamental de Friedrich Hayek "El uso del conocimiento en la sociedad":
Hacemos un uso constante de fórmulas, símbolos y reglas cuyo significado no entendemos y mediante cuyo uso nos servimos de la ayuda de conocimientos que individualmente no poseemos.
Esta idea, aunque escrita sobre civilizaciones, debería sonar extrañamente familiar para los programadores. Como desarrolladores de software, somos los maestros de las abstracciones². Los creamos compositivamente³ basándonos en otras abstracciones, que ya han demostrado ser exitosas a su propio nivel y sin tener que pensar en cómo se implementaron. Este ecosistema de abstracciones en capas que hemos construido de abajo hacia arriba contiene el conocimiento colectivo de todo el campo de la informática y es la base sobre la que se desarrolla el software. En este sentido, las abstracciones en informática se pueden considerar como una abstracción de contenido: son un proceso de ocultación de información, en el que la implementación subyacente se oculta al usuario y se accede a ella a través de una interfaz. Mediante este proceso de ocultación de información, la abstracción en informática consiste en la ampliación de contenidos⁴.
Alfred Whitehead ha dicho que “la civilización avanza ampliando el número de operaciones importantes que podemos realizar sin pensar en ellas”, y lo mismo puede decirse de la tecnología de todo tipo. Por ejemplo, tomemos algo tan simple como conducir un automóvil, lo que podemos hacer sin pensar. Ahora trate de imaginar la cantidad de tecnología que se ha invertido en la creación de dicho automóvil. Imagine la cantidad de horas humanas colectivas que ha llevado diseñar un motor de automóvil y las décadas de conocimiento acumulado que contiene. Y podemos aplicar este proceso de pensamiento de forma recursiva a los subcomponentes del motor y las herramientas utilizadas para construirlos; cada uno de ellos oculta información sobre el subsistema subyacente y permite que la siguiente capa realice más operaciones sin pensar en ellas.
Conducir un coche, lo que podemos hacer sin pensar. Ahora intente imaginar la cantidad de tecnología que se ha invertido en la creación del automóvil. Podemos aplicar este proceso de pensamiento de forma recursiva a los subcomponentes del motor y las herramientas utilizadas para construirlos.
Ésta es una característica crucial de los sistemas complejos creados por el hombre. Se construyen de forma compositiva sobre otros subsistemas, estructurados de manera que cada capa oculta información sobre lo que hay debajo. Estas capas forman lo que llamamos contenido. Y a través de este proceso de capas de abstracciones, uno amplía el contenido.
En Software, se puede observar esta estructura de abstracción en capas en el ecosistema existente. Esta pila, compuesta de bibliotecas, herramientas, sistemas operativos, compiladores, intérpretes y muchos otros componentes, cada uno abstrae el sistema subyacente y amplía lo que uno puede hacer sin pensar. El software moderno es muy complejo; para escribirlo, citando a Hayek, debemos contar con la ayuda de conocimientos que individualmente no poseemos. Con este fin, aprovechamos el contenido probado y comprobado que se ha repetido una y otra vez durante las últimas décadas, sin tener que escribirlo o comprender su funcionamiento interno nosotros mismos.
En Cartesi, estamos construyendo nuestra propia solución de escalabilidad. En esencia, está esta idea crucial de ampliar el número de operaciones importantes que se pueden realizar sin pensar en ellas; para escribir DApps imposibles debe haber escalabilidad de contenido. Las tecnologías actuales no tienen esta característica. Las computadoras en las que se ejecutan los contratos inteligentes son novedosas, en todos los aspectos negativos. Ninguno de los últimos cuarenta años de software desarrollado se puede ejecutar en ellos. No hay ningún ecosistema del que hablar ni contenido de ninguna manera; Para crear sistemas complejos en Ethereum, habría que construir todas las abstracciones desde cero, lo que requiere conocimientos que ningún individuo posee.
Imagine el escenario hipotético de ir a una tienda de informática a comprar una computadora nueva. Se le ofrece uno súper rápido que acaba de ser lanzado, pero no puede ejecutar nada de lo que existe hoy: aplicaciones, bibliotecas, herramientas, sistemas operativos, compiladores, intérpretes, lo que sea. Solo puede ejecutar su propio código de máquina.
Imagine el escenario hipotético de ir a una tienda de informática a comprar una computadora nueva. Se le ofrece una computadora súper rápida que se acaba de lanzar, pero no puede ejecutar nada de lo que existe hoy: aplicaciones, bibliotecas, herramientas, sistemas operativos, compiladores, intérpretes, lo que sea. Solo puede ejecutar su propio código de máquina. El proveedor podría intentar persuadirlo diciendo "ah, pero se puede desarrollar un nuevo software, desde cero, para esta computadora específica". Que, en muchos sentidos, es cómo se solía desarrollar el software antes que los compiladores y sistemas operativos de alto nivel. Independientemente del rendimiento, tal computadora sería inútil. Existe una razón por la que hemos superado las viejas prácticas de software. Sin ninguna de las abstracciones cuidadosamente construidas y repetidas durante las últimas décadas, nadie en su sano juicio consideraría siquiera comprar una computadora de este tipo. No hay contenido para esta computadora en ningún nivel.
Los contratos inteligentes de Ethereum son muy parecidos a esta computadora, excepto que también son súper lentos. Las soluciones de escalabilidad están preparadas para romper las restricciones de procesamiento presentes en estos contratos inteligentes. Sin embargo, sin abordar también la escalabilidad del contenido, su utilidad es bastante limitada; el énfasis únicamente en la escalabilidad computacional está fuera de lugar.
Imagínese ejecutar un algoritmo de compresión y descompresión. En las computadoras que usamos todos los días esta es una tarea trivial. Simplemente importamos la biblioteca relevante, madura y probada en batalla y le hacemos una sola función, beneficiándonos de décadas de conocimiento acumulado que ningún individuo posee. En la cadena de bloques, sin embargo, tal tarea es imposible. No hay poder computacional para hacerlo y no hay implementaciones para ello. No basta con abordar solo el primer problema; tendríamos una computadora rápida pero sin contenido. ¿Cómo podemos abordar estas dos limitaciones?
Cartesi puede desarrollar contratos inteligentes con Python, Rust, OCaml, JavaScript, C ++, Java o todos ellos, junto con todos sus ecosistemas combinados y bibliotecas existentes.
Actualmente, la solución de escalabilidad más importante para Ethereum son los rollups, con muchos diseños e implementaciones en competencia. Vitalik Buterin ha escrito una gran guía al respecto, que se puede encontrar aquí. La idea básica de los rollups es cambiar la mayor parte del cálculo de la cadena de bloques a un protocolo de capa 2, utilizando la cadena de bloques para verificar las pruebas de que lo que se ejecutó fuera de la cadena sigue las reglas. Este cambio de la capa 1 a la capa 2 reduce en gran medida el costo de los cálculos, ya que ejecutar las cosas en cadena es extraordinariamente costoso. Pero para abordar verdaderamente el problema de la escalabilidad, también debemos abordar la escalabilidad del contenido. Para crear DApps imposibles, uno debe poder aprovechar el conocimiento acumulado contenido en los ecosistemas de desarrollo modernos.
En Cartesi, estamos desarrollando nuestra propia solución de rollups, que es nuestra respuesta al problema de escalabilidad. A diferencia de otras soluciones, traemos escalabilidad de contenido a la mesa, así como escalabilidad computacional. La información clave para escalar el contenido es arrastrar a Ethereum la misma computadora con la que trabajamos a diario, usándola como infraestructura para DApps previamente imposibles. En esta computadora están inscritas décadas de contenido rico, maduro y probado; con él, podemos ejecutar toda la pila de desarrollo moderno dentro de la cadena de bloques.
En pocas palabras, hemos puesto Linux y todas sus cadenas de herramientas dentro de Ethereum. Uno ya no está resignado a Solidity, confinado por una computadora extraordinariamente costosa; ahora podemos usar un ecosistema de desarrollo moderno que se ejecuta en una computadora rápida. Tenemos décadas de contenido dentro de la cadena de bloques. Realmente podemos importar una biblioteca de compresión y usarla, dentro de nuestro lenguaje de programación favorito para arrancar. Quizás se esté preguntando, ¿cómo hicimos esto? Hemos profundizado en artículos anteriores, Rollups: Nodo Cartesi y Rollups On-Chain:
También está nuestro documento técnico aquí.
En pocas palabras, hemos puesto Linux y toda su cadena de herramientas dentro de Ethereum.. Y ni siquiera estamos restringidos a Linux. Nuestra tecnología puede aprovechar otros sistemas operativos como seL4, un kernel de código abierto centrado en la seguridad con una prueba de implementación correcta de un extremo a otro. Podemos desarrollar contratos inteligentes con Python, Rust, OCaml, JavaScript, C ++, Java o todos ellos, junto con todos sus ecosistemas combinados y bibliotecas existentes. Incluso podemos utilizar bases de datos reales. Los beneficios de esto no pueden ser exagerados: estamos haciendo uso de conocimiento que individualmente no poseemos, inscrito en compiladores e intérpretes confiables, bibliotecas maduras preexistentes y sistemas operativos probados en batalla.
Un ejemplo concreto que muestra el poder de Cartesi es nuestro Texas HODL'em, un juego de póquer Texas Hold'em descentralizado. Aprovecha la biblioteca LibTMCG⁵ para implementar la lógica del juego de cartas mental. No es posible ejecutar algoritmos intensivos de este tipo en la capa 1: la computadora es demasiado lenta. Además, simplemente moverlo a una capa 2 más rápida no es suficiente. La complejidad de comprender las complejidades de la criptografía de póquer mental y luego escribir una reimplementación sólida de LibTMCG en Solidity hace que esta sea una DApp imposible. Con los paquetes acumulativos de Cartesi, por otro lado, podemos simplemente importar esta biblioteca ya existente desde nuestro lenguaje de programación preferido y usarla normalmente, ejecutando todo en una computadora rápida.
Este es el poder de Cartesi. Los desarrolladores pueden aprovechar este ecosistema rico, maduro y probado durante décadas, que contiene conocimientos que ningún individuo posee. No es que sea difícil crear DApps notables sin el contenido adecuado; en realidad no es posible. Los desarrolladores están paralizados antes de escribir una sola línea de código, y el espectacular potencial de se frena ante cualquier intento de concretar ideas complejas. Escalar el contenido rompe las cadenas que nos retienen, liberando toda la gama de posibilidades de las cadenas de bloques; las promesas de no se pueden cumplir de otra manera.