ETHEREUM

Premiers pas dans Ethereum

Avant d’écrire et d’exécuter notre premier contrat, il faut avoir compris quelques concepts d’Ethereum :

Maintenant, pour comprendre Ethereum par la pratique, découvrons en quelques étapes concrètes comment écrire et utiliser un premier contrat décentralisé aussi appelé application décentralisée ou Dapp.

1) Préparer l’environnement Ethereum

  • Télécharger l’environnement AlethZero pour Windows ici.
  • Démarrer AlethZero.

Cet environnement inclut tout le nécessaire pour apprendre et démarrer (y compris la gestion d’un Block Chain local et la production d’Ether par « minage »). Voici à quoi ressemble AlethZero sous Windows 7 :

AlethZero Etereum Client
AlethZero Etereum Client

2) Ecrire un premier contrat

Un contrat dans Ethereum est l’équivalent du backend pour les logiciels classiques. Le langage utilisé ici est Solidity, d’autres langages existent comme LLL (inspiré du Lisp) ou Serpent (inspiré de Python).

L’exemple de contrat détaillé ici est une banque qui possède 1.000.000 unités monétaires qu’elle peut transférer sur d’autres comptes.

Nous avons besoin :

  1. De créer un compte avec les 1.000.000 unités monétaires
  2. Et ensuite de créer une fonction pour envoyer les unités monétaires sur d’autres comptes

Tout le reste (c’est-à-dire les comptes, leur sécurité, …) est géré par le réseau Ethereum.

contract maBanque {	
	mapping (address => uint) balances;
	function maBanque() {
		balances[msg.sender] = 1000000;
	}
	function envoyerArgent(address receiver, uint amount) returns(bool sufficient) {
		if (balances[msg.sender] < amount) return false;
		balances[msg.sender] -= amount;
		balances[receiver] += amount;
		return true;
	}
}

Les contrats sont composés de deux parties.

  • La première partie est ici une fonction intitulée maBanque, c’est un constructeur qui définit l’état initial du contrat (création des 1.000.000 unités monétaires). Les constructeurs ont toujours le même nom que le contrat et ce code d’initialisation n’est exécuté qu’une seule fois : lorsque le contrat est créé.
  • La deuxième partie constitue le code de contrat lui-même, qui existera éternellement sur ​​le réseau Ethereum, et surtout de façon inaltérable. Le réseau Ethereum étant composé par des millions de nœuds assurant que le contrat créé renvoie les résultats attendus à chaque fois. Dans notre exemple, il s’agit d’une fonction (envoyerArgent) qui :
    • vérifie que l’expéditeur a un solde suffisant et, si c’est le cas alors
    • il réalise le transfert des unités monétaires d’un compte à un autre.

3) La nécessité du carburant (ou « gaz »)

Le contrat que nous avons écrit plus haut va être stocké dans le réseau : chaque noeud en aura une copie.

Le « gaz » (ou carburant) est consommé par les contrats (lors de leur exécution) et constitue un élément essentiel pour assurer le bon fonctionnement d’Ethereum. Chaque noeud du réseau Ethereum reçoit une récompense (sous la forme de « gaz ») pour le travail fourni : c’est-à-dire l’exécution des contrats et la sécurisation de l’ensemble du réseau.

C’est au moment d’appeler un contrat que l’utilisateur décide combien de « gaz » il accepte de confier afin d’assurer l’exécution du contrat. Le contrat ne consommera que ce dont il a besoin pour accomplir chacune des instructions dont il est composé, et il retourne automatiquement le surplus à l’utilisateur.

Si le contrat demande plus de gaz que l’utilisateur est prêt à lui confier, alors le contrat n’est pas exécuté et l’intégralité du gaz est retourné à l’utilisateur.

4) Sauvegarder et utiliser un contrat

Etape par étape :

    1. Ouvrir Alethzero
    2. Utiliser un Block Chain local : dans le menu Special, activer « Use Private Chain… » et « Force Mining« 
    3. Activer le bouton « Mine » pour produire le carburant nécessaire pour tester le contrat, environ 15.000 Finney suffisent. Désactiver ensuite le bouton « Mine« .
    4. Sélectionner le bouton « New Transaction« 
    5. Copier-coller le code du contrat ci-dessus dans la partie Data
      New Transaction
    6. Activer le bouton « Execute » pour sauvegarder le contrat dans le réseau Ethereum.
    7. Puisque nous ne sommes pas occupé à miner, le contrat se trouve maintenant dans la fenêtre « Pending »
      PendingSi nous étions vraiment sur le réseau Ethereum, tous les mineurs recevraient cette transaction et essayeraient de l’inclure dans le prochain bloc (pour l’intégrer de façon permanente dans le Block Chain).
    8. Réactiver le bouton « Mine » pour intégrer notre transaction (et donc notre contrat) dans le Block Chain. Le contrat doit maintenant apparaître dans la fenêtre « Contacts« , il est prêt à être utiliser. Noter l’adresse de la fonction envoyerArgent (ici : 0x62308d3b).
      Contracts
    9. Vérifions la présence du contrat dans le Block Chain et copions l’adresse du contrat pour l’utiliser ensuite. Dans cet exemple l’adresse du contrat est :
      a2c412723ddb…
      Block Chain
    10. Utilisons maintenant ce contrat pour envoyer 50.000 unités monétaires vers un autre compte. Nous allons donc faire appel à la fonction envoyerArgent en construisant une transaction :
      1. dont l’adresse de destination est celle du contrat : a2c412723ddb…
      2. En paramètres (dans Data), nous avons :
        • l’identifiant de la fonction enoyerArgent
        • l’adresse du compte destinataire
        • la valeur à transférer est 50.000

        Utiliser contrat

         

    11. Activer le bouton « Execute » et cette nouvelle transaction se trouve dans la fenêtre Pending.
    12. Activer enfin le bouton « Mine« 
    13. Constater le résultat dans la fenêtre Contracts : le montant disponible a diminué de 50.000 unités.

Reste maintenant à concevoir des contrats ayant vraiment une valeur ajoutée pour leurs utilisateurs.

Partager :

Une réflexion sur « Premiers pas dans Ethereum »

  1. Bonjour et merci pour cette initiative pédagogique en français. Pour le moment en phase de découverte Je ne possède pas les vocabulaire anglais nécessaire.
    Je souhaitais utiliser AlethZero du package AlthOne .
    J’ai bien trouvé la coche « mine » et le bouton « Go! ».
    Pour ne pas m’embêter, s’agissant de découverte, je choisis « CPU miner » et non GPU. J’utilise un PC portable que je dédie à la découverte du processus de minage.
    Exemple des problème de base rencontrés :
    – Je ne vois où saisir l’adresse public du wallet qu’il faut que je crée à cette intention.
    – Je ne vois pas où saisir les infos de la pool pour laquelle miner (url_pool et port_pool)
    Auriez vous quelques conseils à me donner?
    Merci par avance
    Cordialement

Répondre à Steph Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *