¿QUÉ ES ETHEREUM?

Ethereum es una gran computadora virtual soportada por una blockchain en la que se puede ejecutar programas de forma descentralizada. En palabras de Vitalik Buterin, su creador: si Bitcoin es una hoja de cálculo donde cada uno controla unas cinco celdas, Ethereum es una hoja de cálculo con macros.

SMART CONTRACTS

Los códigos ejecutables o programas dentro de Ethereum se llaman smart contracts (contratos inteligentes), bajo la premisa de que un programa es similar a un contrato: una vez cumplidas ciertas condiciones se desencadenan acciones. Ethereum es una plataforma descentralizada que corre smart contracts.

Un ejemplo de smart contract para soportar una apuesta por un partido de fútbol podría ser el siguiente:

  • El smart contract recibe a través de transferencias electrónicas el importe de la apuesta  (10 dólares) de cada uno de los dos jugadores participantes. El jugador A gana si el equipo XYZ gana o empata. El jugador B gana si el equipo XYZ pierde.
  • El smart contract obtiene el resultado del partido de fútbol de una fuente confiable y predefinida, que podría ser otro smart contract, una página web en la que iría a buscar el resultado,o una persona delegada.
  • Según el resultado del partido, el smart contract envía electrónicamente 20 dólares al ganador.

Por un lado, el término smart contracts puede ser engañoso, pues no son contratos ni son inteligentes. No son contratos porque no existe obligación legal para su cumplimiento. No son inteligentes porque si se diera alguna situación no contemplada en el smart contract, éste no sabría cómo resolverla, pues para un programa sólo existen las situaciones consideradas en su código. 

Por otro lado, el origen de este concepto viene de principios de los 90, cuando Nick Szabo el inventor de Bit Gold, propuso el término indicando que «los smart contracts combinan protocolos con interfaces de usuario para formalizar y asegurar relaciones sobre redes de computadoras. Este esquema elimina la necesidad de pagar a intermediarios como auditores, contadores, abogados y notarios públicos, al ejecutarse los acuerdos a través de un programa de computadora».

Para efectos prácticos, consideremos que los smart contracts son programas que corren en Ethereum.

ANTECEDENTES DE ETHEREUM

Bitcoin es una blockchain especializada en la creación de una moneda (bitcoin), así como en el registro de las transacciones que se realizan con ella. En su momento, algunos pioneros reconocieron que se podía utilizar esta tecnología para otras aplicaciones diferentes. Por ejemplo el proyecto Colored Coins buscaba gestionar activos del mundo real (acciones, monedas, propiedades inmobiliarias) en forma de tokens sobre la red de Bitcoin. Así como en este caso, se empezaron a desarrollar aplicaciones específicas para cada caso de uso sobre Bitcoin, utilizando el lenguaje de programación de este protocolo (Bitcoin Script) y llevando al protocolo de Bitcoin al límite de su potencial.

Pero Bitcoin Script tiene sus limitaciones, no es un lenguaje de programación Turing-complete, pues le falta funciones tan comunes como los loops que permiten realizar una misma instrucción muchas veces utilizando un contador. Tiene sentido restringir esta funcionalidad en una blockchain de uso específico para controlar dinero digital, no queremos por ejemplo que alguien por error o con mala intención genere un loop infinito que haga caer la red; pero no tiene sentido para crear aplicaciones que vayan más allá de controlar transacciones de dinero. Así que estos pioneros tenían que desarrollar sus ideas utilizando un lenguaje de programación limitado y fabricando cada uno sus propias navajas suizas, útiles para un número limitado de casos de uso.

Vitalik Buterin – Foto de John Philips (Wikimedia)

En el 2013, un joven ruso-canadiense de 19 años, estudiante de la Universidad de Waterloo en Canadá, llamado Vitalik Buterin, solicitó a su universidad tomarse un año sabático para trabajar en proyectos de criptomonedas. Inició una gira por diferentes lugares del mundo como Estados Unidos, Holanda e Israel, en los que tenía amigos trabajando en la frontera del potencial de Bitcoin.

En Israel había dos proyectos muy innovadores llamados Colored Coins y Mastercoin. Pudo colaborar con ellos pero se dio cuenta rápidamente que el enfoque que utilizaban para el desarrollo no era el adecuado, no se trataba de crear navajas suizas, útiles para propósitos limitados, sino que era mejor crear bloques de LEGO para que cada uno pueda construir lo que quisiera.

