Tutorial sincronizando Ethereum Mist con testnet Rinkeby
En ejemplo se va a explicar de forma básica como sincronizar un nodo completo de Ethereum en la red de pruebas Rinkeby utilizando la cartera con interfaz gráfica Mist. A continuación se explicará como desplegar un contrato inteligente básico para la creación de un Token y como interactuar con el mismo.
Mist es una wallet de Ethereum creada por la propia fundación. Utiliza por defecto el nodo oficial geth aunque se puede configurar para que utilice otro. Su atractivo es que ofrece una interfaz de usuario con posibilidad de usar como wallet y con los smart contracts.
Las últimas release de la cartera oficial de Ethereum Mist se han incluido algunas de las siguientes mejoras:
- Soporte Swarm, la tecnología permite almacenar ficheros en la red de Ethereum. Ahora es posible navegar a través de la red descentralizada Swarm con el protocolo bzz://.
Desde el menú de Mist se pueden subir ficheros a Swarm en File > Upload to Swarm
- Testnet Rinkeby por defecto. Ahora es posible escoger la red Testnet entre Ropsten y Rinkeby
- Soporte de ENS para direcciones
- Soporte de ENS para ver contratos
En este tutorial se probará la sincronización de la wallet Mist en la red Rinkeby, sincronización de los bloques y creación de la wallet. Se probarán además la creación de contratos y navegación y almacenamiento del protocolo de Swarm.
Instalando Mist
En este ejemplo se utilizará la versión para sistemas GNU/Linux. Seleccionando desde https://github.com/ethereum/mist/releases la última versión Ethereum-Wallet-linux64-0-9-2.zip.
Para lanzar Mist en modo testnet ejecuto en un terminal:
$ ./ethereumwallet --network rinkeby
Sincronizando la red Rinkeby
Cuando se lance la ventana de Mist por primera vez aparecerá un asistente donde deberemos escoger “Use the test Network (Rinkeby)”
A continuación escribir un contraseña de al menos 8 caracteres para cifrar la clave privada de la cuenta principal que será creada.
Una vez creada la cuenta se pueden solicitar ethers de la red testnet en el siguiente enlace https://faucet.rinkeby.io/. Recordad que Mist debe sincronizarse con la red testnet de Rinkeby.
Continuar con los siguientes pasos del asistente, se podrán ver diferentes enlaces a ejemplos de la web de la fundación Ethereum como la creación de un token, un contrato inteligente de crowdsale o la creación de una organización autónoma descentralizada.
En caso de que la red no se sincronice correctamente, cerrar el programa, eliminar el directorio ~/.ethereum/rinkeby/geth/ y reiniciar.
Cuando la cartera esté sincronizada con todos los bloques.
Como estamos en la red testnet Rinkeby necesitamos obtener algunos ethers de esta red para poder jugar con nuestra wallet.
Vamos a la grifería de Rinkeby https://faucet.rinkeby.io/ para solicitar unos ethers de prueba. En la página de la grifería nos encontramos con el siguiente mensaje.
Creamos un gist nuevo con la dirección y pulsamos en “Create public gist”:
Copiamos la url del gist creado y lo pegamos en el formulario de la grifería. A continuación, en el combo seleccionable de la derecha escogemos 3 Etheres / 8 hours. Recordad que no son ethers reales.
En unos minutos recibiremos los 3 ethers de la tesnet. Ya podemos desplegar nuestro primer token de ejemplo. Para ello nos vamos al tutorial de la web oficial de Ethereum en https://www.ethereum.org/token.
En el apartado de Minium Viable Token se explica como crear un token para pruebas muy básico. Este no contiene las reglas de un token más avanzado como podrían ser los que se utilizan a día de hoy para diferentes DApps, sin embargo, nos servirá como ejemplo de prueba. Recordad que se creará sobre una testnet de Rinkeby. Se trata de un ejemplo en una red no real del cual no nos hacemos responsables de cualquier mal uso o error en la codificación del contrato. El código que pegaremos para desplegar el token es como el que sige:
pragma solidity ^0.4.6; contract MyFirstToken { // This creates an array with all balances mapping (address => uint256) public balanceOf; // Initializes contract with initial supply tokens to the creator of the contract function MyFirstToken( uint256 initialSupply ) { balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens } // Send coins function transfer(address _to, uint256 _value) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough require(balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows balanceOf[msg.sender] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient } }
La primera línea del código indica la versión del lenguaje de Solity que vamos a utilizar. En el nombre del contrato, donde pone MyToken podemos poner el nombre de nuestro nuevo token. Por ejemplo HowIsYourToken. Copiamos el código de ejemplo y nos vamos a la wallet Mist, al apartado del margen superior derecho “Contratos”. A continuación pulsamos en Deploy New Contrat.
Pegamos el código de ejemplo en Solidity Contract Source Code en la parte izquierda, en la parte derecha donde pone Pick a contract seleccionamos el contrato del código How Is Your Token. En “Initial supply” ponemos la cantidad máxima del token deseada, por ejemplo 20999999.
Seleccionamos la cantidad de gas como comisión pulsamos en “Desplegar”. En la ventana de confirmación Introducimos nuestra contraseña y pulsamos en enviar. Al cabo de unos minutos la transacción será confirmada por los mineros.
Si volvemos a la sección de Contratos veremos que en “Custom Contracts” aparecerá nuestro contracto del token. Pulsando sobre él veremos los detalles.
A la izquierda del contrato aparecen las funciones de lectura del contrato. Por ejemplo el atributo público balanceOf almacena una lista con las direcciones que poseen este token y la cantidad que poseen. Se debe tener especial cuidado de programar bien esto en un Smart Contract, y que no ocurran casos como el hack de TheDao. En http://securify.ch/ disponéis de algunas recomendaciones de seguridad en código de Smart Contracts.
Esto nos permite saber la cantidad que tiene de tokens una dirección determinada. Si introducimos la dirección de la cuenta principal con la que se ha creado el contrato veremos que posee los 20999999 tokens indicados anteriormente.
Una cuenta de Ethereum puede observar los diferentes tokens a los que está asociada su cuenta. Para que aparezca como disponibles en nuestra cuenta se necesitan de los siguientes datos del token:
- Dirección del contrato, es la dirección asociada al contrato del token. Cuando se crea un contrato este siempre tiene una dirección única de la red Ethereum. Aparece en la parte superior izquierda, debajo del nombre del contrato.
- Interfaz del contrato en formato JSON. Para copiar el json pulsar sobre el icono de la derecha “Show Interfaz”
Volvemos a Contratos y pulsamos en “Observar Ficha” en la parte inferior “Custom Tokens” para añadir nuestro token a la lista:
-
- En “Token Contract Address” pegamos la dirección del contrato del token que tiene asociado.
- Token Name especifica un nombre para identificar nuestro token, en el ejemplo MyFirstToken.
- Token Symbol, símbolo para identificar el nombre del token. Se puede especificar una o varios caracteres. Por ejemplo el símbolo de Dogecoin Ð (Alt Gr + Shift + D).
- Decimals para indicar el número de decimales que soporta nuestro token.
Una vez añadido el token aparecerá en la lista con la cantidad de unidades que poseen nuestras cuentas de Ethereum que tengamos en la wallet.
Podemos compartir esta información para que otros puedan añadir el token a su wallet y enviarles tokens. Para el ejemplo voy a crear una nueva cuenta y enviar tokens a la nueva dirección utilizando la misma wallet.
Seleccionando la cuenta principal con la que se creó el token veremos que posse los 3 ethers menos la comisión pagada para crear el contrato y los 20 999 999 Ð. A su derecha un botón enviar, el cual solo será visible si pasamos el ratón por encima.
Pulsar en Enviar y en la siguiente pantalla pegar en “To” la dirección de la nueva cuenta creada, en “Amount” la cantidad a enviar, por ejemplo 10 Ð. Enviamos una cantidad de tokens única pero necesitaremos tener previamente algunos ethers para pagar el gas de comisión del envío. Pulsamos en enviar.
Introducimos la contraseña de la cuenta principal y confirmamos el envío.
Si volvemos a la sección de Contratos de la parte superior derecha, entre las opciones disponibles seleccionamos el contrato de nombre MyFirstToken. Dentro, en el parámetro de lectura de la izquierda Balance Of pegamos la dirección de la nueva cuenta creada anteriormente y veremos que ahora posee 10 tokens.
Esto es un ejemplo muy básico de como sincronizar un nodo completo de Ethereum en la red de pruebas Rinkeby utilizando la cartera gráfica Mist y como poder desplegar contratos. Recordad que estamos en una red de pruebas y los ethers aquí no tienen ninguna valided.