Ukończenie Turinga: co to oznacza, dlaczego Ethereum tego potrzebowało i dlaczego Bitcoin zdecydował się tego uniknąć

Ukończenie Turinga: co to oznacza, dlaczego Ethereum tego potrzebowało i dlaczego Bitcoin zdecydował się tego uniknąć

Znajomy pracujący w tradycyjnych finansach zapytał mnie kiedyś, dlaczego Ethereum może obsługiwać całe aplikacje finansowe na swoim blockchainie, podczas gdy Bitcoin może w zasadzie tylko przesyłać pieniądze z jednego adresu na drugi. „Oba to blockchainy” – odpowiedział. „Na czym właściwie polega różnica?”

Próbowałem wytłumaczyć mu zupełność Turinga i patrzyłem, jak jego oczy się szklą. Więc spróbowałem ponownie, używając analogii. Bitcoin to automat sprzedający. Wrzucasz pieniądze, naciskasz przycisk, dostajesz konkretny przedmiot. Robi to, do czego został stworzony i nic więcej. Ethereum to kuchnia z szefem kuchni. Daj szefowi kuchni dowolny przepis i wystarczającą ilość składników, a przygotuje wszystko. Pętle („mieszaj, aż masa zgęstnieje”), decyzje („jeśli jest zbyt słona, dodaj wody”), kreatywność („improwizuj deser z tego, co zostanie”). Szef kuchni może wykonać każdą instrukcję. Automat nie.

Ta analogia nie jest idealna. Informatyk zwróciłby uwagę na kilka rzeczy, które uprościłem. Ale to skłoniło mojego przyjaciela do zadania właściwego pytania: „Dlaczego więc ktoś miałby zostać automatem vendingowym?”

To pytanie stanowi istotę debaty o zupełności Turinga w kryptowalutach. Bezpieczeństwo kontra elastyczność. Przewidywalność kontra moc. Bitcoin kontra Ethereum. I, co irytujące, odpowiedź brzmi: obie strony mają rację.

Skąd wziął się ten pomysł i dlaczego praca matematyczna z 1936 roku nadal ma znaczenie

Alan Turing opublikował artykuł zatytułowany „O liczbach obliczalnych” w 1936 roku. Miał wtedy 23 lata. Opisał w nim maszynę tak prostą, że brzmi jak zabawka. Pasek taśmy podzielony na komórki. Głowa, która odczytuje i zapisuje symbole. Reguły, które mówią głowie, co ma robić na podstawie odczytanych informacji. Taśma, głowica, reguły. To cała maszyna.

Oto fragment, który wciąż przyprawia mnie o dreszcze. Turing udowodnił, że ta absurdalnie prosta maszyna potrafi obliczyć wszystko, co obliczyłby jakikolwiek komputer. Nie jakieś tam rzeczy. Cokolwiek. Twój telefon właśnie wykonuje operacje na taśmie i głowicy. Podobnie jak serwer obsługujący ChatGPT. Podobnie jak układ scalony w twoim samochodzie. Udowodnił to wszystko w 1936 roku, zanim na Ziemi pojawił się choćby jeden komputer elektroniczny. Artykuł ma prawie 90 lat i każdy wydział informatyki na świecie wciąż uczy go w pierwszym semestrze.

Kiedy ktoś mówi, że system jest „zupełny w sensie Turinga”, ma na myśli, że potrafi symulować maszynę taśmową Turinga. Potrafi uruchamiać pętle, podejmować decyzje na podstawie danych, przechowywać dane w pamięci i wykonywać dowolne algorytmy. Twój laptop jest zupełny w sensie Turinga. Kalkulator kieszonkowy nie. A oto ciekawostka, którą uwielbiam opowiadać ludziom: obwody Redstone'a w Minecrafcie są technicznie zupełne w sensie Turinga. Ludzie zbudowali działające komputery w grze. Nie użyteczne komputery. Ale działające.

kompletny Turinga

Jak to się przekłada na Bitcoina: dlaczego Satoshi wybrał ograniczenie

Satoshi stworzył Bitcoina za pomocą języka programowania o nazwie Bitcoin Script, który jest celowo głupi. Celowo. Weryfikuje podpisy, obsługuje portfele multi-sig, blokuje środki w zależności od warunków czasowych i to właściwie wszystko. Żadnych pętli. Żadnych skomplikowanych rozgałęzień. Żadnych stanów, które przenoszą się między transakcjami.

Po raz pierwszy zrozumiałem, dlaczego to ma znaczenie, czytając o ataku DAO na Ethereum (do którego jeszcze wrócę). Rekurencyjne wywołanie funkcji pochłonęło 150 milionów dolarów z inteligentnego kontraktu, ponieważ kod mógł wywołać sam siebie w nieskończonej pętli, czego programiści nigdy się nie spodziewali. W przypadku Bitcoina taki atak jest niemożliwy. Nie nieprawdopodobny. Niemożliwy. Skrypt Bitcoina nie może wywołać samego siebie. Nie może zapętlić się. Nie może rekursywnie działać. Język jest zbyt ograniczony, aby opisać błąd, który kosztował Ethereum 150 milionów dolarów.

To ograniczenie jest cechą charakterystyczną. Każdy skrypt Bitcoina kończy się przewidywalnie. Możesz go przeczytać i dokładnie wiedzieć, co zrobi. Bez niespodzianek. Bez nieoczekiwanego zachowania. Gdy zabezpieczasz sieć wartą ponad bilion dolarów, „nudny i przewidywalny” nie jest słabością. To kwestia wyboru projektu.

Co zbudował Vitalik i dlaczego to wszystko zmieniło

Vitalik Buterin miał 19 lat, kiedy opublikował białą księgę Ethereum w 2013 roku. Jego pytanie było proste i radykalne: co by było, gdyby sam blockchain mógł uruchamiać dowolny program? Nie tylko „przesyłać monety z A do B”, ale wszystko, co potrafi komputer?

Byłem na studiach, kiedy ukazał się whitepaper Ethereum. Przeczytałem go w pliku PDF, który ktoś udostępnił na forum Bitcoin. Połowa odpowiedzi mówiła, że Vitalik jest geniuszem. Druga połowa twierdziła, że buduje system, który natychmiast zostanie zhakowany. Obaj mieli rację.

Ethereum zadebiutowało w 2015 roku z dwoma elementami, które uczyniły je kompletnym w sensie Turinga. Solidity to język programowania do pisania inteligentnych kontraktów. Zawiera pętle, instrukcje warunkowe, przechowywanie stanu i wywołania funkcji. Wszystko, czego potrzebujesz. Maszyna wirtualna Ethereum uruchamia te kontrakty na każdym węźle w sieci jednocześnie. Razem pozwalają one programistom wdrażać dowolny kod, jaki potrafią napisać.

Ta jedna decyzja jest powodem istnienia DeFi. Dlaczego istnieją NFT. Dlaczego istnieją DAO. Dlaczego miliardy dolarów przepływają przez programy, nad którymi nie ma kontroli żadna firma. Każde interesujące zastosowanie w kryptowalutach, od Uniswap, przez Aave, po OpenSea, jest możliwe tylko dlatego, że Ethereum może uruchamiać dowolny kod.

Ale Vitalik postawił na swoim. Zakładał, że siła elastyczności przeważy nad ryzykiem złożoności. Atak hakerski na DAO w 2016 roku wystawił to na ciężką próbę. Exploity w DeFi, kosztujące miliardy dolarów rocznie, wciąż je testują. A społeczność Bitcoina wciąż wskazuje na te straty i powtarza: „Dlatego pozostaliśmy prości”. Obie strony mają rację.

Problem zatrzymania i dlaczego istnieją opłaty za gaz

A oto fragment, który nie dawał mi spać w nocy, gdy po raz pierwszy to zrozumiałem.

Turing udowodnił coś niewygodnego w tym samym artykule z 1936 roku: żaden algorytm nie jest w stanie przeanalizować dowolnego programu i wiarygodnie określić, czy zakończy on działanie, czy będzie się pętlił w nieskończoność. To nie jest problem technologiczny, którego jeszcze nie rozwiązaliśmy. To matematyczna niemożliwość. Udowodniona. Zrobiona. Żaden komputer, niezależnie od stopnia zaawansowania, nie jest w stanie rozwiązać problemu zatrzymania dla wszystkich programów.

Na moim laptopie nieskończona pętla jest irytująca. Naciskam Ctrl-C. Życie toczy się dalej. W blockchainie nieskończona pętla to katastrofa. Każdy węzeł uruchamia każdy inteligentny kontrakt. Jeśli jeden kontrakt nigdy się nie zatrzyma, każdy węzeł na planecie obsługujący ten blockchain zawiesi się. Sieć nie działa.

Rozwiązanie Ethereum jest proste, ale skuteczne: gaz. Każde obliczenie kosztuje gaz. Dodajesz gaz do swojej transakcji. Gdy gaz się skończy, kod się zatrzymuje. Nie ma znaczenia, czy został ukończony. Nie ma znaczenia, czy był w trakcie transferu pieniędzy. Gaz spada do zera, wykonywanie się kończy. Dlatego opłaty za gaz ETH są różne. Prosty przelew: 21 000 gazu. Złożony swap DeFi: 200 000. Mennica NFT z grafiką on-chain: pół miliona. Płacisz za ilość obliczeń, które musi wykonać każdy węzeł.

Bitcoin przyjrzał się temu problemowi i powiedział „nie”. Nie da się napisać pętli, nie da się w niej utknąć. Każdy skrypt się kończy. Nie jest potrzebny żaden mechanizm gazowy. Język jest zbyt ograniczony, by wyrazić „na zawsze”.

Czerwiec 2016: kiedy teoria stała się rzeczywistością wartą 150 milionów dolarów

Każda rozmowa o zupełności Turinga w kryptografii prędzej czy później dociera do tego momentu.

DAO to fundusz inwestycyjny o wartości 150 milionów dolarów, działający na platformie Ethereum. Inteligentny kontrakt. Zarządzanie społecznościowe. Pieniądze wpływają, a głosy decydują o ich wydatkach. Kod był złożony. Zawierał pętle, warunki, wywołania międzykontraktowe, stan, który zmieniał się w trakcie wykonywania. Wszystko, na co pozwala kompletność Turinga.

Ktoś znalazł lukę. Funkcja wypłaty najpierw wysłała ETH, a potem zaktualizowała saldo. Atakujący wywołał „wycofaj”, otrzymał wypłatę, a zanim saldo się zaktualizowało, funkcja wywołała samą siebie ponownie. I znowu. I znowu. Ponowne wejście. Pętla, której programiści nie planowali, wysysająca pieniądze z każdym cyklem.

Czy to możliwe w przypadku Bitcoina? Nie. Skrypt Bitcoina nie może wywołać samego siebie. Nie może wywołać innych skryptów. Nie może zapętlić się. To, co sprawia, że Bitcoin jest nudny, to to samo, co uniemożliwia ten konkretny atak.

Społeczność Ethereum zagłosowała za twardym forkiem łańcucha i odwróceniem kradzieży. Ten podział doprowadził do powstania Ethereum Classic. Deweloperzy wyciągnęli wnioski. Ochrona reentrancy stała się standardem. Wzorzec „sprawdzenia-efekty-interakcje” stał się normą. Jednak fundamentalna prawda się nie zmieniła: kod Turinga zawsze może zawierać błędy, których jego twórcy nie przewidzieli. To nie jest wada Ethereum. To konsekwencja matematyki.

kompletny Turinga

Bitcoin staje się mniej ograniczony: Taproot i BitVM

Granica między modelem Turinga kompletnym a niekompletnym nie jest już w przypadku Bitcoina tak wyraźna jak kiedyś.

Taproot został wydany w listopadzie 2021 roku i rozszerzył możliwości Bitcoin Script. Bardziej złożone wydawanie warunkowe, lepsza prywatność dzięki podpisom Schnorra, merkelizowane abstrakcyjne drzewa składniowe, które ukrywają warunki transakcji do momentu ich wykonania. Nadal nie jest to wersja Turinga. Ale bardziej ekspresyjna niż wcześniej.

