Smart kontrakty – wzajemne zobowiązania na blockchainie

Przemek/ 11 lipca, 2022

Bitcoin daje nam możliwość dokonywania bezpiecznych i przejrzystych transferów. Gdyby ta technologia miała jedynie ograniczać się do tego, byłoby to wielkie marnotrawstwo. Na szczęście zdecentralizowany świat pozwala nam na wiele więcej, a osiągnąć to możemy przy pomocy smart kontraktów. W dzisiejszym wpisie opowiem, z jakim problemem możemy sobie poradzić dzięki nim. Będzie także o różnicach w stosunku do tradycyjnego tworzenia kodu i o tym, czym różni się adres smart kontraktu, od tego, który posiadają użytkownicy.

Nie każdy blockchain potrafi to samo

Rysunek 1. Takie same, a jednak inne
(źródło: https://hedgenordic.com/2018/10/alternative-risk-premia-versus-smart-beta-same-same-but-different/)

Zanim przejdę do technikaliów, warto wspomnieć, że sama idea smart kontraktów nie jest nowa. Koncepcja “inteligentnych umów” została opisana w latach ‘90. Zaprezentował ją Nick Szabo w 1997 roku. To podobnie jak z pomysłem na blockchain, który powstał już kilkadziesiąt lat temu. 

Chociaż samo zagadnienie było poruszone na długo przed wystartowaniem pierwszego blockchaina, którym jest Bitcoin, smart kontrakty nie zostały w nim zaimplementowane. Dopiero z czasem powstały rozwiązania, które umożliwiły wykorzystanie tej technologii. Z tego powodu blockchainy możemy podzielić na trzy generacje.

Rozwiązania oparte o pierwszą generację, której głównym reprezentantem jest Bitcoin, służą przede wszystkim do przesyłania wartości i przechowywania danych o obecnym stanie sieci. Oparte są o algorytm konsensusu Proof of Work. Innymi przykładowymi blockchainami tego typu są Monero oraz Litecoin.

Następnie przyszedł wielki przełom i powstało pierwsze rozwiązanie, później określone jako blockchain drugiej generacji, a mianowicie Ethereum. W odróżnieniu do poprzednich sieci ta pierwszy raz w historii pozwalała na tworzenie smart kontraktów. Ostatecznie przełożyło się to na powstanie wielu dappsów (decentralized applications) i rozwój nowej działki w świecie IT, jaką jest Web 3.0. Jako mechanizm konsensusu wciąż był używany PoW.

Po jakimś czasie nadeszła trzecia generacja blockchainów, a główną zmianą było przejście na algorytm Proof of Stake. Pozwoliło to na tworzenie coraz bardziej wydajnych rozwiązań. Bardzo istotną sprawą stała się też interoperacyjność pomiędzy różnymi blockchainami. Typowym przedstawicielem tej grupy blockchainów jest Polkadot.

Czasami można spotkać się jeszcze z terminem mówiącym o Blockchainie 4.0, a rozwiązania w nim zawarte miałyby korzystać również ze sztucznej inteligencji. Jest to raczej jedynie ciekawostka, a nie coś, co obecnie można znaleźć na rynku.

Prawdę powiedziawszy, to powyższy podział jest dosyć umowny. W różnych źródłach możesz znaleźć nieco inną klasyfikację. Jednak najważniejsze jest to, by mieć świadomość, że nie każdy blockchain ma te same możliwości.

Załóżmy się

Żeby lepiej zrozumieć, w czym mogą pomóc nam smart kontrakty, przeanalizujmy następujący przykład. Powiedzmy, że chcesz założyć się ze swoim znajomym. On jest wielkim fanem Realu Madryt, Ty zaś kibicujesz Barcelonie. Akurat odbywa się El Clásico, więc jest to idealny moment na taką rozrywkę. Decydujecie się wyłożyć po 1000 zł na stół i wygrany zgarnia wszystko. Ponieważ jesteście bardzo dobrymi przyjaciółmi, to możecie sobie zaufać i mieć pewność, że w razie przegranej, druga strona się nie wycofa. Co jednak w momencie, gdy taki zakład miałby być zawarty z przypadkową osobą?

W takiej sytuacji potrzebna by była trzecia strona, która pełniłaby rolę arbitra i w momencie zakończenia meczu przekazałaby pieniądze wygranemu. Pojawia się tu jednak jeden wielki problem związany z zaufaniem. Skąd możesz wiedzieć, że taka osoba nie jest podstawiona? Nawet jeśli wspólnie ją wybraliście, to ostatecznie może się okazać, że ucieknie ona z Waszymi pieniędzmi. 

Rzeczy, które mogą pójść źle,jest naprawdę sporo, a mówimy tutaj jedynie o prostej czynności. Oczywiście istnieją systemy bukmacherskie, przy pomocy których możesz dokonywać takich zakładów. Działają one dobrze, ale niestety tylko w teorii. Nie raz już się zdarzyło, że bukmacher nie uznał wygranej lub zmienił zasady w trakcie gry. Taka sytuacja może zdarzyć się w branży ubezpieczeniowej, w bankach, sklepach internetowych. To wszystko tylko przykłady miejsc, w których od czasu do czasu dochodzi do różnego rodzaju “nieporozumień”. Niestety bardzo często zwykły człowiek na przegranej pozycji, jeśli spróbuje walczyć z wielką instytucją.

A co, gdyby można było stworzyć takie oprogramowanie, którego działanie będzie dla wszystkich przejrzyste i wyeliminuje możliwość oszustwa? 

Cyfrowe umowy na blockchainie

Rysunek 3. Umowa
(źródło: Designed by macrovector / Freepik)

Teraz mogę wreszcie zabrać się za szczegóły i wytłumaczyć, czym tak naprawdę są smart kontrakty. Dodam tylko, że omawiany temat oparty jest o rozwiązania bazujące na Ethereum Virtual Machine (EVM). W przypadku innych blockchainów niektóre technikalia mogą się różnić, jednak sama idea jest wszędzie identyczna. 

Gdybym miał jednym zdaniem opisać, czym są smart kontrakty, to powiedziałbym, że są to aplikacje, umieszczone i działające na blockchainie, których zadaniem jest wypełnianie wzajemnych zobowiązań. Innymi słowy smart kontrakt to program, który zawsze działa według wcześniej ustalonych, niezmiennych reguł.

Ponieważ smart kontrakt “żyje” na blockchainie, to ma takżejego cechy. Po pierwsze jest rozproszony na całą sieć. Oznacza to, że wykonanie kodu danego smart kontraktu nie zależy od widzimisię pojedynczego dostawcy. Stąd mamy pewność, że stworzona przez nas aplikacja zadziała zawsze, jeśli tylko zapisane w niej warunki zostaną spełnione.

Kolejną niezmiernie istotną cechą odróżniającą pisanie tego typu kodu od standardowego podejścia, jest niezmienność (ang. immutable) samego kontraktu. Oznacza to, że raz wrzuconego smart kontraktu nie da się nigdy zmienić. Z tego powodu użytkownik może mieć pewność, że reguły gry nigdy się nie zmienią i twórca aplikacji nie będzie w stanie ich modyfikować. 

Może Ci się od razu pojawić tutaj pytanie, co zrobić, jeśli w kodzie będzie błąd? Skoro nie mogę zmienić kodu, to problem pozostanie tam na zawsze. Mam nadzieję, że nie przerazisz się, jeśli powiem Ci, że masz rację. Z jednej strony jest to faktycznie ogromna zaleta, z drugiej może być to wielki problemem. Ponieważ nie możesz zmienić wcześniejszego kodu, jednym z rozwiązań jest stworzenie nowego kontraktu, a następnie poinformowanie ludzi o zmianach. Może to być problematyczne, szczególnie jeśli Twoja aplikacja używana jest przez setki tysięcy osób, jednak takie sytuacje zdarzały się nawet w dużych protokołach. Na szczęście istnieją również bardziej wyrafinowane metody radzenia sobie z takimi przypadkami, ale o nich porozmawiamy kiedy indziej :).

Tak samo, jak każda transakcja na blockchainie może być przejrzana przez dowolną osobę, również kod Twojego smart kontraktu jest dostępny publicznie. Jeśli chcesz się o tym przekonać, możesz zajrzeć tutaj

Dzięki temu, nawet jeśli ktoś stworzyłby kontrakt, którego działanie mogłoby spowodować straty u użytkownika, to zawsze przed wykonaniem transakcji możemy przejrzeć kod i stwierdzić, co tak naprawdę się w nim dzieje. Wymaga to oczywiście znajomości języka i kilku dodatkowych zagadnień, ponieważ istnieją sposoby, które mogą zmylić weryfikatora. Jednak często sama świadomość tego, że ktoś może sprawdzić niecne zamiary, wystarcza do odstraszenia oszustów.

W odróżnieniu od standardowych aplikacji, gdzie scentralizowana firma decyduje, co takiego może się wydarzyć, w przypadku smart kontraktów możemy powiedzieć, że kod mówi o wszystkim (“code is law”). Dlatego nie występuje tutaj potrzeba dodatkowego zaufania trzeciej stronie.

Przedstawione powyżej cechy powodują, że dowolny smart kontrakt wykona się automatycznie i w deterministyczny sposób. Jednak automatyzacja nie dotyczy samoistnego wywołania funkcji, jak mogłoby się wydawać.

Nic nie dzieje się samo z siebie

Jeżeli chcesz, by podczas tworzenia tradycyjnych rozwiązań, jakaś akcja działa się automatycznie i cyklicznie, możesz stworzyć odpowiadający za tę funkcję mechanizm. Oznacza to de facto, że każda czynność może być zainicjalizowana przez samą aplikację. W przypadku smart kontraktów sprawa wygląda nieco inaczej, ale zanim ją opiszę, musisz dowiedzieć się o jeszcze jednej rzeczy.

Jak wiesz, każdy użytkownik blockchaina ma swój adres, który w niektórych przypadkach jest równocześnie kluczem publicznym. Służy on do “identyfikowania” użytkownika oraz powiązania z nim stanu na blockchainie. Konta takie nazywane są Externally Owned Accounts (EOAs). Jednak również smart kontrakty posiadają swój adres i noszą one nazwę, jakże oryginalną, contract account.

Każde z wymienionych kont zawiera informację o ilości ethera lub innej natywnej kryptowalucie, jaka jest z nim powiązana. Posiada również pewne dane w polu o nazwie “nonce”. Mimo identycznej nazwy, jak w przypadku jednej z metadanych bloku, nonce jest tutaj zupełnie czymś innym. Wartość ta mówi o liczbie transakcji, które zostały wykonane z użyciem konkretnego adresu. Dzięki temu, nie ma możliwości, aby jakiekolwiek konto wykonało dwa razy dokładnie tę samą transakcję.

Adres smart kontraktu powiązany jest również z kodem, który został w nim umieszczony. W EAO również znajdziemy takie pole, ale będzie one po prostu puste. Kolejną różnicą jest to, że EAO jest kontrolowane przez klucz prywatny, co pozwala właścicielowi na dokonywanie różnego rodzaju transakcji i jedynie taki rodzaj kont może zainicjować jakąkolwiek akcję na blockchainie. Adresy smart kontraktów nie mają przypisanego klucza prywatnego, dlatego nie mogą rozpoczynać same z siebie żadnej akcji. Nic nie stoi jednak na przeszkodzie, aby jeden smart kontrakt wywołał funkcję drugiego, ten trzeciego itd., jednak cały łańcuch zdarzeń musi zostać zainicjowany przez EOA.

Możemy stworzyć oprogramowanie poza blockchainem, które będzie odpowiadało za cykliczne wywoływanie funkcji smart kontraktów, ale będziemy musieli dostarczyć do niego klucz prywatny, co de facto uczyni go kolejnym EOA. Istnieje nawet gotowe rozwiązanie tego typu, które robi to w sposób zdecentralizowany. Mechanizm oparty jest o blockchain Chainlink i nosi nazwę Chainlink Keepers.

Już niedługo stworzymy wspólnie pierwszy smart kontrakt, który umieścimy na testowej sieci Ethereum. Jednak zanim do tego dojdzie, musisz dowiedzieć się nieco więcej o samych portfelach, dlatego tym zajmiemy się kolejnym razem 🙂

Share this Post
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments