Ethereum es una plataforma distribuida y descentralizada que permite la creación de contratos inteligentes. Al igual que Bitcoin, esta red es de acceso libre donde cualquier desarrollador puede crear y publicar aplicaciones distribuidas que realicen contratos inteligentes.
En cierto sentido, Ethereum es quizás la intención de aplicar lo aprendido en Bitcoin pero con el objetivo de resolver problemas adicionales al envío de valores.
Ethereum no solo elimina al intermediario (arbitrador de confianza) sino que además permite el desarrollo de toda una nueva gama de aplicaciones para diferentes fines de forma descentralizada y distribuida.
Ethereum busca permitir la creación de servicios de internet similares a los actuales (redes sociales, banca en línea, etc.) pero devolviendo el control de los datos y fondos al usuario final.
A diferencia de otras blockchain basadas en modificaciones de Bitcoin, Ethereum busca innovar en las siguientes áreas:
- Emisión de divisas: Ethereum es una plataforma que permite la creación de múltiples divisas bajo la misma red con el objetivo de ser una “economía democrática”. Si alguien quiere desarrollar su propia criptomoneda no es necesario reinventar una nueva blockchain
- Organización Descentralizada Autónoma (DAO): Es una forma de entidades digitales que puede ser desarrollada para la administración de recursos compartidos sobre una serie de términos y condiciones consagrados en el código y empoderado por la decisión colectiva de los stakeholder.
- Contratos inteligentes: Nuevos contratos pueden ser desarrollados sin la necesidad de que su aplicación y ejecución sea puesta a través del sistema legal dado que son programas que facilitan, aseguran, hacen cumplir y ejecutan acuerdos establecidos entre personas y organizaciones.
- Propiedades inteligentes: La definición de propiedades se expandirá con la idea de la criptografía, ya que tokens basados en blockchain podrían servir de representación de activos en el mundo real.
Orígenes del proyecto
Ethereum es un fork patrocinado y ejecutado por un subconjunto de usuarios y programadores de la comunidad Bitcoin que visualizaron la necesidad de desarrollar funcionalidades adicionales sin tener que crear una nueva blockchain.
La blockchain de Bitcoin, desde su génesis, está desarrollada para la gestión y registro de transacciones de forma segura. Este grupo postulaba la modificación de Bitcoin con la intención de representar otros tipos de activos.
En lugar de enviar y recibir dinero, esta comunidad quería utilizar bitcoins para la representación de productos básicos, derivados y otros productos financieros, en fin, cualquier cosa que una línea de código pudiera representar como un activo digital.
Al intentar implementar la teoría a la práctica surgió el problema de que ciertas características intrínsecas que permitieron el éxito inicial de Bitcoin hicieran muy difícil convertir a los bitcoins en algo más allá que la mera representación de dinero.
En una blockchain como la de Bitcoin, un usuario puede controlar un activo controlando la llave privada. Sin embargo, con la utilización de colored coins representando un activo como una onza de oro, un usuario puede controlar la llave privada asociada al activo, sin controlar el oro en sí.
Basada en esta premisa, el equipo Ethereum se propuso la construcción de una nueva blockchain que incluyera un lenguaje de programación completamente nuevo, desde cero, con el objetivo de crear un “ordenador mundial” con un gran poder de computación para ser utilizado por cualquier usuario.
Estructura
Similar a Bitcoin, Ethereum no es una entidad monolítica, sino más bien, un conjunto de componentes que se interrelacionan entre sí. Los componentes de Ethereum incluyen un sistema criptográfico y de direcciones, una red de validadores (mineros), un algoritmo de consenso, una blockchain, el Ethereum Virtual Machine (EVM), un conjunto de lenguajes de programación y una estructura económica compleja.
A continuación explicaremos el funcionamiento de algunos componentes específicos y resaltaremos las funcionalidades que cada uno proporciona a la red Ethereum.
Lenguaje de scripting
Un lenguaje de scripting es aquel que permite la creación de scripts. Los scripts son un conjunto de instrucciones que permiten la automatización de tareas sin la intervención de un operador humano.
Bitcoin tiene un lenguaje propio de scripting, aún así la comunidad no ha puesto mucho énfasis en su desarrollo. Los desarrolladores han priorizado sus esfuerzos en las funciones de envío y ejecución de transacciones dejando de lado otros aspectos más generales como el desarrollo de aplicaciones.
Por el contrario, Ethereum presenta un entorno de desarrollo “Turing-complete”. Esto significa que en caso de tener un sistema con recursos ilimitados (memoria, almacenamiento y poder computacional) pudiera ser factible la ejecución de un loop infinito.
En otras palabras, las capacidades y funcionalidades empotradas dentro de una transacción en la red Ethereum está limitada solamente por la disponibilidad de divisas del propio protocolo.
Obviamente, esta funcionalidad tiene como contraparte el aspecto seguridad. Un lenguaje de scripting poderoso es susceptible a la creación de aplicaciones que pudieran explotar vulnerabilidades existentes dentro del sistema.
Transacciones
La diferencia más notable entre la blockchain de Ethereum y Bitcoin esque las transacciones en Ethereum incluyen el estado más reciente de la transacción. Esta característica es necesaria para la administración de dos tipos de cuentas:
- External Own Accounts (EOA). Es la forma de cuenta más básica. Las cuentas EOA interactúan y generan actualizaciones en la blockchain
- Contractos: Son entidades que se ejecutan al momento de recibir instrucciones en forma de una transacción desde una cuenta EOA. Un contrato puede colocar o retirar fondos, al mismo tiempo, puede requerir acciones a otros contratos.
En la red Bitcoin las transacciones tienen lugar solamente entre cuentas de usuarios. En Ethereum las transacciones pueden incluir como recipiente no solo la cuenta de un usuario sino también un contrato.
Cuando el recipiente de la transacción es un contrato, el código del contrato, que es un software, es ejecutado, cambiando el estado del contrato o, en su defecto, desencadenando la ejecución de otro contrato subyacente.
La blockchain de Ethereum
Tanto Ethereum como Bitcoin operan sobre una red peer-to-peer donde la validación de las transacciones es realizada mediante el sistema proof-of-work (PoW).
Proof-of-work es un algoritmo en el cual los participantes invierten mucha energía en la resolución de un difícil problema matemático para ganarse el derecho de incluir bloques en la blockchain. El resultado de este problema es fácilmente verificable por los demás nodos de la red.
Los bloques de Bitcoin y Ethereum son bastantes similares, ambos contienen información como el número del bloque y la dificultad que denota el trabajo requerido para crear un bloque e incluirlo en la blockchain.
En la red Bitcoin las transacciones son stateless, esto significa que no se registra un estado antes de la ejecución de la operación por un script, y luego de la actualización del estado, después que finaliza la operación, el estado final tampoco es guardado.
En Ethereum los contratos son stateful, lo que significa que estos llevan un registro de la información almacenada en la red, además, debido a esta característica, pueden ser programados vía otros contratos inteligentes para tomar acciones en el futuro.
Tamaño de bloques
El tamaño de un bloque en Bitcoin es de 1MB. Esto crea una limitante para la cantidad de transacciones que pueden ser procesadas por cada bloque. En cambio, Ethereum no tiene límites en este sentido debido a que tiene la capacidad de ejecutar scripts y contratos, además, limitar el tamaño del bloque contradeciría el concepto de sistema “Turing complete”.
Sin embargo, en vez de limitar el tamaño del bloque, Ethereum emplea un mecanismo el cual hace que la ejecución de los contratos sea más costosa a medida que vaya aumentando su tamaño.
El tamaño de la blockchain
Tanto en Bitcoin como en Ethereum, mientras más transacciones son realizadas, más espacio en disco consume la información almacenada.
Para mayo 2016, la blockchain de Ethereum tenía un tamaño de 17 GB. En la misma fecha, el tamaño de la blockchain de Bitcoin era de 69 GB.
En términos relativos el tamaño de la blockchain de Bitcoin es superior a Ethereum pero debemos tomar en cuenta que Bitcoin existe desde 2009, mientras que Ethereum desde 2014. Ambas utilizan proof-of-work como método de generación de bloques, aunque en el caso de Ethereum, se está ponderando la implementación del algoritmo proof-of-stake (PoS).
Tiempos de bloques
Bitcoin agrega un bloque a la blockchain cada diez minutos, lo que significa que las transacciones son confirmadas aproximadamente en ese tiempo. En la práctica, la confirmación de las transacciones tarda un poco más de tiempo debido a que muchos usuarios esperan recibir entre seis y doce bloques de confirmación. En Ethereum, el tiempo es aproximadamente 13 segundos.
Algoritmo de consenso
Bitcoin utiliza como algoritmo para lograr el consenso lo que se conoce como Nakamoto consensus. La verdadera innovación de Nakamoto fue haber resuelto el problema computacional conocido como “El Problema de los Generales Bizantinos”, el cual establece que uno no puede confiar en nadie que tenga la potencial motivación para mentir y que uno no puede confiar en la integridad de un medio de comunicación dado, si este tiene que atravesar primero por intermediarios.
Bitcoin resuelve el problema a través de la creación de la cadena de bloques utilizando proof-of-work. Los mineros en la blockchain gastan energía en resolver un problema complicado con el objetivo de ganarse el derecho de agregar un bloque a la cadena.
Por el momento, tanto Bitcoin como Ethereum utilizan proof-of-work. La diferencia es que Ethereum utiliza una versión llamada Ethash. Ethash difiere de la versión Nakamoto en diferentes aspectos pero principalmente en la utilización del algoritmo criptográfico de hashing conocido como SHA-3 en vez de SHA-256.
Validador de transacciones
En 2009, cualquier usuario tenía la posibilidad de minar bitcoins con un CPU tradicional. A medida que el valor de bitcoin fue aumentando, innovadores vieron la oportunidad de hacer negocio y comenzaron a invertir en mayores y más sofisticados equipos para lograr tener mayor poder de computación y así minar más cantidad de bitcoins.
En la actualidad, debido al lucrativo negocio en que se han convertido el proceso de minado de bitcoins, la mayoría de los mineros están concentrados en grandes datacenters soportados por inversiones de venture capital.
Para evitar la concentración de poder por parte de los mineros, el proceso de minería en Ethereum está diseñado sólo para poderse realizar con GPU. La red es permissionless, lo que significa que cualquiera que pueda comprar una tarjeta gráfica puede comenzar a minar ethers.
La máquina virtual
Como mencionamos anteriormente, el protocolo Ethereum está diseñado para soportar la ejecución de aplicaciones complejas donde la funcionalidad está sólo limitada por dos aspectos: (a) Un agotamiento de los recursos; (b) La imaginación de los programadores.
Por lo tanto, para la ejecución del código se necesita de un intérprete de instrucciones, algo similar a Virtual Machine en Java, donde en Ethereum esta tarea es realizada por el Ethereum Virtual Machine (EVM).
La ejecución de los contratos inteligentes es realizada a través de evm donde las instrucciones implementadas y ejecutadas en cualquier lenguaje de programación es realizada vía Bytecode.
Las máquinas virtuales Ethereum utilizan un lenguaje de programación de scripting Turing complete que permite, al menos en teoría, la ejecución de contratos inteligentes complejos de manera infinita.
Lenguaje de programación
Solidity es el nombre del lenguaje de programación que permite escribir contratos y desarrollar aplicaciones dentro un ambiente distribuido.
Solidity es similar en términos de estructura a Javascript pero orientado específicamente a la ejecución de contratos.
Solidity es referido frecuentemente como un lenguaje de scripting pero en realidad es un lenguaje compilado. Este compila instrucciones a Bytecode y de esta forma las instrucciones pueden ser leídas por la red.
Los contratos inteligentes no son programas totalmente independiente debido a que estos dependen de Ethereum Virtual Machine (EVM) para su ejecución.
La moneda
Un ether es una unidad de cuenta y almacenamiento de valor. Un ether
es la divisa en Ethereum similar a bitcoin en la red Bitcoin.
A diferencia de bitcoin donde su valor intrínseco reside en base a la escasez y la robustez de la seguridad de la blockchain, un ether tiene valor intrínseco debido a que es la unidad que sirve de medio para tener acceso a los recursos de la red Ethereum. Por dicha razón, el ether es regularmente llamado el “Digital Oil” mientras que a bitcoin “Digital Gold”.
Inflación
A nivel monetario bitcoin es una moneda deflacionaria debido a que el número de unidades en circulación es finito. En total solo 21 millones de bitcoins pueden ser minados. Esta limitante está impregnada en el código fuente del software y para su modificación se requiere del consenso de la mayoría de los mineros.
En este sentido, la red Ethereum es lo opuesto. El ether es una divisa inflacionaria debido a que Ethereum no tiene un límite establecido en el número de divisas que pueden ser minadas. Hasta la fecha, la plataforma tiene una programación de emisión 18 millones de unidades anuales a través del proceso de minado.
Gas
Ethereum implementa un concepto adicional que no lo tiene Bitcoin. Ethereum tiene dos tipos de unidades monetarias: ether y gas. El ether sirve de token para controlar el acceso a los recursos de la red. El gas es una unidad de medida utilizada para determinar en tiempo real cuántos ether cuesta cada contrato.
El gas tiene un valor fijo, actualmente 10 szabo por 1 ether. Mientras más tiempo requiera la ejecución de un contrato, más costosa en términos de ether será la inversión del usuario. La ejecución de contratos en base a la limitante de ether y gas protege a la red de potenciales ataques y elimina la necesidad de establecer un límite al tamaño de los bloques.