Crea tu propia Blockchain privada con Ethereum

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


{
    "config": {
        "chainId": 1337,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "difficulty": "200000000",
    "gasLimit": "2100000",
    "alloc": {
        "0xf8d7a085fd67fa9e6766a8d836473691901b8728": { "balance": "500000000000000000000000" }
    }
}

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:

{
    "config": {
        "chainId": 1337,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "difficulty": "200000000",
    "gasLimit": "2100000",
    "alloc": {
        "0xf8d7a085fd67fa9e6766a8d836473691901b8728": { "balance": "500000000000000000000000" }
    }
}

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://8927a1dd9ae869f991928173e61cf0c63dbb2215b8770466399885e0a8884abdb[email protected][::]: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!

También te podría gustar...

17 Respuestas

  1. Julian dice:

    Hola buenos días, ya instalé y seguí todos los pasos, ahora mi computadora hace una serie de cálculos creo, ahora como uso esos ethereum, o como los paso a otro monedero.

    • Ethereum dice:

      Hola Julian,

      Esos ETHER conseguidos son sólo utilizables dentro de tu red Blockchain privada, ya sea para ejecutar contratos inteligentes, enviar transacciones entre los participantes de la red o cualquier otra cosa que Ethereum nos permita en una red real Main Net.

      Saludos!

  2. Raul Lopez dice:

    Buenos dias:

    Lo primero , muchisimas gracias por tu articulo. Lo segundo es preguntarte como se aplicaria esto a una distro de Linux (Ubuntu) y lo segundo es preguntarte si sabrias como implementar este blockchain en un gestor de documentos. Te agradeceria cualquier ayuda que me podrias prestar.

    Muchisimas gracias

    • Ethereum dice:

      Hola Raúl,

      Para una distro Linux lo único que deberías cambiar es la carpeta donde se almacenará el contenido de la Blockchain. Respecto a lo de la implementación, creo que la única forma es mediante el desarrollo de Contratos Inteligentes en Solidity/Serpent/LLL. Cuando ya tienes tu nodo corriendo y minando en la red privada, puedes publicar Contratos Inteligentes que vivan en ella y ejecuten las órdenes que tu le des. Recuerda que la Blockchain es una hermosa tecnología, pero no lo resuelve todo, hay muchos casos de uso en el que es mejor utilizar una base de datos tradicional.

      Saludos!

  3. Francisco dice:

    Estimado

    Geth es solo un cliente o el instalador trae todo lo necesario??? Cliente y Ethereum en este caso???

    saludos

  4. cornelio dice:

    a esta red privada le puedo habilitar un monedero (android)

  5. diego dice:

    Buenas tardes, tuve un pequeño problema me sale este error:
    Fatal : invalid genesis error: jason: cannot unmarshal string into go value of type core.genesis

    please necesito ayuda :c

  6. Braulio Soto dice:

    Estimados: Buenas noches voy en el paso para crear el bloque genesis pero no puedo realizarlo… como se crea el archivo BloqueGenesis.json? en windows 10 por el cmd?

    • Ethereum dice:

      Hola Braulio!

      El archivo BloqueGenesis.JSON lo puedes crear con cualquier editor de archivos, como: Atom, Sublime Text, Vistual Studio Code.

      Saludos, Javier Guajardo 😀

  7. Gerardo dice:

    Una pequeña aportación. Al intentar acceder desde Windows a la consola para ejecutar geth attach me daba el siguiente error “Fatal: Unable to attach to remote geth: no known transport for URL scheme “c””
    Lo he resuelto ejecutando lo siguiente:
    geth attach ipc:\\.\pipe\geth.ipc

  8. Simonto dice:

    Buenas,
    Si armamos una red privada, el tema de los ethers son solo para realizar transacciones entre los nodos de esa red privada,.
    Lo que no me queda claro es el concepto de “realizar pruebas” con “produccion” ya que todo se monta en la misma red publica verdad?
    Si es así, y yo me quiero armar una subred, no tengo ningun costo por las transacciones?

    Gracias!!

    • Hola Simonto!

      Efectivamente, si tienes tu Blockchain privada las transacciones serán gratis, ya que tu determinas las reglas del “juego” (Mineros, dificultad, entre otras). Debes considerar que uno de los factores que hace que la Blockchain pública de Ethereum sea tan segura es la cantidad de validadores (mineros) que forman parte de la red y almacenan la Cadena de Bloques (Blockchain).

      Cualquier cosa acá estamos!

      Saludos, Javier Guajardo.

  9. Franklin lanz dice:

    Saludos. Como se haría en el caso que no quisiera minar la moneda solo realizar el envío de las mismas a través de los nodos existentes usando proof of authority..

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *