// określamy wersję Solidity, z której korzystamy pragma solidity ^0.4.23; // definicja kontraktu contract ITshape { // definiujemy strukturę szkolenia struct Training { // true jeżeli profesjonalista ukończył szkolenie bool completed; // opis szkolenia string description; } // adres właściciela kontraktu address public owner; // słownik klucz–wartość, gdzie kluczem jest wartość funkcji skrótu // obliczonej na podstawie imienia i nazwiska profesjonalisty // wartość stanowi instancja struktury opisującej szkolenie mapping(bytes32 => Training) private professionals; // konstruktor kontraktu – wołany tylko raz // zapisuje adres właściciela (adres konta, z którego został wdrożony) constructor() public { owner = msg.sender; } // funkcja pozwalająca dodać profesjonalistę do blockchain // przyjmuje imię i nazwisko uczestnika oraz opis szkolenia function addProfessional(string name, string trainingDescription) public { // tylko właściciel może dodać profesjonalistę require(msg.sender == owner); // właściciel musi określić nazwę uczestnika require(bytes(name).length > 0); // tworzymy w pamięci instancję szkolenia Training memory training = Training({ completed : true, description : trainingDescription }); // obliczamy funkcję skrótu oraz przypisujemy utworzoną instancję professionals[sha256(name)] = training; } // funkcja umożliwiająca weryfikację profesjonalisty function verify(string name) public view returns (bool, string) { // musimy określić nazwę uczestnika require(bytes(name).length > 0); // pobieramy instancję szkolenia z blockchain // jeżeli nie istnieje otrzymamy wartości domyślne Training storage training = professionals[sha256(name)]; // zwracamy informację o uczestnictwie w szkoleniu wraz z jego opisem return (training.completed, training.description); } }
0.4.23