Cześć,
Dzisiaj przedstawię podstawy Solidity, czyli jednego z języków do pisania oprogramowania(smart contracts) na blockchainie Ethereum 😉
Solidity
Jest to jeden z języków używanych do pisania oprogramowania działającego w blockchain. Jakbym miał go porównać do jakiegoś innego języka to najbliżej mu do języka javascript (także hurra frontendowcy!). To powiedziawszy zaczynajmy 🙂
Typy danych
W Solidity mamy kilkanaście różnych typów danych. Począwszy od tych standardowych: uint, string, bool, tablice(array) zarówno te o dynamicznej wielkości jak i stałej, oprócz tych standardowych mamy też struct oraz mapping.
Te dwie ostatnie są najciekawsze:
struct – reprezentuje obiekt z polami
mapping – jest to tablica hash-y lub można to porównać do dictionary(czyli tablica klucz wartość) z innych języków takich jak np. C#.
address – adres portfela w sieci Etheureum
Instrukcje warunkowe i pętle
Instrukcje warunkowe dostępne w Solidity z przykładami użycia:
- if
Rekomendowane jest aby pojedyncza instrukcja zapisywana była bez nawiasów “wąsatych”if(...) kod do wykonania;
- else if
Jak w reszcie językówif(...) { ... } else if(...) { ... }
- else
if (...) { ... } else { ... }
Pętle:
- for
for (uint i =0; i < jakas_liczba; i++) { ...; }
- while
while (...) { ...; }
Constructor
Jest to metoda która zostanie odpalona jednorazowo przy deploy-mencie naszego smart contract-u do sieci Ethereum używany do ustawiania wartości początkowych (default values).
constructor(parametry) { ... }
Deklaracje metod i widoczność
Mamy kilka poziomów widoczności metod:
- external – metoda nie może być użyta wewnątrz smart contract-u
- public
Obie flagi widoczności służą do wystawienia metody jako publiczna. Różnica jest w sposobie przetwarzania danych wejściowych np. tablic przekazanych jako argument do metody. External działa bezpośrednio na przekazanych danych, a public najpierw kopiuje dane do wewnętrznej pamięci smart contract-u. Może to mieć znaczenie przy wyliczonej opłacie za przetworzenie danej metody (gas).
tutaj pełen wywód jaka jest konkretna różnica: wyjaśnienie - internal
Oznacza, że metoda będzie dostępna w danym smart contract-cie jak i we wszystkich dziedziczących. - private
Metoda będzie dostępna tylko w tym konkretnym smart contract-cie. - view i pure
Te dwie flagi oznaczają metody, które będą mogły być wywołane bez tworzenia nowej transakcji.
Skoro wiemy już jakie flagi widoczności są dostępne to czas na opisanie jak można deklarować metody i jaka jest poprawna i rekomendowana składnia:
function nazwa_metody( parametry np. uint paramter1) public { ... }
Oprócz tego w języku Solidity są wbudowane specjalne metody, które pozwalają np. usunąć smart contract z blockchaina, przy czym należy pamiętać, że wszystkie transakcje wykonane w ramach smart contractu nie znikną z historii transakcji. Po prostu nie będzie możliwości korzystania dalej z metod udostępnionych w ramach tego kontraktu.
Wspomniana metoda to selfdestruct(adres_portfela_eth_na _ktory_maja_byc_przeslany_pozostaly_balans lub 0x0 jeżeli na kontrakcie nie ma żadnych środków). No dobrze ale można by zapytać jak to przecież wywołanie takiej metody mogłoby być wywołane przez kogokolwiek w sieci. Jeżeli zadałeś to pytanie to nie jesteś w błędzie jest możliwość blokady, aby tylko adres, który zdeploy-ował smart contract mógł wywołać daną metodę, ale o tym napiszę w kolejnym wpisie.
Ale dobra koniec z tymi opisami czas trochę pokodować. Jak na pierwszy wpis przystało napiszemy sobie hello world-a na blockchainie 😉
Najszybszą możliwą opcją programowania jaką znalazłem jest IDE dostępne z okna przeglądarki, które posiada wbudowany kompilator, testową sieć, założone na starcie 5 kont z czego każde z nich ma 100 ETH w sieci testowej(bezwartościowe tylko te z Main network Ethereum są warte $$$).
Otiweramy http://remix.ethereum.org w przeglądarce. Na początku usuwamy utworzone tam defaultowe pliki z rozszerzeniem *.sol. Ja stworzyłem plik o nazwie Hello.sol i dodałem kod jak na screenie:
Stworzony smart contract ma metodę send i get. Pierwsza odpowiada za dodanie transakcji z napisem, a druga zwraca wartość z ostatniej dodanej transakcji. Po sprawdzeniu czy nie ma błędów przy kompilacji czas na deploy.
I to by było na tyle w tym wpisie 😉 Jeżeli zainteresował Cię temat programowania aplikacji na blockchain z użyciem Solidity, a może już programujesz i o czymś zapomniałem(pominąłem) to daj znać w komentarzu. Jeżeli nie chcesz przegapić kolejnych wpisów (które nie ukazują się regularnie za co przepraszam) to zapraszam do zapisania na newsletter.
Ps. Standardowo za każdy share publiczny w social mediach (fb, linkedin, twitter itp.), który będzie dostępny przez 24h płacę 1 CHAR (mój token personalny) 😉
Do przeczytania gdzieś kiedyś!
Łukasz