Image of a smart-contract, two computers handshaking

Ethereum – Implémentation d’un smart contract basique

Maintenant, continuons l’exécution du tutoriel officiel à la page suivante dont le sujet va être la première création et utilisation d’un smart contract.

1ère étape: relancer notre réseau !

Comme toujours, il faut redémarrer le serveur en exécutant la commande:

geth --networkid 12345 --genesis ~/blockchain/genesis_block.json --datadir ~/.ethereum_experiment --dev --lightkdf --nodiscover --maxpeers 0 console

Comme vous pouvez le voir, j’ai ici utilisé quelques arguments supplémentaires. En effet, pour une raison que j’ignore, le paramétrage de la difficulty de résolution des puzzles n’est plus pris en compte lorsque je relance le réseau sur ma machine. Un contournement simple (mais peu documenté) est d’utiliser les arguments –dev et –lightkdf qui simplifient  grandement le minage !

2ème étape: création de notre smart-contract !

Ici: le document officiel de référence sur le principe des smart contracts

Première étape, installer le compilateur pour Solidity (langage haut-niveau qui permet l’implémentation et le test de smart contracts):

sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
which solc

L’output de cette commande devrait correspondre à ça:

/usr/bin/solc

Maintenant si vous retournez checker la liste de vos compilateurs via Geth (relancez le réseau d’abord, voir étape 1):

eth.getCompilers()

Vous devriez avoir comme retour:

["Solidity"]

Ensuite, on suit la doc, afin d’essayer d’exécuter notre Greeter Smart Contract. Pour cela,

var greeterSource = 'contract mortal { address owner; function mortal() { owner = msg.sender; } function kill() { if (msg.sender == owner) suicide(owner); } } contract greeter is mortal { string greeting; function greeter(string _greeting) public { greeting = _greeting; } function greet() constant returns (string) { return greeting; } }'
var greeterCompiled = web3.eth.compile.solidity(greeterSource)

Puis:

var _greeting = "Hello World!";
var greeterContract = web3.eth.contract(greeterCompiled.greeter.info.abiDefinition);
var greeter = greeterContract.new(_greeting,{from:web3.eth.accounts[0], data: greeterCompiled.greeter.code, gas: 300000}, function(e, contract){
if(!e) {
if(!contract.address) {
console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined...");
} else {
console.log("Contract mined! Address: " + contract.address);
console.log(contract);
}
}
})

Et maintenant, pour valider l’exécution du contrat, un petit

miner.start();

Ce qui nous fournit une confirmation:

> I0214 14:16:50.174101    5584 miner.go:119] Starting mining operation (CPU=4 TOT=5)
I0214 14:16:50.174868    5584 worker.go:570] commit new work on block 12 with 1 txs & 0 uncles. Took 739.867µs
I0214 14:16:50.990070    5584 worker.go:349]
Mined block (#12 / 58455ccc). Wait 5 blocks for confirmation
I0214 14:16:50.990425    5584 worker.go:570] commit new work on block 13 with 0 txs & 0 uncles. Took 307.265µs
I0214 14:16:50.990456    5584 worker.go:448] ??
Mined 5 blocks back: block #7
I0214 14:16:51.070633    5584 worker.go:570] commit new work on block 13 with 0 txs & 0 uncles. Took 294.004µs
Contract mined! Address: 0xbd4cb799aee37567835639dbba7f3eeb2c9141f1
[object Object]

Le contrat a bien été miné, son adresse est la suivante: 0xbd4cb799aee37567835639dbba7, il doit donc être maintenant disponible sur ma blockchain privé. Confirmons ça, en demandant au greeter son adresse:

> eth.getCode(greeter.address)
"0x606060405260e060020a600035046341c0e1b58114610026578063cfae321714610068575b005b6100246000543373ffffffffffffffffffffffffffffffffffffffff908116911614156101375760005473ffffffffffffffffffffffffffffffffffffffff16ff5b6100c9600060609081526001805460a06020601f6002600019610100868816150201909416939093049283018190040281016040526080828152929190828280156101645780601f1061013957610100808354040283529160200191610164565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101295780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b565b820191906000526020600020905b81548152906001019060200180831161014757829003601f168201915b505050505090509056"

Et si on teste le contrat :

greeter.greet();

Retour :

"Hello World!"

Évidemment, vous pouvez modifier à souhait la valeur du greeting que vous passez à votre objet greeter et ensuite le re-tester pour valider que la modification est bien prise en compte. Cela prouve que ce smart contract est bien smart, car il s’adapte aux informations qu’on lui fournit en entrée. Si vous souhaitez relancer une exécution de votre contrat après modification du greeting en entrée, notez qu’il faut reminer à chaque fois sa validation.

Conclusion

Nous avons vu dans cet article comment implémenter et exécuter notre premier smart contract, qui n’a pas grand-chose de smart pour le moment. Les exemples et les explications de code s’étofferont dans les articles à venir, si jamais vous êtes restés sur votre faim ! En attendant, n’hésitez pas à me faire des remarques/commentaires si certains passages ne sont pas clairs 😉

Retour à l’accueil de la série

Découverte d’Ethereum – la série

En prévision d’une réunion passée portant sur les potentialités d’Ethereum avec Nicolas L. et Guillaume R. j’ai commencé à investiguer cette technologie, en prenant comme point de départ la documentation officielle et cette investigation m’a donné envie de réaliser une série d’articles me permettant de présenter mes découvertes et mes avancées, afin de vous permettre de découvrir cette technologie qui se veut prometteuse.

Continue reading Découverte d’Ethereum – la série

L’habillement à la française

Aujourd’hui j’ai envie d’écrire un article qui traite d’une thématique très particulière: l’habillement !

En effet, en tant que personne cherchant à consommer un maximum local (et donc français, puisque je vis en France), la question de l’habillement s’est posée assez vite lorsque la garde-robe dans laquelle j’avais investi durant mon séjour au Québec a commencé à sérieusement se dégrader (entendre par-là: des trous non réparable dans un certain nombre de jeans et des vêtements qui, à force d’être lavé, perdent toute forme). Comme en plus quelques accidents de lavage à la machine de vêtements non adaptés (pull en laine par exemple :-)) sont vites arrivés, il fallait que je procède à de nouveaux investissements.

Continue reading L’habillement à la française

Parlons technique !

Au (re)lancement de ce site, j’avais annoncé que je ne parlerais pas de technique sur cet espace… Malheureusement, étant passionné par le développement WEB et étant actuellement en période de forte productivité sur des projets personnels motivants, l’envie m’a repris de détailler un peu mes projets et le travail associé ! Alors, voici un premier post technique !

Le projet

Si vous me connaissez, ou si vous avez regardé la page C.V., vous avez sûrement entendu parler de l’activité de mon père (qui est apiculteur) et du site associé : Didapi.fr. J’ai développé ce site en tant que cadeau d’anniversaire de mon père, pour ses 50 ans. Le temps ayant passé depuis, j’ai décidé lors de mon retour du Canada de me remettre à l’ouvrage, afin de faire de son site un espace d’application de mes connaissance en développement Front-end et de test de technologies.

Continue reading Parlons technique !

FairPhone ou le smartphone éthique

Laissez-moi vous parler aujourd’hui d’un produit actuel, dont la première production a pu récemment être lancée grâce à un financement assuré par 10 000 pré-commandes.

Introduction

La compagnie Fairphone est né d’une vision partagée par les fondateurs, celle d’un manque de considération éthique au sein des compagnies oeuvrant dans le domaine des nouvelles technologies.

L’idée de la compagnie est d’offrir un produit unique, technologiquement au niveau de ses concurrents et dont elle certifirait l’ensemble du cycle de vie, depuis le design jusqu’au recyclage et à la revalorisation des composants.

Continue reading FairPhone ou le smartphone éthique

Le mouvement Colibris

Pour lancer ma première série de billets à caractère informatifs, je vais aborder avec vous le sujet d’une des initiatives populaires à vocation politique qui m’ait le plus touché et intéressé ces dernières années, le mouvement Colibris.

Le logo du Mouvement Colibris
Le logo du Mouvement Colibris

L’origine du mouvement

Lancé par un groupements de citoyens autour de la figure emblématique de Pierre Rabhi (inventeur entre autres du concept “Oasis en tous lieux”), le mouvement a émergé lors de la campagne présidentielle de 2007 sous le nom de “Mouvement pour la Terre et l’Humanisme” et s’est renforcé lors de la campagne lancée en parallèle des présidentielles de 2012 avec un programme “Tous Candidats” visant à établir un plan des Colibris pour une “Révolution des Consciences” et construits autour de 5 grandes thématiques:
Continue reading Le mouvement Colibris