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://4f3c531133ad022076b984efb1e8e9ff7fa91b164fa83aee49764db3f7f7805277cc3fde36ec3c26eef93ea0e25b0929f97139d721bf49780775af6399c11301@[::]: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:
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://4f3c531133ad022076b984efb1e8e9ff7fa91b164fa83aee49764db3f7f7805277cc3fde36ec3c26eef93ea0e25b0929f97139d721bf49780775af6399c11301@[::]:30303?discport=0"
Uniendo el nodo
admin.addPeer("enode://6e14e863135b62056c09253a20d7a051d71f730de1bd8ad3dfa55cf4c92ace458e6a34c52495b82655c57bba206f8f46c113683c8e3b96b95591d@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
}
}
}] ```
sabes como crear una maint? privada quedo claro en el documento!