Do you want to switch to Platzi in English?
4

Como Crear Una Replica De Ethereum o Nodo Publico

Preparando Entorno
Para la creación de nuestro entorno debemos tener instalado un cliente de ethereum en nuestro equipo la mejor forma de hacerlo es descargando el software de ethereum el cual permite conectarnos con la red de ethereum o crear nuestra red privada,este se encuentra disponible para todos los sistema operativos

https://geth.ethereum.org/downloads/

Instalación en linux

sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

Instalación En Linux Windows
la instalación en windows es aún más sencilla siguiente siguiente aceptar

Creación de Blockchain Pública:
Para la unión con nuestra red pública solo debemos escribir el comando de geth y nuestro equipo se empezará sincronizar con la red de ethereum

Creación de Blockchain Privada:
Para la creación de nuestra blockchain privada realizaremos los siguientes pasos

Creación De Carpeta De La Blockchain

Para el siguiente paso crearemos una carpeta en la cual vamos a instalar nuestra blockchain privada para fines prácticos la llamaremos BlochainPrivada

mkdir BlockchainPrivada

Creación Bloque Génesis
Para la creación del bloque génesis utilizaremos un cualquier editor de texto y crearemos un archivo .json dentro de nuestra carpeta BlockchainPrivada en este caso utilizaré la consola de linux con nano.

nano BlockchainPrivada/Genesis.json

Dentro de esta archivo crearemos nuestro bloque génesis en la parte de abajo te dejo un ejemplo puedes cambiar el chainId por el que mas te guste

{
"config": {
"chainId": 1234,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x400",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}

ctrl + x y guardamos el archivo

Inicialización Bloque Génesis

geth  --datadir "Blockchainprivada"  init "Blockchainprivada/Genesis.json"

Resultados

INFO [04-22|15:58:07] Maximum peer count                       ETH=25LES=0total=25
INFO [04-22|15:58:07] Allocated cache and file handles         database=/home/hackubuntu/Desktop/Blocchain/BlockchainPrivada/geth/chaindatacache=16handles=16
INFO [04-22|15:58:07] Writing custom genesis block 
INFO [04-22|15:58:07] Persisted trie from memory database      nodes=0size=0.00Btime=4.043µsgcnodes=0gcsize=0.00Bgctime=0slivenodes=1livesize=0.00B
INFO [04-22|15:58:07] Successfully wrote genesis state         database=chaindatahash=b052b0…1553c1
INFO [04-22|15:58:07] Allocated cache and file handles         database=/home/hackubuntu/Desktop/Blocchain/BlockchainPrivada/geth/lightchaindatacache=16handles=16
INFO [04-22|15:58:07] Writing custom genesis block 
INFO [04-22|15:58:07] Persisted trie from memory database      nodes=0size=0.00Btime=4.171µsgcnodes=0gcsize=0.00Bgctime=0slivenodes=1livesize=0.00B
INFO [04-22|15:58:07] Successfully wrote genesis state         database=lightchaindata

Iniciando Blockchain Privada:
Esta inicialización permite ejecutar la blockchain de forma gráfica, su desventaja es que cuando nosotros cerramos nuestra terminal se apaga la blockchain

sudogeth--identity"BlockchainPru"--datadir"BlockchainPrivada"--nodiscover--networkid1234--port30303--rpc--rpcapidb,eth,net,web3,personal--cache=2048--rpcport8545

Si deseamos tener siempre nuestro nodo en segundo plano agregaremos el simbolo & al final

sudogeth--identity"BlockchainPru"--datadir"BlockchainPrivada"--nodiscover--networkid1234--port30303--rpc--rpcapidb,eth,net,web3,personal--cache=2048--rpcport8545&

Resultado

INFO [04-22|16:07:02] Starting peer-to-peer node               instance=Geth/BlockchainPru/v1.8.4-stable-2423ae01/linux-amd64/go1.10
INFO [04-22|16:07:02] Allocated cacheandfile handles         database=/home/hackubuntu/Desktop/Blocchain/BlockchainPrivada/geth/chaindata cache=1536 handles=512
WARN [04-22|16:07:02] Upgrading databasetouse lookup entries 
INFO [04-22|16:07:02] Database deduplication successful        deduped=0
INFO [04-22|16:07:02] Initialised chain configuration          config="{ChainID: 1234 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: <nil> EIP155: 0 EIP158: 0 Byzantium: <nil> Constantinople: <nil> Engine: unknown}"
INFO [04-22|16:07:02] Disk storage enabled for ethash caches   dir=/home/hackubuntu/Desktop/Blocchain/BlockchainPrivada/geth/ethash count=3
INFO [04-22|16:07:02] Disk storage enabled for ethash DAGs     dir=/home/hackubuntu/.ethash                                         count=2
INFO [04-22|16:07:02] Initialising Ethereum protocol           versions="[63 62]" network=1234
INFO [04-22|16:07:02] Loaded most recent local header          number=0hash=b052b0…1553c1 td=1024
INFO [04-22|16:07:02] Loaded most recent localfullblocknumber=0hash=b052b0…1553c1 td=1024
INFO [04-22|16:07:02] Loaded most recent localfastblocknumber=0hash=b052b0…1553c1 td=1024
INFO [04-22|16:07:02] Regenerated localtransaction journal    transactions=0 accounts=0
INFO [04-22|16:07:02] Starting P2P networking 
INFO [04-22|16:07:02] RLPx listener up                         self="enode://4f3c531133ad022076b984efb1e8e9ff7fa91b164fa83aee49764db3f7f780527[email protected][::]:30303?discport=0"
INFO [04-22|16:07:02] IPC endpoint opened                      url=/home/hackubuntu/Desktop/Blocchain/BlockchainPrivada/geth.ipc
INFO [04-22|16:07:02] HTTP endpoint opened                     url=http://127.0.0.1:8545                                         cors= vhosts=localhost
INFO [04-22|16:07:05] Mapped network port                      proto=tcp extport=30303 intport=30303interface="UPNP IGDv2-IP1"

Debemos verificar siempre que nuestro chain id sea el mismo que teniamos en nuestro Genesis.json
Nota: si te aparece 1 es que estas conectado ala red publica de ethereum osea que hiciste algun paso mal

Manipulación Blockchain Privada

Después de iniciar nuestra blockchain privada podemos manipular, crear transacciones, generar contratos etc para esto copiamos el url de nuestra blockchain privada la cual se genera al iniciarla.

url=/home/hackubuntu/Desktop/Blocchain/BlockchainPrivada/geth.ipc

Para ingresar a la consola escribiremos en una nueva terminal sin cerrar la que se está ejecutando y utilizaremo sl comando geth attach en micaso seria asi:

sudo geth attach /home/hackubuntu/Desktop/Blocchain/BlockchainPrivada/geth.ipc

Creación de una cuenta etherbase

personal.newAccount()

despues de esto ecribiremos nuestra contraseña y el nos generara nuestro hexadcimal

después de esto escribiremos nuestra contraseña y el nos generará nuestro hexadecimal y lo definiremos como etherbase con el siguiente comando :

personal.unlockAccount(eth.accounts[0])

respuesta tendremos un true

Ahora haremos un poco de minería para verificar que todo quedo bien

//inicia la minería podemos hacerlo durante tres minutos
miner.start(3)

//la suspende
miner.stop()

Después de esto verificaremos nuestro saldo en esta minería que se hizo con el comando:

web3.fromWei(eth.getBalance(eth.coinbase), "ether"

verificaremos los bloques que hemos creado:

eth.blockNumber

Unión de un nuevo nodo nuestra blockchain privada.

Para la unión de un nuevo nodo a nuestra blockchain privada es necesario conocer varios parámetros de direccionamiento y conectividad:

  • Tener habilitados los puertos tanto en equipo como también que este tenga la conexión permitida router(local) firewall(nube y local)
  • Ip pública (Blockchain Privada internet ) ip local (nodos locales sobre una red).
  • Puerto de conexión a la blockchain.
  • Network id de la red.
  • Tener el mismo bloque génesis.
  • Tener habilitado el puerto rpc.

Para la creación del nodo debemos seguir los mismos pasos de creación de una blockchain privada y esta debe tener el mismo bloque génesis que el nodo al cual nos vamos a conectar

Para la unión del nodo con el otro debemos tener un enode para conectarnos con este nodo además este debe tener todos los puertos requeridos habilitados podemos verificar esto con un ping y un testnet

Teniendo en cuenta todo lo anterior procedemos a realizar la unión de los nodos utilizando el enode de conexión en este caso nodo1 al nodo2.

Este enode se encuentra al iniciar la blockchain nos aparecerá una línea que dice enode

self="enode://4f3c531133ad022076b984efb1e8e9ff7fa91b164fa83aee49764db3f7f780527[email protected][::]:30303?discport=0"

Uniendo el nodo

admin.addPeer("enode://6e14e863135b62056c09253a20d7a051d71f730de1bd8ad3dfa55c[email protected]ippublica:30303?discport=0")

Respuesta

true

listar nodos unidos

comando

admin.peers

Respuesta

[{
    caps: ["eth/62", "eth/63"],
    id:"6ee02e24a914e863135b62056c09253a20d7a051d71f730de1bd8
ad3dfa55cf4c92ace458e6a34c52495b82655c57bba206f8f46c113683c8e3
b96673b95591d",
    name:"Geth/b3eth/v1.8.1-stable-1e67410e/linux-amd64/go1.9
.4",
    network: {
      inbound:false,
      localAddress:"ip:puerto",
      remoteAddress:"ip:puerto",
      static:true,
      trusted:false
    },
    protocols: {
      eth: {
        difficulty:22406969119,
        head:"0x2157c7f51e2dccdebe804240322cfec109ea2531b8f5d
2b1abf8329dbb39a753",
        version:63
      }
    }
}] ```



Escribe tu comentario
+ 2
2
783Puntos

Que buena George, este tipo de información no es tan fácil de conseguir muchas gracias.

1
11853Puntos

Gran tutorial.

Ahora que nos explicaste como hacerlo, para que utilizarías tu propia réplica del blockchain de ethereum?