Page Wiki sur le blockchain
Fichier Word : BlockChain_-_2.docx
Préparation de la machine Linux
Informations Login Ubuntu : romain mdp Ubuntu : romain
Installation des paquets
Ajout des dépôts d’ethereum
sudo apt-get update
sudo apt-get install -y software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
Mot de passe : romain
Installation de « geth » ainsi que le compilateur « solidity » (solc)
sudo apt-get install –y ethereum solc
Mot de passe : romain
Création du fichier de configuration
Il faut créer un fichier sous l’extention « .json », dans notre cas ce sera « genesis.json »
Nous entrons les configurations suivantes :
{
"nonce": "0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x1000",
"alloc": {},
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x1000000000",
"config": {
"chainId": 100,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
Plusieurs paramètres sont à renseigner :
• Le nonce est le hash que le mineur va devoir faire varier et trouver pour résoudre la preuve de travail. Il est complémentaire au mixhash et sert à vérifier que le bloc est valide.
• Mixhash est le hash de l’entête du bloc, sur lequel va se baser le mineur pour trouver le nonce.
• Le timestamp permet au client de réguler le temps entre la validation de 2 blocs successifs et de vérifier le bon enchainement des blocs. Il est initialisé à 0 pour indiquer qu’il s’agit du premier bloc.
• Le parentHash est le hash du bloc précédent. Etant donné qu’il s’agit du premier bloc, ce hash vaut 0.
• ExtraDat est facultatif et permet de stocker des données (32 octets max), sur la blockchain.
• GasLimit est le montant maximum de gas que les contrats peuvent consommer. Au-dessus de la limite, le contrat ne pourra pas être ajouté au bloc. Nous reverrons la notion de gas lors de la création de notre premier contrat.
• Difficulty correspond à la difficulté de la preuve de travail de ce bloc. Elle a un impact sur la rapidité de validation des blocs et donc la création d’ether. Nous mettons une valeur faible pour ne pas perdre de temps sur la validation de nos blocs et générer rapidement de l’ether. Cette valeur, couplée au timestamp, va permettre au client de fixer la difficulté de la prochaine preuve de travail, pour conserver un temps de validation linéaire.
Génération du block Genesis pour le NodeA
Nous entrons la commande suivante :
geth --datadir BlockChain/NodeA/ init BlockChain/NodeA/genesis.json
geth --datadir ./NodeA --networkid "100" init genesis.json
Génération du block Genesis pour le NodeB
Nous entrons la commande suivante :
geth --datadir Private/NodeB/ init Private/NodeB/genesis.json
geth --datadir ./NodeB --networkid "100" init genesis.json
Création du compte pour le NodeA
On tape la commande :
geth --datadir ./NodeA --networkid "100" account new
Mot de passe : romain
Address: {237649abd0d7fe8b13e1fef8fa10d08f7cf8fbc6}
Création du compte pour le NodeB
On tape la commande :
geth --datadir ./NodeB --networkid "100" account new
Mot de passe : romain
Address: {969c4919e04c2768e8ac15adcffc1f0fc2814a26}
Lancement du NodeA
On entre la commande suivante :
geth --datadir ./NodeA --networkid "100" --port "3031" console
Ensuite nous récupérons l’enode avec la commande suivante :
admin.nodeInfo
enode: "enode://7610246c4fbae8382eb965f14f77cb2a4482b513fbb42117bb4423713f34572f48b53e08945370ba39b64997cb475ef14dfc2ff1fef17d5d65ed570bf9a447c7@[::]:3031",
Lancement du NodeB
On entre la commande suivante :
geth --datadir ./NodeB --networkid "100" --port "3032" console
Ensuite nous récupérons l’enode avec la commande suivante :
admin.nodeInfo
enode: "enode://e1a69372693d684bd63f380b419f098687ae69c0d35d56f0db375a3898bb0b297f48a38ce1334a94e43eec405aa629f35c5d5d4f0a6ca527fb80dc18ad6d0cc0@[::]:3032",
Activation du minage sur le NodeA
Entrer la commande suivante :
miner.start()
Visualiser le compte du NodeA
Entrer la commande suivante :
web3.fromWei(eth.getBalance(eth.coinbase),"ether")
Connecter les noeuds
Sur le NodeB on entre la commande suivante :
admin.addPeer({enode du nœud sur lequel se connecter})
admin.peers
Transaction de A vers B
Sur le NodeA on entre les commandes suivantes :
personal.unlockAccount(eth.accounts[0],"romain",60)
eth.sendTransaction({from:eth.accounts[0],to:"88e9ee3093089e23ac4fac6924bf87ee82c3c8e1",value: web3.toWei(1,"ether")})