Chcesz poznać mechanizm działania kontraktu zastosowany w AO? Chwyćmy więc kod umowy i dowiedzmy się. Użyj apletu Pythona, aby łatwo uzyskać kontrakt określonego procesu.

Autor: txohyeah

Recenzent: outprog

Źródło: Gildia treści – Wiadomości

Wprowadzenie do AO

Co to jest AO?

Minęło niecałe pół roku od udostępnienia sieci testowej AO, a istnieje wiele treści na temat AO. Treść tego artykułu skupia się głównie na Procesie i inteligentnych kontraktach, w tym na temat tego, czym jest AO, czym jest Proces i jakie jest jego życie cykl Procesu. Na koniec skupimy się na tym, jak przeglądać kod kontraktu Procesu.

AO to funkcja obliczeniowa dalej rozwijana przez Arweave w oparciu o ulepszenie rozproszonej pamięci masowej. Ma ona na celu osiągnięcie wszechstronnej, zdecentralizowanej obsługi aplikacji, odpowiadającej najpierw ścieżce rozwoju obliczeń Ethereum, a później przechowywania. Mówiąc najprościej, AO reprezentuje inteligentne kontrakty lub moc obliczeniową na platformie Arweave i stanowi logiczne rozszerzenie warstwy ponad rozwiązanie do trwałego przechowywania danych.

AO składa się z trzech jednostek: MU/SU/CU

MU: odbiera wiadomości wysłane przez użytkowników, aby upewnić się, że są podpisane.

SU: Oznaczaj czas i sortuj wiadomości, a następnie pakuj i publikuj w Arweave. SU jest także bohaterem, którego będziemy dzisiaj używać i odegra ważną rolę podczas późniejszego przeglądania kontraktu.

CU: Przetwórz wiadomość i oblicz wynik.

Co to jest proces działający na AO?

AO jest zasadniczo komputerem superrównoległym zbudowanym w oparciu o protokół danych, w którym dane istnieją w postaci podstawowego elementu Wiadomość zdefiniowanego w AO. Wówczas Proces odgrywa ważną rolę w przetwarzaniu Komunikatu i jest podstawową jednostką przetwarzania komunikatów na AO. Proces działa na CU i można go uważać za maszynę wirtualną na CU. Dlatego Process zawiera podstawową możliwość odbierania i wysyłania wiadomości w sieci. Następnie programiści budują możliwości przetwarzania komunikatów dla Process, dodając procedury obsługi do Process. Kontrakt, który zostanie omówiony później, jest faktycznie wdrażany poprzez wysłanie komunikatu do procesu, a następnie użycie wbudowanej procedury obsługi _eval. Dodany moduł obsługi można rozumieć jako funkcję przetwarzania komunikatów kontraktu.

Cykl życia procesu

Jeśli chcemy znaleźć analogię w naszym obecnym świecie, to myślę, że kontener (Container) w oknie dokowanym może być dobrym porównaniem i zrozumieniem procesu. Następnie użyję analogii cyklu życia Kontenera w oknie dokowanym, aby porównać cykl życia Procesu.

Wszyscy wiemy, że utworzenie kontenera w oknie dokowanym zależy od obrazu (Obrazu). Na przykład utwórz kontener MySQL w oparciu o obraz MySQL, a następnie będziesz mógł wywołać usługę MySQL na tym kontenerze. To samo dotyczy Procesu w AO. Tworzenie Procesu zależy od Modułu, będą też Moduły z różnymi funkcjami. Istnieją najprostsze Moduły, Moduły obsługujące zaplanowane zadania i Moduły zawierające sqlite. Obecnie programiści mają do wyboru setki modułów umożliwiających stworzenie własnego procesu. Ponadto możesz także stworzyć własny moduł niestandardowy. Wierzę, że w niedalekiej przyszłości pojawią się także moduły obsługujące procesory graficzne oraz moduły obsługujące różne możliwości AI.

