Capítulo 4. La evolución hacia Ethereum
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
En sus inicios, Bitcoin se consideraba una maravilla tecnológica integral. Sin embargo, con el tiempo, los desarrolladores empezaron a darse cuenta de que la tecnología blockchain podía soportar funciones adicionales. Esto llevó a la introducción de nuevos conceptos construidos sobre Bitcoin, y luego a una cadena de bloques completamente nueva conocida como Ethereum.
Mejorar la funcionalidad limitada de Bitcoin
Bitcoin fue el primer protocolo de consenso descentralizado que aplicó el concepto de dinero programado,es decir, la idea de que las transacciones de criptomoneda podrían transmitir fondos dependiendo del estado verdadero/falso de la ejecución de un programa limitado. Inicialmente, muchos consideraron el bitcoin como "dinero programable", pero el dinero con guión es una analogía mejor debido a su funcionalidad limitada. Del mismo modo, al principio se solía considerar al bitcoin como una moneda, pero con el tiempo se empezó a ver más como un depósito de valor y suscitó muchos debates sobre la diferencia entre ambos.
La evolución de Bitcoin llevó a un influyente y ardiente grupo de seguidores de la comunidad de desarrolladores a abogar por un enfoque cauteloso y limitado de los cambios de protocolo, por razones de seguridad y protección. Los cambios de protocolo, como el aumento del tamaño de los bloques, se veían con escepticismo. Estos defensores querían mantener los objetivos básicos de seguir descentralizados y ser inclusivos, hasta el punto de que cualquiera pudiera hacer funcionar un nodo completo con un hardware barato y una conexión a Internet de bajo rendimiento.
Sin embargo, como hemos mencionado en el capítulo anterior, algunos desarrolladores de Bitcoin impulsaron un movimiento hacia soluciones escalables. Bitcoin se convirtió en la base de lo que se convertiría en dinero programable, ya que los desarrolladores empezaron a idear formas de construir sobre él, y más tarde construir blockchains completamente nuevas.
Monedas y fichas de colores
Las monedas de colores permiten que los activos del mundo real, como los valores (por ejemplo, las acciones) o las materias primas (por ejemplo, el oro), se representen y gestionen en la blockchain de Bitcoin. El lenguaje de scripting de Bitcoin está diseñado intencionadamente como incompleto de Turing, lo que significa que los comandos incorporados disponibles son limitados para reducir la complejidad en la red. Por ello, las monedas de colores se construyen sobre la cadena de bloques de Bitcoin, en lugar de directamente sobre ella.
El alcance de Bitcoin es limitado. Sin embargo, su blockchain permite almacenar pequeñas cantidades de datos o metadatos. La representación de algún otro activo puede atribuirse al valor de alguna cantidad de bitcoin mediante una dirección (por ejemplo, 17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhem). El concepto de monedas de colores introdujo la idea de los tokens, que son unidades de valor construidas mediante la programación de un libro de contabilidad único sobre una blockchain existente. Los tokens suelen tener el mismo aspecto y actuar como otras criptomonedas, con la excepción de que están impulsados por otra red de cadena de bloques. Los tokens fueron fundamentales para el desarrollo del ecosistema de Ethereum, y la aparición de las monedas de colores en Bitcoin condujo a los tokens en otras cadenas de bloques.
Mastercoin y los Contratos Inteligentes
La evolución de las soluciones de escalado de Bitcoin avanzó en 2013 con el desarrollo de Mastercoin. Mastercoin fue construido sobre Bitcoin para añadir funciones no incluidas originalmente en el protocolo central de Bitcoin. Esto permitió conceptos de dinero programable más sofisticados, más allá de la simple funcionalidad de Bitcoin. Uno de ellos fue el concepto de contratos inteligentes, que son programas complejos que se ejecutan en blockchains.
Mastercoin introdujo la noción de criptomonedas adicionales, o tokens. Antes de Mastercoin, no era fácil crear nuevas criptomonedas fuera de las bifurcaciones de software. La capacidad de permitir que el dinero enviado a un monedero se redirigiera a otro monedero mediante contratos inteligentes no era una característica de Bitcoin. En esencia, Mastercoin, aunque ahora se considera primitiva, se convirtió en un estudio de las capacidades de Bitcoin y en la exploración de nuevas funcionalidades.
También se atribuye a Mastercoin (y a su inventor, J.R. Willett) la primera oferta inicial de monedas (ICO), un mecanismo de recaudación de fondos basado en blockchain creado para financiar el desarrollo inicial del protocolo.
Comprender la Omnicapa
Omni Layer es una infraestructura de activos descentralizada y de código abierto basada en Bitcoin. Es la sucesora del trabajo realizado por la Fundación Mastercoin con la financiación de su ICO en 2013. Omni Layer es un proyecto en curso, cuya implementación de referencia se conoce como Omni Core.
Omni Core mejora esencialmente elementos de Bitcoin con funciones adicionales. También proporciona capacidades de contratos inteligentes, que permiten a los desarrolladores automatizar las funciones de la moneda de forma descentralizada y transparente. Los contratos inteligentes permiten ejecutar transacciones y acuerdos en la cadena de bloques, realizando funciones que van más allá de las operaciones monetarias. Estas funciones incluyen la capacidad de utilizar tokens para crear nuevas criptomonedas construidas sobre otros protocolos de blockchain (entre otras propiedades que se explican en el Capítulo 5). La Figura 4-1 ilustra la estructura básica del funcionamiento de Omni.
Entre los tokens creados en Omni se incluye MaidSafe, una red de datos autónoma descentralizada propuesta por primera vez por el ingeniero David Irvine en 2006. MaidSafe implementó posteriormente Omni Layer utilizando la tecnología de contratos inteligentes para permitir una ICO, creando el token MAID, que se utiliza dentro de la red.
Amarre
El proyecto más conocido construido sobre Omni es Tether. Abarca un caso de uso que es increíblemente importante en el mundo de las criptodivisas: cómo representar una clase de activo estable en un ecosistema de tokens volátiles. Tether es una criptomoneda digital blockchain, y su objetivo es proporcionar una moneda de reserva estable vinculada al dólar estadounidense. Según el libro blanco de Tether, un token de Tether está vinculado a un dólar estadounidense.
Los activos del mundo real presentan un problema cuando se representan en una cadena de bloques. Es decir, ¿cómo se fija realmente el valor de ese activo en forma tokenizada? Tether afirma estar respaldado por el dólar estadounidense, pero desgraciadamente, aparte de los saldos que figuran en su sitio web, hay pocas pruebas de que realmente haya un dólar estadounidense en una cuenta bancaria por cada tether en circulación. La empresa que está detrás de Tether prometió realizar una auditoría completa de su vinculación uno a uno con el dólar estadounidense, pero en 2018 disolvió su relación con su empresa de contabilidad sin dar explicaciones. El total de tether en circulación en el mercado fluctúa arbitrariamente, y el tether ha llegado a perder su vinculación de un dólar estadounidense por un tether en los mercados, sólo para recuperarse sin muchas explicaciones.
Aunque Tether es un caso de uso temprano interesante para la tokenización y la implementación de la sucesora de Mastercoin, Omni Layer, sigue siendo muy experimental. Demuestra que respaldar una criptomoneda digital de blockchain como Tether con activos del mundo real, como el dólar estadounidense, sigue siendo altamente especulativo y un trabajo en curso.
Cómo funciona Omni Capa
El equipo de Omni Layer se propuso construir todas las funciones que J.R. Willett prometió en su "Segundo Libro Blanco de Bitcoin". Estas características incluían las siguientes:
- Divisas personalizadas
- Cualquiera puede crear monedas cuyo libro mayor es gestionado por la red Omni Layer.
- Intercambio descentralizado
- En lugar de utilizar una bolsa centralizada para facilitar el intercambio de dos monedas entre las partes, el código de Omni Layer ejecuta esta operación.
Al lanzar una cadena de bloques basada en pruebas de trabajo, es importante crear una red sólida de mineros que dediquen potencia hash (infraestructura informática) a procesar transacciones. Cuanto mayor sea la red, más descentralizada, fiable y segura será.
Omni quería centrar sus esfuerzos en hacer que la tokenización y otras funciones de los contratos inteligentes funcionaran en una blockchain descentralizada sin la carga de crear ese efecto de red. Al construir un protocolo de segunda capa sobre Bitcoin, Omni se benefició del gran efecto de red que ya tenía Bitcoin.
Añadir lógica personalizada
Bitcoin realiza operaciones lógicas: reglasque mantienen la cadena de bloques, demostrando que el concepto fundamental de lograr el consenso funciona. Omni añade operaciones lógicas personalizadas a la cadena de bloques de Bitcoin.
Después de marzo de 2014, Bitcoin añadió el campo OP_RETURN
, que permite adjuntar datos adicionales a una transacción bitcoin. Una vez que se añadió el campo OP_RETURN
a Bitcoin, cada transacción Omni empezó a almacenar un registro dentro del campo OP_RETURN
de una transacción bitcoin.
La Figura 4-2 muestra un ejemplo de transacción de Tether registrada en la blockchain de Bitcoin. Se trata de una pequeña transacción de cinco tether, también conocidos como USDT. El ID de la transacción en la blockchain de Bitcoin es:
c082fad4ee07a86c3ff9f31fb840d878c66082ad76ca81f0cafc866dee8aa9fc
Se trata de una transacción Bitcoin que contiene metadatos de la capa Omni. La única diferencia en una transacción Omni es el campo OP_RETURN
. Omni utiliza OP_RETURN
porque proporciona suficiente espacio y es fácil de usar. Los metadatos del campo OP_RETURN
se traducen en el envío de cinco USDT. La Figura 4-3 muestra la misma transacción en Omniexplorer. Observa que el ID de la transacción es el mismo.
El valor del campo OP_RETURN
, 6f6d6e69000000000000001f000000001dcd6500
, son los metadatos de Omni Layer que registran la transacción UDST. Los metadatos están codificados en formato hexadecimal, y la Tabla 4-1 los convierte a formato ASCII o decimal.
Valor almacenado en OP_RETURN (hexadecimal) | Como ASCII o decimal | Descripción |
---|---|---|
6f6d6e69 |
omni | Bandera Omni para identificar que se trata de una transacción Omni. |
00000000 |
Envío simple | Tipo de transacción. |
0000001f |
31 | El tipo de propiedad es 31, que es USDT. Puedes ver todas las propiedades de Omni Layer en el sitio Omniexplorer. |
000000001dcd6500 |
5.00000000 | El importe a enviar es 5,00000000. Todas las transacciones de Omni Layer contienen ocho decimales. |
Ethereum: Llevando Mastercoin al siguiente nivel
Ethereum representa una evolución en el diseño y la forma de pensar sobre las redes de criptomonedas. Es un protocolo de computación más funcional y general que se basa en conceptos de Bitcoin y Mastercoin, entre otros proyectos.
El concepto de Ethereum fue propuesto por primera vez por Vitalik Buterin en 2013. Tras presionar a la Fundación Mastercoin para que introdujera cambios en su protocolo y añadiera más funcionalidades, y observar su reticencia a hacerlo, Buterin empezó a trabajar con Gavin Wood y posteriormente con otros fundadores para crear el protocolo Ethereum.
El objetivo de Ethereum era llevar a Mastercoin al siguiente nivel, es decir, crear un sistema informático descentralizado y abierto asegurado por consenso. Aunque Buterin imaginó que Ethereum tendría una alternativa a el mecanismo de prueba de trabajo de Bitcoin, que consideraba derrochador, actualmente utiliza un algoritmo de prueba de trabajo similar al de Bitcoin, llamado Ethash. Se espera que Ethereum pase a un modelo de seguridad proof-of-stake en el futuro, un ambicioso proyecto que cambia el paradigma de la minería dentro del protocolo, del que se habla más en el Capítulo 10.
Éter y gas
La unidad de cuenta en Ethereum es el éter. Esta criptomoneda se comporta de forma similar a bitcoin, con una nomenclatura de direcciones de transacción similar. Las direcciones de Ethereum comienzan con la secuencia 0x. La blockchain tiene tiempos de confirmación mucho más rápidos, salvo por la congestión periódica de la red, y Ethereum es conocido por ser un mecanismo de transferencia mucho más rápido que Bitcoin.
Como se describe en el Capítulo 2, Bitcoin utiliza una estructura de salida de transacciones no gastadas (UTXO) para hacer un seguimiento de los saldos en las cuentas. Ethereum rastrea los saldos en el estado de cuenta. UTXO es como tener efectivo físico: billetes y monedas. El enfoque de Ethereum es como tener todos tus fondos en una cuenta bancaria. Con UTXO, es mucho más complejo hacer pagos y calcular el saldo de una cuenta.
Por ejemplo, supongamos que estás en una cafetería. Tienes tres billetes de 1 $ en el bolsillo y quieres comprar un café por 1,50 $. No puedes darle al cajero 1,50 $; tienes que darle dos de los billetes de 1 $ y recibir de vuelta 0,50 $ en cambio. Después, si quieres saber cuánto dinero tienes para gastar, tienes que calcular el valor de todos los billetes y monedas que tienes en el bolsillo.
Con Bitcoin ocurre lo mismo. Supón que tu dirección Bitcoin ha recibido tres transacciones separadas de 1 BTC, y quieres enviar 1,5 BTC a un amigo. Al igual que con el dinero físico, no puedes enviar 1,5 BTC; tienes que enviar 2 BTC. Esto se debe a que cada una de esas transacciones de 1 BTC que recibiste en el pasado debe gastarse como una cantidad entera. Así que envías dos de las transacciones anteriores de 1 BTC, y a cambio recibes 0,5 BTC de cambio. Este proceso se produce en una única transacción bitcoin.
Las transacciones de Ethereum son mucho más sencillas, similares a enviar y recibir fondos almacenados en una cuenta bancaria. Si tu dirección de Ethereum recibe tres transacciones separadas de 1 ETH, el saldo que aparecerá en la red será de 3 ETH. No es necesario que calcules tú mismo el saldo de tu cuenta sumando las distintas transacciones. Y si quieres enviar 1,5 ETH, sólo tienes que enviar 1,5 ETH; no hay necesidad de enviar más y recibir cambio.
Ethereum también ofrece funciones adicionales. Toma elementos de Bitcoin y Mastercoin para crear transacciones basadas en la aplicación blockchain, lo que significa que ofrece más funciones que el mero envío y recepción basados en la cuenta. Ethereum tiene otra unidad de cuenta llamada gas. Gas permite a los desarrolladores ejecutar aplicaciones en la plataforma Ethereum; estas aplicaciones se conocen en como aplicaciones descentralizadas o dapps (de las que hablaremos en detalle más adelante en este capítulo).
Gas también resuelve uno de los peligros de utilizar un lenguaje de programación en una cadena de bloques. Los desarrolladores pueden ejecutar dapps en Ethereum sin que se encuentre con lo que se conoce como el problema de la detención, o la incapacidad de evitar que el código se ejecute indefinidamente o en bucles infinitos. Ethereum exige que se utilice gas para los cálculos del código ejecutado dentro de un contrato inteligente, para que una dapp sea lo más eficiente posible. En cada transacción de Ethereum, los desarrolladores especifican un límite de gas, de modo que si se produce un bucle infinito, la transacción acabará por quedarse sin gas, y el minero seguirá ganando las comisiones por ejecutar la transacción.
Casos prácticos: ICOs
Hay una serie de aplicaciones para un protocolo informático de transacciones que utilice contratos inteligentes. El concepto de contratos ricardianos propuesto por Ian Grigg en 1996 proporciona una idea del ámbito de los casos de uso de esta tecnología. Las innovaciones incluyen el uso de una función hash criptográfica para la identificación y la definición de elementos legales como legibles por un ordenador. Al poder ejecutar un conjunto de instrucciones (mediante un contrato inteligente) y asociarlo a un sistema contable (mediante una cadena de bloques), la plataforma Ethereum puede utilizarse para ejecutar una serie de dapps diferentes.
Durante los primeros años tras el lanzamiento de Ethereum, el ecosistema de desarrolladores tardó en crecer. Pero los desarrolladores se dieron cuenta de que una de sus capacidades más potentes era la posibilidad de recaudar fondos de criptomoneda de forma automatizada y segura, utilizando contratos inteligentes: la ya mencionada ICO. Por ejemplo, un proyecto que necesite recaudar dinero para lanzar un concepto podría establecer un contrato inteligente para recibir ether. A cambio, podría dar a los donantes una criptomoneda canjeable construida sobre Ethereum.
Nota
La legalidad de las ICO es cuestionable, y muchos proyectos han finalizado prematuramente debido a los problemas legales que han causado. Esta cuestión se trata con más detalle en el Capítulo 9.
La idea de recaudar fondos en criptomoneda para lanzar un proyecto no empezó con Ethereum. El empresario Erik Voorhees recaudó dinero utilizando el rudimentario mecanismo de aceptar bitcoin a cambio de "acciones" digitales para financiar el sitio de apuestas basado en blockchain Satoshi Dice en 2012. Mastercoin también utilizó este concepto, aunque de forma mucho más organizada.
La ICO de MaidSafe estaba tan sobrevendida que, al final, los donantes tuvieron que canjear los bitcoins recibidos con mastercoin en lugar de safecoin. Fallos técnicos como éste en pusieron de manifiesto la necesidad de una plataforma más fiable para la recaudación de fondos criptográficos. Con el tiempo, a medida que Ethereum maduraba, su plataforma de contratos inteligentes, junto con la capacidad de crear tokens sobre la cadena de bloques de Ethereum, la convirtieron en un aparato automatizado de recaudación de fondos ideal para poner en marcha varios proyectos de criptomonedas.
Organizaciones Autónomas Descentralizadas
En un esfuerzo por fomentar el espíritu de descentralización en el ecosistema Ethereum de , se propuso el concepto de organización autónoma descentralizada (DAO) como forma de utilizar los contratos inteligentes para sustituir el gobierno de las autoridades centralizadas. Al igual que el concepto de ICO sustituye a las funciones centralizadas de una oferta pública inicial (OPI ), las DAO utilizan proyectos de recaudación de fondos de criptomonedas para crear un sistema de gobierno distribuido por el que los inversores de la ICO tengan derechos de voto proporcionales a la propiedad de los tokens adquiridos en una ICO.
Este concepto se puso a prueba en un proyecto conocido como The DAO. Lanzado en abril de 2016, The DAO era un proyecto de ICO basado en contratos inteligentes, construido sobre Ethereum y diseñado para funcionar de forma autónoma. Las decisiones sobre la inversión de los fondos recaudados en proyectos tecnológicos debían basarse en los derechos de voto de los poseedores de tokens. La DAO consiguió recaudar más de 154 millones de dólares a través de tokens basados en Ethereum de once mil inversores.
Bifurcación de Ethereum y creación de Ethereum Classic
Tras su lanzamiento, se descubrieron varias vulnerabilidades en el código del contrato inteligente de la DAO. Uno de estos problemas incluía una vulnerabilidad de llamada recursiva. Los programadores habían identificado un fallo en el código: cuando se retiraban fondos de un monedero, el saldo sólo se actualizaba al final de la llamada a la función. Si se volvía a llamar a la misma función antes de que finalizara la llamada inicial, sería posible seguir retirando los mismos fondos una y otra vez, un problema conocido como recursividad infinita.
Inmediatamente anunciaron que se había identificado el fallo y que se solucionaría, pero antes de que pudieran lanzar su actualización, el 17 de junio de 2016, esta vulnerabilidad fue explotada por un atacante que pudo robar más de 50 millones de dólares en éter del DAO. Los desarrolladores de la DAO no tenían ningún recurso para actualizar el código del contrato implementado, ya que estaba almacenado de forma inmutable en la cadena de bloques. La única forma de rectificar la situación era implementar un nuevo contrato y transferir los fondos restantes, un proceso engorroso y doloroso.
Este suceso llevó a la Fundación Ethereum a bifurcar la blockchain de Ethereum, con el fin de deshacer el daño. Creó dos versiones distintas de Ethereum: la blockchain original con los fondos robados aún acreditados al atacante, conocida como Ethereum Classic, y una versión bifurcada que retiraba dichos fondos, que seguía conociéndose como Ethereum. Este hard fork trasladó los fondos robados a una dirección de recuperación para que sus legítimos propietarios pudieran reclamarlos.
La bifurcación supuso cambiar la cadena de bloques de Ethereum para que el pirateo del DAO nunca hubiera ocurrido, violando el principio de inmutabilidad. Fue una decisión controvertida a la que se opusieron algunos miembros de la comunidad, que optaron por continuar con la versión inalterada de la cadena de bloques. Ethereum Classic es una cadena de bloques de contratos inteligentes que todavía existe, pero su comunidad de desarrolladores es pequeña y no tan sólida como la de Ethereum.
Otras bifurcaciones de Ethereum
El hackeo del DAO calentó a la comunidad de criptomonedas con la idea de las bifurcaciones. Además de crear Ethereum Classic, la cadena de bloques Ethereum se ha bifurcado otras veces para compensar vulnerabilidades y otros cambios en el código. El proyecto Ethereum comprende la necesidad de experimentar, y cuando se ponen de manifiesto actualizaciones que se consideran importantes para toda la comunidad, la bifurcación se considera una alternativa mejor que mantener el concepto de inmutabilidad. El ecosistema Ethereum no tiene reparos en bifurcar su blockchain y reunir el impulso suficiente para que tales cambios tengan éxito. Esta actitud contrasta fuertemente con otras cadenas, como Bitcoin, donde la inmutabilidad es sacrosanta.
Organizaciones clave en el ecosistema Ethereum
En el ecosistema de Ethereum, múltiples partes interesadas y organizaciones apoyan la visión que Ethereum está construyendo, y cada organización la apoya desde su propio ángulo.
La Fundación Ethereum
Como líder en el desarrollo de la hoja de ruta y en la implementación de nuevos cambios en la plataforma Ethereum, la Fundación Ethereum ejerce una influencia significativa en la comunidad. También financia proyectos de escalabilidad relacionados con la plataforma, como Plasma, una solución que pretende aumentar el número de transacciones en la plataforma sin sacrificar la seguridad de la red.
La predecesora de la Fundación Ethereum se formó como una entidad suiza sin ánimo de lucro, e inició la ICO de Ethereum. Tras recaudar más de 18 millones de dólares de la comunidad en bitcoin, la entidad suiza transfirió esos fondos a la Fundación Ethereum, que ha sido el proveedor clave de financiación para los esfuerzos de desarrollo antes mencionados.
La Alianza Empresarial Ethereum
Anunciada a principios de 2017, la Enterprise Ethereum Alliance (EEA) pretende agrupar a entidades corporativas interesadas en la implementación de soluciones de blockchain de Ethereum. Entre los miembros de la EEA se encuentran IBM y Microsoft, que apoya la ejecución de servicios de blockchain de Ethereum sobre Azure.
Uno de los principales objetivos de la AEMA es encontrar casos de uso específicos de blockchain en entornos empresariales corporativos. Muchas grandes organizaciones desconfían del aspecto de criptomoneda de las cadenas de bloques debido al cumplimiento de la normativa y otras preocupaciones regulatorias. Gran parte del trabajo relacionado con Ethereum que se está realizando en el ámbito corporativo implica bifurcarlo para crear una blockchain privada que separe el token de los mercados públicos de criptomonedas. En el Capítulo 9 se analizan más a fondo las cadenas de bloques privadas y autorizadas.
Paridad
Parity, una empresa de soluciones de software con sede en Londres, fue creada por Gavin Wood, uno de los fundadores originales de Ethereum que contribuyó con código desde muy pronto a la formación de los conceptos de protocolo de Ethereum. Parity ha desplegado varias herramientas de desarrollo para facilitar la implementación de Ethereum, incluidos marcos de referencia.
La empresa es conocida por haber sido víctima del "hackeo de Parity" en 2017, en el que un atacante desconocido robó ether por valor de 30 millones de dólares. Este fue el segundo mayor hackeo de Ethereum (después de The DAO); explotó una vulnerabilidad en los monederos multifirma de Parity que permitió al atacante enviar dos transacciones, una de las cuales incluía lógica de abstracción para cambiar una dirección de monedero en el código.
ConsenSys
Fundada por el cofundador de Ethereum Joseph Lubin, ConsenSys es una organización que desarrolla aplicaciones empresariales, invierte en startups, construye herramientas para desarrolladores y ofrece educación sobre blockchain para la red Ethereum. La organización se centra en el desarrollo de dapps. Sus ofertas incluyen Truffle Suite, un marco que facilita el desarrollo de Ethereum, y Gitcoin, una herramienta de recompensa por errores inspirada en GitHub para la cadena de bloques Ethereum.
ConsenSys también tiene la misión de crear herramientas fáciles de usar dentro del ecosistema Ethereum. Una de las más conocidas es MetaMask, un monedero de Ethereum basado en navegador que facilita el uso de aplicaciones descentralizadas. ConsenSys también financia proyectos que crean dapps y otras aplicaciones útiles.
Aplicaciones descentralizadas (Dapps)
Ya hemos mencionado que las aplicaciones que se ejecutan mediante un contrato inteligente en una cadena de bloques se conocen como aplicaciones descentralizadas o dapps. Las dapps suelen tener una arquitectura con un backend que utiliza un contrato inteligente que se ejecuta en una cadena de bloques y una interfaz de usuario delgada que interactúa con él. Es similar a una arquitectura cliente/servidor, en la que el servidor es el contrato inteligente. Este tipo de aplicaciones hacen que la cadena de bloques sea más programable y funcional.
Una dapp es básicamente cualquier programa informático que se ejecuta en una plataforma de contratos inteligentes, y la mayor plataforma para esto hoy en día es Ethereum. Como comentamos en el Capítulo 1, en informática, un sistema distribuido es aquel en el que los componentes se encuentran en recursos informáticos dispares, y existe un sistema para que se produzcan comunicaciones entre estos recursos. Ejemplos de sistemas distribuidos son muchas redes de telecomunicaciones y la web.
Hay otras plataformas que proporcionan la capacidad para dapps, pero Ethereum es, con diferencia, la mayor plataforma para que los desarrolladores ejecuten código distribuido.
Casos prácticos
Una característica clave de una dapp es la inmutabilidad, lo que significa que ninguna autoridad centralizada puede cambiar el código después de que se haya publicado en la blockchain. Por esta razón, los casos de uso de las dapps se encuentran generalmente donde hay un cuello de botella en los sistemas centralizados. Muchas aplicaciones centralizadas, por ejemplo, no son resistentes a la censura. En muchas aplicaciones centralizadas, un tercero decide lo que los usuarios pueden y no pueden ver. A menudo estas decisiones son subjetivas, aparentemente arbitrarias, y se toman sin contar con la opinión de los usuarios. Con el uso de una plataforma backend como Ethereum y la Web, los desarrolladores pueden implementar aplicaciones sin permisos, que difieren mucho de sus homólogas centralizadas.
Otra característica de las dapps es que permiten la transferencia eficaz y segura de activos digitales mediante el uso de blockchains. Por ejemplo, hoy en día muchas aplicaciones ofrecen resistencia a la censura (piensa en BitTorrent) y privacidad (mediante el cifrado). Sin embargo, lo que las dapps permiten más allá de estas dos propiedades es que la transferencia de valor puede ejecutarse rápida y programáticamente.
Nota
Las plataformas Dapp son relativamente nuevas. Todavía hay mucho que aprender sobre la mejor forma de crearlas, y la infraestructura para hacerlo está aún en fase de crecimiento. Las Dapps aún no se utilizan ampliamente. De hecho, hay dudas sobre su tracción y capacidad de permanencia, y los propósitos de algunas dapps parecen hoy nefastos. Muchas de ellas están diseñadas para evitar el escrutinio regulador, y hay numerosas dapps de apuestas, juegos e intercambio descentralizado en uso.
Desafíos en el desarrollo de Dapps
Hoy en día, la creación de dapps plantea varios problemas de diseño, como la implementación, la experiencia del usuario, la velocidad y la escalabilidad. Estos problemas existen actualmente en todas las plataformas de dapp, incluida Ethereum.
Cuando un desarrollador implementa un contrato inteligente para una dapp, necesita estar seguro de que su código no contiene fallos críticos. No es fácil actualizar los contratos. La mayoría de las plataformas de contratos inteligentes, incluida Ethereum, no permiten volver a desplegarlos en la misma dirección. Además, la actualización suele conllevar una difícil migración de datos del estado que gestiona el contrato inteligente.
Los desarrolladores pueden probar sus dapps en una de las cuatro redes de prueba de Ethereum. Los desarrolladores de dapp responsables pasarán meses haciendo que sus contratos sean auditados por auditores de seguridad profesionales (Quantstamp, OpenZeppelin), que luego publicarán sus informes al público. Durante este tiempo, también invitarán a personas de la comunidad a auditar sus contratos inteligentes a través de GitHub.
A diferencia de las aplicaciones centralizadas, en las que la experiencia del usuario es continua, la implementación de un nuevo código de contrato inteligente podría interrumpir la experiencia del usuario. Además, la velocidad de las dapps depende de la velocidad de la cadena de bloques y de sus tiempos de confirmación. Este problema saltó a la palestra en Ethereum a finales de 2017 con la dapp CryptoKitties, cuya popularidad provocó que un enorme número de transacciones congestionara la red Ethereum. Esto hizo que la dapp fuera prácticamente inutilizable hasta que se calmó el entusiasmo.
Ahora que ya tienes algunos antecedentes, vamos a profundizar un poco más en la creación, implementación y trabajo con los contratos inteligentes de Ethereum.
Implementación y ejecución de contratos inteligentes en Ethereum
Los contratos inteligentes han recorrido un largo camino desde que se propuso el concepto por primera vez en la década de 1990. Omni Layer demostró que era posible ejecutar una dapp sobre una cadena de bloques, pero tenía muchas limitaciones, la mayor de las cuales era quién tenía permiso para crear e implementar la dapp. Si alguien quería implantar una dapp, tenía que convencer a los desarrolladores de la plataforma para que la añadieran al código de Omni Core. En efecto, Omni Core era la dapp donde se desplegaba todo el código. El desarrollo del código estaba centralizado, y sólo los desarrolladores de Omni Core podían actualizarlo. Los desarrolladores que querían desplegar dapps por su cuenta tenían que explorar otras opciones, como bifurcar Omni Core y crear su propio cliente que funcionara sobre Bitcoin, una tarea nada fácil.
Otras limitaciones de Omni Core eran las siguientes:
- El escalado y la velocidad de Blockchain dependían de Bitcoin y de sus desarrolladores principales
- Omni Core sigue teniendo una influencia limitada sobre el futuro de la cadena de bloques sobre la que funciona.
- La blockchain de Bitcoin no está diseñada para la ejecución de programas
- Está optimizado para el almacenamiento de valor, y su limitado lenguaje de scripting significa que nunca será adecuado para sofisticados contratos inteligentes construidos directamente sobre la blockchain. Por ejemplo, el campo
OP_RETURN
tiene un límite de almacenamiento de 80 bytes, lo que limita los tipos de programas que puedes ejecutar en Omni Layer.
La máquina virtual de Ethereum
La máquina virtual de Ethereum (EVM) facilita a los desarrolladores la creación de dapps y a la red su ejecución. El propósito de la EVM es doble:
-
Permitir a los desarrolladores la implementación de contratos inteligentes en la cadena de bloques.
-
Instruir a los mineros sobre cómo ejecutar el código del contrato inteligente EVM incrustado en el software que ejecutan
Crear un contrato inteligente
Los desarrolladores pueden utilizar varios lenguajes diferentes para crear un contrato inteligente. El lenguaje más común es Solidity.
Consejo
ConsenSys ha publicado en un conjunto de herramientas para facilitar a los desarrolladores la creación, depuración e implementación de contratos inteligentes con Solidity, llamado Truffle Suite.
Para interactuar con un contrato inteligente, necesitas un monedero de Ethereum. El monedero más popular es MetaMask, que es una extensión del navegador. Este monedero almacena una copia de tus claves semilla y privada localmente en tu máquina.
Nota
La semilla y la clave privada no se almacenan de forma centralizada. Es importante hacer una copia física de la semilla mnemotécnica (por ejemplo, en papel) y guardarla en un lugar seguro por redundancia. Además, utilizar un monedero de hardware en lugar de confiar en que las claves privadas se mantienen localmente por el software del monedero puede ayudar a aumentar la seguridad. Para más información sobre la elección del monedero, consulta el Capítulo 2.
Antes de implementar tu contrato inteligente en la red principal de Ethereum, es aconsejable probarlo en una de las redes de prueba más comunes:
Los desarrolladores de contratos inteligentes necesitan gastar éter en forma de gas para implementar y cambiar el estado de un contrato. Todos los testnets de Ethereum tienen grifos donde puedes conseguir ETH (tETH) de testnet de forma gratuita. Estos testnets constituyen un entorno ideal para los contratos inteligentes.
Implementación de un contrato inteligente
Después de que un desarrollador haya escrito un contrato inteligente , puede publicarlo en la red principal o en el entorno de producción, o en cualquiera de las redes de prueba. La publicación se realiza enviando una transacción de contrato inteligente a la red Ethereum. La forma más sencilla de generar esta transacción es utilizando la herramienta Ethereum Remix.
Remix es un entorno de desarrollo integrado (IDE) basado en la nube para el desarrollo de contratos inteligentes. Es compatible con los lenguajes Solidity y Vyper, y al ser un sitio web no es necesario instalar software. Permite a los desarrolladores escribir, depurar, compilar y distribuir código de contratos inteligentes a la red Ethereum, incluidos los entornos mainnet y testnet.
La Figura 4-4 muestra el aspecto de la implementación del contrato inteligente Mastering_Blockchain_Guestbook.sol en Remix. En este caso, se está implementando en la red Ropsten.
Para implementar el contrato inteligente, debes hacer clic en el botón Implementar. A continuación, Remix envía los datos de la transacción a MetaMask, que solicita tu autorización para completar la transacción.
Una vez autorizada la transacción, MetaMask envía a la red una transacción de creación de contrato inteligente. La Figura 4-5 muestra cómo es esto.
Observa lo siguiente en esta transacción:
-
El valor de la transacción es 0 éter, lo que indica que no se han transferido éteres.
-
La transacción se registra en el bloque nº 5357662.
-
El minero que descubrió este bloque recibe una comisión por transacción de 0,00137715 Testnet ETH (tETH).
Después de que la red Ethereum procese una transacción, almacena el contrato inteligente en la red Ethereum en formato bytecode, que ocupa menos espacio, como se ilustra en la Figura 4-6.
Como el código del contrato inteligente está en la red de pruebas de Ethereum, es visible para el público (ver Figura 4-7).
Cuando se crea un contrato inteligente, se le asigna una dirección de Ethereum. Esta dirección Ethereum puede mantener un saldo de ETH y enviar/recibir ETH igual que una dirección Ethereum normal.
Interactuar con un contrato inteligente
Ahora que el contrato inteligente Libro de visitas se ha desplegado en la red de pruebas de Ethereum, es posible empezar a leer datos de él y a escribir datos en él. Para leer datos del contrato sólo tienes que hacer ping a la red directamente, como si hicieras una llamada a una API pública. Sin embargo, para escribir datos en el contrato, debes enviar una transacción a la dirección del contrato.
Todas las interacciones de lectura/escritura con un contrato inteligente requieren una referencia a la interfaz binaria de aplicación (ABI) del contrato. La ABI es como una API para un contrato inteligente. Las ABI son legibles por la máquina, lo que significa que son fáciles de analizar por el software cliente para entender cómo interactuar con el código del contrato. Una ABI documenta todas las funciones y sus atributos.
Aquí tienes la ABI del contrato inteligente Libro de visitas:
[{"constant":true,"inputs":[{"name":"_bookentrynumber","type":"uint256"}], "name":"getmessagefromreader","outputs":[{"name":"_messagefromreader", "type":"string"}],"payable":false,"stateMutability":"view","type":"function"}, {"constant":true,"inputs":[],"name":"getnumberofmessagesfromreaders", "outputs":[{"name":"_numberofmessages","type":"uint256"}],"payable":false, "stateMutability":"view","type":"function"}, {"constant":true,"inputs":[],"name":"getmessagefromauthors", "outputs":[{"name":"_name","type":"string"}],"payable":false, "stateMutability":"view","type":"function"}, {"constant":false,"inputs":[{"name":"_messagefromreader","type":"string"}], "name":"setmessagefromreader","outputs":[],"payable":false, "stateMutability":"nonpayable","type":"function"}, {"constant":false,"inputs":[{"name":"_messagefromauthors","type":"string"}], "name":"setmessagefromauthors","outputs":[],"payable":false, "stateMutability":"nonpayable","type":"function"}, {"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]
Leer un contrato inteligente
Vamos a leer los datos del contrato inteligente Libro de Visitas. Deberías ver algo como la Figura 4-8.
Esta figura muestra las tres funciones de lectura que tiene el contrato inteligente Libro de Visitas. La primera función requiere una entrada para devolver datos, y las otras dos no.
Escribir un contrato inteligente
Ahora escribamos algunos datos en el contrato inteligente Libro de Visitas. Este tendrá un aspecto similar al de la Figura 4-9.
La extensión de navegador MetaMask te dará la opción de conectarte o no al sitio web. Después de conectarte al sitio web, puedes empezar a escribir datos en el contrato. Observa que ocurren dos cosas cuando haces clic en Confirmar:
-
Etherscan genera una nueva transacción, la rellena con los datos correctos y la envía a tu monedero MetaMask.
-
A continuación, MetaMask pide autorización para enviar esa transacción.
Después de pulsar Confirmar, tu transacción se envía a la red Ethereum.
Ejecutar un contrato inteligente
Como parte del descubrimiento de bloques, los mineros de Ethereum añaden transacciones a los bloques de forma muy similar a los mineros de Bitcoin. Hay dos acciones principales que puede desencadenar una transacción:
- Pago
- Envía el valor ETH de la dirección A a la dirección B.
- Ejecución
- Ejecuta el contrato inteligente.
Si se cumple lo siguiente, el minero ejecutará el código del contrato inteligente a través del EVM:
-
La dirección receptora es un contrato inteligente.
-
La carga útil contiene datos.
El ejemplo de mensaje de prueba anterior creó una transacción en la que la dirección receptora es el contrato inteligente Mastering_Blockchain_Guestbook, y la carga útil contiene los siguientes datos:
Function: setmessagefromreader(string_messagefromreader) MethodID: 0xe4cb814b [0]: 0000000000000000000000000000000000000000000000000000000000000020 [1]: 0000000000000000000000000000000000000000000000000000000000000020 [2]: 5468697320697320612074657374206d6573736167652c206279204c6f726e65
Gas y precios
Como hemos comentado en, el gas es una unidad de cuenta utilizada en el ecosistema de Ethereum para calcular cuánto se paga a los mineros de éter por procesar transacciones. Cuando un minero ejecuta una transacción de contrato inteligente a través de la EVM, ejecuta opcodes -instruccionesa nivel de máquina- que están escritos en el contrato inteligente. Cada opcode que ejecuta tiene un precio de ether asociado.
La Figura 4-10 muestra ejemplos de opcodes y precios de gas.
El gas es necesario porque recompensa a los mineros por procesar una transacción mediante un contrato inteligente. También defiende la red contra el spam y los ataques de denegación de servicio. El Gas se paga en ETH. El minero recibe la recompensa fija habitual por descubrir el bloque, más la ETH recibida del gas por procesar todo el código del contrato inteligente.
Al estructurar una transacción, hay dos campos relacionados con el gas que debes introducir:
- Precio del gas
- La cantidad de ETH pagada por cada unidad de gas. Si un usuario quiere que su transacción se procese inmediatamente, puede pagar un precio de gas más alto para incentivar al minero a que elija su transacción en lugar de otras transacciones en espera de ser procesadas.
- Límite de gas
- La cantidad máxima de gas que estás dispuesto a pagar al minero para que procese tu transacción. La cantidad de gas especificada aquí debe ser suficiente para ejecutar todos los opcodes que se espera que realice la función de contrato.
Nota
Wei es la unidad más pequeña de éter (ETH), que es 10e-18 ETH. El dólar estadounidense es divisible por dos decimales. ETH es divisible por 18 decimales. Al igual que el dólar estadounidense tiene el penique como unidad de valor más pequeña, un wei es la unidad de valor más pequeña en Ethereum. Un satoshi es la unidad de valor más pequeña de Bitcoin.
Aquí tienes algunas denominaciones más:
-
1 wei = 1 wei
-
1 kwei = 1.000 wei
-
1 mwei = 1.000.000 wei
-
1 gwei = 1.000.000.000 wei
Consejo
ETH Gasolinera es un sitio muy útil para calcular el precio de la gasolina que debes pagar en función del uso actual de la red.
En el ejemplo anterior del contrato inteligente Libro de Visitas, en el que escribimos un mensaje de prueba, las cantidades eran las siguientes:
-
Límite de gas: 128.050
-
Gas utilizado por transacción: 85.367 (66,67%)
-
Precio del gas: 0,000000001 éter (1 gwei)
Interactuar con el código
He aquí un par de métodos populares para que interactúe programáticamente con la red Ethereum:
- Web3.js
- La forma más habitual en que los desarrolladores hacen que sus sitios web interactúen con MetaMask y los contratos inteligentes de es a través de Web3.js, una biblioteca de Node.js.
- Infura
- Otra opción popular es Infura, que proporciona una API REST a la red Ethereum. Esta API está estructurada de un modo que resulta familiar a los desarrolladores. La ventaja de utilizar Infura es que la curva de aprendizaje para la implementación es mucho menor porque gestiona el acceso a Ethereum. La desventaja es que los desarrolladores deben confiar en que Infura proteja y transmita los datos correctamente.
Resumen
El ecosistema Ethereum se desarrolló rápidamente desde una idea propuesta públicamente en 2014 hasta la red completa que es hoy. Gracias a sus propiedades de contrato inteligente y al gran número de recursos y herramientas que se están creando en el ecosistema, muchos desarrolladores eligen ahora construir en Ethereum en lugar de Bitcoin. Ethereum y Bitcoin comparten parte de la tecnología, pero su avance va ciertamente por caminos separados.
Get Dominar Blockchain now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.