Jak programować inteligentne kontrakty za pomocą Ethereum i Webassembly?

Ethereum stoi za jedną z najpopularniejszych kryptowalut – a jednak to znacznie więcej. Dzięki algorytmom kryptowalutą można zarządzać całkowicie autonomicznie. Ale jak działają „inteligentne kontrakty” i jak daleko zaszliśmy na tej drodze?

Jak działają inteligentne kontrakty w Ethereum?
Aby zrozumieć zasadę działania inteligentnych kontraktów w Ethereum, musimy najpierw odbyć małą wycieczkę do świata języków programowania. Obecne języki programowania dzielą się zasadniczo na dwie grupy: języki interpretowane i języki kompilowane. W pierwszej grupie programy są pisane w języku wysokiego poziomu, a następnie wykonywane przez interpreter. Dwa popularne przykłady to Python i JavaScript. Języki interpretowane są powszechne w wielu obszarach zastosowań (takich jak sieć), ponieważ umożliwiają natychmiastowe rozpoczęcie pracy. Są również bardzo uniwersalne i mogą być używane na różnych platformach bez potrzeby stosowania dodatkowych narzędzi.

W przeciwieństwie do nich istnieją języki kompilowane, w których kompilator najpierw konwertuje tekst programu na inny język – często binarny kod maszynowy. Ten kod binarny jest zależny od platformy i jest wykonywany bezpośrednio na procesorze. Kompilator może (i powinien) tworzyć niestandardowy kod dla zestawu instrukcji procesora, na przykład dla procesorów kompatybilnych z ARM lub Intel. Dobrze znanymi przedstawicielami tego typu są C i Rust.

Rzeczywistość jest jednak, jak zawsze, bardziej złożona niż sugerują te proste kategorie. Od pewnego czasu istnieją formy hybrydowe, takie jak Java. Kompilator Javy nie tłumaczy kodu Javy bezpośrednio na „prawdziwy” kod maszynowy, ale na specjalny format pośredni. Ten pośredni format jest z kolei wykonywany przez interpreter – maszynę wirtualną Java – na konkretnej architekturze procesora.

Inteligentne kontrakty Ethereum również działają w podobny sposób. Wszystkie węzły, które zatwierdzają transakcje i wydobywają nową walutę w Ethereum, zawierają instancję maszyny wirtualnej Ethereum (EVM). Żółta księga, specyfikacja techniczna Ethereum, szczegółowo definiuje instrukcje obsługujące EVM i sposób ich wykonywania.

Jest to zastrzeżone rozwiązanie z wieloma specjalnymi funkcjami:

Interakcja ze światem zewnętrznym nie jest możliwa: wszystkie decyzje algorytmiczne muszą wynikać z łańcucha bloków i jego transakcji.
Arytmetyka opiera się na 256-bitowych wartościach, aby ułatwić obsługę większych adresów i kwot.
Specjalne operacje, takie jak funkcje hash, są zintegrowane w celu zwiększenia wydajności.
Wszystkie instrukcje mają przypisaną funkcję kosztu (paliwo), która odpowiada w przybliżeniu wymaganemu czasowi wykonania i ilości wymaganej pamięci. Termin metering jest powszechnie używany w języku angielskim.
Programowanie na EVM
Podobnie jak w przypadku ekosystemu Java, istnieje kilka języków programowania, dla których dostępne są kompilatory EVM. Najpopularniejszym językiem jest Solidity, który jest powierzchownie (składniowo) podobny do JavaScript. Pod koniec 2020 r. dokumentacja Ethereum wymienia dwa dodatkowe języki: Vyper, który jest oparty na Pythonie, oraz Yul Plus, całkowicie niezależny rozwój.

Wszystkie te języki łączy to, że są specyficzne dla domeny, ponieważ w przeciwieństwie do języków ogólnego przeznaczenia zajmują niszę o szczególnych cechach, a w szczególności specjalny silnik wykonawczy: EVM. Oczywiście te języki specyficzne dla domeny (DSL) są zasadniczo dobrym pomysłem na zmniejszenie złożoności aplikacji.

Jednak w przypadku EVM wydaje się to nie mieć większego sensu. W końcu może on – niezależnie od braku możliwości interakcji ze światem poza blockchainem – wykonywać dowolne algorytmy, więc jest (w uproszczeniu) kompletny Turinga.

Dlaczego nie wykorzystać istniejącego języka i środowiska wykonawczego?
W razie potrzeby niektóre funkcje musiałyby zostać usunięte, ale moglibyśmy czerpać z dłuższego doświadczenia, bardziej stabilnych narzędzi i – co znacznie ważniejsze – szerszej bazy programistów. Rzeczywiście, powszechnie wiadomo, że dziś popularność języka programowania zależy nie tylko od tego, czy jest on szczególnie zwięzły, bezpieczny dla typów lub dynamiczny, ale także od tego, jak łatwy jest dostęp do wielu istniejących bibliotek i pakietów. Tę zmianę epoki najlepiej ilustruje JavaScript, który jest często krytykowany za swoją prymitywną semantykę, ale który należy uznać za najpopularniejszy język programowania najpóźniej od czasu milionowego pakietu NPM.

Webassembly, uniwersalny język pośredni
Osoby stojące za specyfikacją Ethereum doszły do wniosku, że pewne problemy można rozwiązać porzucając custom development na rzecz uniwersalnego języka. Jak to dobrze, że w sieci trwają prace nad stworzeniem alternatywy dla wielkiego psa JavaScript: Webassembly (WASM). Jest to zarówno uniwersalny język pośredni, jak i format binarny, połączony ze specyfikacją dla interpreterów. Jak sama nazwa wskazuje, ten otwarty standard został pierwotnie zaprojektowany dla sieci. W międzyczasie zbadano inne obszary zastosowań (np. aplikacje na smartfony).

Rozwój WASM jest prowadzony przez gigantów branżowych, takich jak Microsoft, Google i Apple. Kluczową cechą języka jest to, że od samego początku został zaprojektowany z myślą o przenośności. Można to zauważyć na podstawie faktu, że wiele istniejących języków programowania, takich jak Rust, C++ lub Go, może już kompilować się do montażu internetowego.

Suivez l’actualité au quotidien

Disclaimer:


Le trading est risqué et vous pouvez perdre tout ou partie de votre capital. Les informations fournies ne constituent en aucun cas un conseil financier et/ou une recommandation d’investissement.

Streszczenie

Może Ci się również spodobać:

Nos Partenaire

BingX

Plateforme de Trading BTC

Bitpanda

Plateforme de Trading BTC

Coinbase

Plateforme de Trading BTC

W tym samym temacie

Odkryj nasze narzędzia