BitVM, zaproponowany w 2023 roku, idzie dalej. Opisuje system do wykonywania dowolnych obliczeń poza łańcuchem, a następnie weryfikowania wyników w Bitcoinie. Wyobraźmy to sobie tak: faktyczne obliczenia odbywają się gdzie indziej, a Bitcoin interweniuje tylko wtedy, gdy ktoś kwestionuje wynik. Teoretycznie czyni to Bitcoina praktycznie kompletnym w sensie Turinga dla konkretnych zastosowań, bez konieczności zmiany samego języka skryptowego.

Rozmawiałem z deweloperami Bitcoina o BitVM i ich reakcja jest interesująca. Są podekscytowani możliwościami, ale przerażeni ryzykiem. Jeden z nich powiedział mi: „Nie będziemy się spieszyć. Ludzie trzymają w tym bilion dolarów. Jeśli zepsujemy to, próbując to udoskonalić, nikt nam nie wybaczy”. Ta ostrożność jest frustrująca, jeśli chcesz mieć Bitcoin DeFi jutro. Jest jednak pocieszająca, jeśli jesteś osobą, która ma bilion dolarów w systemie.

Kierunek jest jednak w stronę większej ekspresji. Taproot już rozszerzył to, co jest możliwe. BitVM poszerzy to jeszcze bardziej. Nie spodziewajcie się jednak, że Bitcoin stanie się Ethereum. Kultury są na to zbyt zróżnicowane.

Dlaczego każdy nowy blockchain w ogóle wybiera kompletność Turinga

Oto, co rozstrzygnęło debatę w praktyce: nikt już nie buduje niekompletnych w sensie Turinga blockchainów. Solana, Cardano, Polkadot, Avalanche, BNB Chain. Wszystkie kompletne w sensie Turinga. Wszystkie zdolne do uruchamiania dowolnych programów. Rynek zdecydował, że wygrywa programowalność, a jedynym pytaniem jest teraz, jak uczynić systemy kompletne w sensie Turinga szybszymi, tańszymi i bezpieczniejszymi.

Każdy łańcuch poczynił inne kompromisy. Ethereum wybrało EVM i Solidity (największy ekosystem, najwyższe opłaty na poziomie L1). Solana stworzyła Sealevel do równoległego wykonywania kodu, używając Rusta (szybki, ale trudniejszy w rozwoju). Cardano wybrało Haskella i formalną weryfikację (rygorystyczną pod względem matematycznym, wolniejszą adopcję). Wszyscy jednak zgodzili się na kompletność Turinga, ponieważ chcieli obsługiwać inteligentne kontrakty, DeFi, NFT, DAO i wszystko inne, co wymaga niestandardowej logiki.

Problemy z bezpieczeństwem są realne. Wykorzystywanie luk w zabezpieczeniach DeFi kosztuje miliardy dolarów rocznie. Atak na DAO był dopiero początkiem. Branża doszła jednak do wniosku, że korzyści płynące z programowalności przeważają nad ryzykiem. Nawet Bitcoin, pierwotnie celowo ograniczony łańcuch, zmierza w kierunku większej ekspresji dzięki Taproot i BitVM.

Zajmuję się kryptowalutami na tyle długo, że miałem okazję intensywnie korzystać z obu typów łańcuchów. Wysyłałem transakcje Bitcoin, które za każdym razem potwierdzały się dokładnie tak, jak oczekiwałem. Wdrożyłem również inteligentne kontrakty Ethereum, które robiły rzeczy, których się nie spodziewałem, ponieważ Solidity pozwala pisać kod na tyle złożony, że sam się zaskakuje. Oba te doświadczenia ukształtowały moje spojrzenie na świat.

Debata nie dotyczy tego, czy zupełność Turinga jest dobra, czy zła, a raczej tego, czego potrzebujesz. Jeśli chcesz mieć maksymalnie bezpieczny i przewidywalny system płatności cyfrowych, projekt Bitcoina ma sens. Jeśli chcesz tworzyć aplikacje finansowe, gry, systemy tożsamości lub cokolwiek, co wymaga niestandardowej logiki, potrzebujesz zupełności Turinga. Większość tego, co czyni kryptowaluty interesującymi, było możliwe tylko dlatego, że 19-latek uznał, że warto podjąć ryzyko.

Myślę o tym za każdym razem, gdy korzystam z Uniswap, Aave czy jakiegokolwiek protokołu DeFi. Każda transakcja, którą wykonuję, to kod wykonywany na maszynie wirtualnej Turinga. Każda transakcja niesie ze sobą teoretyczne ryzyko, że jakiś nieprzewidziany błąd może wyczerpać cały kontrakt. Korzystam z tych protokołów i tak, ponieważ dla mnie użyteczność jest warta ryzyka. Ale nigdy nie zapominam, że ryzyko istnieje. I nigdy nie zapominam, że Bitcoin wybrał inną drogę, a ta droga ma swoją własną mądrość. Automat z napojami nigdy nie ukradnie twoich pieniędzy. Szef kuchni może spalić całą kuchnię.

Jakieś pytania?

Ethereum, Solana, Cardano, Polkadot, Avalanche, BNB Chain i praktycznie każda nowoczesna platforma inteligentnych kontraktów. Żaden nowy blockchain nie powstanie bez kompletności Turinga, ponieważ rynek wymaga programowalności dla DeFi, NFT i zdecentralizowanych aplikacji.

Nie do końca, ale zyskuje na możliwościach. Taproot (2021) dodał więcej logiki warunkowej. BitVM (2023) proponuje obliczenia poza łańcuchem z weryfikacją on-chain. To sprawia, że Bitcoin jest bardziej programowalny, ale nie w pełni kompletny w sensie Turinga. Społeczność Bitcoina preferuje ostrożne, stopniowe ulepszenia zamiast radykalnych zmian.

Fundusz Ethereum o wartości 150 milionów dolarów został wyczerpany w 2016 roku z powodu błędu reentrancy. Funkcja wypłaty wysłała ETH przed aktualizacją salda. Atakujący wywołał funkcję rekurencyjnie, pobierając za każdym razem więcej ETH, zanim kontrakt nadrobił zaległości. Było to możliwe tylko dlatego, że język Ethereum obsługuje wywołania rekurencyjne. Niemożliwe w przypadku Bitcoina, ponieważ skrypt Bitcoina nie obsługuje rekurencji.

Turing udowodnił, że żaden algorytm nie jest w stanie określić, czy dowolny program zatrzyma się, czy będzie działał w nieskończoność. W blockchainie nieskończona pętla zamroziłaby całą sieć. Ethereum rozwiązuje ten problem za pomocą gazu: każde obliczenie kosztuje gaz, a gdy gaz się skończy, wykonywanie zatrzymuje się. Bitcoin całkowicie unika tego problemu, ponieważ jego język nie potrafi wyrażać nieskończonych pętli.

Z założenia. Vitalik chciał, aby Ethereum było platformą obliczeniową ogólnego przeznaczenia. Satoshi chciał, aby Bitcoin był bezpieczną siecią płatności. Prostszy kod jest trudniejszy do wykorzystania. Siła Ethereum pozwoliła na stworzenie DeFi i NFT. Ograniczenia Bitcoina zapobiegły błędom, które doprowadziły do ataku hakerskiego na DAO o wartości 150 milionów dolarów. Oba rozwiązania są uzasadnione w różnych celach.

System zupełny w sensie Turinga może uruchomić dowolny program komputerowy, mając wystarczająco dużo czasu i pamięci. Potrafi wykonywać pętle, podejmować decyzje i przechowywać dane. Twój laptop jest zupełny w sensie Turinga. Kalkulator nie. W blockchainie: Ethereum jest zupełne w sensie Turinga (obsługuje wszystkie inteligentne kontrakty). Bitcoin nie jest (przetwarza tylko określone typy transakcji). Koncepcja ta pochodzi z artykułu Alana Turinga z 1936 roku.

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.