Kontrakty Ethereum Oracle: czy możemy zaufać Oracle?

Opublikowany: 2022-03-11

Ten artykuł jest ostatnią częścią trzyczęściowej serii poświęconej wykorzystaniu kontraktów wyroczni Ethereum.

  • Część pierwsza była wprowadzeniem do konfigurowania, uruchamiania i testowania kodu za pomocą frameworka truffle.
  • W części drugiej przyjrzeliśmy się trochę kodowi i wykorzystaliśmy go jako punkt wyjścia do dyskusji na temat niektórych funkcji kodu i projektowania Solidity.

Teraz w tej końcowej części chciałbym zadać pytania: co właśnie zrobiliśmy i dlaczego? I postaraj się podać kilka, miejmy nadzieję, prowokujących myśli do myślenia. Jury nadal bardzo się zastanawia, w jaki sposób użycie wyroczni odnosi się do braku zaufania i co słowo „nieufność” w odniesieniu do blockchaina tak naprawdę oznacza w rzeczywistym świecie. Gdy niektóre z tych pomysłów przeniesiemy z ich konceptualnej formy do praktycznego zastosowania, będziemy zmuszeni zmagać się z takimi pytaniami i pogodzić się z nimi. Więc zacznijmy.

Podsumowanie: Dlaczego potrzebujemy wyroczni Ethereum?

To dociera do samego sedna natury wykonywania kodu w łańcuchu bloków. Aby spełnić wymagania niezmienności i determinizmu oraz jako artefakt sposobu, w jaki kod jest faktycznie wykonywany przez węzły w łańcuchu, inteligentny kontrakt nie jest w stanie bezpośrednio wyjść poza łańcuch bloków, aby zrobić cokolwiek.

Dla większości programistów fakt ten wprowadza bardzo nienaturalny sposób myślenia. Jeśli potrzebujemy skądś danych, zwykle po prostu łączymy się z nimi gdzieś i wyciągamy je. Inteligentna umowa, która potrzebuje danych z prognozy pogody? Wystarczy połączyć się z kanałem pogody. Ale nie; smart kontrakt blockchain absolutnie nie może tego zrobić; jeśli jakieś dane nie znajdują się już w łańcuchu bloków, kod kontraktu nie ma do nich dostępu w momencie wykonania. Zatem rozwiązaniem jest posiadanie potrzebnych danych na łańcuchu bloków już w momencie zawierania umowy. Wymaga to zewnętrznych maszyn, które zamiast wciągać dane do łańcucha, wypychają dane do łańcucha, w szczególności do wykorzystania przez inne umowy. Ta zewnętrzna maszyneria jest wyrocznią. Dane wrzucone do łańcucha są umieszczane w kontrakcie z wyrocznią, która prawdopodobnie zawiera postanowienia dotyczące udostępniania ich innym kontraktom. Przykładem takiej konfiguracji jest dokładnie to, co zbudowaliśmy i zbadaliśmy w poprzednich dwóch częściach tej trylogii artykułów.

Ilustracja wyroczni Ethereum

Rażące dziury bezpieczeństwa

Dla mnie centralną kwestią związaną z wszystkimi publicznymi blockchainami jest słowo na T: zaufanie. W najczystszej postaci to, co te systemy robią, to gwarancja (nie ma doskonałej gwarancji na tym świecie, ale tak blisko, jak to możliwe), że nie musimy ślepo ufać żadnym stronom. Wnikliwy czytelnik mógł już zakwestionować niektóre z rażących luk w zabezpieczeniach w przykładzie Zakładów bokserskich. Chciałbym skoncentrować się na tych, które będą najważniejsze w naszej dyskusji o braku zaufania i jego związku z użyciem wyroczni z inteligentnymi kontraktami.

1. Właściciel/opiekun umowy bukmacherskiej może być skorumpowany

Począwszy od linii 58 BoxingBets.sol mamy następującą funkcję:

 /// @notice sets the address of the boxing oracle contract to use /// @dev setting a wrong address may result in false return value, or error /// @param _oracleAddress the address of the boxing oracle /// @return true if connection to the new oracle address was successful function setOracleAddress(address _oracleAddress) external onlyOwner returns (bool) { boxingOracleAddr = _oracleAddress; boxingOracle = OracleInterface(boxingOracleAddr); return boxingOracle.testConnection(); }

