Crear un contrato Ethereum con solidity
En este artículo te contamos en detalle como instalar y configurar una blockchain de Ethereum para crear y desplegar un contrato inteligente con solidity y Ethereum Wallet.
Verás paso a paso como crear un contrato ethereum con solidity utilizando una blockchain privada y Ethereum Wallet. Para realizar con éxito este ejemplo básico, es necesario tener unos mínimos conocimientos de criptomonedas, wallets, y Ethereum.
Qué necesitamos?
Actualmente hay algunas herramientas útiles como:
- Metamask, que es un plugin para gestionar cuentas (wallet) para los navegadores web
- Truffle que es un entorno de desarrollo bastante completo (requiere conocer Javascript)
- Mist que es un explorador de Dapps (aplicaciones distribuidas)
- Geth que es un cliente de Ethereum programado en Go
- Ethereum Wallet que es una cartera de ether que permite desplegar contratos
- Browser Solidity que es un editor y compilador en la nube para trabajar con los contratos ethereum.
Por supuesto también puedes utilizar nuestro curso de solidity interactivo para poner en práctica la creación, y el despliegue de contratos ethereum. También dispone de un buscador de los datos que contienen los bloques, las transacciones y los saldos de las cuentas (wallet).
En nuestro caso vamos a usar Geth (un cliente de ethereum en Go y Ethereum Wallet una aplicación que nos servirá para desplegar contratos ethereum ubicados en el blockchain.
Descargar e instalar Geth y Mist
Primero vamos a decargar e instalar Geth. Si utilizamos Windows, la mejor opción es bajarse el instalador de 64 bits, aunque también hay versiones para otros sistemas operativos.
Una vez descargado, lo instalaremos en una unidad de disco que tenga suficiente espacio libre por si luego queremos descargar toda la cadena de bloques de ethereum (red pública).
A continuación descargaremos la Ehtereum Wallet. Podemos descargar el instalable o el zip para descomprimirlo en la carpeta que queramos.
Creación de una cadena de bloques privada
Para realizar los contratos de pruebas crearemos una red privada de ethereum en nuestro pc con un nodo que contendrá nuestra propia cadena de bloques privada. Para ello abriremos una ventana de "Símbolo de sistema" y iremos dentro de la carpeta de instalación de geth y ejecutaremos:
geth --datadir=./cadenadebloques/ --dev
Esta sentencia creará dentro de la carpeta "cadenadebloques" la carpeta "geth" y "keystore". Dentro de la carpeta "geth" encontraremos la carpeta "chaindata" con la información de la cadena de bloques.
Una vez decargado e instalado, abriremos la aplicación Ethereum Wallet y ella detectará la ejecución de geth en modo red privada virtual con 0 peers, haremos click en "LAUNCH APPLICATION".
Nada más abrir la aplicación de Ethereum Wallet nos puede dar un infarto al ver tal cantidad de Ether en nuestra wallet!
Por defecto se creará la cuenta principal (etherbase) con mucho ether, pero vamos a añadir otra cuenta para realizar nuestras pruebas de transferencias. Haremos click en "AÑADIR CUENTA" y especificaremos una contraseña. Una vez creada haremos click en "stay anonymous".
Nota: Se puede abrir la consola de commandos de geth en la ruta de instalación de geth escribiremos:
geth --datadir=./cadenadebloques attach
Esto abrirá una consola específica de geth ligada a la primera instancia de geth que ejecutamos.
Creación de un contrato ethereum
Para continuar crearemos un contrato simple. El "hola mundo" de los contratos ethereum, que la verdad tiene muy poco de inteligente.
pragma solidity ^0.4.18;
contract HolaMundo {
/* Defino una variable de tipo string para almacenar el texto*/
string constant texto="hola";
/* Función principal */
function saluda() public pure returns (string) {
return texto;
}
}
Hacemos click en la pestaña de "CONTRATOS" y luego en "DEPLOY NEW CONTRACT": Debajo en el cuadro de texto pegaremos el código de ejemplo de arriba.
En la lista desplegable "SELECT CONTRACTO TO DEPLOY" seleccionaremos "Hola Mundo".
Nos saldrá una opción para seleccionar las comisiones (fees), en función de lo rápido que queremos minar el contrato, se aplicarán unas u otras.
Una vez elegido esto, nos saldrá una nueva ventana "Create contract" con el total de comisiones, incluido el precio de gas, sólo tendremos que poner la contraseña de nuestra cuenta principal (que por defecto está en blanco) y hacer click en "SEND TRANSACTION".
Minado del contrato ethereum
A continuación tendremos que minar el contrato para que se incluya en la cadena de bloques. Para ello bastará con realizar transacciones de ether entre las dos cuentas que tenemos.
Una vez minado podremos entrar en el detalle del contrato y veremos el resultado del método saluda que devuelve la cadena "hola".
Como ejemplo complementario se puede desplegar el mismo contrato que permita cambiar el texto del saludo:
pragma solidity ^0.4.18;
contract HolaMundo2 {
/* Defino una variable de tipo string para almacenar el texto*/
string texto="hola";
/* Función principal */
function saluda() public view returns (string) {
return texto;
}
function cambiaSaludo(string _sal) public {
texto=_sal;
}
}
Una vez desplegado y minado podemos ver el detalle y hacer una llamada al método cambiaSaludo.
Veremos como el valor de la variable del contrato es ahora "holita".
Para los que quieran continuar avanzando en el tema de los contratos ethereum, existe un tutorial completo de solidity en español disponible en Tutoriales Online.
Conclusión
En pocos pasos hemos visto que crear y desplegar un contrato ethereum es algo sencillo y rápido con las herramientas adecuadas. Este es el punto de partida para realizar contratos más elaborados, de tipo Crowfunding, Conferencias, Smart Properties, AltCoins, etc...
Si este artículo te parece útil, puedes realizar una colaboración en BAT usando el navegador Brave.
También nos gustaría recibir tu opinión, dudas y comentarios en el formulario de contacto.
Hay que tener en cuenta que desplegar contratos en la red pública de Ethereum tendrá un coste en Ether, al igual que la ejecución de algunas transacciones del contrato.