🔴 Czym są smart contracty w Cardano? Poświęciłem na zrozumienie tego tematu kilkanaście godzin 🙄 Oto wprowadzenie 💬👇
🔴 Cardano to blockchain 3 generacji, programowalna platforma blockchain. Cardano to system analogiczny do Ethereum – programowalny komputer. Jednak architektura danych tworzących blockchain w Cardano, jest analogiczna do… Bitcoina. Co to oznacza?
🔴 Architektura danych Cardano oparta jest o EUTXO. Oznacza to rozszerzone (extended) UTXO. Żeby zrozumieć UTXO, musimy poznać klasyczny model danych w blockchainie.
🔴 Dane w każdym blockchain zapisywane są w kryptograficznie zabezpieczonych blokach. Bloki posiadają transakcje, czyli opisy zmian, które należy przeprowadzić w blockchainie. Transakcja to np. przesłanie kryptowaluty z jednego adresu do drugiego, ale też realizacja wymiany na zdecentralizowanej giełdzie Uniswap, która wywołuje “smart contract” zapisując na blockchain dane o wykonanym kupnie/sprzedaży. Dane w blokach tworzą historię zmian na blockchain, a algorytm konsensusu i kryptografia są gwarantem ich bezpieczeństwa i niezmienności.
🔴 Ethereum, jako programowalny blockchain posiada poza blokami jeszcze inną specjalną przestrzeń opisywaną jako “stan systemu” (world state). Te dane zawsze odzwierciedlają aktualny, najnowszy stan danych. Na przykład wysyłając 3 razy 1 Ether z konta A, do B – w world state finalnie B będzie posiadać 3 Ethery, chociaż w blokach znajdziemy 3 osobne transakcje zmiany stanu. W taki sam sposób zmieniają się dane aktualizowane przez smart contract. Ta struktura danych ułatwia odczyt, dostęp do danych jest szybki (indeksowany). Każdy węzeł w sieci posiada własny, niezależny “world state”, który po przetworzeniu wszystkich transakcji u wszystkich węzłów powinien być taki sam.
🔴 Chcąc sprawdzić stan posiadanych Bitcoinów przez adres X, należy… przeskanować każdy blok i każdą transakcję w blockchainie Bitcoin. Dlaczego? Bo Bitcoin nie ma world state. Tak samo, jak Cardano. Najmniejsza struktura danych niosąca informację w Bitcoinie i Cardano to UTXO. W Bitcoinie dane, jakie posiada UTXO to informacja o “ilości Bitcoina”, dostępnych do wydania. Jeśli UTXO z zapisem “1 BTC” jest przypisane do adresu, to adres kontroluje 1 BTC. EUTXO w Cardano oprócz informacji o ilości kryptowaluty, posiada także dane, a nawet samą logikę smart contractów.
🔴 EUTXO sprawia, że operacja na danych (i programie w Cardano) jest dosłownie iteracją, przechodzeniem przez łańcuch powiązanych ze sobą UTXO. UTXO można wydać i w momencie wydania oznacza się je jako “nieaktualne”, ale powstaje nowe UTXO, posiadające zaktualizowany stan danych. Działanie smart contractów w Cardano, to właśnie proces tworzenia nowych EUTXO i oznaczania starych, jako nieaktualne.
🔴 Chcąc pozwolić zrozumieć budowę smart contractów (kontraktów) w Cardano, wyjaśnię budowę i działanie klasycznego kontraktu, tzn. jaki możemy implementować w Ethereum, pierwszym i nadal wiodącym na rynku programowalnym blockchainie. Kontrakt w Ethereum to “mały” program komputerowy, czyli zestaw danych i instrukcji przetworzenia tych danych, wykonania na nich pewnych operacji. Taki kontrakt, jako “pakiet”, mamy możliwość załadować do sieci blockchain. Taki program staje się niezmienną częścią blockchaina i od momentu załadowania, blockchain gwarantuje jego niezmienność (nie można zmieniać instrukcji kontraktu). Staje się też globalnie dostępny i widoczny dla całej sieci blockchain. Kontrakt otrzymuje unikalny adres w sieci blockchain. Znając ten adres mamy możliwość interakcji z tym kontraktem, tj. uruchamiania jego funkcji, które mogą np. zapisać nowe dane do blockchaina lub odczytać istniejące (wcześniej zapisane przez kontrakt). W zależności od zabezpieczeń kontraktu (programujemy je), inni użytkownicy blockchaina, a nawet inne kontrakty mogą prowadzić interakcję z naszym kontraktem. Podsumowując: idea jest prosta – kontrakty w Ethereum to programy istniejące w blockchainie.
🔴 Kontrakty w Cardano nie są pojedynczymi programami ładowanymi do blockchaina, dostępnymi pod określonym adresem. W Cardano zapisujemy do blockchaina małe bloczki (w postaci EUTXO), które reprezentują albo dane, albo logikę/reguły użycia/prawa własności do tych danych. Wywołanie smart contractu, polega na zapisie w blockchain transakcji, w której wskażemy istniejące w blockchain bloczki z danymi (EUTXO), bloczki z regułami ich przetworzenia (script EUTXO) oraz dane “odblokowujące” istniejące bloczki z danymi. Dane “odblokowujące” dostarczone w transakcji, odblokowują bloczki z danymi (i pozwalają zapisać nowe w blockchain) tylko, jeśli pasują (odblokowują) do bloczków z regułami. Ta separacja danych od reguł, zapis małych, niezależnych bloczków w blockchain (EUTXO) i idea “odblokowywania” to właśnie Cardano.
🔴 Plutus, czyli smart contracty w Cardano. Oto podstawy tworzenia rozwiązań web3 na Cardano 💬👇
🔴 Plutus to platforma smart contractów w Cardano. Termin dość szeroki, ponieważ nazwa “Plutus” jest przez Cardano częścią kilku ważnych produktów/technologii Cardano m.in. Plutus Core i Plutus Framework.
🔴 Rozwiązania web3 dla Cardano tworzymy w Haskellu. Kod programu kompilowany (trudne słowo) jest do Plutus Core, który jest “językiem” rozumianym przez Cardano blockchain. Z perspektywy użytkownika, programisty – o Plutus Core tylko warto wiedzieć, używamy Haskella 😉
🔴 Aplikacje web3 dla Cardano mają inną architekturę niż aplikacje dla Ethereum. W web3 Ethereum istnieje smart contract załadowany do sieci oraz klient (np. przeglądarka użytkownika), która prowadzi interakcję z tym kontraktem. W Cardano istnieje klient, aplikacja backendowa oraz kod z danymi (smart contarct) zapisane w blockchain.
🔴 Aplikację backendowa w Cardano, można stworzyć używając Plutus Framework, oficjalnego frameworka Cardano. Umożliwi nam w prosty sposób zaprogramować ramy aplikacji backendowej, która pozwoli na interakcję z klientem oraz da mu możliwość konstruowania danych i kontraktów zapisywanych do blockchain.
🔴 W Cardano smart contract, jako część tzw. kodu on-chain, przetwarzanego przez węzły blockchain jest bardzo mała. To odróżnia Cardano od innych blockchainów. Kod on-chain to prosty warunek, który po dostarczeniu w transakcji: danych wejściowych (EUTXO reprezentujących dane na blockchain) i danych odblokowujących EUTXO wejściowe, ma zdecydować, czy dane wejściowe faktycznie można odblokować. W Cardano kod on-chain nazywamy “validator script”, dane wejściowe EUTXO nazywamy “datum”, a dane odblokowujące to “reedemer”. Jeśli validator script sprawdzi, że reedemer pasuje do datum, wtedy przetworzenie “smart contractu” jest poprawne i można zapisać nowe dane do blockchain (jako rezultat przetworzenia smart contractu).
🔴 W Cardano ważną częścią aplikacji web3 jest część backendowa/serwerowa, uruchamiana przez dostawcę rozwiązania web3. Chociaż nie ma ona możliwości ingerencji w poprawność przetworzenia, to jednak… jest potrzebna i musi działać, aby całość funkcjonowała. Inaczej niż w Ethereum… Tam wystarczy użytkownik i blockchain. W działającym rozwiązaniu web3 Cardano – potrzebna jest też część backendowa.
🔴 Czy model programowania w Cardano ze względu na backendową część jest… scentralizowany? Poruszę ten temat w kolejnym wpisie.