Compiler et déployer des smart contracts avec Geth v1.6

Depuis la publication de notre article « Vos premiers développements sur la Blockchain Ethereum dans le magazine Programmez, la façon de compiler les smart contracts a évolué. En effet, depuis la livraison de Geth 1.6, certaines méthodes comme eth.compile ou eth.getCompilers() ont disparu. Quelles alternatives se présentent à nous désormais ?

1. Pourquoi ?

Les motivations derrière la dépréciation des méthodes de compilation sous Geth sont les suivantes :

  • les appels RPC des méthodes de compilation sous Geth dépassent les responsabilités de l’ API eth ; comme Ethereum gère des bytecode bas niveau à travers une machine virtuelle ( EVM ) la surface de l’API ne devrait rien exposer à des langages de niveau supérieur (plus abstraits) afin d’éviter une complexité supplémentaire à la mise en oeuvre (gestion, maintien, mise à jour des versions du compilateurs, des drapeaux et des ABIs produits).
  • trois langages basés sur EVM (ethereum virtual machine) ont le monopole pour la compilation ( Solidity, Serpent et Low-Level Lisp-like Language) ce qui pourrait restreindre le développement et l’adoption de nouvelles solutions.
  • les méthodes de compilation sous ethereum ne sont pas appropriées à certains cas d’utilisation dans le développement d’applications décentralisées car elles ne laissent pas le choix de versions de compilateurs spécifiques.

2. Avec le compilateur Solidity seulement

Cette alternative nécessite uniquement l’utilisation de solc. Il faut, tout d’abord, générer le bytecode et l’ ABI du contrat :

$ solc --bin soliditySource.sol
 
 $ solc --abi soliditySource.sol

Puis, dans la console Geth, en utilisant les bytecode et ABI nouvellement générés :

> var abi = <abi from solc>;
 
 > var myContract = eth.contract(abi);
 
 > var bytecode = '0x' + <bytecode from solc>;
 
 > var txDeploy = {from: eth.accounts[0], data: bytecode, gas: 1000000};
 
 > var myContractPartialInstance = myContract.new(txDeploy);

3. Avec le compilateur Solidity et JSON

Cette méthode fonctionne sous Linux et OSX. Elle n’a pas été testée sous Windows. Soit un smart contract Test.sol :

pragma solidity ^0.4.8;
 
 contract Test {
 
     uint256 public value;    
     
     function Test() {
         
         value = 123;
         
     }
     
 }

On compile maintenant Test.sol au format .json , on assigne les données à une variable JavaScript testOutput et on envoie le retour dans un fichier test.js :

$ echo "var testOutput = 'solc –-optimize –-combined-json abi,bin,interface Test.sol'>"; > test.js

On se positionne dans la console Geth pour charger le contenu du fichier JavaScript test.js :

> loadScript("test.js")
 
 > var testContract = web3js.eth.contract(JSON.parse(testOutput.contracts["Test.sol:Test"].abi));
 
 > personal.unlockAccount(eth.accounts[0], "password");
 
 > var test = testContract.new({from: eth.accounts[0], data: "0x" + testOutput.contracts["Test.sol:Test"].bin, gas: 1000000});

4. Avec Remix pour compiler et Web3 pour déployer

Il faut utiliser Remix , un IDE de Solidity , via browser-solidity. Après avoir écrit le contrat, il faut le créer dans la partie Contract du menu à droite et afficher les détails du contrat pour obtenir les instructions de déploiement depuis Web3.

browser solidity

browser solidity

Il faut copier les instructions de déploiement de Web3 et les coller dans la console Geth après avoir débloqué le compte :

> personal.unlockAccount(eth.accounts[0], "password");
 
 > <coller>

5. Autres alternatives

Voici quelques alternatives proposées par des internautes que je n’ai pas encore testées personnellement mais qui semblent fonctionnelles :

6. Divers

Une introduction à la programmation de SC liste quelques clients ethereum et langages de smart contract en plus de discuter d’outils et framework pour DApp (applications décentralisées). L’auteur du document utilise Truffle pour déployer ses contrats.

7. Conclusion

Plusieurs alternatives ont été présentées mais laquelle choisir ? Afin de rester dans le contexte de l’article mentionné au début de ce document, il est conseillé de retenir les propositions utilisant le compilateur solc. En effet, le déploiement de votre première blockchain se fera exclusivement via l’utilisation du terminal et de la console Geth. Il semble donc plus judicieux et ergonomique de se passer de l’installation de divers outils ou de devoir jongler entre le terminal et votre navigateur web. Je préconise, personnellement, la première alternative car elle offre un niveau d’abstraction moins élevée, ne fait appel qu’à une seule technologie et permet de manipuler, directement, l’interface (.abi) du contrat qui est nécessaire à l’appel de ce dernier sur un autre noeud. Cependant, toutes ces méthodes de compilation aboutissent au même résultat et il est fondamental de choisir celle correspondant le mieux à votre projet !

Damien Lecan

Directeur Technique à SQLI Nantes

0 commentaires

votre commentaire

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

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

Inscription newsletter

Ne manquez plus nos derniers articles !