Uważaj na niemożliwy inteligentny kontrakt

Węzeł źródłowy: 1576899

Trzy najczęstsze nieporozumienia dotyczące inteligentnych kontraktów

Jako twórcy popularnej platformy blockchain czasami jesteśmy pytani, czy inteligentne kontrakty podobne do Ethereum są dostępne MultiChain mapa drogowa. Zawsze udzielam odpowiedzi: nie, a przynajmniej jeszcze nie.

Ale w wypełnionym szumem świecie blockchainów inteligentne kontrakty są modne, więc dlaczego nie? Cóż, problem polega na tym, że chociaż znamy obecnie trzy mocne przypadki użycia dozwolonych łańcuchów bloków w stylu Bitcoin (pochodzenie, zapisy międzyfirmowe i lekkie finansowanie), nie znaleźliśmy jeszcze odpowiednika dla inteligentnych kontraktów w stylu Ethereum.

Nie chodzi o to, że ludziom brakuje pomysłów na to, czego chcą, aby inteligentne kontrakty robiły. Raczej chodzi o to, że tak wiele z tych pomysłów są po prostu niemożliwe. Widzisz, kiedy mądrzy ludzie słyszą termin „inteligentne kontrakty”, ich wyobraźnia ma tendencję do szaleństwa. Wyczarowują marzenia o autonomicznym inteligentnym oprogramowaniu, wyruszającym w świat, zabierając ze sobą jego dane na przejażdżkę.

Niestety rzeczywistość inteligentnych kontraktów jest znacznie bardziej przyziemna niż to wszystko:

Inteligentna umowa to fragment kodu, który jest przechowywany w łańcuchu bloków, uruchamiany przez transakcje łańcucha bloków i który odczytuje i zapisuje dane w bazie danych tego łańcucha bloków.

Otóż ​​to. Naprawdę. Inteligentna umowa to tylko wymyślna nazwa kodu, który działa w łańcuchu bloków i współdziała ze stanem tego łańcucha. I co is kod? To Pascal, to Python, to PHP. To Java, to Fortran, to C++. Jeśli mówimy o bazach danych, to procedury składowane napisany w rozszerzeniu SQL. Wszystkie te języki są zasadniczo równoważne, rozwiązując te same rodzaje problemów na te same sposoby. Oczywiście każdy ma swoje mocne i słabe strony – szaleństwem byłoby zbudowanie strony internetowej w C lub skompresowanie wideo HD w Ruby. Ale przynajmniej w zasadzie mógłbyś, gdybyś chciał. Po prostu zapłaciłbyś wysoką cenę pod względem wygody, wydajności i prawdopodobnie włosów.

Problem z inteligentnymi kontraktami nie polega tylko na tym, że oczekiwania ludzi są przesadzone. Chodzi o to, że te oczekiwania skłaniają wielu do poświęcania czasu i pieniędzy na pomysły, których nie da się wdrożyć. Wygląda na to, że duże firmy mają wystarczające zasoby, aby przebyć długą drogę – od momentu, gdy kierownictwo wyższego szczebla napotyka nową technologię, do momentu, gdy jej zalety i ograniczenia są naprawdę zrozumiane. Być może nasze własne doświadczenia pomogą skrócić ten czas.

W ciągu ostatnich dziewięciu miesięcy byliśmy informowani o wielu przypadkach użycia inteligentnych kontraktów i wielokrotnie odpowiadaliśmy, że po prostu nie da się tego zrobić. W rezultacie zidentyfikowaliśmy trzy najczęściej spotykane błędne koncepcje dotyczące inteligentnych kontraktów. Te pomysły nie są błędne, ponieważ technologia jest niedojrzała lub narzędzia nie są jeszcze dostępne. Raczej źle rozumieją podstawowe właściwości kodu, który żyje w bazie danych i działa w sposób zdecentralizowany.

Kontakt z usługami zewnętrznymi

Często pierwszym proponowanym przypadkiem użycia jest inteligentny kontrakt, który zmienia swoje zachowanie w odpowiedzi na jakieś zdarzenie zewnętrzne. Np. polisa rolna, która wypłacana jest warunkowo na podstawie ilości opadów w danym miesiącu. Wyobrażony proces przebiega mniej więcej tak: inteligentny kontrakt czeka do określonego z góry czasu, pobiera raport pogodowy z usługi zewnętrznej i zachowuje się odpowiednio na podstawie otrzymanych danych.

To wszystko brzmi dość prosto, ale jest też niemożliwe. Czemu? Ponieważ blockchain jest systemem opartym na konsensusie, co oznacza, że ​​działa tylko wtedy, gdy każdy węzeł osiąga identyczny stan po przetworzeniu każdej transakcji i bloku. Wszystko, co dzieje się na blockchainie, musi być całkowicie deterministyczne, bez możliwości wkradnięcia się różnic. W momencie, gdy dwa uczciwe węzły nie zgadzają się co do stanu łańcucha, cały system staje się bezwartościowy.

Przypomnijmy teraz, że inteligentne kontrakty są wykonywane niezależnie przez każdy węzeł w łańcuchu. W związku z tym, jeśli inteligentny kontrakt pobiera pewne informacje z zewnętrznego źródła, to pobieranie jest wykonywane wielokrotnie i osobno przez każdy węzeł. Ale ponieważ to źródło znajduje się poza łańcuchem bloków, nie ma gwarancji, że każdy węzeł otrzyma tę samą odpowiedź. Być może źródło zmieni swoją odpowiedź w czasie pomiędzy żądaniami z różnych węzłów, a może stanie się chwilowo niedostępne. Tak czy inaczej, konsensus zostaje zerwany i cały blockchain umiera.

Więc jakie jest obejście? Właściwie to dość proste. Zamiast inteligentnej umowy inicjującej pobieranie danych zewnętrznych, jedna lub więcej zaufanych stron („wyroczni”) tworzy transakcję, która osadza te dane w łańcuchu. Każdy węzeł będzie miał identyczną kopię tych danych, dzięki czemu można je bezpiecznie wykorzystać w obliczeniach inteligentnego kontraktu. Innymi słowy, wyrocznia wypycha dane w łańcuchu bloków, a nie w inteligentnym kontrakcie ciągnięcie to w.

Podobny problem pojawia się w przypadku inteligentnych kontraktów powodujących zdarzenia w świecie zewnętrznym. Na przykład wielu podoba się pomysł inteligentnego kontraktu, który wywołuje bankowe API w celu przesłania pieniędzy. Ale jeśli każdy węzeł samodzielnie wykonuje kod w łańcuchu, kto jest odpowiedzialny za wywołanie tego API? Jeśli odpowiedzią jest tylko jeden węzeł, co się stanie, jeśli ten konkretny węzeł będzie działał nieprawidłowo, celowo lub nie? A jeśli odpowiedzią jest każdy węzeł, czy możemy zaufać każdemu węzłowi z hasłem tego interfejsu API? I czy naprawdę chcemy, aby API było wywoływane setki razy? Co gorsza, jeśli inteligentny kontrakt musi wiedzieć, czy wywołanie API powiodło się, wracamy do problemu zależności od danych zewnętrznych.

Jak poprzednio, dostępne jest proste obejście. Zamiast inteligentnego kontraktu wywołującego zewnętrzny interfejs API, korzystamy z zaufanej usługi, która monitoruje stan łańcucha bloków i w odpowiedzi wykonuje określone działania. Na przykład bank może proaktywnie obserwować łańcuch bloków i wykonywać przelewy pieniężne, które odzwierciedlają transakcje w łańcuchu. Nie stanowi to zagrożenia dla konsensusu łańcucha bloków, ponieważ łańcuch odgrywa całkowicie pasywną rolę.

Patrząc na te dwa obejścia, możemy poczynić pewne obserwacje. Po pierwsze, oba wymagają zaufanego podmiotu do zarządzania interakcjami między blockchainem a światem zewnętrznym. Chociaż jest to technicznie możliwe, podważa cel zdecentralizowanego systemu. Po drugie, mechanizmy zastosowane w tych obejściach są prostymi przykładami czytanie i pisanie bazy danych. Wyrocznia dostarczająca informacji zewnętrznych po prostu zapisuje te informacje w łańcuchu. A usługa, która odzwierciedla stan łańcucha bloków w rzeczywistym świecie, nie robi nic poza odczytywaniem z tego łańcucha. Innymi słowy, jakakolwiek interakcja między blockchainem a światem zewnętrznym jest ograniczona do zwykłych operacji na bazie danych. Porozmawiamy o tym fakcie później.

Egzekwowanie płatności on-chain

Oto kolejna propozycja, o której często słyszymy: wykorzystanie inteligentnego kontraktu do automatyzacji wypłaty kuponów za tak zwaną „inteligentną obligację”. Pomysł polega na tym, aby kod inteligentnej umowy automatycznie inicjował płatności w odpowiednim czasie, unikając procesów ręcznych i gwarantując, że wystawca nie będzie mógł dotrzymać zobowiązań.

Oczywiście, aby to zadziałało, środki użyte do dokonania płatności muszą również znajdować się w łańcuchu bloków, w przeciwnym razie inteligentna umowa nie może zagwarantować ich płatności. Przypomnijmy teraz, że blockchain to tylko baza danych, w tym przypadku księga finansowa zawierająca wyemitowane obligacje i trochę gotówki. Kiedy więc mówimy o płatnościach kuponowych, tak naprawdę mówimy o operacjach bazodanowych, które odbywają się automatycznie w uzgodnionym czasie.

Chociaż ta automatyzacja jest technicznie wykonalna, napotyka na trudności finansowe. Jeśli środki wykorzystywane do płatności kuponowych są kontrolowane przez inteligentny kontrakt obligacji, wówczas płatności te mogą być rzeczywiście gwarantowane. Ale to też oznacza te fundusze nie mogą być wykorzystane przez emitenta obligacji do niczego innego. A jeśli te fundusze nie są pod kontrolą inteligentnego kontraktu, to nie ma możliwości zagwarantowania płatności.

Innymi słowy, obligacja inteligentna jest albo bezcelowa dla emitenta, albo dla inwestora. A jeśli się nad tym zastanowić, jest to całkowicie oczywisty wynik. Z punktu widzenia inwestora istotą obligacji jest jej atrakcyjna stopa zwrotu, kosztem pewnego ryzyka niewypłacalności. A dla emitenta celem obligacji jest pozyskanie środków na produktywną, ale nieco ryzykowną działalność, taką jak budowa nowej fabryki. Emitent obligacji nie ma możliwości wykorzystania pozyskanych środków, jednocześnie gwarantując inwestorowi spłatę. Nie powinno dziwić, że związek między ryzykiem a zwrotem nie jest problemem, który może rozwiązać blockchain.

Ukrywanie poufnych danych

Jak ja pisałem o tym wcześniej, największym wyzwaniem we wdrażaniu łańcuchów bloków jest radykalna przejrzystość, jaką zapewniają. Na przykład, jeśli dziesięć banków utworzy razem łańcuch bloków, a dwa przeprowadzają transakcję dwustronną, będzie to natychmiast widoczne dla pozostałych ośmiu. Chociaż istnieją różne strategie łagodzenia tego problemu, żadna nie przebije prostoty i wydajności scentralizowanej bazy danych, w której zaufany administrator ma pełną kontrolę nad tym, kto może zobaczyć co.

Niektórzy uważają, że inteligentne kontrakty mogą rozwiązać ten problem. Zaczynają od tego, że każda inteligentna umowa zawiera swoją miniaturową bazę danych, nad którą ma pełną kontrolę. Wszystkie operacje odczytu i zapisu w tej bazie danych odbywają się za pośrednictwem kodu umowy, co uniemożliwia bezpośredni odczyt danych innej umowy przez jedną umowę. (To ścisłe sprzężenie danych i kodu nazywa się enkapsulacją i jest podstawą popularnego programowanie obiektowe paradygmat.)

Więc jeśli jedna inteligentna umowa nie może uzyskać dostępu do danych innego, czy rozwiązaliśmy problem poufności blockchain? Czy jest sens mówić o ukrywaniu informacji w inteligentnym kontrakcie? Niestety odpowiedź brzmi nie. Ponieważ nawet jeśli jeden inteligentny kontrakt nie może odczytać danych innego, dane te są nadal przechowywane w każdym węźle w łańcuchu. Dla każdego uczestnika blockchain znajduje się on w pamięci lub na dysku system, który ten uczestnik całkowicie kontroluje. I nic nie stoi na przeszkodzie, by czytali informacje z ich własnego systemu, jeśli i kiedy zdecydują się to zrobić.

Ukrywanie danych w inteligentnej umowie jest mniej więcej tak bezpieczne, jak ukrywanie ich w kodzie HTML strony internetowej. Jasne, zwykli użytkownicy internetu go nie zobaczą, ponieważ nie jest wyświetlany w oknie przeglądarki. Ale wystarczy, że przeglądarka internetowa doda funkcję „Wyświetl źródło” (tak jak wszyscy), a ukryte informacje stają się powszechnie widoczne. Podobnie w przypadku danych ukrytych w inteligentnych kontraktach wystarczy, że ktoś zmodyfikuje swoje oprogramowanie blockchain, aby wyświetlić pełny stan umowy, a wszelkie pozory tajemnicy zostaną utracone. W połowie przyzwoity programista mógłby to zrobić w mniej więcej godzinę.

Do czego służą inteligentne kontrakty

Przy tak wielu rzeczach, których inteligentne kontrakty nie mogą zrobić, można by zapytać, do czego właściwie służą. Aby jednak odpowiedzieć na to pytanie, musimy wrócić do podstaw samych blockchainów. Podsumowując, blockchain umożliwia bezpośrednie i bezpieczne udostępnianie bazy danych podmiotom, które nie ufają sobie nawzajem, bez konieczności posiadania centralnego administratora. Łańcuchy bloków umożliwiają pośredniczenie w danych, co może prowadzić do znacznych oszczędności w zakresie złożoności i kosztów.

