Smart kontrakty to przyszłość programowania usług, które ulepszą i zredukują koszty wielu procesów biznesowych. Większość użytkowników portali internetowych, serwisów online i usług nie zauważy jednak większej zmiany. Interfejsy i strony główne pozostaną takie same.
Zmiany odczują jednak programiści. Będą musieli zdobyć nowe umiejętności. Dodatkowo przyjdzie do nich konkurencja, która będzie już znać podstawy programowania w takich językach, jak Solidity czy Vyper. Jak zatem przygotować się już teraz na nowe czasy?
Co to jest smart kontrakt?
Smart kontrakt to program komputerowy, który działa na blockchainie. Ethereum oferuje smart kontrakty w publicznym łańcuchu, czyli każdy może napisać w nim smart kontrakt. Jedynym warunkiem jest zapłata opłaty transakcyjnej gas w ETH za dokonywane operacje.
Do programowania smart kontraktów używa się języka Solidity. Kontrakty można pisać w różnych środowiskach. Najprościej jest użyć Remix, czyli środowiska online do pracy na smart kontraktach. Programiści będą potrzebować własnego, lokalnego środowiska wspieranego Truffle i Ganache. My zajmiemy się na początku tym prostszym środowiskiem.
Pisząc smart kontrakty w Solidity szybko odkryjemy, że składnia jest podobna do popularnego języka JavaScript. Solidity to język wysokiego poziomu i wymaga kompilacji programu przed jego uruchomieniem.
Nasz smart kontrakt będziemy sprawdzać na testowym blockchainie. Działanie smart kontraktu na głównym łańcuchu Ethereum wiązałoby się z długotrwałym oczekiwaniem i wysokimi opłatami. Wykorzystamy zatem darmowe i szybkie testowe środowisko, np. Ropsten czy Rinkeby.
Jak pisać smart kontrakty?
Czego potrzeba, aby szybko zacząć pisać działające smart kontrakty? Wypiszmy sobie na początek potrzebne umiejętności, programy i zasoby.
Przydatne zasoby zaczynamy od dokumentacji Ethereum. Nie jest może najprostsza, ale znajdują się tam wszystkie podstawowe informacje o ETH, jakie potrzebuje developer.
Dla tych, którzy szukają drogi na skróty, przyda się ściąga z podstawowej składni i najważniejszych aspektów języków Solidity i Vyper.
Zaawansowani będą z pewnością szukali sposobów na jeszcze efektywniejsze pisanie programów i unikanie błędów. Bardzo dobrym źródłem wiedzy są najlepsze praktyki Solidity.
Podstawy smart kontraktów
Jak przystało na język zorientowany obiektowo, w Solidity będziemy używać klasy “contract” i metod. Będziemy zajmować się głównie wysyłaniem i przyjmowaniem tokenów. Oprócz tego smart kontrakt będzie musiał przechowywać stan systemów, zmiennych i ich otoczenia.
Do wykonywania operacji na blockchainie potrzebujemy środków do opłaty gazu, czyli waluty ekosystemu ETH. Przetwarzaniem smart kontraktów zajmują się minerzy Ethereum, którzy muszą otrzymać nagrodę za dołączenie akurat naszego kodu do łańcucha bloków. Wykonanie smart kontraktu poprzedza wybór ilości gazu, który decydujemy się zapłacić. Im bardziej skomplikowany obliczeniowo kod, tym więcej spodziewamy się zapłacić.
Piszemy działający smart kontrakt
Aby nasz smart kontrakt zadziałał, potrzebujemy jego kodu, środowiska, gdzie go skompilujemy oraz dostępu do blockchain. Zróbmy po kolei wszystkie kroki.
Używamy Remix Etereum
Wchodzimy na Remix i od razu udajemy się do sekcji, gdzie umieścimy kod naszego smart kontraktu.
Dodajemy do listy plików nowy program i wklejamy poniższy kod smart kontraktu.
Kod smart kontraktu
Nasz smart kontrakt na start to zwyczajny program typu Hello World. Na nim poznamy podstawy składni.
pragma solidity ^0.4.25;
contract helloWorld {
function printHelloWorld () public constant returns (string) {
return 'Hello world!';
}
}
Pierwsza linia to oznaczenie wersji kompilatora, którego użyjemy.
Druga linia to nazwa smart kontraktu.
Trzecia i czwarta linia to metoda, która zwraca string.
Kompilowanie smart kontraktu
Aby skompilować smart kontrakt, potrzebujemy najpierw wybrać odpowiednią wersję kompilera. W naszym przypadku będzie to raczej wczesna wersja 0.4.25.
Następnie klikamy “Compile” i patrzymy na efekty.
Publikujemy smart kontrakt na testowym blockchainie
Aby opublikować smart kontrakt, potrzebujemy podłączyć się do testowej sieci, uzyskać trochę testowych Ethereum i dokonać publikacji.
Aby podłączyć się do sieci, potrzebujemy portfela MetaMask. Wybieramy w Remix, w sekcji Environment, “Injected Web3”. Logujemy się do MetaMaska (którego wszyscy czytający nasze artykuły już zapewne mają) i łączymy adres z Remixem.
Wybieramy w Metamasku sieć testową Ropsten, po czym googlamy Ropsten faucet, aby uzyskać natychmiast 1 darmowy, testowy ETH. Tak wyposażeni możemy przejść do publikowania smart kontraktu.
Klikamy “Deploy”. Potwierdzamy transakcję w MetaMasku. Otrzymamy adres smart kontraktu w linii komend. Czekamy kilka sekund na potwierdzenie transakcji w testowej sieci i… mamy opublikowany smart kontrakt.
Możemy sprawdzić adres oraz przeczytać komunikat potwierdzający istnienie smart kontraktu. W naszym przypadku smart kontrakt został umieszczony w bloku 9843797.
Co dalej?
Jeśli podążałeś za naszymi instrukcjami, udało Ci się napisać i wdrożyć smart kontrakt w niebywale krótkim czasie. Zainteresowałeś się tematem smart kontraktów i chcesz go poznać głębiej?
Aby się rozwijać, trzeba się wciąż uczyć i praktykować. Nie warto zatem przestawać! Należy rzucić się w wir pisania kodu i tworzyć nowe funkcjonalności i automatyzacje. Jeśli interesuje Cię ten temat, znajdziesz tu instrukcję jak przejść do grona bardziej zaawansowanych programistów smart kontraktów.
Jeśli chcesz trzymać się praktycznych rozwiązań, sprawdź jak wdrożyć interakcje ze smart kontraktem przez stronę internetową.
Przykładem aktywności, która jednocześnie rozwija jest Ethernaut, czyli gra pomagająca zapoznać się ze szczegółami bezpieczeństwa. Powodzenia!
Dzień dobry.
Wyskakują mi następujące błędy:
-contracts/HelloBlockchain.sol:1:1: Error: Compiler version ^0.4.25 does not satisfy the r semver requirement
-contracts/HelloBlockchain.sol:2:1: Error: Contract name must be in CamelCase
-contracts/HelloBlockchain.sol:4:8: Error: Use double quotes for string literals