Un client d’Ethereum és una aplicació de programari que implementa l’especificació d’Ethereum i es comunica a través de la xarxa peer-to-peer amb altres clients d’Ethereum. El client és la porta d’entrada per a començar a interactuar amb el teu node. Geth (Go-Ethereum) és la implementació de Go, el client majoritari i el protagonista de l’entrada d’avui.
El repte
El repte d’aquest mes consisteix en familiaritzar-nos amb les ordres més importants del client Geth, per a començar a interactuar amb el teu node d’Ethereum. Per a que l’exercici no sigui massa costós, crearem una blockchain privada. Això ens permetrà poder operar de manera fàcil, sense malgastar recursos ni ETHs reals.
El codi
Pre-requisits: tenir instal·lat Geth, el client Go d’Ethereum
Arxiu genesis.json
Primer de tot, anem a generar un parell d’adreces amb les que puguem interacturar:
cd ./ethereum
get account new
geth account list
A continuació creerem l’arxiu genesis (si no el tenim ja creat):
touch genesis.json
Dins de l’arxiu inclourem l’assignació de pre-minat en una de les adreces que hem creat:
{
"config": {
"chainId": 4566,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {
"ADREÇA_ETH": {"balance": "10000000000000000"}
},
"difficulty" : "0x100",
"extraData" : "",
"gasLimit" : "0x888888888000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
Canvia ADREÇA_ETH per la teva adreça.
Inicialitzar la Blockchain Privada
Una vegada tenim l’arxiu genesis guardat, ja podem inicialitzar-lo i assignar l’adreça base (canvia ADREÇA_ETH per la teva adreça.) per a la minera, amb les següents ordres:
geth init genesis.json
geth --allow-insecure-unlock --datadir . --keystore ~/.ethereum/keystore --networkid 4569 --http --http.addr '0.0.0.0' --http.corsdomain "*" --http.port 8502 --http.api 'personal,eth,net,web3,txpool,miner' --mine --miner.etherbase=ADREÇA_ETH
A partir d’aquí, obrim una nova terminal per a seguir treballant des d’allà.
Interacció desde Web3
Primer de tot, connectarem la nova terminal 2 amb la instància de Geth corrent a la terminal 1 i mostrarem per pantalla totes les ordres disponibles des de web3:
geth attach geth.ipc
web3
Seguidament, comprovarem el saldo de les adreces que tenim creades. Concretament, podem consultar el saldo de l’adreça on hem assignat el pre-minat d’ETH a l’arxiu Genesis (en el meu cas, la 5):
eth.getBalance(eth.accounts[5])
A partir d’aquí ja podem desbloquejar l’adreça i realitzar una transacció a una altra de les adreces que tenim creades:
personal.unlockAccount(eth.accounts[5])
eth.sendTransaction({to: eth.accounts[4], from: eth.accounts[5], value: 10, gas: 3000000})
Per últim, iniciarem el procés de mineria, per a que la transacció s’inclogui en el pròxim bloc, i s’efectui l’actualització de l’estat de la blockchain i dels saldos:
miner.start(1)
eth.getTransaction("TX_HASH")
eth.getBlock(1)
Conclusions
Interactuar amb el teu node és un dels primers passos per a introduïr-te en el desenvolupament d’Ethereum. Per a fer-ho, és necessari elegir una de les implementacions (clients) disponilbles i instal·lar el programari.
A partir d’aquí, pots córrer tant la xarxa principal (“mainnet”) com les xarxes de tests, o crear la teva propia blockchain privada, com ha estat el cas d’avui.