Hola etherians!

Es de conocimiento público que Ethereum es una blockchain pública que funciona gracias a la interconexión entre los ordenadores (nodos) que la componen, sin embargo hay muchas personas que aún no se han enterado de que Ethereum al ser un software libre, permite la creación de blockchains privadas de forma gratuita y en sencillos pasos, sin tener que tocar una sola línea de código.

Una blockchain pública es de libre acceso y está compuesta por miles de ordenadores ubicados en distintos lugares del planeta, solo necesitas descargar el software que sincronizará tu ordenador con la red. La información publicada en esta blockchain es siempre pública y cualquier persona puede consultar la información publicada.

Una blockchain privada posee las mismas características que una blockchain pública, solo que una blockchain privada está compuesta por 2 o más ordenadores a los que se les provee una dirección IP y no descubren más nodos, solo quienes tengan la dirección IP de esa blockchain podrán descargar y sincronizar la información publicada. La información de esta blockchain es siempre privada y nadie más que los ordenadores que componen la blockchain privada pueden consultar la información.

Instalar GETH.

Geth es un programa que se ejecuta en la línea de comandos (CLI) del sistema operativo del usuario. Se encuentra disponible para Windows, Linux y Mac. Utilizaremos este programa para interactuar con las redes que Ethereum nos provee: Main Net, Ropsten, Rinkeby, Kovan.

Para descargar Geth da clic aquí. En este caso el ejemplo está hecho bajo Windows 10, la ruta de instalación C:\

Bloque génesis

El bloque génesis es el primer bloque emitido por la blockchain y a diferencia de todos los otros bloques, éste no apunta a un bloque anterior. El bloque génesis nos ayudará a personalizar nuestra blockchain, permitiéndonos iniciar nuestras cuentas con saldo a favor, modificar las dificultades entre otras cosas.

BloqueGenesis.json

Parámetros

Geth sin parámetros nos conectará con la red Main Net o red real, por lo que es necesario que le proveamos ciertos parámetros que nos ayudarán a privatizar la blockchain, de modo que solo puedan participar de la red quienes nosotros delimitemos. El orden de los parámetros no altera el funcionamiento de la blockchain. Algunos de los parámetros que podemos usar son

  • maxpeers : Número máximo de participantes en la red. Este parámetro es opcional y se recomienda solo cuando sabes con exactitud cuántos ordenadores se conectarán a la blockchain.
  • port : Es el número del puerto que abrirá tu ordenador para recibir a los participantes de la blockchain.
  • init : Ruta al archivo BloqueGenesis.json
  • datadir : Directorio donde se almacenará toda la información publicada en la blockchain privada.
  • rpc : Habilita las “Llamadas de procedimiento remoto” para poder ejecutar comandos de manera remota en la blockchain.
  • rpcapi : Este parámetro es necesario solo si el parámetro –rpc está habilitado. Nos ayudará a delimitar que acciones pueden ser llamadas de manera remota, entre las opciones están: eth, db, web3, net y otras más que no usaremos por el momento. Cada una de ellas nos abre un abanico de posibilidades para manipular a diestra y siniestra nuestra blockchain.
  • rpccorsdomain : Nos permitirá filtrar qué dominios pueden acceder a las llamadas remotas (rpc).
  • rpcport : Puerto a través del cual se podrán conectar a las llamadas remotas.
  • identity : Este parámetro es opcional y si se utiliza es para identificar los nodos conectados a la red.
  • networkid : Es un número que identificará a la red que estamos creando.
  • nodiscover : Es el parámetro que nos aislará de la red real, solo quienes tengan nuestro mismo bloque génesis y “network id” podrán conectarse a nuestra blockchain.

Antes de crear nuestra blockchain privada…

Necesitamos crear una cuenta (etherbase) por defecto en la que se depositarán los ethers minados. Quisiera destacar que al tratarse de una red privada, nosotros mismos podemos fijar una dificultad inicial muy baja y en pocos minutos tener una buena cantidad de ether para nuestras pruebas, pero como muchos de los que están leyendo este artículo son algo impacientes (me incluyo) y no quieren esperar el proceso de minado, voy a indicar la manera exacta de como crear la blockchain con saldo a favor desde el mismo bloque génesis y así poder comenzar de inmediato las pruebas que estimen pertinentes.

Creando nuestra primera cuenta Ethereum para la red privada

  1. Abrir la consola o terminal del sistema operativo, CMD en mi caso (Windows 10).
  2. Desde la consola nos dirigimos a la ruta donde instalamos Geth mediante el comando cd, en mi caso quedaría cd C:\Geth2
  3. Una vez dentro del directorio donde se encuentra la instalación de Geth, crearemos un directorio donde se almacenará la información de la blockchain privada mkdir BlockchainETHCL
  4. Luego de creada la carpeta que contendrá la información de la blockchain (BlockchainETHCL), vamos crear una cuenta Ethereum con el comando geth account new --datadir BlockchainETHCL . Nos pedirá que ingresemos una contraseña para la cuenta, damos ENTER y nos generará la dirección, que en mi caso es f8d7a085fd67fa9e6766a8d836473691901b8728

Creando el bloque génesis

Si completaron los pasos anteriores de manera correcta, vamos a pasar a crear el archivo BloqueGenesis.json en la carpeta de la instalación de Geth (C:\Geth2). El contenido debe ser el siguiente:

Solo deberán cambiar el 0xf8d7a085fd67fa9e6766a8d836473691901b8728 por la dirección que nos generó geth en el paso 4. Esta configuración nos permitirá iniciar la blockchain privada con un saldo de 500.000 ether, suficiente como para hacer muchísimas pruebas!

Iniciando el bloque génesis

Teniendo ya nuestro BloqueGenesis.json en la carpeta del geth (C:\Geth2), procederemos a iniciar la cadena de bloques con el siguiente comando geth init BloqueGenesis.json --datadir BlockchainETHCL

Si todo salió bien, nos dará una respuesta similar a esta

Iniciando la blockchain privada

Para finalizar el proceso, vamos a por fin ejecutar nuestra blockchain totalmente privada con algunos de los parámetros que se comentaron al inicio del artículo. Vamos a iniciar una blockchain en la que solo se puedan conectar máximo 3 nodos (--maxpeers 3)

geth --datadir BlockchainETHCL --networkid 1337 --maxpeers 3 --nodiscover --mine

¿Cómo manipular la blockchain?

Es muy sencillo, debes abrir una nueva consola de comandos, ir a la carpeta del Geth y escribir

geth attach

Con este comando abriremos una consola en Geth, desde la cual podremos realizar transacciones, crear cuentas, bloquear/desbloquear cuentas, crear contratos, ejecutar funciones de los contratos y todas las posibilidades que Ethereum nos brinda mediante los objetos web3, eth, personal, admin, debug.

¿Cómo añadir nodos a la blockchain?

Los nodos que quieran participar de la blockchain deben usar la misma configuración que utilizaste en la creación inicial, el mismo bloque génesis (idéntico) y networkid. Luego, debe abrir la consola de Geth con geth attach y añadir tu enode, que es una url especial que identifica tu blockchain. El comando para añadir nodos es

admin.addPeer("enode://8927a1dd9ae869f991928173e61cf0c63dbb2215b8770466399885e0a8884abdb3646187debff0f9be405f8020eb18f69dc055801b7ecee0e1da7de66531eafc@[::]:30303");

Esa es la dirección de mi enode, sin embargo la persona que intente añadir tu enode debe reemplazar el [::] por tu ip pública o privada, según donde quieras ejecutar tu blockchain.

¿Tienes dudas?

Escribe tu consulta en los comentarios 😀

¡Hasta la próxima!