Język programowania Solidity przeszedł długą drogę od czasu, gdy po raz pierwszy został zaproponowany w 2014 roku. Od tego czasu pracuje nad nim zespół Ethereum Solidity oraz jest on używany przez setki tysięcy programistów. Wszyscy oni wykorzystują ten język do tworzenia nowych przypadków użycia technologii blockchain.
W dzisiejszym artykule wyjaśnimy czym jest język Solidity oraz do czego jest używany w przypadku Ethereum. Tak więc, zaczynamy!
Co to jest język Solidity?
Solidity to zorientowany obiektowo język programowania używany do tworzenia smart kontraktów, które automatyzują transakcje na blockchainie. Został on opracowany w 2014 roku i od tego czasu jest rozwijany przez współpracowników projektu Ethereum. Język ten jest głównie używany do tworzenia smart kontraktów na blockchainie Ethereum, ale nie tylko.
Solidity jest podobny do jednego z najbardziej popularnych języków programowania, JavaScript. Można go uznać wręcz za jego dialekt. Oznacza to, że jeśli rozumiesz JavaScript, nie powinieneś mieć problemu z opanowaniem również Solidity. Oprócz JavaScript, Solidity posiada różne podobieństwa z C++ i Python.
Solidity ułatwia ludziom pisanie programów w sposób, który jest dla nich łatwiejszy do zrozumienia. Eliminuje bowiem potrzebę wpisywania kodu w jedynkach i zerach. Zamiast tego wykorzystuje kombinacje liter i cyfr.
Solidity jest pisany statycznie. Obsługuje więc dziedziczenie, biblioteki i złożone typy definiowane przez użytkownika. Właśnie dlatego użytkownik musi bardzo dokładnie określić każdą zmienną. Typy danych pozwalają kompilatorowi na sprawdzenie poprawności użycia zmiennych i są zwykle skategoryzowane jako typy wartości lub typy referencyjne.
Główną różnicą pomiędzy typami wartości a typami referencyjnymi jest sposób, w jaki są one przypisywane do zmiennej i przechowywane w EVM (Ethereum Virtual Machine). Podczas gdy zmiana wartości w jednej zmiennej typu wartości nie wpływa na wartość w innej zmiennej, każdy, kto odwołuje się do zmiennych referencyjnych, może otrzymać zaktualizowane wartości.
Jak działa Solidity?
Specyfika ekosystemu Ethereum polega na tym, że może z niego korzystać wiele różnych kryptowalut i zdecentralizowanych aplikacji (dApps). Smart kontrakty umożliwiają bowiem tworzenie unikalnych technologii dla wszelkiego rodzaju przypadków użycia.
Każdego roku, świat wydaje ogromne miliardy dolarów na nowe rozwiązania związane z blockchain. Wiele z tych rozwiązań jest tworzonych przy użyciu właśnie opisywanego języka Solidity. Smart kontrakty zbudowane za pomocą tego języka można traktować jako sposób na zautomatyzowanie procesów pomiędzy różnymi osobami. Dzięki temu podmioty dokonujące transakcji na blockchainie nie muszą się martwić o ryzyko, takie jak oszustwo czy brak możliwości korzystania z tej samej waluty.
Jednym z kluczowych komponentów, który umożliwia wykonywanie kodu Solidity jest EVM. EVM to wirtualny komputer działający na blockchainie, który zamienia pomysły ludzi w kod uruchamiający aplikacje na blockchainie.
Solidity tworzy kod na poziomie maszynowym, który jest wykonywany na EVM. Do rozbicia kodu czytelnego dla człowieka używany jest kompilator. To właśnie on zamienia go w instrukcje odczytywane przez procesor. Bezpłatną kompilację Solidity zapewniają różne platformy, takie jak chociażby Remix.
Smart kontrakty EVM mają jednak pewne ograniczenia. Jednym z najważniejszych jest ograniczony dostęp do przydatnych funkcji bibliotek służących do parsowania struktur JSON lub arytmetyki zmiennoprzecinkowej.
Funkcje publiczne i prywatne
Funkcje publiczne są podobne do API. Każdy może je wywołać w swoim kodzie. W wielu przypadkach są one przeznaczone dla wspólnych procesów na platformie, które wykorzystują wszyscy użytkownicy.
Na przykład, funkcja publiczna może zostać stworzona, aby umożliwić wszystkim użytkownikom platformy sprawdzenie stanu swojego konta. Funkcje tego typu są jednym z najczęstszych sposobów wykorzystywania smart kontraktów.
Samo pisanie w Solidity nie jest szczególnie trudne, pisanie bezpiecznego kodu to już zupełnie inna sprawa. Przykładowo, jeśli funkcja wypłaty w smart kontrakcie posiada lukę, haker może ją wykorzystać do kradzieży środków.
Prywatne funkcje są wywoływane tylko z wnętrza kontraktów. Zawierają one instrukcje, które mogą być wykonane tylko po wywołaniu ich przez inne funkcje w łańcuchu. Dzięki temu kod jest trudniejszy do zmanipulowania przez hakerów.
Standardy i logika kodu
Od czasu powstania Solidity pojawiły się różne standardy, które określają w jaki sposób smart kontrakty są wykorzystywane do budowania aplikacji na sieci Ethereum. Mówimy tutaj o standardach zwanych ERC (Ethereum Request for Comments). Opierają się one na dokumencie, który zawiera wytyczne dotyczące wymaganych funkcji i ograniczeń.
Standardy ERC, które określają sposób działania Solidity, obejmują najbardziej znany ERC20, oraz dużo mniej znane ERC165, ERC223, ERC621, ERC721, ERC777, ERC827, ERC865, ERC884, ERC1155.
Istnieją różne sposoby, w jakie Solidity może być wykorzystane do tego, aby smart kontrakty wchodziły ze sobą w interakcję. Solidity może być również używany do tworzenia dedykowanych instrukcji dotyczących sposobu przechowywania danych w smart kontrakcie.
Niezmienność
Po napisaniu i skompilowaniu kodu smart kontraktu nie ma możliwości jego zmiany. Oznacza to, że każda linia kodu musi działać zgodnie z przeznaczeniem. W przeciwnym razie może wystąpić poważne ryzyko wykorzystania kontraktu.
Ponieważ blockchain Ethereum jest niezmienny, nie ma możliwości zmiany danych i logiki, które są w nim zapisane. Sposobem na obejście tego problemu jest użycie proxy do wskazania innego kontraktu, który zawiera aktualną logikę biznesową. Dzięki temu można naprawić błędy, podczas gdy wdrażana jest nowa wersja kontraktu.
Koszty gazu
Korzystanie z Solidity w sieci Ethereum wiąże się jednak z pewnymi dodatkowymi kosztami. Są one związane z gazem Ethereum, który jest wymagany, aby zapłacić górnikom za zabezpieczenie sieci blockchain.
Podczas pisania smart kontraktów należy pamiętać, że koszty gazu mogą decydować o tym, jak bardzo jest on wydajny. Ponieważ opłaty za gaz są uiszczane za każdy wykorzystany slot, działania realizowane za pomocą kodu Solidity są nimi obarczane.
Koszty gazu można zmniejszyć np. za pomocą wykorzystania bibliotek lub użycia mniejszej liczby funkcji. Biblioteki są często używane do oszczędzania kodu bajtowego.
Zamiast dodawać niepotrzebny kod bajtowy do smart kontraktu, logika może być umieszczona w różnego rodzaju bibliotekach. Pomaga to zdecydowanie zmniejszyć jego rozmiary.
Jak język Solidity może być używany w Ethereum?
Solidity jest używany do tworzenia smart kontraktów zarówno dla zamiennych jak i niezmiennych tokenów (NFT). W przypadku obu wykorzystywane są jednak inne standardy.
Pozwalają one na tworzenie różnego rodzaju przypadków użycia dla osób korzystających z blockchaina. Może to być chociażby wybijanie niewymiennych tokenów (NFT), tworzenie puli yield farmingu itd.
Dzięki Solidity możliwe jest także tworzenie Zdecentralizowanych Organizacji Autonomicznych (DAO). DAO, który jest nowym rodzajem struktury organizacyjnej, jest pisany głównie w tym języku.
Solidity umożliwia automatyzację procesów wewnątrz DAO, takich jak właśnie przeprowadzanie głosowań dot. kluczowych decyzji oraz przydzielanie reputacji członkom DAO za ich wkład w grupę.
Inwestowanie jest ryzykowne. Inwestuj odpowiedzialnie.