buy lasix http://all-treatment.org/buy-levitra-vardenafil/ http://all-treatment.org/buy-viagra-sildenafil-citrat/ isotretinoin online buy cialis online
13 març 2018

Private block chain

Author: Joaquim Perez Noguer | Filed under: Ciència i tecnologia

Vist al Blog de GFT, escrit per Esteban Chiner:

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.

Leave a Reply