paint-brush
Ampliación de contratos inteligentes con SQLpor@kwilteam
3,537 lecturas
3,537 lecturas

Ampliación de contratos inteligentes con SQL

por Kwil9m2024/10/08
Read on Terminal Reader

Demasiado Largo; Para Leer

Las plataformas de blockchain actuales, como Ethereum, enfrentan limitaciones en el manejo de datos complejos debido al almacenamiento rígido de clave-valor, lo que dificulta las aplicaciones avanzadas. Los contratos inteligentes SQL introducen flexibilidad, lo que permite a los desarrolladores realizar consultas dinámicas y administrar modelos de datos complejos de manera eficiente en una red descentralizada. Los contratos inteligentes SQL liberan el potencial de aplicaciones descentralizadas más potentes, revolucionando la blockchain más allá de las criptomonedas.
featured image - Ampliación de contratos inteligentes con SQL
Kwil HackerNoon profile picture
0-item
1-item
2-item

Un agradecimiento especial a Jun Jiang de DePHY Network y a Ryan Soury de Usher Labs por sus comentarios y opiniones.


En 2008, las alarmas de Wall Street sonaron cuando los sofisticados operadores cayeron en un frenesí primario. Las instituciones financieras sobreapalancadas, que se desplomaron bajo el peso de los títulos respaldados por hipotecas de alto riesgo, dejaron a los banqueros codiciosos expuestos y pidiendo rescates. Los bancos centrales, desesperados por conservar su control del poder, pagaron los pecados de los banqueros con la chequera del ciudadano común. Esta traición puso al descubierto los defectos del sistema monetario centralizado y reveló la necesidad de un sistema financiero más nuevo, más libre y más justo. Así como la Revolución Americana y la constitución que le siguió separaron la Iglesia del Estado, surgió una nueva revolución llamada Bitcoin para separar el dinero del Estado, posibilitando muchas de las mismas libertades fundamentales para la autodeterminación.


La tecnología blockchain es una tecnología de libertad. Nos permite construir sistemas financieros, de identidad, de información y de coordinación social que no requieren confiar en un intermediario centralizado. Las libertades individuales prosperan en un mundo donde el banco central no controla el flujo de dinero, una única plataforma no controla el discurso social y una única empresa no controla las identidades digitales.


Muchas de las diferencias entre este nuevo mundo y el que tenemos hoy residen en las capacidades técnicas de las plataformas blockchain. La primera generación de contratos inteligentes fue la punta del iceberg que hizo posible estos sistemas de libertad; sin embargo, sus capacidades son fundamentalmente limitadas. En este artículo, explico algunas de las limitaciones críticas de los contratos inteligentes actuales y cómo un nuevo sistema, los “contratos inteligentes SQL”, proporciona una base técnicamente más capaz para liberar las libertades humanas y hacer realidad el potencial de la cadena de bloques como una nueva plataforma informática.

Contratos inteligentes: Programando la máquina de la verdad

“El problema de fondo… es toda la confianza que se requiere para que funcione.” - Satoshi Nakamoto


La propiedad básica inicial de una cadena de bloques es la inmutabilidad: una vez que un cierto umbral de partes interesadas (o “nodos”) en una red acuerdan que algo es cierto, la cadena de bloques conservará un registro permanente de esa verdad. Las cadenas de bloques utilizan una variedad de mecanismos de “prueba” en los que los nodos gastan grandes cantidades de valor en forma de potencia informática, participación financiera o reputación para garantizar que los actores maliciosos no puedan manipular la verdad.


Si Bitcoin es la “máquina de la verdad” para las monedas digitales, Ethereum es la “máquina de la verdad” para productos financieros más complejos. Ethereum amplía las capacidades de Bitcoin al crear un espacio de diseño programable donde los desarrolladores pueden implementar cualquier lógica que se implemente, verifique y ejecute en una serie de nodos. Esto significa que ahora podemos crear sistemas que eliminan la necesidad de confiar en una autoridad central más allá de la moneda. Cualquier sistema que requiera autoridades centrales (como préstamos, escrituras inmobiliarias, información de identidad, redes sociales, métricas económicas, etc.) ahora puede operar sin intermediarios centrales. ¡Este es un mundo completamente nuevo!

Un contrato inteligente es un programa que los desarrolladores escriben e implementan en una cadena de bloques, el lienzo para que los desarrolladores creen aplicaciones descentralizadas. El término "contrato inteligente" no significa un contrato legal en el que dos partes están sujetas a ciertos derechos y obligaciones. En cambio, un "contrato inteligente" simplemente significa que se garantiza que la aplicación funcionará exactamente como está escrito el código de manera indefinida. Los contratos de préstamo garantizan que los prestatarios y los prestamistas siempre puedan realizar transacciones. Los contratos inmobiliarios garantizan que las personas siempre puedan verificar y transferir la propiedad de la propiedad. Un contrato inteligente es una aplicación en la que el código se convierte en ley.


Steve Jobs llamó a la computadora “una bicicleta para la mente”. Los contratos inteligentes garantizan que las ruedas nunca se salgan.


Contratos inteligentes de Ethereum: la punta del iceberg

“Las criptomonedas no se limitan a intercambiar tokens, sino que forman parte de un espíritu más amplio de protección de la libertad y la privacidad y de mantener el poder en manos de los más desfavorecidos”. - Vitalik Buterin


Si bien los contratos inteligentes de Ethereum introdujeron un mundo completamente nuevo de productos descentralizados, limitaciones fundamentales en su diseño y capacidades de manipulación de datos impiden que sean efectivos en muchas aplicaciones más allá de las criptomonedas.


En Solidity (un lenguaje de programación para Ethereum), los datos de los contratos se almacenan en pares clave-valor. Aunque las estructuras (agrupaciones de variables) y las asignaciones (colección de pares clave-valor) presentan formas útiles de organizar los datos, todos los datos solo se pueden recuperar por su clave. Consideremos un contrato teórico para almacenar datos de identidad de usuario:


 contract IdentityStorage { // Struct to store KYC details struct identity { string fullName; string dateOfBirth; string residentialAddress; } // mapping a country to its citizens to their info // "Canada" => 0x123… => {Vitalik Buterin, 01/31/1994, ...} mapping(string => mapping(address => identity)) public idData; //...rest of contract }


En este contrato, el registro de identidad de un usuario solo se puede recuperar conociendo el país y la dirección de la billetera del usuario. A menos que el implementador del contrato rediseñe el contrato inteligente para permitir la manipulación de datos con un alto costo de gas, no existen otras formas para que el usuario del contrato recupere un registro de identidad. El almacenamiento de datos en pares clave-valor limita en última instancia la forma en que se puede acceder a los datos y manipularlos.


En particular, la gestión de datos en los contratos inteligentes de Ethereum presenta dos problemas fundamentales: dependencia del índice y dependencia de la ruta de acceso.


Dependencia del índice

La dependencia de índices significa que, para acceder a un dato específico, este debe estar disponible en un índice. Un índice es una estructura de datos que busca de manera eficiente un identificador único dentro de una colección. En el contrato KYC de ejemplo anterior, solo se puede acceder a los registros a través de la dirección Ethereum exacta utilizada para la clave. Esta estructura de indexación rígida evita que los usuarios del contrato consulten los datos en función de otros criterios, como "¿Qué usuarios tienen esta dirección residencial?" o "¿Qué porcentaje de usuarios con este documento de identidad nacional nacieron después del 1 de enero de 1970?". Sin la capacidad de realizar tales consultas, los desarrolladores carecen de la flexibilidad para agregar, analizar y crear la lógica de la aplicación en torno a los datos del contrato. Cuando los desarrolladores necesitan esta flexibilidad adicional, como recuperar un registro de identidad por nombre completo, es necesario reestructurar todo el contrato. En Ethereum, la reestructuración de índices también puede aumentar los costos de gas de un contrato, lo que dificulta aún más la usabilidad del contrato.


Dependencia de la ruta de acceso

La dependencia de la ruta de acceso se refiere a que los datos son accesibles y comprensibles solo a través de una ruta de recuperación específica. En el contrato de ejemplo, conocer el país y la dirección de la billetera de Vitalik permitiría a un desarrollador recuperar su registro de identidad. Sin embargo, conocer solo la dirección de la billetera no le permitiría a un desarrollador obtener el país de origen de Vitalik. Además, incluso si el desarrollador tiene la dirección de la billetera de Vitalik, no puede obtener su registro de identidad a menos que también conozca el país de origen (la clave "Canadá"). La ruta de acceso al registro de identidad de Vitalik es fija; si un desarrollador necesitara intentar recuperar su registro solo con la dirección de la billetera, se necesitaría reestructurar todo el contrato. La dependencia de la ruta de acceso significa que los datos son accesibles y significativos solo en una dirección, lo que limita la capacidad de consultar o interpretar los datos desde diferentes perspectivas.

La dependencia de los índices y las rutas de acceso plantean desafíos importantes para las aplicaciones que requieren un modelo de datos complejo o en evolución. Si bien las criptomonedas tienen estructuras de datos simples que se pueden implementar en Ethereum (los tokens ERC20 son esencialmente solo un mapeo de direcciones a saldos), estos desafíos se vuelven problemáticos para aplicaciones que hacen un uso más intensivo de los datos. Cuando una aplicación necesita almacenar, consultar y manipular un modelo de datos complejo, el almacenamiento básico de clave-valor de Ethereum hace que la gestión de datos sea significativamente más limitante, lo que dificulta la creación y el mantenimiento de aplicaciones que requieren una gestión de datos compleja.

Una breve lección de historia: el modelo relacional

“La historia no se repite, pero a menudo rima” – Mark Twain


En 1970, Edgar F. Codd, un científico informático de IBM, publicó un artículo titulado “Un modelo relacional de datos para grandes bancos de datos compartidos”. En ese momento, el tipo de base de datos de aplicación más popular era la “base de datos jerárquica”, que utilizaba una estructura rígida, similar a un árbol, donde cada pieza de datos se almacenaba bajo un directorio principal, de manera similar a cómo se organizan los archivos en una computadora. Codd se opuso a la base de datos jerárquica y propuso una base de datos relacional más nueva, más simple y mucho más capaz, con una estructura tabular.


La estructura en forma de árbol de la base de datos jerárquica implica que solo se puede acceder a los datos a través de un sistema rígido que comprende la relación padre-hijo de cada pieza de datos. En particular, Codd identificó tres problemas clave con el sistema jerárquico:


  1. Dependencia de orden: el resultado de una consulta suele depender de cómo se organizan los datos en el almacenamiento. Si se crea una aplicación asumiendo que los datos se consultarán en el mismo orden en que se almacenan, entonces el orden no se podrá cambiar en el futuro.

  2. Dependencia del índice: para acceder a un dato específico, la aplicación debe conocer el padre (es decir, un índice). De lo contrario, es imposible recuperar los datos solicitados.

  3. Dependencia de la ruta de acceso: para acceder a los datos o comprenderlos es necesario seguir una ruta de recuperación específica. Si la aplicación está diseñada para recuperar datos mediante un patrón de acceso particular, no podrá recuperar ni interpretar los mismos datos mediante rutas alternativas.


¿Le suena familiar esto? Aunque los contratos inteligentes de Ethereum no tienen dependencia de ordenamiento (los mapas no están ordenados), las mismas limitaciones de dependencia de índices y rutas de acceso que afectaron a las bases de datos en los años 1960 y 1970 están frenando a las plataformas de contratos inteligentes en la actualidad.


Las limitaciones a nivel de base de datos son más que un inconveniente trivial; limitan fundamentalmente a los desarrolladores y los tipos de aplicaciones creadas en una plataforma. En lugar de centrarse en la implementación de nuevas características, los desarrolladores que luchan contra la dependencia de índices y rutas de acceso deben dedicar una cantidad extraordinaria de esfuerzo a mantener la funcionalidad de una aplicación existente. Durante los años 1960 y 1970, el uso de bases de datos se reservaba principalmente para tareas comerciales rígidas, como la gestión de inventarios, la contabilidad y el procesamiento general de datos; los desarrolladores no tenían la flexibilidad de datos para crear aplicaciones más sofisticadas. Sin embargo, después de la introducción de bases de datos relacionales, surgieron aplicaciones significativamente más expresivas y con uso intensivo de datos, lo que llevó al surgimiento de sistemas ERP, CRM y herramientas de inteligencia empresarial. Además, con la llegada de Internet, estos avances allanaron el camino para las plataformas de comercio electrónico y las aplicaciones de redes sociales. Los desarrolladores podían implementar características que antes requerían que se reestructurara una base de datos completa con solo unas pocas líneas de SQL. La base de datos relacional fue más que un cambio de paradigma; fue una plataforma de creación de categorías que permitió que surgieran aplicaciones fundamentalmente nuevas.


En la actualidad, las plataformas blockchain son similares a las computadoras y bases de datos de la década de 1970. La falta de capacidad de procesamiento de datos a nivel de blockchain significa que los desarrolladores no pueden implementar aplicaciones descentralizadas más sofisticadas y con uso intensivo de datos. Si el caso de uso principal de las cadenas de bloques se expande más allá de las criptomonedas, necesitamos plataformas blockchain con una funcionalidad de procesamiento de datos más capaz.

Contratos inteligentes de SQL: un paradigma más flexible

“La medida de la inteligencia es la capacidad de cambiar.” - Albert Einstein


Así como la comercialización de las bases de datos relacionales en la década de 1980 condujo a la proliferación de nuevas aplicaciones, la integración de bases de datos relacionales en plataformas blockchain tiene el mismo potencial para reformular los tipos de aplicaciones descentralizadas que se pueden crear.


En Kwil, estamos construyendo una plataforma de cadena de bloques y un lenguaje de contratos inteligentes que permite a los desarrolladores crear aplicaciones descentralizadas que aprovechan toda la expresividad de SQL. Con Kwil, los desarrolladores pueden aprovechar la flexibilidad del modelo relacional para crear aplicaciones descentralizadas más capaces y con uso intensivo de datos.


Considere el mismo ejemplo de almacenamiento de identidades que se mencionó anteriormente. En lugar de almacenar registros de identidad en un mapa donde solo se puede acceder a cada registro mediante su clave, Kwil permite a los desarrolladores almacenar los registros en una tabla y aprovechar una sintaxis SQL flexible para realizar consultas en la tabla:


 database user_registry; table identities { address uuid primary key, name text notnull, date_of_birth int notnull, residential_address text notnull, national_id int notnull, #country_index index(national_id) } action query_by_national_id ($id) public view { SELECT * FROM identities WHERE national_id = $id; } action query_by_dob ($dob) public view { SELECT * FROM identities WHERE date_of_birth > $dob; }


En el contrato inteligente original de Ethereum, no había forma de buscar entre las identidades y devolver todos los usuarios dada una condición (como el documento de identidad nacional) o de asociar una billetera en función de un atributo específico (como la fecha de nacimiento). Para habilitar dicha funcionalidad se requeriría reestructurar el contrato para agregar funciones costosas y que consumen mucho gas. Sin embargo, con el modelo relacional, los desarrolladores pueden ejecutar estas consultas sin necesidad de ninguna reestructuración, lo que les permite obtener más flexibilidad en la manipulación de datos sin incurrir en costos adicionales.


Por ejemplo, la red idOS es una cadena de bloques soberana creada con Kwil, que permite a los usuarios y a las aplicaciones descentralizadas almacenar información de credenciales de usuario. El uso de SQL en la red idOS permite:


  1. Los usuarios se asociarán y podrán recuperarse mediante múltiples billeteras, credenciales y atributos.

  2. Protocolos DeFi para realizar análisis agregados de dónde provienen sus usuarios.

  3. Protocolos de stablecoin para evaluar qué usuarios provienen de zonas de alto riesgo.


Habilitar el modelo relacional y SQL en una plataforma blockchain descentralizada nos permite crear aplicaciones fundamentalmente nuevas que no pueden existir en los contratos inteligentes de Ethereum existentes.

Conclusión

El modelo relacional que revolucionó la industria informática hace 40 años tiene las mismas capacidades para revolucionar la industria blockchain hoy. En los años 1960 y 1970, la dependencia del índice y la ruta de acceso limitaban la utilidad de la base de datos jerárquica en aplicaciones intensivas en datos. Hoy, la misma dependencia del índice y la ruta de acceso limitan los contratos inteligentes de Ethereum y su capacidad para impulsar plataformas descentralizadas con modelos de datos complejos. Sin embargo, al integrar el modelo relacional en la blockchain y brindarles a los desarrolladores el mismo dialecto SQL expresivo, podemos desbloquear nuevos tipos de aplicaciones. Así como la base de datos relacional aceleró la demanda empresarial y ayudó a que las computadoras alcanzaran la adopción generalizada, puede ayudar a las plataformas blockchain a hacer lo mismo, desbloqueando así un mundo digital más libre, más descentralizado y más confiable.