Conectando a blockchain: cómo crear nuestra propia cadena de bloques privada

Ethereum es una de las  plataformas más populares para el desarrollo de smart contracts, como ya comentamos en el post anterior; pero, ¿sabes cómo conectarse a una red pública? ¿sabrías cómo crear nuestra propia cadena de bloques privada? En este post te lo explicamos.

Cadenas Públicas

De forma similar a Bitcoin, en el ecosistema de Ethereum, hay muchos editores visuales (o navegadores) que ayudan a recopilar y analizar estadísticas desde un acceso público.

Para conocer toda la información que se está realizando en Ethereum puedes consultar en Etherscan.io, donde podrás ver los bloques generados, las transacciones y contratos que incluyen, etc.

Normalmente, hay dos tipos de redes públicas Ethereum:

  • Mainnet: se utiliza para proyectos de producción y smart contracts, y normalmente se necesita invertir algo de dinero real (convertido a ether) para poder interactuar con él.
  • Testnet: se utiliza para hacer pruebas y puede haber más de uno, recreado generalmente de forma periódica.
Otra de las herramientas de las que disponemos es Ethernodes.org un navegador que muestra información en vivo de la red Ethereum y sus nodos. En la imagen se puede ver que la mainnet consta de unos 22.000 nodos, el 50% de los cuales está en EEUU o China.

Una forma de conectarse a Ethereum es a través de un wallet o thin node, como puede ser Ethereum Wallet. Este te permite conectar a una red pública, gestionar tus cuentas y tus contratos. Lo que no incluye es un navegador de aplicaciones distribuidas (dApps). Para eso haría falta una versión más completa, llamada Mist.

Cuando ejecutes por primera vez el software Etherum Wallet, intentará conectarse al Mainnet. A continuación, puedes cambiar a una testnet (Develop à Network) y comenzar a minar para obtener ether. Si ejecutas la red privada (“Solo network”), el software Wallet debe cambiar automáticamente a ella.

Lo ideal para hacer pruebas es trabajar con redes privadas (veremos luego cómo crear una) o con una de las testents públicas. Actualmente existen las siguientes:

  • Ropsten: soporta nodos Geth y Parity, y es la que mejor reproduce la blockchain principal.
  • Kovan: inmune a ataques de spam, pero solo soporta nodos Parity.
  • Rinkeby: también inmune a ataques de spam, pero solo soporta Geth.

Seleccionar una u otra dependerá de tus necesidades o infraestructura, pero la que está teniendo mejor acogida últimamente y que usamos internamente para pruebas es Rinkeby puesto que es soportada por el software habitual (Geth, Mist y MetaMask). Para conseguir Ether y poder trabajar en ella simplemente hay que seguir los pasos en este enlace.

Crea tu cadena privada

Una vez que hemos comprobado las cadenas públicas, es buen momento para crear tu primera cadena privada con el cliente (o nodo) con Geth.

La instalación es muy sencilla pero depende mucho del SO utilizado. Simplemente sigue las instrucciones de su web. En GFT lo hemos probado en Linux, Windows, Mac e incluso ¡en una Raspberry Pi! sin problemas.

Con el fin de crear tu nueva cadena privada, seguiremos los siguientes pasos:

  • Preparar el bloque Genesis (primer bloque de la cadena, sin predecesor) e inicializar tu blockchain
  • Arrancar la cadena privada y conectar la consola de administración
  • Crear cuentas y arrancar la minería para así validar las transacciones que lleguen a la red

Crear el bloque Genesis

  • Crear una carpeta vacía, donde guardaremos la configuración y se almacenarán los elementos internos de la cadena.
  • Entra en la carpeta nueva y crea un bloque Genesis (genesis.json). El siguiente es un ejemplo típico pero en este post hay muchas más información sobre la configuración.
{
    "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "difficulty": "200000000",
    "gasLimit": "2100000",
    "alloc": { }
}

 

  • En el mismo directorio, ejecuta el siguiente comando para inicializar la cadena de bloques. Esto creará una subcarpeta donde se almacenará la configuración y bloques.
geth --datadir="mychaindata" init genesis.json
  • Arranca la red (actualmente de un solo nodo):
geth --datadir="mychaindata"

Con estos simples pasos ya tenemos una red privada corriendo pero le faltan dos cosas muy importantes: crear cuentas y activar la minería. Para activarlo arrancaremos la consola y haremos las tareas administrativas desde ahí.

Adjuntar una consola de administración al nodo

En una nueva terminal (para no parar el nodo en marcha), al ejecutar el siguiente comando debes ser capaz de obtener un control total sobre el nodo en ejecución. Consulta la Geth Management API para obtener más información sobre los comandos disponibles.

Si estamos en Windows simplemente ejecutando el “attach” será suficiente:

geth attach

Sin embargo, en sistemas basados en Linux hay que indicar el IPC donde conectar. Para eso hay que mirar la consola de la otra pantalla y verás un mensaje del tipo (“IPC endpoint opened:
<<IPC_file_location>>”). Con esa información ejecutaremos el siguiente comando:

geth attach ipc:<<IPC_file_location>>

Se abrirá una consola y podrás interactuar con el nodo, por ejemplo, ejecutando los siguientes comandos que listan las cuentas actuales (por ahora ninguna) y la información básica del nodo, respectivamente:

> personal.listAccounts

> admin.nodeInfo

Creación del usuario y activación del modo minería

En la misma consola creamos uno o varios usuarios con el siguiente comando, que nos pedirá una contraseña para la cuenta:

> personal.newAccount()

Una vez creadas las cuentas, las podemos ver con el comando “personal.listAccounts”.

Pero ahora lo que tenemos que hacer es desbloquearla para luego poder interactuar con ella y poder minar. El siguiente comando pedirá la contraseña para poder desbloquearla:

> personal.unlockAccount(“<<your account (e.g. 
0x5e97870f263700f46aa00d967821199b9bc5a120”)

Con esto lo único que queda es empezar a minar, con el siguiente comando:

> miner.start(<<num_treads>>)

Esto activará el modo de minería, que se encargará de validar las transacciones que lleguen a nuestra blockchain. Además, el ether acumulado por la minería irá a la cuenta que hemos activado.

Con esto ya tendríamos una blockchain privada básica funcionando. A partir de aquí se puede ampliar o mejorar en muchos aspectos, por ejemplo añadiendo más nodos, activando el RPC para interactuar con la red, “inspeccionar” las transacciones recibidas, gestionar las cuentas, reconfigurar la blockchain (ver bloque génesis), etc.

Bonus: arrancar todo en un solo comando

Los pasos anteriores se han seguido de una manera didáctica, pero se podría hacer lo mismo con un simple comando:

geth --datadir="mychaindata" --maxpeers 4 --nodiscover --mine --
minerthreads 1 --unlock 0 console

Que, siguiendo el orden de los comandos, arranca el nodo Geth a partir de la configuración inicial (en “mychaindata”), con un máximo de 4 peers (nodos en la red), sin descubrimiento de peers automático (se tienen que añadir manualmente), con el minado activado con un solo thread, desbloqueando la cuenta 0 (la primera que creamos) y abriendo la consola directamente.

Recuerda que al desbloquear la cuenta como parte del comando nos pedirá la contraseña de esa cuenta al arrancar.

Conclusiones

En este post hemos aprendido a navegar por las redes públicas (Mainnet o Testnet) utilizando los navegadores de bloques más comunes (por ejemplo, Etherscan.io) y cómo conectarse con Ethereum Wallet. También hemos aprendido a crear nuestra propia red privada usando Geth, generando el bloque de genesis, inicializando la cadena de bloques y ejecutando el nodo de minería.

En el siguiente post aprenderás a crear  tu primer contrato inteligente. ¡Manténte al tanto!

 

Comment Area

  1. Omar02/03/2018

    He tenido la oportunidad de bajar el blockchain de bitcoin haciendo algunos desarrollos. Me gustaria tambien explorar Ethereum y su entorno. Veo algunas similtudes entre ambos blockchains.

    Saludos.

    Omar O.

    1. marcelo15/12/2018

      hola buen día, tienes algún desarrollo en marcha ? me gustaría ofrecer algún servicio basado en cadenas bloques para empresas, complementado con algun otra cosa (manejo de informacion, etc), pero no tengo claro el alcance del servicio que se podria implementar con blockchain. tal vez podriamos hablar. saludos

      1. Walter29/01/2019

        Hola Marcelo, si estas interesado estoy en estos momentos en desarrollando un proyecto de prestamos para empresas basado en blockchain. Tal vez podamos trabajar juntos, puedes escribirme a walterhcg@gmail.com si estas interesado. Saludos.

  2. Santi25/03/2018

    Impresionante!!.
    Ya me gustaría a mi poder realizar todo eso, de poder desarrollar yo el software ya estaría trabajando en la blockchain que conoceremos dentro de 8 o 10 años.
    Enhorabuena!!

  3. NIEVES GONZALEZ27/10/2020

    ME INTERESA TODO LO RELACIONADO CON EL ACCESO A LA PLATAFORMA BLOCKCHAIM PARA EL DESARROLLO DE MIS PROYECTOS PROFESIONALES

GreenCoding

Con GreenCoding el desarrollo de software se convierte en parte integrante de tu programa de sostenibilidad

Más información