Każda baza danych jest modyfikowana poprzez „transakcje”, które zawierają zestaw zmian w tej bazie danych, które muszą się powieść lub zakończyć jako całość. Na przykład w księdze finansowej płatność Alicji dla Boba jest reprezentowana przez transakcję, która (a) sprawdza, czy Alicja ma wystarczające środki, (b) odejmuje ilość z konta Alicji i (c) dodaje tę samą ilość do konta Boba .

W zwykłej scentralizowanej bazie danych transakcje te są tworzone przez jeden zaufany organ. W przeciwieństwie do tego, we współdzielonej bazie danych opartej na blockchain, transakcje mogą być tworzone przez dowolnego użytkownika tego blockchaina. A ponieważ ci użytkownicy nie mają do siebie pełnego zaufania, baza danych musi zawierać reguły ograniczające dokonywane transakcje. Na przykład w księdze finansowej typu peer-to-peer każda transakcja musi zachować całkowitą ilość środków, w przeciwnym razie uczestnicy mogliby swobodnie przekazywać sobie tyle pieniędzy, ile chcieli.

Można sobie wyobrazić różne sposoby wyrażania tych zasad, ale na razie istnieją dwa dominujące paradygmaty, inspirowane odpowiednio Bitcoinem i Ethereum. Metoda Bitcoin, którą możemy nazwać „ograniczeniami transakcji”, ocenia każdą transakcję pod kątem: (a) wpisów w bazie danych usuniętych przez tę transakcję oraz (b) utworzonych wpisów. W księdze finansowej reguła stwierdza, że ​​całkowita ilość środków w usuniętych wpisach musi odpowiadać sumie w tych utworzonych. (Uważamy, że modyfikacja istniejącego wpisu jest równoznaczna z usunięciem tego wpisu i utworzeniem nowego w jego miejsce).

Drugi paradygmat, wywodzący się z Ethereum, to inteligentne kontrakty. Oznacza to, że wszystkie modyfikacje danych kontraktu muszą być wykonywane przez jego kod. (W kontekście tradycyjnych baz danych możemy myśleć o tym jako o egzekwowane procedura składowana.) Aby zmodyfikować dane umowy, użytkownicy blockchain wysyłają wywołań do swojego kodu, który określa, czy i jak spełnić te żądania. Jak w ten przykład, inteligentny kontrakt dla księgi finansowej wykonuje te same trzy zadania, co administrator scentralizowanej bazy danych: sprawdzanie wystarczających środków, odliczanie z jednego konta i dodawanie do drugiego.

Oba te paradygmaty są skuteczne, a każdy ma swoje wady i zalety, tak jak ja szczegółowo omówione wcześniej. Podsumowując, ograniczenia transakcji w stylu Bitcoin zapewniają doskonałą współbieżność i wydajność, podczas gdy inteligentne kontrakty w stylu Ethereum oferują większą elastyczność. Wracając więc do pytania, do czego służą inteligentne kontrakty:

Inteligentne kontrakty są przeznaczone do przypadków użycia blockchain, których nie można zaimplementować z ograniczeniami transakcji.

Biorąc pod uwagę to kryterium korzystania z inteligentnych kontraktów, nie widzę jeszcze mocnego przypadku użycia dla dozwolonych łańcuchów bloków, który się kwalifikuje. Wszystkie fascynujące aplikacje blockchain, jakie znam, można zaimplementować za pomocą transakcji w stylu Bitcoin, które mogą obsługiwać wydawanie pozwoleń i ogólne przechowywanie danych, a także tworzenie, przesyłanie, escrow, wymianę i niszczenie aktywów. Niemniej jednak wciąż pojawiają się nowe przypadki użycia i nie zdziwiłbym się, gdyby niektóre do wymagają mocy inteligentnych kontraktów. Lub przynajmniej rozszerzenie paradygmatu Bitcoin.

Jakakolwiek okaże się odpowiedź, kluczem do zapamiętania jest to, że inteligentne kontrakty to po prostu jedna z metod ograniczania transakcji wykonywanych w bazie danych. Jest to niewątpliwie przydatna rzecz i jest niezbędna, aby ta baza danych była bezpieczna do udostępniania. Ale inteligentne kontrakty nie mogą zrobić nic innego, a już na pewno nie mogą uciec od granic bazy danych, w której się znajdują.

Prosimy o umieszczanie komentarzy na LinkedIn.

Znak czasu:

Więcej z Multichain