Proces w AO różni się także od kontenera w oknie dokowanym. Kontenery w Dockerze obsługują różne akcje, takie jak uruchamianie, zatrzymywanie i usuwanie. Obecnie w Procesie AO nie ma takich operacji. Przecież w świecie zdecentralizowanych aplikacji te funkcje kontrolowane przez scentralizowane osoby są bardzo niespójne. Uruchomienie procesu w AO zależy całkowicie od wartości samego procesu. Jeśli ma on wystarczającą wartość, więcej CU z pewnością będzie skłonnych go uruchomić. Wręcz przeciwnie, jeśli proces nie ma wartości, żadna CU nie będzie chciała go uruchomić Wtedy ten proces zniknie po cichu.

Funkcja eval i wdrożenie kontraktu AO

Co to jest umowa AO? Porównaj inteligentne kontrakty Ethereum. Kod Lua w procesie działający na AO można w przybliżeniu uznać za inteligentny kontrakt.

Kiedy tworzymy proces, każdy załadowany moduł będzie miał dwie domyślne procedury obsługi (procedury obsługi można rozumieć jako funkcje otwarte dla innych procesów), z których jedna to procedura obsługi _eval. Główną funkcją tego modułu obsługi jest uruchamianie kodu Lua. Na przykład, jeśli wpiszesz 1+1 w aos, zostanie zwrócone 2, które zostanie przetworzone przez tę procedurę obsługi. Następnie wdrożenie kontraktu w rzeczywistości oznacza wysłanie komunikatu do procesu i dodanie niestandardowej procedury obsługi, która może obsłużyć logikę biznesową do procesu za pośrednictwem procedury obsługi _eval.

Jest jedna rzecz, na którą warto zwrócić uwagę, spójrz na poniższy kod. To jest sekcja kodu w Process.lua w oficjalnym projekcie AO typu open source. Procedura obsługi _eval może zostać wykonana tylko wtedy, gdy nadawca wiadomości jest zgodny z Właścicielem Procesu (Właścicielem jest adres portfela w momencie tworzenia kontraktu). Innymi słowy, jeśli Wartość Właściciela jest ustawiona na zero (to znaczy, że Proces jest ustawiony na brak Właściciela), wówczas umowa w tym Procesie staje się umową, której nikt nie może modyfikować.

Ponadto, ponieważ AO jest faktycznie zbudowane w oparciu o paradygmat konsensusu opartego na pamięci masowej (SCP, paradygmat konsensusu opartego na pamięci masowej), obowiązująca umowa musi opierać się na „konsensusie dotyczącym pamięci masowej”, czyli wszystkich komunikatach uruchomionych w Procesie, w tym poprzez Wszystkie kody kontraktów wdrożone przez procedurę obsługi _eval są przechowywane w Arweave. Dlatego każdy może znaleźć kod umowy na tym „konsensusie dotyczącym przechowywania”.

Zobacz umowę

Wracając do dzisiejszego tematu, jak znaleźć kod umowy? Poniżej przedstawię obie metody i podam program w Pythonie do przechwytywania kontraktu.

Arweave

Pierwsza metoda polega oczywiście na skierowaniu zapytania bezpośrednio do Arweave (możesz użyć graphql https://arweave.net/graphql). To podejście wymaga spakowania danych do Arweave, aby były przydatne.

SU — przeglądarka

Druga metoda jest metodą wprowadzoną głównie dzisiaj. Ponieważ wszystkie dane zostaną przesłane przez SU, można je również sprawdzić w SU. Osobiście uważam, że każdy SU będzie miał lokalną pamięć podręczną przesłanych przez siebie danych, więc odpowiedni kod kontraktu można znaleźć, wysyłając zapytanie do SU. Po pierwsze, możesz zadać pytanie bezpośrednio, wpisując adres w przeglądarce. Jednak wady tej metody są również oczywiste: 1. Niektóre Procesy wysyłają i odbierają ogromne ilości komunikatów, więc ilość danych przesyłanych do łańcucha jest również ogromna. Jednak dane, które przeglądarka może załadować, są ograniczone i często zdarzają się awarie przeglądarki. 2. Trudno jest odfiltrować żądane dane dotyczące umowy z ogromnej ilości danych.

Poniższy rysunek przedstawia wszystkie komunikaty procesu (procesu tokena AO) o identyfikatorze procesu m3PaWzK4PTG9lAaqYQPaPdOcXdO8hYqi5Fe9NWqXd0w w dwóch znacznikach czasu.

SU - sdk

Tutaj napisałem mały program, używając ao sdk napisanego przez lidera branży w oparciu o Pythona, aby odfiltrować wiadomości, których Akcja to Eval. (Wiadomości, których akcja to Eval, to wszystkie wiadomości przetwarzane przez procedurę obsługi _eval, łącznie z załadowanym kodem kontraktu.) Poniższy obrazek przedstawia wiadomość pobraną od SU, w której zawartość pola danych to kod kontraktu ze znakiem zmiany znaczenia. Oczywiście przechwycone wiadomości będą również zawierać treść kodu umowy niezwiązaną z wdrożeniem, taką jak wykonanie 1 + 1 itp. Jednak ilość wiadomości po przefiltrowaniu nie jest już duża, a kod kontraktu można wybrać ręcznie.

Program jest open source, oto adres github: https://github.com/txohyeah/ao-sc

Umowa na token AO

Podekscytujmy się więc i przyjrzyjmy się kodowi kontraktu tokena ao. (Przechwycony kod kontraktu zostanie również umieszczony w magazynie kodu open source)

Po pierwsze, podczas inicjalizacji stanu, TotalSupply = "21000000000000000000" definiuje się jako spójne z emisją Bitcoina.

Nominał = Nominał lub 12 definiuje również przecinek dziesiętny jako 12 cyfr.

Zdefiniowano, że jeśli funkcja przesyłania zostanie wykonana przed wygenerowaniem 100 000 bloków, zostanie bezpośrednio zwrócony komunikat „Transfer zablokowany”.

Ponieważ blok jest generowany co pięć minut, 100 000 bloków będzie około lutego przyszłego roku.

Jest więcej istotnych informacji, więc nie będę wdawał się w szczegóły. Każdy może z radością przeglądać ten klasyczny kontrakt AO.

Instrukcje programu

Powyżej przedstawiłem przechwycony kod kontraktu. Następnie krótko przedstawię ten program. To bardzo proste, myślę, że osoby nie znające kodu poradzą sobie z nim bez problemu.

Pierwszym krokiem jest instalacja wersji Pythona 3.12. Program jest napisany w Pythonie i konieczna jest instalacja Pythona.

Drugim krokiem jest instalacja wymaganych pakietów. Program ten opiera się na SDK liderów branży i everpay.

Trzecim krokiem jest modyfikacja start_time / end_time / procesu w fetch_sc_record.py. i wykonaj fetch_sc_record.py.

czas_początkowy i czas_końcowy to okresy, które należy przechwycić. proces to identyfikator procesu potrzebny do przechwycenia kontraktu.

W czwartym kroku w pliku msg_eval.json pojawi się odpowiedni komunikat Eval. Przeglądaj wiadomości, a znajdziesz kod umowy, którego potrzebujesz!

PS: Musi to być również to samo, co uruchomienie aos. Ustaw HTTPS_PROXY.

🏆 Nagrody za „łapanie błędów”: Jeśli znajdziesz literówki, nieprawidłowe zdania lub nieprawidłowe opisy w tym artykule, kliknij mnie, aby to zgłosić, a otrzymasz zachęty.

Zastrzeżenie: ten artykuł nie reprezentuje poglądów ani stanowisk PermaDAO. PermaDAO nie zapewnia porad inwestycyjnych ani nie wspiera żadnego projektu. Czytelnicy proszeni są o przestrzeganie prawa kraju, w którym się znajdują i prowadzenie działalności w Web3 zgodnie z przepisami.

🔗 关于 PermaDAO: Strona internetowa | Twitterze | Telegram | Niezgoda | Średni | Youtube