Autor: DongHyun Kang, Xangle Kompilator: Songxue, Golden Finance

1. Wstęp

W branży Web3 nacisk kładziony jest na zapewnienie użytkownikom płynnej obsługi. Z tej perspektywy mniej ważne jest, na którym łańcuchu bloków zbudowana jest aplikacja dApp, ponieważ jest to ważniejsze niż zapewnienie interoperacyjności zapewniającej płynną obsługę użytkownika między różnymi łańcuchami bloków. W latach 2021 i 2022 nadal toczy się gorąca debata pomiędzy monolitycznymi łańcuchami bloków a sieciami wielołańcuchowymi. Warto zauważyć, że Solana i Luna kiedyś zyskały na znaczeniu, a następnie stopniowo zanikły, tworząc możliwości dla Aptos i Sui przyciągnięcia uwagi rynku.

Aptos i Sui są następcami projektu Meta blockchain Diem (dawniej Libra) i łączy je jedno – obaj używają języka programowania Move. W tym artykule skupiono się na Aptosie, zagłębiając się w funkcje używanego przez niego języka Move i maszyn stanowych MoveVM oraz jego porównanie z istniejącymi językami programowania i maszynami stanowymi, takimi jak Solidity/EVM i Rust/WASM.

2. Co to jest Ruch?

2.1 Jak narodził się Move

Zespół Diem na Facebooku (obecnie Meta) odkrył dwa ograniczenia języka programowania Solidity powszechnie przyjętego w branży blockchain. Po pierwsze, Solidity ma luki, takie jak ataki ponownego wejścia i ataki typu double-spend. Podczas gdy sieci blockchain korzystające z Solidity, takie jak Ethereum, ograniczają te ataki za pomocą algorytmów konsensusu, niezaprzeczalnym faktem jest to, że sam język kryje potencjalne wektory ataku.

Po drugie, niezdolność Solidity do zrównoleglenia przetwarzania transakcji prowadzi do wąskich gardeł. Aby zapobiec podwójnym wydatkom, Solidity wymaga, aby transakcje takie jak inteligentne kontrakty były realizowane sekwencyjnie. To sekwencyjne przetwarzanie ogranicza prędkość, co z kolei utrudnia skalowalność łańcucha bloków.

Kierując się tymi obawami, zespół Diem (ramię firmy Meta zajmującej się blockchainem) opracował język Move, pod wpływem Rusta, aby zaradzić powyższym niedociągnięciom. Chociaż Rust jest godnym pochwały językiem programowania, może prowadzić do tworzenia pełnego kodu, gdy jest używany do pisania inteligentnych kontraktów. Następnie Aptos zachował oryginalny język Move, włączając jednocześnie model programowania obiektowego, ewoluując w Aptos Move. Jednocześnie Sui używa języka obiektowego o nazwie Sui Move.

2.2 Funkcja Aptos Move/MoveVM

Move/MoveVM Aptos został starannie zaprojektowany, ze szczególnym naciskiem na bezpieczeństwo. Dodatkowo Aptos upraszcza kod kontraktu Move i umożliwia przetwarzanie równoległe, minimalizując możliwość ataków typu blockchain i maksymalizując skalowalność. W tej sekcji przyjrzymy się bliżej, jak Move implementuje te możliwości.

Zwiększone bezpieczeństwo dzięki Move Prover i modelom zasobów

Weryfikacja formalna polega na matematycznym udowodnieniu, że kod oprogramowania spełnia określone zasady lub właściwości. Aptos wykorzystuje weryfikację formalną za pomocą narzędzia Move Prover do weryfikacji bezpieczeństwa swoich inteligentnych kontraktów. Move Prover może bronić się przed potencjalnymi wektorami ataków w inteligentnych kontraktach, takimi jak ataki typu double-spend i ponowne wejście, poprzez zastosowanie formalnej weryfikacji, jednocześnie identyfikując inne błędy w kodzie i zapewniając stabilność. W przeciwieństwie do innych łańcuchów bloków, które opierają się na algorytmach konsensusu w celu ochrony przed atakami polegającymi na podwójnym wydatkowaniu i ponownym wejściu, Move proaktywnie rozwiązuje te problemy za pomocą swojego języka i narzędzi.

Planowanie statyczne a planowanie dynamiczne

Ponadto MoveVM wykorzystuje planowanie statyczne do wywoływania funkcji, aby zapobiec atakom polegającym na ponownym wejściu na wywołania funkcji. Natomiast tradycyjna maszyna wirtualna Ethereum (EVM) wykorzystuje planowanie dynamiczne. Różnica między tymi dwiema metodami polega na taktowaniu wywołań funkcji w sekwencji wykonywania programu, która zwykle jest w następującej kolejności: kompilacja → łącze → ładowanie → uruchomienie → zakończenie. Wysyłanie statyczne polega na wywołaniu funkcji w czasie kompilacji, podczas której inteligentny kontrakt może przejść przez wstępną fazę sprawdzania błędów. Dlatego w MoveVM inteligentne kontrakty z wyprzedzeniem wchodzą w fazę weryfikacji, skutecznie zapobiegając atakom typu reentranty ze źródła.

Przetwarzanie równoległe transakcji

Aptos MoveVM zwiększa skalowalność poprzez równoległość transakcji. Aby to osiągnąć, MoveVM wykorzystuje Block-STM (pamięć transakcyjną oprogramowania na poziomie bloku) do dystrybucji transakcji bazy danych na wiele wątków w celu równoległego wykonywania. Bliższe spojrzenie na Block-STM ujawnia następujące kluczowe funkcje:

  • Block-STM wykorzystuje optymistyczną kontrolę współbieżności w celu równoległego wykonywania transakcji, a następnie ich walidacji. Transakcje, które napotkały konflikty, zostaną ponownie wykonane.

  • Block-STM wykorzystuje wielowersyjną strukturę danych, aby zapobiec konfliktom zapisu. Wszystkie zapisy są przechowywane w tej samej lokalizacji, wraz z identyfikatorem transakcji i liczbą ponownych wykonań. Dzięki temu transakcje są przetwarzane w z góry określonej kolejności, nawet jeśli zostaną ponownie wykonane.

  • Block-STM wprowadza harmonogram współpracujący, który ustala priorytety realizacji i weryfikacji podtransakcji, określając w ten sposób kolejność przetwarzania pomiędzy wątkami transakcji. Move wykorzystuje ten współpracujący program planujący, aby zapobiegać konfliktom między transakcjami i zapobiegać ich unieważnieniu.

  • Wreszcie, dynamiczna estymacja zależności służy do grupowania transakcji poprzez estymację ich zależności i identyfikację powiązanych transakcji.

Poprzez Block-STM Aptos realizuje równoległe przetwarzanie transakcji w następujący sposób. Dodatkowo, chociaż walidacja jest ujednolicona we wszystkich walidatorach, wykonywanie odbywa się równolegle pomiędzy każdym walidatorem, co dodatkowo zwiększa skalowalność. Równoległe przetwarzanie transakcji przez Aptos można podsumować w następujący sposób:

1. Użytkownik generuje transakcję i wysyła ją do sieci.

2. Walidator weryfikuje transakcję.

3. Zweryfikowane transakcje grupowane są według dynamicznych oszacowań zależności, przy czym każda grupa transakcji jest przetwarzana równolegle przez walidatora.

4. Przetworzone transakcje są zestawiane w bloki i propagowane w całej sieci.

Aptos Token Standard zwiększa wygodę dla programistów i użytkowników

Aptos zbudował także własny standard tokenów, korzystając ze standardu Move, Aptos Coin Standard. W ten sposób Aptos poprawia ograniczenia związane z tradycyjnym EVM. MoveVM eliminuje potrzebę wystawiania oddzielnych inteligentnych kontraktów na wydawanie tokenów i wymaga jedynie niewielkiej opłaty za gaz za wydawanie tokenów. Nie jest to jednak znacząca zaleta, ponieważ łańcuchy bloków inne niż EVM, takie jak Solana i Algorand, również korzystają z własnych standardów tokenów.

Niemniej jednak od sierpnia 2023 r. Aptos uruchomił dwa nowe standardy: FT i NFT. Warto zauważyć, że nowy standard FT umożliwia programistom wybór i wydanie jednego z następujących elementów w zależności od ich celów programistycznych: zwykłe zasoby tokenów, tokenizowane RWA lub tokeny w grze. Wydaje się, że jest to zgodne ze strategią Aptos zakładającą wykorzystanie rosnącego rynku związanego z RWA. W praktyce firmy Web 2.0 często szukają kontroli nad aktywami podczas tokenizacji RWA, ale ograniczenia Ethereum sprawiają, że osiągnięcie tego jest wyzwaniem, co skłania wiele firm do rozpoczęcia tworzenia własnych łańcuchów bloków. Natomiast Aptos osiąga to na poziomie protokołu poprzez ustawienie standardu tokena.

3. Porównanie z innymi językami i maszynami wirtualnymi

Porównaj Aptos Move/Move VM z innymi językami i maszynami wirtualnymi

3.1. Ruch kontra solidność

Move/MoveVM został stworzony, aby zrekompensować ograniczenia Solidity, dzięki czemu jest bezpieczniejszy i skalowalny niż Solidity. Jak wspomniano wcześniej, możliwości Move/MoveVM zwiększają bezpieczeństwo i skalowalność Aptos. Jak wspomniano w wersji 2.1, MoveVM zapobiega atakom polegającym na ponownym wejściu i podwójnym wydatkowaniu na etapie językowym, a Solidity/EVM odnotował dużą liczbę ataków ponownego wejścia. Dobrym przykładem jest atak DAO na Ethereum w 2016 r. Chociaż Fundacja Ethereum wprowadziła środki zapobiegawcze, w DeFi nadal występuje duża liczba ataków typu Re-entry. Hakerzy nadal próbują ataków ponownego wejścia w nadziei na wdrożenie błędnych kontraktów w DeFi w ekosystemie EVM.

Jak wspomniano powyżej, Move/MoveVM jest również wysoce skalowalny, teoretycznie osiągając do 160 000 TPS ze względu na możliwość równoległego przetwarzania transakcji. Uwalnia to Aptos od wąskich gardeł. Jednocześnie EVM musi przetwarzać transakcje sekwencyjnie ze względu na ryzyko ataków związanych z podwójnymi wydatkami i ponownym wejściem. W związku z tym w łańcuchu EVM pojawiło się wąskie gardło. Gdy w tym samym czasie miała miejsce duża liczba transakcji, koszty gazu gwałtownie wzrosły, a transakcje ustały.

Pod względem elastyczności Solidity/EVM ma przewagę nad Move/MoveVM. Solidity/EVM wykorzystuje planowanie dynamiczne, natomiast Move/MoveVM wykorzystuje planowanie statyczne. Użycie przez Move metody wysyłania statycznego zwiększa bezpieczeństwo inteligentnych kontraktów, ale ogranicza ich funkcjonalność w porównaniu z Solidity. Dodatkowo Solidity umożliwia aktualizację protokołu i kodu kontraktu w dowolnym momencie, natomiast Move nakłada ograniczenia na te aktualizacje. Jeśli chodzi o interoperacyjność między łańcuchami bloków, Solidity wykazuje większą elastyczność i skalowalność niż Move, głównie dlatego, że Team EVM (w tym Ethereum) preferuje modułowe łańcuchy bloków, podczas gdy Team Move preferuje holistyczny łańcuch bloków.

3.2. Ruch kontra rdza

Move wywodzi się z Rusta i ma wiele podobieństw w wydajności i funkcjonalności z Rustem, takich jak wydajność i bezpieczeństwo. Kluczową różnicą jest ich przeznaczenie: Rust jako język programowania ogólnego przeznaczenia, natomiast Move specjalizuje się w tworzeniu inteligentnych kontraktów. Rust został zaprojektowany do szerszego zakresu zastosowań i jest szeroko stosowany w różnych środowiskach programistycznych, w tym tych niezwiązanych z blockchainem. Dlatego pisanie kodu inteligentnego kontraktu w Rust może skutkować dłuższym i bardziej złożonym kodem. Natomiast Move jest dostosowany jako język specyficzny dla blockchain, specjalnie dla inteligentnych kontraktów. Chociaż ogranicza to jego zastosowanie w rozwoju blockchain, skutkuje stosunkowo zwięzłym i mniej złożonym kodem podczas pisania inteligentnych kontraktów.

<Move kontra Rust: porównanie inteligentnych kontraktów, źródło: Krešimir Klas>

Powyższy obrazek przedstawia porównanie długości kodu, gdy Solana i Sui opracowują ten sam inteligentny kontrakt. Oczywiście dłuższy kod oznacza więcej możliwości potencjalnych ataków na inteligentne kontrakty. Dłuższy kod zwiększa również szansę programistów na popełnienie błędów, które mogą pozostać niezauważone podczas inspekcji kodu. Natomiast zaletą Move jest to, że tworzenie kodu jest prostsze, co zmniejsza prawdopodobieństwo błędu programisty i ułatwia skuteczniejsze inspekcje.

3.3. Ruch Aptos kontra Ruch Sui

Oba Aptos Move i Sui Move pochodzą z tego samego zespołu Diem, więc istnieje wiele podobieństw. Pierwotnie pozostawał pod wpływem Rusta, który nadał im podobną składnię i funkcjonalność. Dodatkowo oba projekty wykorzystują Move Prover do weryfikacji inteligentnych kontraktów.

Jednak Aptos Move zachowuje oryginalny łańcuch bloków Diem i przyjmuje model programowania zorientowanego obiektowo, podczas gdy Sui Move wprowadza zorientowany obiektowo łańcuch bloków Sui jako ewolucję Diem. Sui przechodzi na obiektowy łańcuch bloków, aby wspierać równoległość, która zależy od zrozumienia danych, które mają być odczytywane i zapisywane. Dlatego Aptos wykorzystuje model zasobów, aby podzielić elementy składowe aplikacji na trzy odrębne jednostki: unikalne identyfikatory, właściwości i metody. Z drugiej strony Sui przyjmuje model zorientowany obiektowo i dzieli elementy aplikacji na stan i zachowanie. Powoduje to, że Aptos Move oferuje programistom znaczną elastyczność, podczas gdy Sui Move jest stosunkowo uparty.

Aptos Move i Sui Move wykazują różnice w sposobie działania na blockchainie. Po pierwsze, oba łańcuchy bloków obsługują przetwarzanie równoległe, choć na różne sposoby. Jak wspomniano wcześniej, Aptos implementuje równoległe przetwarzanie transakcji poprzez Block-STM, podczas gdy Sui wykorzystuje strukturę ukierunkowanego wykresu acyklicznego (DAG) do przechowywania transakcji. Struktura DAG odcina wzajemne połączenia transakcyjne i umożliwia równoległe przetwarzanie transakcji.

Kolejną różnicą jest sposób zapobiegania atakom polegającym na ponownym wejściu. Jak wspomniano wcześniej, Aptos zapobiega atakom typu reentranty, wykorzystując planowanie statyczne do weryfikacji stanu inteligentnych kontraktów przed wykonaniem. Natomiast Sui blokuje ataki typu reentrancy, aktualizując stan inteligentnego kontraktu tylko raz podczas realizacji transakcji, zapewniając, że stan pozostanie niezmieniony, nawet jeśli osoba atakująca przerwie transakcję. Ponadto, ponieważ struktura DAG Sui nie opiera się na kolejności transakcji, przerwanie jednej transakcji nie będzie miało wpływu na niezależne przetwarzanie innych transakcji, zapewniając w ten sposób dodatkową ochronę przed atakami typu reentrancy.

4. Następny krok: Zbuduj silny ekosystem programistów i zabójczą aplikację DApp

Move/MoveVM zapewnia obiecującą platformę do rozwoju blockchain, ale stoi przed dwoma poważnymi wyzwaniami. 1) Move nadal pozostaje w tyle za Solidity, jeśli chodzi o posiadanie dojrzałego ekosystemu programistów. Aptos istnieje już od prawie roku, a Sui dopiero niedawno uruchomiła swoją sieć główną. Dlatego Move ma przed sobą długą drogę w porównaniu do Solidity, która ma dojrzałą społeczność programistów. Solidity ma osiem lat i oferuje szeroką gamę narzędzi deweloperskich oraz dedykowane programy szkoleniowe. Dla programistów niezwykle ważne jest posiadanie wspierającej społeczności, która może przekazywać opinie na temat ich pracy, a Solidity ma już dużą społeczność programistów, która organizuje hackatony na całym świecie. Turing szacuje, że społeczność programistów Solidity liczy około 200 000 osób.

Natomiast Move rozwija się od czasów Facebooka, ale w dużej mierze jest to wewnętrzny wysiłek zespołu Diem. W rezultacie ekosystem programistów Move nie jest ani tak dojrzały, ani tak rozbudowany jak Solidity. Chociaż istnieje społeczność programistów Aptos, w tym Forum Aptos, brakuje jej ustrukturyzowanych programów szkoleniowych, narzędzi programistycznych i mechanizmów otwartej opinii, które można znaleźć w Solidity. Mysten Labs, firma stojąca za Sui, szacuje liczbę programistów Move na 10 000, chociaż Aptos nie podał oficjalnej liczby.

Po drugie, 2) Move brakuje świetnej, zabójczej aplikacji dApp. Wiele sieci EVM, takich jak Ethereum i Arbitrum, udostępnia liczne aplikacje dApp, które są szeroko stosowane wśród użytkowników kryptowalut. Jednak ekosystem Move nie stworzył jeszcze równie świetnych aplikacji. Całkowita zablokowana wartość Aptos (TVL) na dzień 26 września wynosiła 43,5 miliona dolarów, czyli znacznie mniej niż główny fundusz EVM Tier 2, którego baza wynosi ponad 300 milionów dolarów (źródło: DeFiLlama).

Fundacja Aptos zdaje sobie sprawę z stojących przed nią wyzwań i aktywnie podejmuje działania, aby je pokonać. Po pierwsze, Fundacja Aptos przywiązuje dużą wagę do rozwoju narzędzi programistycznych w celu kultywowania dobrze prosperującego ekosystemu programistów. Uruchomili samouczki Aptos, aby pomóc początkującym programistom rozpocząć pracę, i tworzą projekty edukacyjne, takie jak Move Spider. Ponadto Fundacja Aptos pielęgnuje społeczności programistów, organizując grupy spotkań na całym świecie, w tym w Stanach Zjednoczonych, Korei Południowej i Chinach, w celu dalszego wzmacniania ekosystemu programistów.

Na froncie biznesowym Aptos aktywnie buduje partnerstwa ze znanymi podmiotami i podmiotami o znacznej dystrybucji w różnych sektorach, takimi jak między innymi NBCUniversal, Microsoft, Google, Netmarble (Marblex), Neowiz i Chingari. Z drugiej strony Aptos pracuje nad internalizacją losowości w łańcuchu za pośrednictwem AIP-41, aby ułatwić integrację firm zajmujących się grami. Przyjęcie AIP-41 przez Aptos zapewnia firmom zajmującym się grami opłacalną alternatywę dla oprogramowania pośredniczącego, takiego jak VRF firmy Chainlink, w celu zapewnienia randomizacji projektów w łańcuchu EVM, co czyni Aptos atrakcyjną opcją.

5. Wniosek

W tym artykule skupiono się na Move/MoveVM Aptos i porównano jego funkcje z istniejącymi językami programowania blockchain. Odkrycia pokazują, że Move został stworzony specjalnie do opracowywania inteligentnych kontraktów typu blockchain i ma wyraźną przewagę techniczną nad istniejącymi językami. Jednak Move jest wciąż na wczesnym etapie, jeśli chodzi o programistów i ekosystem dApp. Obecnie Solidity ma około 20 razy więcej programistów niż Move, a Solidity zajmuje solidną pozycję pod względem całkowitej wartości zablokowanej (TVL) i wpływowych aplikacji dApps. Mimo to Move ma zaledwie rok i jest jednym z niewielu języków programowania zaprojektowanych specjalnie pod rozwój blockchain, co pokazuje, że ma ogromny, niewykorzystany potencjał. Dodatkowo reputacja języka opracowanego przez zespół Diem zwiększa perspektywy rozwoju w ekosystemie Move. Dlatego też, jak widać na powyższym rysunku, warto przyjrzeć się, czy Move, jako kompleksowy język programowania blockchain, może się rozwinąć i konkurować z Solidity.