Powinno być całkiem jasne, na co to pozwala. Właściciel kontraktu (i tylko właściciel kontraktu) może w dowolnym momencie i bez żadnych ograniczeń zmienić wyrocznię używaną do obsługi meczów bokserskich i wyłonić zwycięzców. Dlaczego to jest problemem? Jeśli nie jest to już dla Ciebie oczywiste, pozwala to właścicielowi umowy na celowe nadużywanie umowy dla własnego zysku.

Przykład: W następnym meczu bokserskim Soda Popiński kontra Glass Joe. Soda jest zdecydowanym faworytem z szerokim marginesem. Wszyscy stawiają na napoje gazowane. Mnóstwo pieniędzy jeździ na tym. Ja, właściciel kontraktu, decyduję się na szybki. Tuż przed rozstrzygnięciem meczu zmieniam wyrocznię na własną złośliwą, która jest identyczna z oficjalną wyrocznią, z tą różnicą, że na sztywno można ogłosić Glassa Joe jako zwycięzcę. Oświadcza Glass Joe, że zarabiam wszystkie pieniądze i nikt nie może mnie powstrzymać. Po tym może nikt już nie będzie ufał mojej umowie, ale przypuśćmy, że mnie to nie obchodzi; może napisałem i opublikowałem kontrakt tylko po to, by wykonać ten napad.

Jakie są alternatywy?

1. Nie dopuść do zmiany wyroczni

Zidentyfikowany powyżej problem wynika z tego, że pozwalamy na zmianę wyroczni przez zleceniobiorcę. Załóżmy więc, że po prostu zakodujemy adres wyroczni i w ogóle nie pozwalamy na jego zmianę? Cóż, rzeczywiście możemy to zrobić, to nie jest wykluczone. Ale wtedy pojawia się pytanie, co jeśli ta wyrocznia zrezygnuje – przestanie dostarczać dane z jakiegokolwiek powodu? Wtedy będziemy musieli zdobyć nową wyrocznię. A co, jeśli ta wyrocznia, początkowo godna zaufania, okaże się skorumpowana i nie jest już zaufana? Ponownie będziemy chcieli zmienić się na nową wyrocznię. Jeśli zakodowaliśmy wyrocznię, jedynym sposobem na jej zmianę jest wydanie nowego kontraktu, który używa innej wyroczni. OK, znowu możemy to zrobić. To nie jest wykluczone. Pamiętaj oczywiście, że inteligentnych kontraktów nie da się tak łatwo aktualizować, jak np. strona internetowa. Czy nie byłoby to łatwe? Jeśli zauważysz błąd lub lukę w zabezpieczeniach, po prostu ją załataj i nikt nie jest mądrzejszy. Model wdrażania inteligentnych kontraktów jest nieco bliższy modelowi oprogramowania opakowanego w folię termokurczliwą; gdy oprogramowanie jest w rękach użytkownika, jest tam i nie można go naprawić. Musisz poprosić użytkownika o ręczne uaktualnienie. Smart kontrakty są nieco podobne. Gdy kontrakt znajdzie się w łańcuchu bloków, jest niezmienny, tak jak w przypadku reszty łańcucha bloków, z wyjątkiem części, w których napisałeś logikę, aby był zmienny.

Niekoniecznie jest to jednak bloker; istnieje teraz wiele modeli i szkół przemyśleń, w jaki sposób można modyfikować inteligentny kontrakt. Ten temat sam w sobie byłby przyzwoitym artykułem, ale na razie możesz sprawdzić ten artykuł o Hackernoon, a także ten artykuł o strategiach inteligentnych kontraktów.

Jak by to wyglądało z perspektywy użytkownika? Powiedzmy, że rozważam postawienie zakładu na nadchodzący mecz Don Flamenco. Wyraźnie widzę, że kontrakt nieskomplikowany koduje wyrocznię, którą już znam i której ufam (cóż, ufam na tyle, by postawić zakład o określonej wielkości). Więc to jest to. Dość proste. Jeśli właściciel umowy wyda nową wersję umowy z nową wyrocznią, nadal (powinienem) mieć swobodę dalszego korzystania ze starej. Być może. Zależy to od sposobu obsługi aktualizacji. Jeśli kontrakt został wyłączony lub zniszczony, mogę mieć pecha. Ale w przypadku wanilii powinien nadal stać.