Su idea no fue tan bien recibida como él esperaba, pues se priorizaba más la velocidad para salir al mercado con lo que ya tenían en curso. Dado que no tuvo eco, decidió crear una nueva blockchain que fuera de propósito general, en la que se pudiera programar lo que uno quisiera. Para ello escribió el White Paper de Ethereum «Una plataforma de siguiente generación para smart contracts y aplicaciones descentralizadas» donde describió las especificaciones de una tecnología que revolucionaría el mundo, como años atrás lo había hecho Satoshi Nakamoto.

El White Paper de Vitalik publicado en el 2013 capturó el interés de un grupo de colaboradores, entre los que destacan Gavin Wood, Charles Hoskinson, Mihai Alisie, Anthony Di Iorio y Joseph Lubin. En el 2014 obtuvieron el financiamiento para el proyecto bajo una forma de crowdfunding y en el 2015 pudieron poner en funcionamiento Ethereum gracias al esfuerzo de un ejército de colaboradores a nivel mundial. 

LA CADENA DE BLOQUES DE ETHEREUM 

Ethereum, al igual que Bitcoin, tiene una cadena de bloques asegurada por criptografía, sin embargo no solo guarda información de transacciones de la moneda de la blockchain, que en este caso se llama Ether (ETH), sino que también almacena dentro de los bloques transacciones asociadas a smart contracts, ya sea para crearlos o para ejecutarlos, y datos asociados a estos programas. Los smart contracts, al estar en la blockchain, están en todos los nodos de la red y por tanto pueden ejecutarse de forma descentralizada.

Nos encontramos entonces con programas que una vez puestos a funcionar no pueden ser alterados, detenidos ni censurados por nadie. El código es público, auditable por todo el mundo y puede ser utilizado por quien quiera, siempre que pueda pagar por su ejecución. Y aquí llegamos a un punto clave.

¿QUIÉN SOPORTA ETHEREUM?

Al igual que en el caso de Bitcoin, la red Ethereum es  soportada por los mineros, que ponen a disposición de ella sus equipos de cómputo y la energía que estos consumen.

A diferencia de los mineros de Bitcoin que utilizan equipos ASIC, los mineros de Ethereum utilizan equipos GPU (Graphical Processing Unit) que son equipos que se desarrollaron originalmente para el mundo del gaming y que no son tan demandantes de energía como los ASIC. La carrera armamentista no es tan sangrienta en el caso de Ethereum, pero existe.

Para implementar un nodo, los mineros pueden elegir entre tres configuraciones: completos, ligeros y archivo.

CompletoLigeroArchivo
Qué almacenaTodos los datos de la blockchainSolo almacena la cabecera y solicita todo lo demásTodo lo que guarda un nodo completo + archivo de los estados históricos
Cómo participaValidación de bloques, verifica todos los bloques y estados.Todos los estados pueden ser derivados a partir de un nodo de este tipo. Sirve a la red y provee datos a solicitud.Puede verificar la validez de los datos contra los registros de estado de las cabeceras. Útil para dispositivos de baja capacidad como teléfonos móviles, que no pueden destinar gigabytes para los datos de la blockchain.Participa de forma similar a un nodo completo. Dado que tiene que guardar terabytes de información, es menos atractivo para usuarios promedio, pero es útil para empresas que prestan servicios de exploración, análisis de blockchain o vendedores de billeteras electrónicas.

Los mineros realizan las pruebas de trabajo que permiten generar los bloques y también ejecutan los smart contracts según se lo soliciten. Por las prueba de trabajo reciben nuevos Ether bajo un mecanismo similar al de Bitcoin. Por la ejecución de smart contracts reciben un pago asociado a las unidades de gas consumidas.

¿QUÉ ES EL GAS?

En la criptoeconomía de Ethereum, gas es el combustible necesario para correr los smart contracts. Es la unidad de medida del poder computacional requerido para ejecutar transacciones.

Una transacción puede comprender muchas instrucciones de máquina. Cada instrucción tiene un costo denominado en gas que tiene un costo preestablecido en el Yellow Paper de Ethereum (apéndice G). Así por ejemplo, una instrucción de tipo suma (ADD) cuesta 3 gas, pero una más compleja como chequear un balance cuesta 700 gas. Con esto, una transacción que involucre estas transacciones y algunas más puede terminar costando por ejemplo 15,000 gas. Ahora nos falta determinar el precio del gas.

Como en cualquier commodity el  precio del gas se determina mediante la oferta y demanda del mercado. Cuando hay mucha demanda de transacciones (la red está cargada) el precio del gas sube y cuando la demanda se reduce el precio de gas baja. El precio del gas se expresa en una fracción de ETH denominada gwei, que es equivalente a un mil millonésimo de esa moneda (1gwei = 10-9 ETH). Así, supongamos que una unidad de gas  está valorizada en 103 gweis en un momento determinado.

Esta separación de cantidad de gas (el esfuerzo computacional necesario) y el precio del gas (definido por la demanda), permite aislar el efecto que tiene la variación del precio de ETH en el mercado de criptomonedas, que como sabemos ha sido muy grande en los últimos años. Si el precio del gas subiera en la misma proporción, las transacciones se harían impagables.

El uso de gas también sirve para evitar que los usuarios corran programas que saturen los recursos de la red o que incurran en prácticas de programación ineficientes. Un loop erróneo, por ejemplo, sólo se ejecutará hasta que se le acabe el gas.

Volvamos entonces para definir el costo de nuestra transacción. Si bien la transacción de nuestro ejemplo requería 15,000 unidades de gas, lo normal es que se define un número más alto, denominado «límite de gas» que expresa lo máximo que estamos dispuestos a considerar por transacción, dado que podríamos haber cometido un error y la transacción requiera más de 15,000 gas. Si nuestro estimado se quedara corto, la transacción no terminaría de ejecutarse y perderíamos nuestro dinero. Por otro lado, se la necesidad de gas fuera menor se nos devolvería el gas no consumido.

El costo sería entonces: límite de gas x precio de unidad de gas = 21,000  gas x 103 gwei/gas = 2,163,000 gweis = 0.002163 ETH.

Vale aclarar que para definir el precio del gas no negociaremos con nadie. Más bien enviaremos nuestra transacción con un precio de gas asociado. Según el precio que hayamos incluido nuestra transacción se ejecutará más pronto o más tarde, porque los mineros seleccionarán con preferencia del pool de transacciones que tienen para procesar a aquellas que tengan el precio de gas más alto. Por lo tanto, si tenemos urgencia en que nuestra transacción se ejecute tendremos que proponer un precio de gas más alto que el promedio del momento.

En sitios como ETH Gas Station y EtherScan se puede monitorear los precios promedios de mercado de gas. Ten en cuenta que el precio del gas puede variar mucho de un momento a otro, variaciones de 500% o más en pocos minutos no son raras, es importante monitorearlo para no pagar demasiado por una transacción.

LA MÁQUINA VIRTUAL DE ETHEREUM (EVM)

Existen varias versiones (clientes) de software para correr el protocolo de Ethereum, siendo una de ellas Geth (Go Ethereum) implementada en el lenguaje Go. Todas estas versiones corren en los sistemas operativos Linux, Windows y macOS.

ClienteLenguaje
GethGo
OpenEthereumRust
NethermindC#, .NET
BesuJava
ErigonGo

Cada nodo debe instalar el software cliente para poder integrarse a Ethereum. El software cliente habilita la Ethereum Virtual Machine (Máquina Virtual de Ethereum), que es en términos prácticos una gran computadora que permite correr a solicitud los smart contracts  almacenados en la blockchain de Ethereum. EVM es la máquina infinita. EVM es una máquina de estados distribuida donde los estados son modificados por transacciones.

Diagrama de la Ethereum Virtual Machine (EVM)

SOLIDITY

Si bien existen diversos lenguajes de programación para Ethereum, el más difundido se llama Solidity, que es muy similar a JavaScript o C++. A diferencia de Bitcoin Script, Solidity es un lenguaje Turing-complete, es decir que se puede programar lo que uno quiera con él, lo que convierte a Ethereum en una blockchain programable de propósito general. 

Sin embargo la EVM no entiende Solidity sino Bytecode. Por ello, antes de enviar un smart contract o programa a la EVM el código creado en Solidity debe pasar por un compilador que lo convierte en Bytecode.

El código en Bytecode se carga en una transacción de creación de contrato para integrarse a la EVM, como veremos más adelante.

Diagrama de cómo se programa en Solidity

Todo lo que se programa en Ethereum es de código abierto. Esto quiere decir que cualquiera puede descargar ese código para luego modificarlo y crear una nueva aplicación.

Si estás interesado en aprender a programar en Solidity hay muchas fuentes. El sitio oficial de Ethereum es una buena referencia y si quieres aprender literalmente como jugando puedes hacerlo con zombies.

CUENTAS EN ETHEREUM

Las cuentas Ethereum son entidades que tienen un saldo (balance) en ETH  que puede ser usado para realizar transacciones. Pueden ser controladas por usuarios o pueden ser habilitadas como smart contracts.

Hay dos tipos de cuentas:

  • EOA (Externally Owned Account), una cuenta de un usuario de Ethereum,  controlada por cualquiera que tenga las claves privadas.
  • Contract Account: Un smart contract habilitado en la red y controlado por código.

Ambos tipos de cuentas pueden:

  • Recibir, mantener y enviar ETH y tokens.
  • Interactuar con smart contracts existentes.

Sin embargo, tienen diferencias importantes.

EOA Contract Account
Costo de creación Ninguno Tiene costo porque utiliza almacenamiento de la red
Transacciones posibles Puede iniciar cualquier transacción Solo puede enviar transacciones en respuesta a una transacción recibida
Interacción con EOAs Solo transferencias de ETH Una EOA puede enviarle transacciones que disparen la ejecución de su código.

Las EOA tienen dos claves criptográficas, una pública y una privada. La clave privada es la utilizada para firmar transacciones, es por lo tanto la que asegura los fondos de la cuenta. Lo que uno guarda son sus claves privadas, no los fondos, los fondos siempre están en la red de Ethereum.

La clave pública se genera aplicando un algoritmo de cifrado ECDSA a la clave privada.  La dirección de la cuenta, que es la información que utilizaremos para enviar y recibir ETH y que comunicamos a quien hará la transacción con nosotros, se forma generando un hash a partir de la clave pública, se toman los últimos 40 caracteres de este hash y se le  añade «0x» al principio, con lo que obtenemos un código de 42 caracteres similar a este: «0x3d80b31a78c30fc628f20b2c89d7ddbf6e53cedc».

Diagrama de cómo se genera una dirección de Ethereum

Las direcciones de las contract accounts también tienen 42 caracteres y empiezan con «0x», pero se generan criptográficamente a partir de la dirección de la cuenta del creador y del número de transacciones que se han enviado desde esa dirección.

En el gráfico siguiente podemos comparar el contenido de una EOA y una contract account en un momento determinado. Si bien una EOA tiene cuatro campos para almacenar información, no utiliza los campos de almacenamiento ni código puesto que estos sólo se habilitan para las cuentas de smart contracts.

Diagrama de los campos de las cuentas Ethereum

Los campos son los siguientes:

  • Nonce. Para una EOA la cantidad de envíos realizados desde la cuenta. Para una contract account, la cantidad de contratos creados.
  • Saldo. La cantidad de ETH que tiene la cuenta.
  • Hash de almacenamiento. La raíz de un árbol Merkle-Patricia del contenido del almacenamiento del contrato. Los datos del contrato protegidos por criptografía. 
  • Hash de código. El código ejecutable asociado, en forma de hash. No se puede modificar.

TRANSACCIONES EN ETHEREUM

Las transacciones son acciones iniciadas por una EOA, es decir por una cuenta manejada por un humano, no por un smart contract. Una transacción sería por ejemplo enviar 10 ETH de A a B. Esto desencadenaría dos operaciones: reducir en 10 ETH el saldo de A e incrementar en 10 ETH el saldo de B.

Las transacciones para ser procesadas por la EVM deben ser enviadas a los nodos de la red de Ethereum. La secuencia de pasos que ocurren es la siguiente:

  1. Una vez enviada la transacción se genera  un hash con ella.
  2. La transacción se difunde en la red e ingresa a un pool junto con otras transacciones pendientes de procesar.
  3. Los mineros seleccionan las transacciones a incluir en sus bloques priorizando aquellas que pagan una mayor precio por gas.
  4. Una vez que se incluye la transacción en un bloque se debe esperar a que se realice la PoW y se declare la transacción como “exitosa”.
  5. La transacción adquirirá un número de confirmación de bloque que representa el número de bloques creados desde que se incluyó la transacción en un bloque. Mientras mayor sea este número, mayor es la certeza de que la transacción haya sido procesada y reconocida por la red.

Una transacción tiene los siguientes campos:

  • Nonce. Un contador de los envíos hechos desde la cuenta de origen.
  • Destinatario (dirección)
  • Precio del gas
  • Límite de gas. Importe máximo de gas que estoy dispuesto a consumir en la transacción.
  • Valor. Importe de ETH a enviar.
  • Datos. Cualquier información. 
  • Firma. Con clave privada.

Existen dos tipos de transacciones en Ethereum:

  • Creación de contrato. Crea un contrato y lo registra en la blockchain de Ethereum. En esta transacción el valor del campo “destinatario” no tiene ningún valor.
  • Llamada de mensaje (message call). Una transacción para que se ejecute un mensaje entre una EOA y otra EOA o una contract account. 
Diagrama de la transacción de creación de contrato

Ejemplos de llamadas de mensaje en Ethereum

dApps

Las dApps (decentralized Applications) son aplicaciones descentralizadas y son la forma en que normalmente interactúan los usuarios con los smart contracts de una blockchain como Ethereum. Las dApps proveen una interfaz amigable, detrás de la cual orquestan la ejecución de los diferentes smart contracts que requieren para proveer su servicio. Algunas de las apps de tu smartphone podrían ser dApps, puedes verificarlo en la página State of the dApps que monitorea las dApps de la actualidad. 

Existen miles de dApps disponibles en diversas categorías como redes sociales, subastas, juegos, seguros, exchanges, etc.

Las dApps se caracterizan por lo siguiente:

  • Son de código abierto. Cualquiera puede ver el código de la dApp con lo que no hay sorpresas respecto a lo que hace y no hace.
  • Siempre están disponibles. Dado que se construyen sobre la blockchain, nunca están caídas, siempre hay al menos un nodo para hacerla funcionar.
  • Son seguras. El código y sus datos están protegidos por la criptografía de la blockchain, por lo tanto no se pueden hackear.
  • Son fáciles de implementar. Se construyen sobre un framework ya existente, sólo se debe tener en cuenta el costo de las transacciones.
  • Son autónomas – Nadie puede alterar su ejecución, el código no se toca ni se interrumpe.

Sin embargo las dApps tienen algunas desventajas:

  • No es fácil hacer actualizaciones ni arreglar errores.
  • Pueden ser relativamente lentas. La velocidad de procesamiento depende de la blockchain que la soporta.
  • La experiencia de usuario no es aún la misma que en las apps centralizadas.

ETHEREUM VS BITCOIN

A manera de resumen hagamos una comparación de las características de Bitcoin y Ethereum.

BitcoinEthereum
ConceptoDinero digitalMáquina virtual infinita
LanzamientoEnero 2009Julio 2015
CreadorSatoshi NakamotoVitalik Buterin
Protocolo de consensoPrueba de trabajo (PoW)Prueba de trabajo (PoW). Se espera que luego pase a prueba de participación (PoS)
Tiempo promedio de minado de bloques10 minutos13 segundos (a la fecha)
Algoritmo de hashSHA-256KCCAK-256
Lenguaje de programaciónBitcoin Script (no Turing-complete)Solidity (Turing-complete)
Estructura de feesSimple, pago por transacciónSofisticada (gas, límite de gas)

EPÍLOGO

Vitalik Buterin tuvo la oportunidad de decidir si Ethereum iba a ser un empresa con fines de lucro como Google o Facebook. Decidió que fuera una entidad sin fines de lucro. Sabía que lo que había concebido debía estar disponible libremente para todos: «Una computadora que se soportaría en todos los nodos de una enorme red global, que podría procesar de todo, sin interferencias ni caídas, para que los programadores pueden construir todo lo que soñaran y que nadie pudiera detenerlos o detener a sus aplicaciones. Como una máquina infinita”(1)

(1) De «The Infinite Machine» de Camila Russo.


0 Comments

Deja un comentario

A %d blogueros les gusta esto: