Home R&D Webnet Implémenter sa propre blockchain privée : Création d’une blockchain avec Geth

Implémenter sa propre blockchain privée : Création d’une blockchain avec Geth

  Amine, Architecte PHP 5 min 25 février 2019

Introduction

Pour mettre en pratique les connaissances que nous avons acquises sur le concept de blockchain, nous avons décidé d’utiliser notre projet interne de pronostics sur les matchs de football.

Pour ce faire, nous avons décidé de partir sur une blockchain Ethereum. Un des projets les plus populaires dans la communauté est Geth qui est une implémentation en Go du protocole Ethereum.

Geth permet de lancer un nœud sur le réseau Ethereum qui permet d’accomplir des transactions sur la vraie blockchain publique ETH mais ce n’est pas exactement ce que nous voulons faire. Nous allons l’utiliser pour créer une blockchain privée et ainsi mettre en pratique les différents concepts vus dans cet article : Blockchain : Petits rappels avant toutes choses !

 

Installation Geth

Geth est disponible sur Windows/Linux/Mac mais nous allons ici détailler l’installation sur un serveur Linux Debian.

  • Tout d’abord, il faut commencer par installer Go, voir les instructions ici.
  • Installer geth depuis les sources
git clone https://github.com/ethereum/go-ethereum.git
cd go-ethereum
make geth
mv bin/geth /usr/local/geth

Création de la blockchain avec Genesis Block

Maintenant que nous avons installé geth, nous pouvons enfin créer notre blockchain privée.

Mais pour faire cela, nous devons créer un « Genesis Block », qui est le block originel de notre blockchain, celui qui n’a pas de prédécesseur. Le « genesis block » se définit dans un fichier JSON comme celui-ci

{
	"config": {
		"chainId": 92310, // Identifiant unique de la chain
		"homesteadBlock": 0,
		"eip155Block": 0,
		"eip158Block": 0
	},
	"difficulty": "0x400", // Notion de complexité des hash de notre blockchain
	"gasLimit": "0x8000000", // Limite de fuel/gas pour les transaction
	"alloc": { // OPTIONNEL
		"0x1220be9f5201c7c00f3c13cc773e8696962b810b": { // Ici nous initialison un compte avec
			"balance": "10000000000000000000000000000" // un certain nombre de wei(plus petite unité
		} // de monnaie du protocole ethereum correspondant à 10^-18 ether
	}
}

Une fois que nous avons défini notre genesis block, nous pouvons créer effectivement notre blockchain en spécifiant son nom, ici « betcoin », ainsi que le chemin du dossier contenant les données des blocs.

mkdir blockchain
geth --identity "betcoin" init ./blockchain/genesis.json --datadir ./blockchain/BetCoin

Et voilà! Nous avons maintenant une blockchain créée!

 

Démarrage du réseau

Maintenant que notre blockchain est créée, il faut pouvoir la partager et permettre à des utilisateurs d’interagir avec cette dernière et pouvoir miner (écrire) des nouveau blocs.

Pour cela nous devons l’exposer sur le réseau.

geth --datadir ./blockchain/BetCoin --networkid 54124

Cette commande demande à geth de créer un réseau privé permettant d’accéder à notre blockchain privée située dans le dossier « ./blockchain/BetCoin ».

Nous avons aussi défini un « networkid », le networkid est l’identifiant de notre réseau.

Le réseau principal Ethereum utilise l’identifiant 1, vous trouverez dans le lien suivant une partie de la liste des identifiants de réseau déjà réservés.

 

Création d’un compte

Maintenant si nous souhaitons créer un compte supplémentaire, il nous suffit de nous connecter à notre blockchain

geth attach blockchain/BetCoin/geth.ipc

cela ouvrira une console geth

> personal.newAccount()
Passphrase:  // Entrer le mot de passe
Repeat passphrase: // Confirmer le mot de passe
"0xqsdsqda54adsq4d654azzdsq54a6d54asd54asd" // Cela retournena l'addresse de votre compte

Il sera alors possible de connaitre son solde, 0 dans notre cas

> eth.getBlance("0xqsdsqda54adsq4d654azzdsq54a6d54asd54asd")
0

Il nous est par exemple possible de miner pour gagner des ether, étant donnée notre faible niveau de difficulté défini dans notre genesis block :

> miner.start()
null
// attendre un peu
> eth.getBlance("0xqsdsqda54adsq4d654azzdsq54a6d54asd54asd")
14500000000
> miner.stop()

Notre cas d’usage

Pour notre cas d’usage, nous avons décidé de mettre en place un « super-utilisateur » qui est d’office crédité de plusieurs milliards d’ether. Ce sera ce compte qui effectuera toutes les transactions pour éviter aux utilisateurs de perdre de leurs comptes le coût en « gas » des actions d’enregistrement des pronostics. Ce sera aussi ce compte qui distribuera les récompenses des pronostics gagnants.

L’article suivant de cette série décrira en détail la méthode de stockage des informations des différents pronostics dans la blockchain ainsi que la définitions des règles de ces pronostics notamment via les smarts contracts.

Lire les articles similaires

Laisser un commentaire

Social Share Buttons and Icons powered by Ultimatelysocial