2. Zablokuj wyrocznię na czas

Możemy dodać trochę komplikacji do kodu (niekoniecznie pożądane, aby przykład był zbyt złożony, ale w przypadku rozwiązania w świecie rzeczywistym możemy chcieć korzyści, jakie przynosi ta złożoność), aby złagodzić wybryki, takie jak ta opisana powyżej. Myślę, że bardzo rozsądnym rozwiązaniem byłoby dodanie kodu, który „zablokowałby” wyrocznię na czas trwania zakładu. Innymi słowy, logika kontraktu może gwarantować w bardzo jasny i prosty sposób, że jakakolwiek wyrocznia była obecna, kiedy stawiałem zakład, musi być tą samą wyrocznią, która jest używana do wyłonienia zwycięzcy. Tak więc, nawet jeśli w międzyczasie zmieni się wyrocznia, dla innych meczów, dla mojego meczu i dla mojego zakładu, musi pozostać taka sama przez cały czas. Idzie to w parze z umożliwieniem użytkownikowi poznania, kim jest wyrocznia.

Miejmy szybki przykład, aby to zilustrować. Jestem użytkownikiem. Rozważam postawienie zakładu na nadchodzącą walkę Little Mac. W kontrakcie jest możliwość sprawdzenia wyroczni, która zostanie wykorzystana do wyłonienia zwycięzcy tego meczu. Sprawdzam, czy umowa jest dobrze znana, prezentowana przez Nintendo Sports. Czuję się wystarczająco pewnie w tej wyroczni. (Aby dodać nieco więcej złożoności, być może umowa pozwala użytkownikom wybierać spośród szeregu dostępnych wyroczni dla danego dopasowania). Teraz mogę sprawdzić kod wyroczni i zobaczyć, że logika wyroczni gwarantuje, że ta sama wyrocznia zostanie użyta do określenia wyniku meczu. Więc ja, jako obstawiający, mam przynajmniej taką pewność. Nie wyklucza to, że moja wyrocznia może być zła (tj. skorumpowana lub niegodna zaufania), ale przynajmniej zapewnia mnie, że nie można jej zmienić w tle.

W tym przypadku istnieje ryzyko, że wyrocznia „przestanie działać” (przestanie być utrzymywana lub aktualizowana) między momentem, w którym postawiłem zakład, a rozstrzygnięciem meczu. Pieniądze mogą zostać zablokowane w umowie i stać się nie do odzyskania. W tym celu moglibyśmy (być może) umieścić w kontrakcie klauzulę aktywowaną czasem, zgodnie z którą jeśli dopasowanie jest niezdecydowane w określonym czasie lub dacie (może być częścią definicji dopasowania), jest uważane za „martwe” i wszystkie pieniądze są w nim zamknięte jest zwracany graczom.

3. Niech wyrocznia będzie zdefiniowana przez użytkownika

Jeszcze bardziej skomplikowane (ale prawdopodobnie bardziej interesujące) byłoby pozostawienie adresu wyroczni „pustego”, w pewnym sensie, aby umożliwić użytkownikom określenie własnych wyroczni i utworzenie własnych puli zakładów (poprzez kontrakt) wokół tych wyroczni. Grupy użytkowników korzystających z tej samej wyroczni mogą stawiać razem zakłady zgodnie z logiką umowy. To nakłada na użytkownika obowiązek wybrania wyroczni, której ufa, i udostępnienia tej wyroczni innym użytkownikom o podobnych poglądach. W efekcie dzieli społeczność bukmacherską, więc działałoby tylko wtedy, gdyby istniała duża baza użytkowników; w przeciwnym razie byłoby zbyt mało obstawiających, aby naprawdę obstawianie było interesujące i opłacalne. Jeśli jestem jedyną osobą obstawiającą z moją ulubioną wyrocznią, nie ma tam zbyt wiele zachęty! Ale z drugiej strony bierze odpowiedzialność za wybranie godnej zaufania wyroczni od właściciela kontraktu, a on może umyć od tego ręce. Jeśli niektórzy użytkownicy uznają, że wyrocznia nie jest godna zaufania, po prostu przestaną jej używać i przejdą na inną, a nikt nie będzie zły na właściciela umowy. Po prostu zapewnił arenę zakładów i wykonał swoją służbę z honorem.

Dodatkową komplikacją tej strategii jest fakt, że musielibyśmy w jakiś sposób pozwolić „rosnąć” na wolności organicznej partii wyroczni, które dokładnie pasują do tego rozwiązania. Musielibyśmy przekazać światu dokładny interfejs, do którego muszą się przylgnąć potencjalne wyrocznie, i mieć nadzieję, że pojawi się ich wystarczająco dużo, aby dać użytkownikowi jakiś wybór. Może moglibyśmy zasiać partię jednym lub dwoma własnymi. Jeśli to nie zajmie, to nie mamy zakładów DApp. Ale jeśli tak, to muszę przyznać, że pomysł wyselekcjonowanych przez użytkowników, uprawianych metodami ekologicznymi wyroczni na wolności jest ciekawym i atrakcyjnym rozwiązaniem.

2. Właściciel/opiekun wyroczni może być skorumpowany

Zepsucie to znaczy w sensie niegodnym zaufania; że właściciel/opiekun/menedżer wyroczni prawdopodobnie ogłosi niewłaściwy wynik meczu, aby się wzbogacić.

Przykład: jestem właścicielem/opiekunem faktycznej wyroczni, która przekazuje dane bokserskie do łańcucha blokowego, aby można było skorzystać z umowy bukmacherskiej. Moja wyrocznia nie jest bezpośrednio zaangażowana w stawianie zakładów ani zarządzanie zakładami. Jego zadaniem jest po prostu dostarczenie danych, z których może korzystać umowa bukmacherska (i być może dowolna liczba innych umów). Mogę jednak osobiście postawić zakład, korzystając z umowy na zakłady, która z kolei korzysta z mojej wyroczni; I tak jestem anonimowy, więc nie boję się żadnej kary. Po postawieniu zakładu na taką umowę pojawia się wyraźny konflikt interesów. W szczególności uczciwość, z jaką aktualizuję swoją wyrocznię o prawdziwe i dokładne informacje, może być w konflikcie z moimi zakładami.

Załóżmy więc, że w nadchodzącym meczu Sandman/von Kaiser, w którym von Kaiser jest zdecydowanie słabszy, stawiam ogromny zakład na von Kaisera. Kiedy von Kaiser przegrywa zgodnie z oczekiwaniami, używam mojej wyroczni, aby fałszywie ogłosić go zwycięzcą! Kontrakt na zakłady wykonuje się tak, jak powinien (nie ma możliwości, aby go zatrzymać w tym momencie), zabijam na meczu, nie ma odwrotu i nie ma możliwości ukarania mnie i życie toczy się dalej. Być może po tym ludzie odmówią używania mojej wyroczni; może mnie to nie obchodzi.

Jak możemy temu zapobiec?

Teraz dotarliśmy do znacznie większego pytania, które dotyka samego sedna tak zwanej nieufności w odniesieniu do wyroczni. Ufa się, że wyrocznia jest neutralną stroną trzecią, a nawet zaufaną stroną trzecią. Problem w tym, że wyrocznią zarządzają ludzie. Jeszcze inną kwestią jest to, że wyrocznia sprawuje dużą kontrolę nad tym, jak umowa klienta wykonuje swoje obowiązki, ponieważ dostarcza danych, na podstawie których działa umowa. Skąd możemy wiedzieć, że możemy zaufać danej wyroczni?

Dlaczego mielibyśmy ufać jakiejkolwiek wyroczni?

Jeśli cała idea inteligentnych kontraktów blockchain polega na usunięciu potrzeby zaufania komukolwiek, to czy fakt, że musimy „zaufać” wyroczni nie jest sprzeczny z brakiem zaufania? Cóż, powiedziałbym: czas dorosnąć, synu (lub córce)! Nie ma czegoś takiego jak czysta nieufność, a blockchain nie zapewnia środowiska pozbawionego zaufania. Blockchain to warstwa, która ułatwia interakcje międzyludzkie. Interakcje międzyludzkie są nadal głównym lub końcowym rezultatem, a interakcje międzyludzkie nie mogą być pozbawione zaufania.

Link: Problem z Oracle

