Instalar un nodo testnet de ethereum rinkeby

¿Que es Ethereum?

Es una plataforma escrita en software libre, se puede comparar con el Bitcoin ya que tiene su propia Blockchain pero no es como la mayoría de las criptodivisas existentes, ya que no es solamente una red para reflejar las transacciones de valor monetario, sino que es una evolución de la web denominada Web 3.0 y esta red nos permite la creación de contratos inteligentes usando un lenguaje de programación «Solidity» y una maquina virtual Ethereum Virtual Machine «EVM». Por ser de software libre cualquier programador puede crear y publicar aplicaciones distribuidas que ejecuten contratos inteligentes.

Ethereum usa como divisa interna el Ether esta criptomoneda descentralizada sirve para ejecutar los contratos inteligentes dentro de la red.

Estos contratos de código abierto pueden ser usados para ejecutar de forma segura una amplia variedad de servicios, entre los que se incluyen: sistemas de votación, intercambios financieros, propiedad intelectual y organizaciones descentralizadas autónomas etc.

En la pagina oficial https://www.ethereum.org se puede ampliar un poco mas sobre el tema.

Tambien puedes descargar los papers oficiales:

White Paper

Yellow Paper

Para instalar el nodo voy a usar:

  • Linux Debian 8
  • Go
  • CLI Geth – Go Ethereum
  • NodeJS

Primero vamos a Instalar nodejs

aptitude install npm

Necesitamos instalar el compilado JavaScript Solidity.

npm install -g solc

Ahora comprobamos que este correctamente instalado:

solcjs --help
/usr/bin/env: node: No such file or directory

En debian el binario node se llama nodejs para resolver este conflicto podemos crear un enlace simbólico.

ln -s /usr/bin/nodejs /usr/bin/node

solcjs --help
Usage: /usr/local/bin/solcjs [options] [input_file...]

Options:
--version Show version number [boolean]
--optimize Enable bytecode optimizer. [boolean]
--bin Binary of the contracts in hex. [boolean]
--abi ABI of the contracts. [boolean]
--standard-json Turn on Standard JSON Input / Output mode. [boolean]
--output-dir, -o Output directory for the contracts. [string]
--help Show help

Instalemos ahora la ultima versión de go

Voy a seguir los pasos de la documentación de go-ethereum

curl -O https://storage.googleapis.com/golang/go1.7.3.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.7.3.linux-amd64.tar.gz
rm go1.7.3.linux-amd64.tar.gz
mkdir -p ~/go; echo "export GOPATH=$HOME/go" >> ~/.bashrc
echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc

Comprobamos que se ha instalado

go version
go version go1.7.3 linux/amd64

Ahora si podemos instalar el go-ethereum

Para instalarlo me voy a descargar la ultima versión desde Github, al momento de escribir este post la ultima versión de Geth v1.6.5

Vamos a instalar algunos paquetes necesarios:

apt-get install -y build-essential libgmp3-dev daemontools-run curl

Luego de descargar la ultima versión de Geth, la descomprimimos y la colocamos en la carpeta destino:

wget https://github.com/ethereum/go-ethereum/archive/v1.6.5.tar.gz
tar -xvzf v1.6.5.tar.gz
mv go-ethereum-1.6.5 /opt/apps/go-ethereum-1.6.5

Ahora vamos a compilar,

cd go-ethereum-1.6.5
make geth

Voy a crear un enlace simbólico para poder actualizar sin perder las configuraciones que voy a hacer luego.

ln -s /opt/apps/go-ethereum-1.6.5 /opt/apps/go-ethereum

Podemos agregar el comando geth a nuestro path para poder utilizarlo de una forma muy cómoda

echo "export PATH=$PATH:$HOME/go-ethereum/bin:/opt/apps/go-ethereum/build/bin" >> ~/.bashrc
source ~/.bashrc

Podemos iniciar geth con una red testnet privada y minar nuestras propias monedas de prueba, pero en nuestro caso vamos a usar unas de las redes testnet para hacer pruebas del mundo real.

Actualmente existen tres redes Testnet de Ethereum

En nuestro caso vamos a usar RINKEBY ya que da soporte a geth tambien esta ROPSTEN que soporta Geth pero es casi imposible conseguir monedas de prueba.

En http://testnet.etherscan.io/ podemos ver las redes disponibles

  1. ROPSTEN (Revived) – Proof Of Work
  2. KOVAN – Proof Of Authority (Parity only)
  3. RINKEBY – Clique Consensus (Geth only)

Vamos a configurar la red testnet rinkeby nos dirigimos a su pagina y en la opción de Connect Your Self y vemos la instrucciones para configurar un Light node

Vamos a descargar el fichero rinkeby.json

He iniciamos por primera vez nuestro geth con el comando

geth --datadir=$HOME/.rinkeby --light init rinkeby.json

Dejamos que se sincronice, esto puede demorar un poco por lo que vamos a seguir nuestra configuración y dejar que haga su trabajo.

Configurar el arranque automático para después de cada reinicio del sistema operativo:

Creamos la carpeta daemon-geth dentro del directorio /etc/service

cd /etc/service
mkdir daemon-geth

Ahora vamos a crear el fichero run

vim /etc/service/daemon-geth/run

Este es el contenido del fichero run

#!/bin/bash
# run rinbiky testnet node
exec setuidgid appuser /opt/apps/go-ethereum/build/bin/geth --ipcpath "/opt/apps/geth.ipc" --networkid=4 --datadir "/home/appuser/.rinkeby" --syncmode=light --rpc --rpcaddr "localhost"  --rpcport 38904 --rpcapi "personal,db,eth,net,web3" --rpccorsdomain "localhost" --ethstats='AraguaneyBitsTestnet:Respect my [email protected]' --bootnodes=enode://a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51296ff084b770b94fb9028c4d25ccf@52.169.42.101:30303?discport=30304 2>> /opt/apps/data/logs/geth.log

Tenga en cuenta los siguientes puntos para que ser cambiados en su instalación:

  • El usuario que estoy usando es appuser
  • Estoy redirigiendo los logs a la carpeta /opt/apps/data/logs/geth.log (Esta carpeta debe existir)
  • El fichero de socket IPC lo estoy generando en la carpeta /opt/apps/geth.ipc esto es para usarlo más adelante con otros usuarios dándole los permisos necesarios
  • Mi nodo se llama AraguaneyBitsTestnet, por favor personalice correctamente el suyo.

Para iniciar el servicio podemos usar el siguiente comando:

svc -u /etc/service/daemon-geth

Y para bajarlo

svc -d /etc/service/daemon-geth
Mi Network Stats de Rinkeby

Mi Network Stats de Rinkeby

Ya vemos nuestro nodo en ejecución, y ahora que?

Vamos a crear una cuenta o wallet para tener nuestras primeras monedas y comenzar a hacer pruebas.

Primero debemos entrar en la consola de geth

En la documentación oficial podemos conseguir más comandos de la consola eth

geth attach /opt/apps/geth.ipc

y creamos una cuenta:

> personal.newAccount()
Passphrase: <la clave del monedero>
Repeat passphrase: <la clave del monedero>
"0xe2632021f255da92be0c0434855a63acbcbae286"

Ahora podemos ver la cuenta con el comando

eth.accounts[0]

y su saldo

eb3.fromWei(eth.getBalance(eth.accounts[0]), "ether");

Ahora vamos a volver a la pagina de Rinkeby buscamos la opción de Crypto faucet,

Faucet Rinkeby

Faucet Rinkeby

Para pode usar este Grifo es necesario crearnos un Gist, es muy facil de crear.

Mi rinkeby testnet wallet

Mi rinkeby testnet wallet

Luego copiamos el URL de nuestro Gist y pedimos las monedas que necesitemos, en mi caso he pedido 3 ether, podemos usar etherescan.io para verificar la transacción.

Mis primeros Ether testnet Rinkeby

Mis primeros Ether testnet Rinkeby

También podemos consultar el saldo con el comando.

> web3.fromWei(eth.getBalance(eth.accounts[0]), "ether");
3.0
>
O también podemos usar el Api JSON RPC
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xe2632021f255da92be0c0434855a63acbcbae286", "latest"],"id":4}' http://127.0.0.1:38904
{"jsonrpc":"2.0","id":4,"result":"0x52662a9a14fc8000"}

Los parámetros que he usado es la dirección de la billetera y el Id = 4 que corresponde a Rinkeby

Puedes encontrar mas información del API en la Wiki oficial  https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getbalance

Proyecto Walleth

 Si tenemos android  podemos bajar una app del play store llamada Walleth, actualmente esta apuntando a esta testnet de rinkeby.
https://play.google.com/store/apps/details?id=org.walleth&hl=es
Tenemos disponible el código fuente en https://github.com/walleth

Ahora vamos a enviar unos ether al monedero android desde la consola geth:

> var sender = eth.accounts[0];
undefined
> var receiver = eth.accounts[1];
undefined
> sender
"0x1cb34526844ea26926af2a58cbddecd86a79a11d"
> var amount = web3.toWei(0.01, "ether")
undefined
> personal.unlockAccount(sender, "la clave del monedero")  
> eth.sendTransaction({from:sender, to:receiver, value: amount})

Hemos enviado ether desde la consola, es una maravilla ahora podemos chequear la transacción en el etherscan

https://rinkeby.etherscan.io/address/0x1cb34526844ea26926af2a58cbddecd86a79a11d

y chequeamos nuestro walleth de android

Walleth Transaction detail

Walleth Transaction detail

Walleth Transaction principal

Walleth Transaction principal

Walleth Transaction menu

Walleth Transaction menu

 

Mist el monedero oficial

Para finalizar y si no eres amante de la consola, puedes instalar el Monedero Mist que viene con Geth, no voy a profundizar en este moneder ya que lo vamos a ver en otro post cuando trabajemos con contratos inteligentes, de momento quiero que sepan que si tienen linux es muy fácil de instalar

Vamos a la pagina de Mist y nos descargamos la ultima versión

wget https://github.com/ethereum/mist/releases/download/v0.8.10/Ethereum-Wallet-linux64-0-8-10.deb

dpkg -i Ethereum-Wallet-linux64-0-8-10.deb

Ahora que lo tenemos instalado vamos a configurar el mist contra nuestro node Rinkeby

ethereumwallet --rpc /opt/apps/geth.ipc --node-networkid=4 --node-datadir=$HOME/.rinkeby --node-ethstats='AraguaneyBitsTestnet:Respect my [email protected]' --node-bootnodes=enode://a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51296ff084b770b94fb9028c4d25ccf@52.169.42.101:30303

Ya tenemos unas herramientas útiles para comenzar con ethereum, tenemos que desarrollar contratos inteligentes y hacer muchas otras pruebas pero lo veremos en otra entrada.

 

 

 

 

 

Comments are closed.