// 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);
}
}