Como se describe en la propia página de Ethereum, Ethereum es una plataforma blockchain descentralizada que nos permite construir “aplicaciones imparables” donde el Ether es la criptomoneda usada para intercambiar valor y pagar por el uso de recursos en la red. Ethereum nos permite desarrollar aplicaciones descentralizadas con especial énfasis en situaciones en las que tiempos de desarrollo cortos, seguridad e interactividad entre aplicaciones, es especialmente importante. Ethereum consigue ésto a partir de una blockchain con un lenguaje de programación Turing-completo, permitiendo a cualquiera escribir contratos inteligentes o smart contracts y aplicaciones descentralizadas que no pueden ser censurados y son accesibles a todo el mundo.

La máquina virtual de Ethereum (EVM)

En el centro de Ethereum está su máquina virtual (Ethereum Virtual Machine o EVM) y que podría describirse como un procesador de instrucciones de 256 bits en el que las transacciones son locales a cada nodo de la red y ejecutadas en una sincronía relativa o, en otras palabras, la EVM es un ordenador mundial que cualquiera puede usar por una pequeña comisión pagada en Ethers.

Para aquellos que no estén familiarizados con el concepto de maquina virtual, en informática, una máquina virtual es un software que simula un sistema de computación y puede ejecutar programas como si fuese una computadora real. Java es un buen ejemplo de lenguaje de programación que utiliza una máquina virtual permitiendo reutilizar el mismo programa en diferentes sistemas operativos. La EVM es una emulación que corre en miles de ordenadores que a nivel individual pueden estar corriendo diferentes versiones de Windows, Linux, ethOS o macOS.

Smart contracts y lenguajes de programación

Los Smart contracts son aplicaciones software que están almacenados en la blockchain y que definen una lógica de negocio que puede ser usada, por ejemplo, por aplicaciones descentralizadas. Los Smart contracts de Ethereum pueden ser programados en lenguajes de alto nivel tales como Solidity, Viper, LLL, Serpent o Mutant. Los Smart contracts escritos en estos lenguajes son posteriormente compilados a lo que se conoce como bytecode, un lenguaje de bajo nivel, y que puede ser interpretado por la máquina virtual (EVM).

Solidity se ha convertido en el lenguaje de facto en Ethereum, no fue el primer lenguaje de programación en Ethereum y seguramente no sea el último. Por ser el lenguaje más ampliamente usado y aceptado por la comunidad, éste será el lenguaje que usaremos en este módulo de Desarrollo en Ethereum.

Desplegando Smart contracts en la red de Ethereum

Una vez creado un Smart contract con Solidity y compilado a bytecode, lo único que necesitamos para desplegarlos en la blockchain de Ethereum es enviar una transacción conteniendo el bytecode de nuestro contrato a una dirección específica. Una vez que nuestra transacción sea incluida en un bloque y procesada por la red, nuestro contrato será público y abremos creado una aplicación que no puede ser censurada o alterada, y que será accesible para todo el mundo. Que no sea alterada no quiere decir que su contenido no pueda cambiar, los contratos guardan un estado que puede ir cambiando cuando los usuarios de la red u otros contratos interactúen con nuestro contrato a través de la dirección Ethereum donde está guardado.

Ecosistema blockchain

Existen aplicaciones y frameworks en el ecosistema de desarrollo de Smart contracts y aplicaciones descentralizadas que nos falicitarán las cosas y ampliarán la funcionalidad de nuestros contratos. Entre ellos veremos la librería Web3 para interactuar con la blockchain, el framework Truffle para crear nuestras Dapps, , el gestor de archivos IPFS para almacenar archivos de forma descentralizada, o los oráculos para permitir a nuestros contratos interactuar con recursos externos a la blockchain.

Y hasta aquí con la introducción

En el próximo capítulo empezaremos nuestro camino en el desarrollo de contratos con Solidity. Definiremos la estructura, tipos de datos y formas de interactuar con ellos.

¡Hasta el próximo artículo!

Próximo artículo: Estructura y elementos de un contrato