Post Budowanie aplikacji Blockchain z Plutus pojawił się po raz pierwszy w Coinpedia Fintech News
Wstęp
Blockchain przyczynia się do rozwoju różnych branż dzięki zdecentralizowanym i przejrzystym rozwiązaniom. Postępy w dziedzinie rozwoju przyniosły transformacyjne zmiany dla deweloperów i społeczności. Korzyści płynące z blockchain wykraczają poza decentralizację. Oszczędza czas potrzebny na transakcję i nie wymaga weryfikacji przez osoby trzecie, co zmniejsza ryzyko oszustw i cyberataków. Jako deweloper, zrozumienie, jak budować aplikacje blockchain, jest cenne, szczególnie podczas korzystania z potężnych narzędzi, takich jak Plutus. Plutus to platforma inteligentnych kontraktów na blockchainie Cardano. Oferuje ona solidne ramy dla deweloperów, aby mogli tworzyć bezpieczne i wydajne zdecentralizowane aplikacje (DApps).
Czym jest Cardano?
Cardano Platforma blockchain uruchomiona przez Charlesa Hoskinsona (współzałożyciela Ethereum) w 2017 roku. Cardano to platforma trzeciej generacji, często uważana za alternatywę dla Ethereum, platformy drugiej generacji. Wykorzystuje mechanizm proof of stake, który jest bardziej wydajny niż tradycyjne. Cardano ma własną kryptowalutę ADA, nazwaną na cześć Ady Lovelace. Ma dwie oddzielne warstwy, jedną obsługującą transakcje i konta, podczas gdy druga służy do zarządzania inteligentnymi kontraktami i obliczeniami. Cardano ma na celu stworzenie platformy blockchain, która jest bezpieczniejsza, skalowalna i bardziej elastyczna niż jej poprzednicy i jest wykorzystywana w różnych aplikacjach, w tym w zarządzaniu łańcuchem dostaw, weryfikacji tożsamości cyfrowej i usługach finansowych na rynkach wschodzących.
Pluton
Plutus to język programowania używany do pisania inteligentnych kontraktów opartych na Cardano. Plutus jest oparty na Haskell, który jest językiem funkcyjnym. Jako programista nie musisz pisać Plutus Core, a wszystkie skrypty zostaną wygenerowane przez wtyczkę kompilatora Haskell. Plutus obsługuje formalną weryfikację, która zapewnia sposób na udowodnienie poprawności programu za pomocą matematyki. W ten sposób zwiększa się bezpieczeństwo i zmniejsza prawdopodobieństwo wystąpienia błędów w inteligentnym kontrakcie.
Plutus jest natywnie zintegrowany z blockchainem Cardano, co pozwala deweloperom na bezpośrednią interakcję z rejestrem i infrastrukturą Cardano. Pomaga to budować i wdrażać inteligentne kontrakty, które bezpośrednio wchodzą w interakcję z ekosystemem Cardano. Plutus ma narzędzia, które pomagają symulować inteligentne kontrakty bez pełnego węzła Cardano i eksperymentować przed wdrożeniem ich w sieci głównej. Plutus jest odpowiedni dla deweloperów, którzy chcą tworzyć niezawodne i wydajne zdecentralizowane aplikacje.
Publiczność
Ten artykuł jest skierowany do deweloperów, którzy są nowicjuszami w rozwoju blockchain i mają niewielką wiedzę na temat podstawowego programowania. Przeprowadzimy Cię przez podstawowe kroki konfiguracji środowiska, zrozumienia koncepcji blockchain i zbudowania prostej aplikacji blockchain przy użyciu Plutus.
Konfigurowanie środowiska programistycznego
Posiadanie idealnego ustawienia przed rozpoczęciem podróży rozwoju jest kluczowe. Dlatego skonfigurowanie środowiska, które obsługuje Plutus, jest kamieniem milowym tego rozdziału.
1. Instalacja Plutusa
Pobierz Plutusa z oficjalnego repozytorium:
klon git https://github.com/input-output-hk/plutus-apps.gitcd plutus-appsnix-shell
Sprawdź instalację za pomocą: plutus -v
2. Wybór środowiska IDE
Podczas tworzenia aplikacji z Plutusem kluczowe jest posiadanie odpowiedniego IDE. Plutus opiera się na Haskellu, dlatego zaleca się posiadanie IDE obsługującego Haskell. Dwie popularne opcje dla rozwoju Plutus to Visual Studio Code (VS Code) i Plutus Playground. Oto rozszerzony przewodnik na temat tego, jak skonfigurować i używać tych IDE do rozwoju Plutus.
Visual Studio Code: VS Code to bardzo elastyczny i wszechstronny edytor kodu, który obsługuje niemal każdy język i ma bardzo pomocne rozszerzenia. Dlatego jest to ulubiony edytor programistów do pracy. VSCode jest oprogramowaniem typu open source i zapewnia szeroki zakres narzędzi i funkcji do uzupełniania kodu.
Kroki konfiguracji VSCode:
Pobierz VSCode z oficjalnej strony (zgodnie z Twoim systemem operacyjnym)
Zainstaluj oprogramowanie
Plutus został stworzony na bazie Haskella, dlatego konieczna jest instalacja platformy Haskell, która obejmuje kompilator Glasgow Haskell Compiler (GHC) i cabal (narzędzie do kompilacji dla Haskella).
Pobierz Haskell
Zainstaluj rozszerzenia Haskell w VS Code (Haskero, Haskell Syntax Higlighting itp.)
Skonfiguruj rozszerzenia i zainstaluj dodatkowe rozszerzenia
Skoro zainstalowałeś już Plutus, to jesteś gotowy do pracy!
Plutus Playground: Plutus Playground to internetowy edytor oparty na sieci, przeznaczony specjalnie dla inteligentnych kontraktów Plutus. Nie ma więc potrzeby instalacji i jest idealny dla początkujących, którzy chcą nabrać pewności siebie podczas kodowania.
Odwiedź stronę internetową Plutus Playground i po prostu zacznij zabawę!
Oba środowiska można efektywnie wykorzystać do tworzenia aplikacji Plutus. Może się okazać, że ich połączenie — użycie VS Code do większych projektów i Plutus Playground do szybkiego testowania i tworzenia prototypów — pozwoli wykorzystać zalety obu rozwiązań.
3. Instalowanie wymaganych bibliotek
Użyj cabal do zainstalowania niezbędnych bibliotek do rozwoju Plutusa.
Zrozumienie koncepcji Blockchain z Plutus
Blockchain to rozproszona i zaawansowana baza danych, która przechowuje zapisy transakcji w formie bloków. Każdy z bloków musi być połączony z pozostałymi za pomocą zasad kryptograficznych. Solidne mechanizmy są używane do ochrony bloków, dzięki czemu nie można zmienić żadnych zapisów walut przed upływem czasu i bez wpływu na kolejne bloki.
Technologia blockchain składa się z trzech podstawowych komponentów:
Bloki: Bloki zawierają informacje o transakcjach wraz z metadanymi. Wszystkie bloki są ze sobą połączone za pomocą hashowania, które tworzy łańcuch bloków, stąd blockchain.
Transakcje: Transakcja to transfer danych z jednego podmiotu do drugiego w blockchainie. W Plutus transakcje są pisane w Haskell i obejmują wejściowe i wyjściowe UTXO (Unspent Transaction Outputs).
Łańcuchy: w Plutus łańcuch utrzymuje kolejność transakcji i zapewnia ich niezmienność po potwierdzeniu.
W poniższym fragmencie kodu możemy zobaczyć strukturę bloku w Plutus:
Każdy komponent bloku jest wymieniony wraz z jego typem danych
Indeks jest liczbą całkowitą, która określa położenie bloku
Znak czasu to czas utworzenia bloku
Transakcje to ciąg lub lista wszystkich transakcji zawartych w danym bloku
Hash to unikalny wzór i klucz podstawowy umożliwiający identyfikację bloku
Poprzedni hash odnosi się do ciągłości i jest hashem ostatniego bloku
W tym fragmencie kodu możemy zobaczyć strukturę transakcji w Plutus:
Decentralizacja, niezmienność i mechanizmy konsensusu:
Podstawą technologii blockchain są trzy podstawowe zasady: decentralizacja, niezmienność i mechanizm konsensusu
Decentralizacja: Decentralizacja to właściwość, dzięki której żaden pojedynczy podmiot nie sprawuje kontroli nad bazą danych Blockchain, co sprawia, że awaria systemu i stronniczość są niemal niemożliwe. Każde urządzenie uczestniczące (węzeł) przechowuje kopię blockchain, zapewniając przejrzystość i zapobiegając scentralizowanej awarii lub manipulacji.
Niezmienność: Gdy dane zostaną zapisane w blockchainie, nie można ich zmienić bez zmiany wszystkich kolejnych bloków. Odbywa się to za pomocą hashowania kryptograficznego. Stąd wszystkie zmiany wprowadzone raz nie mogą zostać cofnięte, co czyni je niezmiennymi.
Mechanizm konsensusu: Zestaw protokołów regulujących wszystkie potrzeby blockchain. Wszystkie węzły w sieci muszą się zgodzić co do metod. Mechanizmy konsensusu są używane do usprawnienia węzłów i zapewnienia, że wszystkie węzły w sieci są na tej samej stronie.
Budowanie prostego łańcucha bloków z Plutus
Blok jest jednostką pierwotną dowolnego łańcucha bloków. W tym fragmencie kodu zdefiniowaliśmy typ danych bloku wraz z jego składnikami.
Również po zdefiniowaniu klasy bloku musimy zapewnić integralność łańcucha bloków, gdzie każdy blok musi mieć unikalny hash. Dlatego z funkcją skrótu Calculate używamy popularnej metody hashowania SHA256 w Plutus.
Po zakończeniu Definicji bloku, kontynuuj i zainicjuj swój blockchain za pomocą bloku genesis, który jest pierwszym blokiem dla każdego blockchaina. Wow!! Właśnie utworzyłeś blockchain, ale to nie wszystko, musisz dodać nowe bloki i pobrać również najnowszy blok.
Jeśli potrzebujesz pomocy, zapoznaj się z poniższym kodem!
Wdrażanie mechanizmów konsensusu w Plutus
Cardano wykorzystuje mechanizm PoS, podczas gdy jako pierwsze przyjęło Proof of Work. Plutus został zaprojektowany tak, aby był kompatybilny z protokołem PoS Ouroboros firmy Cardano, oferując skalowalność, efektywność energetyczną i bezpieczeństwo dla zdecentralizowanych aplikacji (DApps).
Oto przegląd algorytmów konsensusu, które mogą działać z Plutus
Ouroboros: Ouroboros to mechanizm Proof of stake, z którym Plutus jest wysoce kompatybilny i zależy od stawki ADA, którą walidatorzy są skłonni przyjąć, aby zweryfikować nowy blok. Kontrakty Plutus bezproblemowo współdziałają z protokołem Ouroboros, zapewniając, że wykonywanie inteligentnych kontraktów pozostaje bezpieczne i energooszczędne.
Proof of Work: PoW jest najstarszym mechanizmem i był szeroko stosowany we wszystkich starszych kryptowalutach. Nadal można go wdrożyć na papierze w przypadku Plutusa. Byłoby to bardziej przydatne przy rozważaniu odosobnionych scenariuszy, takich jak cele edukacyjne i eksperymentalne.
Delegowany dowód pracy i tolerancja błędów bizantyjskich: Mechanizmy te nie są szczególnie kompatybilne z Cardano, ale teoretycznie można je zaimplementować w systemie Plutus.
W tej sekcji sprawdzimy, jak można wykorzystać Proof of Work w Plutus.
W Proof of Work górnicy muszą rywalizować na czas, aby rozwiązać zagadkę kryptograficzną, aby zostać walidatorami nowej monety. W tym kodzie funkcja dowodu pracy wyszukuje nonce, który w połączeniu z hashem poprzedniego bloku generuje hash z określoną liczbą wiodących zer. Jest to podstawowa implementacja PoW, w której poziom trudności określa, jak trudno jest znaleźć prawidłowy nonce.
Po zakończeniu implementacji Proof of Work należy zaktualizować blockchain, aby zweryfikować wydobyty dowód.
Oto przykładowy fragment kodu:
Funkcja ta zapewnia, że nowy blok zostanie dodany do łańcucha bloków tylko wtedy, gdy jego dowód będzie prawidłowy, zachowując integralność łańcucha.
Tworzenie prostego interfejsu API Blockchain z Plutus
W tym rozdziale dowiesz się, jak utworzyć proste API do interakcji z aplikacją blockchain zbudowaną przy użyciu Plutus. To API pozwoli Ci dodawać bloki i przeglądać blockchain za pomocą żądań HTTP.
Kroki tworzenia API:
Skonfiguruj środowisko dla API: zainstaluj Haskel (co już zostało zrobione), następnie zainstaluj Servant za pomocą Cabal
Pobierz wszystkie wymagane biblioteki:
Sługa: Aby utworzyć API
Aeson zakoduje i zdekoduje JSON: cabal install aeson plutus-core
Plutus integruje cały kod i logikę
Aby rozpocząć tworzenie API, musimy najpierw dodać nowy blok i wycofać obecny stan łańcucha bloków. Oba te kroki zostały wykonane w powyższych rozdziałach.
Teraz możesz przejść dalej i zdefiniować punkty końcowe:
{-# LANGUAGE DataKinds #-}{-# LANGUAGE TypeOperators #-}module BlockchainAPI whereimport Servantimport Control.Monad.IO.Class (liftIO) — Zdefiniuj typ bloku (patrz rozdział 3)data Block = Block { index :: Int , timestamp :: String , dataField :: String , previousHash :: String , hash :: String } deriving (Show, Eq) — Blockchain to po prostu lista blokówtype Blockchain = [Block] — Zdefiniuj typ APItype BlockchainAPI = “addBlock” :> ReqBody ‘[JSON] Block :> Post ‘[JSON] Blockchain:<|> “chain” :> Get ‘[JSON] Blockchain — Miejsce zastępcze dla blockchaina, początkowo zaczynając od genezy blockgenesisBlock = Block 0 „2024-09-12 00:00:00” „Genesis Block” „0” „some_hash”initialBlockchain:: BlockchaininitialBlockchain = [genesisBlock]–– Obsługujące punkty końcowe API saddBlockHandler :: Blockchain -> Block -> Handler BlockchainaddBlockHandler blockchain newBlock = dolet newBlockchain = blockchain ++ [newBlock] liftIO $ putStrLn „Blok dodano!” return newBlockchain— Obsługujący pobieranie chainviewChainHandler :: Blockchain -> Handler BlockchainviewChainHandler blockchain = return blockchain–Główny punkt wejścia do uruchomienia APIapp :: Applicationapp = serve (Proxy :: Proxy BlockchainAPI) (blockchainServer initialBlockchain)
Wyjaśnienie powyższego kodu:
Blok jest definiowany podobnie jak w poprzednich rozdziałach
Biblioteka Servant jest używana do definiowania struktury API. Istnieją dwie metody definiowania punktów końcowych API, GET i POST, co oznacza odpowiednio pobranie i dodanie łańcucha bloków.
Zdefiniowaliśmy również handlery (addBlockHandler) do obsługi nowych bloków, które są dodawane, oraz viewChainHandler do wyświetlania innych bloków
Na końcu znajduje się funkcja main, która stanowi serce kodu, spaja wszystko w całość i uruchamia serwer API.
Po zdefiniowaniu interfejsu API masz dwie metody dodania punktów końcowych i pobrania informacji o punktach końcowych łańcucha bloków.
Hurra!! Udało Ci się pomyślnie zaimplementować tę podsekcję, teraz możesz przeglądać API za pomocą cabal i przejść do następnej części.
Uruchamianie i testowanie aplikacji
Po zbudowaniu API blockchain nadszedł czas na jego przetestowanie. Użyjemy Postmana lub curl do interakcji z API i zweryfikujemy, czy działa ono poprawnie.
Kroki uruchamiania i testowania aplikacji:
Skompiluj program i uruchom go: cabal build cabal run
Uruchom serwer: API powinno być dostępne pod adresem http://localhost:8080
Przetestuj i dodaj punkty końcowe bloku
{ „index”: 1, „timestamp”: „2024-09-12 12:30:00”, „dataField”: „To jest mój nowy blok”, „previousHash”: „some_hash”, „hash”: „new_block_hash”}
Wyświetl Blockchain
zwiń http://localhost:8080/chain
Wykonując te kroki, masz teraz prostą aplikację blockchain działającą z API zbudowanym przy użyciu Plutus. API pozwala zewnętrznym aplikacjom lub użytkownikom na interakcję z Twoim blockchainem poprzez dodawanie nowych bloków i przeglądanie bieżącego stanu blockchaina.
Przykład na żywo tworzenia aplikacji Blockchain z Plutus
Powyższy fragment kodu przedstawia wykonanie krok po kroku:
Krok 1: Utwórz typ danych Blok z niezbędnymi atrybutami, korzystając ze składni Plutus.
Krok 2: Implementacja metody calculator_hash.
Krok 3: Zdefiniuj typ danych Blockchain i zainicjuj go blokiem genesis.
Krok 4: Wdróż metody dodawania nowych bloków i pobierania najnowszego bloku za pomocą Plutus.
Krok 5: Dodaj funkcjonalność Proof of Work do typu danych Block i zaktualizuj typ danych Blockchain.
Krok 6: Skonfiguruj środowisko API do obsługi żądań za pomocą Plutus.
Krok 7: Przetestuj aplikację, wydobywając nowy blok i weryfikując blockchain za pomocą Postmana lub Curla
Gratulacje! Dotarłeś do końca modułu i poznałeś wszystkie podstawy Plutusa.
Wkraczając w rozwój blockchain z Plutus, nie tylko piszesz kod — tworzysz kręgosłup zdecentralizowanych systemów, które mogą zdefiniować na nowo branże. Ucz się dalej i miłego kodowania!!
Sprawdź także: Jak zaprojektować, opracować i wdrożyć własną kryptowalutę: przewodnik krok po kroku