pragma solidity ^0.4.23; // Le contrat contract MachineCafeContract { // Le constructeur du contrat // Executé une fois lors du déploiment constructor() public { // ... } // Déclaration de l'évènement de vente de café event CafeVendu(uint cafeId, address acheteur); // Déclaration de la structure de donnée "café" struct Cafe { uint cafeId; } // Un tableau contenant tous les cafés Cafe[] cafes; // Un tableau qui contient un mapping des id de café vers des addresses Ethereum (les acheteurs) // Nous permet d'associer les cafés vendus avec les acheteurs mapping (uint => address) ventesDeCafe; // Fonction publique // Appelable depuis l'extérieur du contrat, par exemple une application web avec web3.js function acheterCafe() public returns (uint) { // récupérer l'id du prochain café uint cafeId = cafes.length; // instancier un nouveau café Cafe memory c = Cafe(cafeId); // ajouter le café au tableau des cafés cafes.push(c); // mapper l'addresse de l'acheteur sur l'id du café ventesDeCafe[cafeId] = msg.sender; // msg.sender est une variable magique toujours accessible // msg.sender est l'addresse ethereum qui a fait l'appel déclenchant l'exécution du code // émettre l'évènement "café vendu" emit CafeVendu(cafeId, msg.sender); // retourner l'id du café vendu return cafeId; } }
0.4.24