Crear un Blockchain local de Ethereum con GETH y PUPPETH
Published: 2020-10-25 04:46:57

Holaaa a todos!!!

Otra vez soy yo Rodrigo G.T. esta vez les traigo un nuevo tema sobre ***Blockchain***, esta vez te enseñare a crear una blockchain en nuestra propia computadora.

# Manos a la obra!!.

## Instalar GETH

Para esta parte debemos acudir a la pagina [Geth](https://geth.ethereum.org/downloads/) y para ello debemos descargar el instalador y seleccionar la opción Development tools.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/suf6yinlss4wftd887pk.png)

Y siguiente, siguiente y aceptar.

Una vez instalado, podemos probar si se realizo correctamente la instalación ejecutando en nuestro cmd el siguiente comando

```javascript
geth version
```
y debe aparecer algo así

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/c0wwwo4rx6kdb3kneoij.png)

También debemos de saber si tenemos instalado correctamente ***Puppeth*** solo escribimos en nuestra linea de comandos puppeth

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/3vr12tigffqab5a6d7eo.png)

Una vez que tengamos instalado estas cosas correctamente vamos a comenzar con nuestra instalación.

## Acceder a la carpeta C://Users/[TU_USUARIO]/APPDATA/Local/Ethereum/GETH


##### NOTA: Si no aparece la carpeta Ethereum ejecute el comando geth en el cmd

```javascript
geth
```

Si todo esta bien accedemos a nuestra linea de comandos y ejecutamos el siguiente comando

```javascript
cd Appdata/local/ethereum/geth
```

Una vez que estés ubicado en esta ruta creamos una nueva carpeta donde guardaremos nuestra red local, por lo tanto debes crearla y posicionarnos en esa carpeta. Para ello necesitamos ejecutar el siguiente comando.

mkdir AQUI_PONES_EL_NOMBRE_DE_LA_RED && cd AQUI_PONES_EL_NOMBRE_DE_LA_RED


Ejemplo:
```javascript
mkdir miredlocal && cd miredlocal
```
El comando anterior crea la carpeta y nos posiciona en ella.
Una vez dentro, vamos a crear tres cuentas para hacer pruebas de nuestra blockchain y eso lo hacemos con el siguiente comando.

El siguiente comando lo vamos a ejecutar ***3 veces*** y debemos guardar nuestras claves privadas y publicas que nos genere ya que las ocuparemos mas adelante.

```javascript
geth --datadir . account new
```
Cuando ejecutemos el comando anterior nos pedirá una contraseña

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/6rvig6z5m50vw222hidb.png)

Recuerda guardar las claves publicas y las secretas.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/banya4nfjm8i07ic4df9.png)


Una vez que tengamos nuestras 3 claves publicas y privadas, continuemos.

Ahora ejecutamos puppeth en nuestra linea de comandos.

```javascript
puppeth
```

Dentro de puppeth, debes asignar un nombre a nuestra red (No utilizar espacios, guiones ni mayúsculas).

En este ejemplo le pongo el nombre miredlocal

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/8x03j10f0o9lbydfkygz.png)

Después nos preguntará que queremos hacer y debemos seleccionar la opción ***2*** que es configurar un nodo génesis.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/inx9bj2c9myuly79yiag.png)

Después nos preguntara si queremos crear un nuevo nodo génesis o importar uno existente, en esta opción seleccionamos la opción ***1***  (Create new genesis from scratch).

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/r5kuuqevx1yki13ak82t.png)

La siguiente pregunta nos preguntara que tipo de consenso usaremos debemos seleccionar la ***2*** (2. Clique - proof-of-authority)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/luk5fcfufw1j95bkzgk1.png)

La siguiente opción cada cuantos segundos crearemos un nuevo bloque, en este caso le pongo 16 segundos, puedes poner el número que quieras pero te recomiendo un número mayor a 15 para no generar errores.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/i8gtiomuzm1nykv006x4.png)

Después nos pedirá que le indiquemos la cuenta sello, por lo tanto, de las 3 cuentas que creamos seleccionamos ***SOLO UNA*** y pegamos la clave primaria sin poner ***0x*** y presionamos enter dos veces.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/1j6b62246b47cg4xaz2p.png)

Después asignamos cuentas para prefondear y pegamos cada una de las dos claves primarias de las otras dos cuentas. tienen que ser diferentes a la clave sello.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xwxukg6uyq6ic9kfxdl2.png)

Después nos preguntara si deseamos continuar y escribimos yes

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/5cg2qfs9lfmvrvk7ziqp.png)

Nos preguntar que especifiquemos una id de la red/cadena.
aquí solo damos enter


![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/lmeut4koj09pfuruzxel.png)

Ahora ya que terminamos ese paso nos volverá a preguntar que deseamos hacer entonces ahora volvemos a seleccionar la opción 2

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/k6x5631x7hyu164s38yp.png)

Y ahora nos preguntara que queremos hacer en este caso seleccionaremos la opcion ***2*** (Exportar genesis configurations) y le damos enter, y presionamos ***ctrl + c***

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/cf9rul1sugt5t830nmrh.png)

LISTOOO!!

Ahora inicializamos un bloque génesis.
geth --datadir . init NOMBRE_QUE_LE_PUSISTE_A_TU_RED.json

Ejemplo: 

```javascript
geth --datadir . init miredlocal.json
```

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/63qzbbjp3l06i28t2892.png)

Por ultimo, desbloqueamos el bloque y comenzamos a minar recuerda que se ejecuta cada 16 seg o el tiempo que decidiste poner.
ejecutamos el siguiente comando ***geth --nodiscover --datadir . --unlock 0x{Cuenta selladora} --mine***
la cuenta selladora es la clave primaria que es la que seleccionamos para nuestro bloque génesis y nos pedirá la contraseña de nuestra clave.

Ejemplo:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/o7p95qzo0za5dyc65lz3.png)

y listo ya tienes tu red local y comenzando a minar.

Para poder conectarnos a esta red debemos buscar en el código que se genera al comenzar a minar la propiedad ***url*** en mi caso es \\.\pipe\geth.ipc

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xth1i1uobomyrutq9kw2.png)

Ahora dejemos que este minando y nos conectamos en ***otra consola de comandos***(cmd) y ejecutamos el comando geth attach [la url]

```javascript
geth attach \\.\pipe\geth.ipc
```

Si te aparece el siguiente contenido despues de ejecutar el comando, significa que tu blockchain esta funcionando correctamente

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/h7wgbdlq5nft5jisvvqj.png)

FELICIADADES!!! ya tienes una blockchain local.

Espera mis siguientes posts para aprender ha transferir ether entre nuestras cuentas locales y ver nuestro balance.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/beo3pq5ik5ucpy3plm7k.jpg)