
¿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:
Para instalar el nodo voy a usar:
- Linux Debian 8
- Go
- CLI Geth – Go Ethereum
- NodeJS
Primero vamos a Instalar nodejs
1 |
aptitude install npm |
Necesitamos instalar el compilado JavaScript Solidity.
1 |
npm install -g solc |
Ahora comprobamos que este correctamente instalado:
1 2 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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
1 2 3 4 5 6 |
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
1 2 |
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:
1 |
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:
1 2 3 |
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,
1 2 |
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.
1 |
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
1 2 |
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
- ROPSTEN (Revived) – Proof Of Work
- KOVAN – Proof Of Authority (Parity only)
- 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
1 |
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
1 2 |
cd /etc/service mkdir daemon-geth |
Ahora vamos a crear el fichero run
1 |
vim /etc/service/daemon-geth/run |
Este es el contenido del fichero run
1 2 3 |
#!/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://a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb[email protected]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:
1 |
svc -u /etc/service/daemon-geth |
Y para bajarlo
1 |
svc -d /etc/service/daemon-geth |
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
1 |
geth attach /opt/apps/geth.ipc |
y creamos una cuenta:
1 2 3 4 |
> personal.newAccount() Passphrase: <la clave del monedero> Repeat passphrase: <la clave del monedero> "0xe2632021f255da92be0c0434855a63acbcbae286" |
Ahora podemos ver la cuenta con el comando
1 |
eth.accounts[0] |
y su saldo
1 |
eb3.fromWei(eth.getBalance(eth.accounts[0]), "ether"); |
Ahora vamos a volver a la pagina de Rinkeby buscamos la opción de Crypto faucet,
Para pode usar este Grifo es necesario crearnos un Gist, es muy facil de crear.
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.
También podemos consultar el saldo con el comando.
1 2 3 |
> web3.fromWei(eth.getBalance(eth.accounts[0]), "ether"); 3.0 > |
1 2 |
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
Ahora vamos a enviar unos ether al monedero android desde la consola geth:
1 2 3 4 5 6 7 8 9 10 |
> 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
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
1 2 3 |
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
1 |
ethereumwallet --rpc /opt/apps/geth.ipc --node-networkid=4 --node-datadir=$HOME/.rinkeby --node-ethstats='AraguaneyBitsTestnet:Respect my [email protected]' --node-bootnodes=enode://a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb[email protected]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.