Ewolucja zaufania

U zarania dziejów, jak mogłem zaufać drugiemu człowiekowi? Przypuśćmy, że poluję na mamuty, a ten facet mówi, że pomoże mi upolować mamuta w zamian za połowę mięsa? Jak może ufać, że dam połowę? Jak mogę ufać, że nie uderzy mnie w głowę i nie zabierze całego mamuta, gdy polowanie się skończy?

W tamtych czasach zagrożenie przemocą prawdopodobnie leżało u podstaw wielu rodzajów zaufania społeczno-gospodarczego. Jeśli spróbuję ukraść udziały tego gościa, jestem pewien, że spróbuje mnie zaatakować, a to wiąże się dla mnie z ryzykiem. Nawet jeśli czuję się pewny, że wygram w walce z nim, ja (jako jaskiniowiec) wiem wystarczająco dużo o walce, aby wiedzieć, że wszystko może się zdarzyć, i mogę łatwo doznać kontuzji zagrażającej życiu, nawet jeśli technicznie wygram. To zawsze ryzyko i inwestycja energii. W tym świecie to może wystarczyć, aby ludzie byli uczciwi.

Generalnie nie będę oszukiwał, ponieważ nie leży to w moim najlepszym interesie , ogólnie i średnio, żeby to zrobić. Innymi słowy, oczekiwany wynik oszustwa jest mniejszy niż oczekiwany wynik współpracy.

Jeśli tak nie jest lub jeśli aktorzy uznają, że tak nie jest, być może jeden lub więcej po prostu zdecyduje się nie uczestniczyć. Na przykład, jeśli zobaczę, że ten drugi gość jest wysokim na 9 stóp olbrzymem z rogami i zębami potwora, mogę po prostu uciec i nie zawrzeć żadnej umowy; facet wygląda na zbyt niebezpiecznego dla mnie, mógł po prostu bezkarnie ukraść to, co lubi. Jeśli jesteśmy mniej więcej do siebie dopasowani, to postrzegamy, że znajdujemy się w sytuacji, w której oszukiwanie nie leży w interesie żadnej ze stron, współpraca leży w obu naszych interesach, a zatem przy założeniu, że obie strony są zdrowe i racjonalne, obie strony będą współpracować.

Kontrakty Oracle i ewolucja zaufania

Wraz z rozwojem kultury rozwijały się interakcje międzyludzkie. Stali się mniej agresywni, chociaż ukryte groźby użycia siły nie zniknęły. Obyczaje kulturowe dawały ludziom większą motywację do współpracy i różnego rodzaju czynniki zniechęcające do oszukiwania.

Szybko do przodu do czasów wczesnej cywilizacji; Targuję się na zakup 100 buszli pszenicy. To rodzaj prymitywnego kontraktu futures; Płacę dziś za ziarno, które otrzymam, gdy zbierze w przyszłym miesiącu. Oddaję facetowi moją miedzianą monetę, ściskamy sobie ręce, wypijamy piwo jęczmienne i rozstajemy się do przyszłego miesiąca w celu rozliczenia kontraktu. Wygląda wporządku.

Zdałem się na łaskę tego faceta; on ma pełną sumę moich pieniędzy, a ja jeszcze nic. Co więc daje mi pewność, że wywiąże się z kontraktu? Kilka spraw. On jest biznesmenem; regularnie prowadzi interesy z miejscową ludnością. Robił interesy z ludźmi, których znam, i zawsze dostarczał uczciwie i na czas. Ma opinię uczciwego. Co więcej, wiem, że zniechęca go do oszukiwania. Zarabia na życie głównie dzięki temu, że jest znany jako uczciwy trader. Gdyby mnie oszukał, zawiadomiłbym wszystkich, a to zaszkodziłoby jego dobrej reputacji, a tym samym jego interesom. Ilość pieniędzy, które zarabia na oszukiwaniu mnie, byłaby niewielka w porównaniu z przyszłą kwotą, której mógłby nie zarobić, gdyby jego baza klientów go porzuciła. Więc wiem, że oszukiwanie mnie niekoniecznie leży w jego interesie.

To jest świetne; na powyższym obrazku nie ma groźby użycia siły lub przemocy. Z wyjątkiem dwóch rzeczy:

  1. Groźba użycia siły nie jest całkowicie nieobecna. Innym czynnikiem zniechęcającym do oszukiwania może być myśl o tym, co zrobi oszukany facet. Mam broń i lojalnych mi przyjaciół. Ja, jako rozwścieczona oszukana impreza, mogłem użyć siły. Tak zaczynają się wojny klanów!
  2. Może również istnieć jakiś system zarządzania, który oceni szczegóły sprawy i prawdopodobnie ukaraje kupca grzywną lub wsadzi go do więzienia. Twój standardowy środek zniechęcający wspierany przez rząd jest zawsze poparty groźbą użycia siły, ponieważ zasadnicza kara za odmowę zapłaty grzywny, odmowę pójścia do więzienia, odmowę zastosowania się do wszelkich środków jest ostatecznie siłą. I to trwa do dnia dzisiejszego. Jeśli odmówię zapłaty grzywny, mogę zostać aresztowany. Jeśli odmówię aresztowania, zostanie użyta przeciwko mnie siła i mogę zostać wtrącony do więzienia wbrew mojej woli, a nawet zabity (jeśli mój opór będzie wystarczająco uporczywy). Tam widzimy groźbę użycia siły zaledwie dwa kroki dalej, nawet za drobne wykroczenie!

Zdecentralizowane zaufanie dzisiaj

Przewiń do dnia dzisiejszego. Jakie są czynniki zniechęcające do zerwania umowy? Czy znacznie różnią się od poprzedniego scenariusza?

Firma X ma rabat wysyłkowy na zakup tego produktu. Dlaczego ufasz, że to wywiążą? Tak samo jak w poprzednim przykładzie; firma niewiele może zyskać na oszustwach na drobne kwoty, a wiele do stracenia, niszcząc swoją reputację. Jest to podstawa wielu scenariuszy zaufania i to już od dłuższego czasu. I znowu, jak w przykładzie kupca zboża, istnieje groźba użycia siły, choć w tym przypadku nie dojdzie do tego. Firma może zostać ukarana grzywną lub pozwem zbiorowym, a firma musi zapłacić grzywnę lub spotkać się z gorszymi karami. Kary te są wspierane przez rząd, który z kolei jest wspierany przez groźbę użycia siły, zarówno ekonomicznej, jak i militarnej, chociaż moglibyśmy przypuszczać, że groźba użycia siły ekonomicznej jest z kolei wspierana przez siłę militarną, tj. przemoc.

Systemy tradycyjne

Model kontraktów wspieranych przez usankcjonowane przez rząd stosowanie siły dobrze służył ludzkości przez tysiące lat? A może ma? No tak, ale to naturalny postęp. W przypadku braku rządu grupy ludzi tworzą rządy. Wygląda na to, że nie można powstrzymać ludzi przed tworzeniem rządów; uformują się.

A co z inteligentnymi kontraktami blockchain? W jaki sposób blockchain i inteligentny model kontraktów zapewniają zaufanie lub zniechęcają do oszustw? Nie mów po prostu „nieufność”, to nie jest odpowiedź! W naszych poprzednich przykładach oszustwo jest w pewien sposób zniechęcane.

Przyjrzyjmy się bliżej, jak blockchain spełnia (lub zastępuje) tę funkcję.

Systemy Blockchain: Bitcoin

Aby podzielić to wielkie pytanie na mniejsze pytania, zacznijmy od bitcoina. W jaki sposób bitcoin zniechęca do oszustw? Mogę uruchamiać dowolne oprogramowanie węzła bitcoin, które chcę, o ile wydaje się, że jest zgodne z protokołami sieci bitcoin. Nikt nie zniechęca mnie do prowadzenia własnego, samodziałowego węzła bitcoin, który robi to, czego chce, przestrzegając protokołów sieciowych; czy jest jakiś sposób, w jaki mogę to wykorzystać do nielegalnych zysków?

Jasne, mogę wypuścić dowolny rodzaj transakcji do sieci bitcoin do zatwierdzenia. Mogę zwolnić transakcję, która wysyła do mnie wszystkie twoje bitcoiny, wypuścić je do sieci, poczekać, aż zostaną dodane do bloku, i wow, teraz wszystkie twoje bitcoiny należą do mnie ? Nie, z powodu szyfrowania.

Nie posiadam Twojego klucza prywatnego, a taka transakcja musi być podpisana Twoim kluczem prywatnym. Więc jestem tam zablokowany przez kryptografię. Albo jestem? Kto mówi, że taka transakcja musi być podpisana? Co się stanie, jeśli spróbuję? Cóż, co się oczywiście stanie, to to, że cała sieć bitcoin odrzuci moją transakcję. Dlaczego ktoś miałby to zaakceptować? Pomijając fakt, że wszyscy mają standardowe węzły, które odrzucą to z ręki, po co mieliby mi pomagać oszukiwać? Takie postępowanie z pewnością podważy integralność sieci bitcoin, a tym samym podważy ich własne krypto-bogactwo. Więc nie ma sensu pomagać mi, anonimowemu nieznajomemu, oszukiwać innego anonimowego nieznajomego. Nawet jeśli jeden irracjonalny aktor w jakiś sposób zaakceptuje moją nieprawidłową transakcję, zdecydowana większość sieci bitcoin odrzuci ją i nie ma szans. Znowu jest pobity, tym razem przez same liczby.

A jeśli jednak jestem potężną firmą wydobywczą? Z pewnością teraz mam więcej mocy, by sfinalizować sprawy na swoją korzyść. Tak, ale to nadal nie daje mi niczego bliskiego władzy absolutnej. Nawet jako potężny górnik, jeśli kontroluję mniej niż 50% sieci, niewiele mogę zrobić. Mam pewną moc wyboru kolejności, w jakiej transakcje są dodawane do bloków, ale nie jest to moc bicia lub kradzieży monet. Nawet jeśli kontroluję ponad 50% sieci (zakładając, że czytelnik jest świadomy dobrze znanego ataku 51% w odniesieniu do proof-of-work, jak w bitcoinie), moją główną siłą byłoby podwójne wydawanie pieniędzy. Chociaż jest to fajna moc, jest bardzo wątpliwe, czy byłoby to w moim najlepszym interesie, ponieważ podważyłoby to integralność bitcoina. Wydaje się prawdopodobne, że lepiej będzie, jeśli wykorzystam moją kontrolę do wydobycia wszystkich monet, dzięki czemu zarobię więcej pieniędzy i utrzymam grunt, na którym stoi to bogactwo. W ten sposób nie jestem bity, ale mój impuls do oszukiwania jest hamowany przez czynnik zniechęcający, który jest organicznie wbudowany w protokół. I ten zniechęcający jest zasadniczo wspierany przez siłę liczb; przytłaczający konsensus uczestników sieci bitcoin.

Inteligentne kontrakty Blockchain i kontrakty Oracle

Czym są inteligentne kontrakty? Załóżmy, że zastosowałem wprowadzającą w błąd umowę, aby nakłonić ludzi do wysłania mi swoich pieniędzy? Albo załóżmy, że wdrożyłem kontrakt na zakłady i użyłem jednego z ataków (jeśli można je tak nazwać) opisanych wcześniej? Mogę to zrobić, może to oszukać niektórych ludzi; Ja, jako nieuczciwy aktor, mógłbym na takim przedsięwzięciu trochę zyskać. Obrona przed tym polegałaby na starannym rozważeniu przez każdego uczestnika (tak jak w przypadku każdej umowy) umowy, której ma być stroną, oraz potencjalnych sposobów jej nadużycia. Powinni również wziąć pod uwagę źródło - co, jeśli w ogóle, wiedzą o stronie, która publikuje i utrzymuje kontrakt oraz wszelkich powiązanych wyroczniach lub powiązanych kontraktach. Można mieć nadzieję, że nieuczciwa umowa nie będzie trwała długo, zanim sieć nieformalnie oznaczy ją jako nieuczciwą, zmuszając uczestników do dobrowolnego jej unikania i odcinania. Sieć jest duża, a wieści szybko się rozchodzą.

Tyle że w pewnym momencie nadal musisz ufać człowiekowi. Dane do umowy zawierania zakładów są dostarczane przez wyrocznię. Wyrocznia jest utrzymywana przez człowieka. Bez względu na to, ile warstw dodasz, starając się, aby sieć była uczciwa, w pewnym momencie wciąż wraca ona do człowieka. Więc jakiemu typowi wyroczni możesz zaufać, biorąc pod uwagę nasz przykład z zakładami? Ufałbym wyroczni, która oszukując miała więcej do stracenia niż do zyskania. Przykład: wyobraź sobie, że ESPN lub podobna sieć była sponsorami wyroczni. Można by oczekiwać, że bardziej niż ktokolwiek inny poda rzetelne dane, ponieważ nielegalna wygrana w zakładzie bokserskim byłaby przyćmiona utratą reputacji. W tym przypadku twoje zaufanie jest dobrze ugruntowane z tego samego powodu, dla którego ufamy uczciwemu handlarzowi zbożem. Ten rodzaj porozumienia powierniczego jest starożytny i ugruntowany.

Co więc zyskaliśmy dzięki wykorzystaniu inteligentnych kontraktów? Czym różnią się inteligentne kontrakty od zarządzania lub poprzednich metod podtrzymywania kontraktów?

Zawijanie

Dla zwrócenia uwagi, aby dać do myślenia i dyskusji oraz podsumowując mój artykuł, zamiast twardych wniosków przedstawię kilka prostych obserwacji. Ponieważ w przypadku tematu o tej złożoności zwięzłe zakończenie wydaje się być czymś w rodzaju takiej właśnie historii i nadmiernym uproszczeniem. Obserwacje, które zamierzam przedstawić (i proszę o dyskusję/odrzucenie/zaprzeczenie ich) są następujące:

  • Zaufanie oparte na założeniu, że druga strona może więcej zyskać na współpracy niż na oszustwie, jest stare, sprawdza się w praktycznych sytuacjach i nie odeszło. W niektórych przypadkach jest to nadal nieodłączne w świecie blockchain, chociaż w wielu przypadkach może zostać wyeliminowane. W przypadku naszego przykładu wyroczni wciąż żyje i ma się dobrze.
  • Zaufanie oparte na groźbie użycia siły lub przemocy było również nieodłącznym elementem ludzkiego społeczeństwa od niepamiętnych czasów, ale jest wyraźnie nieobecne w naszym modelu inteligentnych kontraktów i zostało zastąpione egzekwowaniem poprzez sprytne kombinacje szyfrowania i konsensusu dużej liczby.

Rzucam wyzwanie innym programistom Ethereum, aby zrobili dwie rzeczy:

  1. Pomyśl o jakimkolwiek sposobie, w systemach publicznych łańcuchów bloków (takich jak bitcoin lub ethereum), w których wszystko jest wymuszone przez ukryte lub jawne groźby użycia siły.
  2. Pomyśl o jakimkolwiek głównym systemie zasad we współczesnym prawie kontraktowym lub finansowym, który nie jest w żaden sposób egzekwowany przez wyraźną lub dorozumianą groźbę użycia siły.

Ewolucja zaufania i ilustracja władzy państwowej

Coś starego, coś nowego

Myślę, że w tym miejscu doszliśmy do głównej różnicy, a nawet prawdziwego powodu, dla którego mówimy, że systemy blockchain są „rewolucyjne” w porównaniu z systemami z przeszłości. Moim zdaniem nie jest to w ogóle brak zaufania, ale raczej stabilniejsza platforma zaufania i – co najważniejsze – taka, która wcale nie jest uzależniona od groźby użycia siły lub przemocy.

Z jednej strony mamy starą i sprawdzoną pewność obopólnej korzyści w sytuacjach, w których brakuje zachęty do ściągania. To nic nowego. Nowością jest wprowadzenie konsensusu wspomaganego szyfrowaniem, który pomaga zniechęcić do oszustw i zachować uczciwość systemu. A synteza tych dwóch elementów stworzyła coś naprawdę niezwykłego, możliwego po raz pierwszy w historii ludzkości: system nadający się do użytku dla dużych, anonimowych grup, w którym nigdzie nie ma wyraźnej lub ukrytej groźby użycia siły jako środka zniechęcającego lub kary. . I to, jak sądzę, jest naprawdę niesamowite. Jeśli ten aspekt zostanie przeoczony, mamy do czynienia z nową, fajną technologią (która, przyznaję, jest wystarczająco fajna, jak jest). Ale kiedy weźmiemy pod uwagę ten aspekt, widać, że wkroczyliśmy w nową erę rządzenia.