100713073

Page 1


01

Spis treści

02

O autorach 9

O recenzencie 11

Podziękowania 13

Wprowadzenie 15

My, marzyciele 17

Zmiana paradygmatu 18

Społeczność cypherpunku 20

Podsumowanie 24

Gorączka złota

Wydobywanie bitcoina 25

Osiąganie konsensusu 25

Sprzęt do wydobywania 31

Historie start-upów 32

Nowy konsensus 34

Podsumowanie 35

Odniesienia 35

03 04 05 06

Podstawy blockchaina 36

Organizacja transakcji 36

Simple Payment Verification 44

Podziały łańcucha bloków 46

Podsumowanie 47

Odniesienia 48

Rozpakowując

Ethereum 49

Podstawy Ethereum 50

Ethereum Virtual Machine 57

Aplikacje zdecentralizowane 67

Podsumowanie 70

Odniesienia 70

Organizacje zdecentralizowane 71

Jądro Aragona 72

Zarządzanie tożsamością 73

Tutorial DAO 75

Podsumowanie 93

Odniesienia 93

Atak hakerski na The DAO 94

Wprowadzenie 94

Zespół 97

The DAO 98

Najważniejsze punkty ICO 101

Debata 105

07

Podział: ETH i ETC 107

Przyszłość 108

Podsumowanie 109

Tokeny Ethereum

Obliczenia wysokiej wydajności 110

Tokeny i tworzenie wartości 111

Ethereum Computational Market 115

Sieć Golem 122

Framework transakcyjny 126

Supercomputing Organized by Network Mining 131

iEx.ec 143

Podsumowanie 147

Odniesienia 148

08

Blockchain w nauce 149

Kryzys replikacji 150

Badania kliniczne 154

System reputacji 159

Kontrola leków 162

Podsumowanie 165

09

Blockchain w opiece zdrowotnej 166

Model płatnik–świadczeniodawca–pacjent 167

Organizacja 169

Zapobieganie marnowaniu pieniędzy – Capital One, Ark Invest i Gem 173

Podsumowanie 181

Odniesienia 182

11

12

Indeks 270 10

Hyperledger Project 183

Stan obecny 183

Modele decyzyjne. Czy potrzebujesz blockchaina? 189

Błyskawiczne tworzenie prototypów z Hyperledger Composer 192

Podsumowanie 195

Rozwój blockchain w ostatnim czasie 196

Blockchain EOS 197

Chain Core 208

Ethereum Enterprise Alliance 222

Podsumowanie 230

Odniesienia 230

Rewolucje technologiczne i kapitał finansowy 231

Stan branży blockchain 232

Venture capital i ICO 234

Pierwsze oferty monet 234

Giełdy walut cyfrowych 238

Status prawny ICO 238

Technologie regulacyjne – RegChain 242

Nowe idee i firmy z branży blockchain 244

Demokratyzacja możliwości inwestycyjnych 247

Podsumowanie 247

Dodatek. Zakładając konsorcjum opieki zdrowotnej 249

Bibliografia 265

03 Podstawy blockchaina

Walcząc z rzeczywistością, nigdy niczego nie zmienisz. By to uczynić, stwórz nowy model, który sprawi, że obecny stanie się przestarzały. R. Buckminster Fuller

Blockchain jest zdecentralizowaną strukturą danych obdarzoną wewnętrzną spójnością zapewnianą dzięki konsensusowi użytkowników w kwestii obecnego stanu sieci. To technologia, która rozwiązuje problem bizantyjskich generałów (dotyczący komunikacji między nieufającymi sobie stronami) i otwiera nowe perspektywy dla transakcji niewymagających zaufania oraz wymiany informacji. Jeśli internet zdemokratyzował wymianę informacji w ramach modelu peer-to-peer, blockchain czyni to samo, ale w odniesieniu do wartości. Niniejszy rozdział zaczynamy od przyjrzenia się, jak odbywają się transakcje w sieci Bitcoin. Co za tym idzie, omawiamy strukturę bloku oraz transakcji. Następnie przechodzimy do roli portfeli i adresów użytkownika, by później zająć się metodą Simple Payment Verification (SPV) wdrożoną w sieci Bitcoin. SPV pozwala zrozumieć, skąd bierze się szczególna struktura bloku, a co ważniejsze – jak sieć Bitcoin może zachować wydajność, mimo że rozrasta się w szybkim tempie. Nasze rozważania zamykamy tematem soft i hard forków w blockchainie. Prezentujemy następstwa forków w kontekście kompatybilności w przód i w odniesieniu do handlowców oraz użytkowników zaangażowanych w wykonywanie kodu Bitcoin Core.

Organizacja transakcji

Podstawowym celem protokołu Bitcoin jest umożliwienie użytkownikom sieci dokonywania transakcji w sposób zdecentralizowany. Do tej pory, by nakreślić ogólne tło, omawialiśmy niewielkie części protokołu. Teraz połączymy te koncepcje w jeden

model i zajmiemy się łańcuchem bloków. Ostatecznym rezultatem wydobywania jest zwiększanie liczby bloków wraz z rozwojem sieci w czasie. By pojąć, jak przebiegają transakcje między dwoma użytkownikami (Alice i Bobem), musimy najpierw zrozumieć strukturę bloków, w których są one zapisywane. Mówiąc najprościej, blockchain jest zbiorem bloków połączonych ze sobą zgodnie z dwoma głównymi regułami:

■ Wewnętrzna spójność – istnieje kilka zasad determinujących funkcjonowanie bloków, dzięki którym są one wewnętrznie spójne. Przykładowo, każdy blok łańcucha jest połączony z blokiem poprzednim i ma znacznik czasu określający moment jego utworzenia. Te mechanizmy blockchaina sprawiają, że jest on wewnętrznie uporządkowaną strukturą danych przechowującą spójny zapis transakcji.

■ Konsensus dotyczący transakcji – wydobywanie opisane w rozdziale 2 jest tylko jednym ze sposobów weryfikacji transakcji; istnieją także inne metody, nieoparte na obliczaniu skrótów w trybie brute force. Bądź co bądź każda implementacja zakłada schemat osiągania konsensusu dotyczącego transakcji przeprowadzonych w sieci w określonym przedziale czasu. Proces weryfikacji zawsze zakłada użycie jakiegoś rodzaju dowodu pracy lub innej strategii, dzięki której transakcje są gromadzone w puli, a następnie sprawdzane przez użytkowników sieci.

W podstawowym sensie transakcja to struktura danych, którą zapisuje się w bloku. Jak dokładnie to się odbywa? Żeby prześledzić ten proces, spójrzmy na pełną strukturę bloku przedstawioną na ilustracji 3.1. Każdy z bloków ma przynajmniej dwa unikalne elementy: nagłówek bloku zawierający unikalny skrót (nazywany korzeniem Merkle’a; ang. Merkle root), który identyfikuje ten i tylko ten blok, oraz listę transakcji zawierającą nowe transakcje. Zauważmy, że każdy blok zawiera tę samą liczbę transakcji na liście, ale są to transakcje różne. Wynika to stąd, że co dziesięć minut w wyścigu górników wygrywa tylko jeden blok, a pozostałe bloki kandydujące zostają odrzucone, po czym wyścig zaczyna się od początku. W tym uproszczonym modelu istnieją jedynie dwa dodatkowe elementy bloku: rozmiar bloku, który pozostaje stały w obrębie całej sieci, oraz licznik transakcji. My skupiamy się przede wszystkim na nagłówku bloku oraz liście transakcji.

Nagłówek bloku zawiera kilka stałych elementów, takich jak omawiane wcześniej wartość docelowa i nonce. W jego skład wchodzi też numer wersji kodu Bitcoin Core, na której pracował górnik zwycięzca. Unikalną częścią każdego bloku jest także znacznik czasu, który bezbłędnie identyfikuje go w sieci. Nagłówek zawiera również skrót poprzedniego bloku w łańcuchu, a także inny specjalny skrót, który identyfikuje dany blok, zwany korzeniem Merkle’a. Powstawanie korzenia Merkle’a omówimy w dalszej części tego rozdziału.

DOWÓD ŻYCIA. W ostatnim czasie pojawiły się plotki, że Julian Assange, założyciel WikiLeaks, umarł. W odpowiedzi, by udowodnić, że to nieprawda, Assange odbył na Reddicie sesję Ask Me Anything i odczytał skrót ostatniego bloku w blockchainie. Blok został utworzony zaledwie dziesięć minut wcześniej, więc nagranie nie mogło powstać przed tą chwilą, co stało się niezaprzeczalnym dowodem, że Assange żyje. Wówczas po raz pierwszy skrót bloku został wykorzystany w przestrzeni kultury popularnej. Assange określił to dowodem życia.

Ilustracja 3.1. Uproszczona struktura bloku

Nagłówek i lista transakcji to dwa niepowtarzalne elementy każdego bloku. Nagłówek składa się z kilku mniejszych części, z których najbardziej swoistą stanowi korzeń Merkle’a, skrót, który bezbłędnie identyfikuje dany blok. Na nagłówek składa się skrót poprzedniego bloku, nonce użyta do utworzenia obecnego bloku i trudność wydobywania. Są to standardowe elementy związane z wydobywaniem, które omówiliśmy już wcześniej. Każdy blok zawiera także listę transakcji. Oprócz rzeczy-

naprzód jest wdrożenie przez Microsoft w chmurze Azure Blockchain as a Service (BaaS). Aplikacje rozproszone (DApp) oparte na Ethereum są projektowane i publikowane przy wykorzystaniu innych elementów komputera światowego, takich jak Mist.

Podstawy Ethereum

Była połowa 2013 roku, kiedy przeważająca część społeczności skupionej wokół Bitcoina wdała się w romans z ideą rozszerzenia jego zastosowań, tak by stał się czymś więcej niż tylko walutą. Wkrótce nastąpił napływ nowych pomysłów, nad którymi debatowano na internetowych forach. Powszechne przykłady to rejestracja domen, ubezpieczanie aktywów, głosowanie czy internet rzeczy (IoT). Kiedy szum osłabł, poważniejsze analizy pokazały, że budowa protokołu Bitcoin znacząco ogranicza możliwość oparcia na nim aplikacji.

Kluczowym punktem debaty było pytanie, czy w ramach blockchaina powinien być dozwolony pełny język skryptowy, czy też aplikacje powinno się tworzyć za pomocą logiki spoza blockchaina. Debatę wywołały dwa kluczowe zagadnienia:

■ Język skryptowy i OPCODES protokołu Bitcoin zostały zaprojektowane jako bardzo ograniczone funkcjonalnie.

■ Protokół sam w sobie nie był wystarczająco ogólny, a kryptowaluty, takie jak Namecoin i inne, wyspecjalizowały się w konkretnym zadaniu. Główne pytanie, jakie wówczas stawiano, brzmiało: Jak sprawić, by protokół był na tyle ogólny, że będzie cechował się kompatybilnością w przód względem zastosowań, o których obecnie nic nie wiemy?

Ostatecznie wyłoniły się dwie szkoły reprezentujące odmienne poglądy na język skryptowy. Dokument Nakamoto będący przykładem podejścia klasycznego proponował, by język skryptowy był bardzo ograniczony funkcjonalnie. Pozwoliłoby to uniknąć problemów z bezpieczeństwem, jakie niosłaby za sobą obecność w blockchainie kodu wykonywalnego. W pewnym sensie kod wykonywalny blockchaina jest ograniczony do garstki podstawowych operacji aktualizujących stany rozproszone. Drugą szkołę reprezentował Buterin, który pojmował łańcuch bloków jako coś więcej niż tylko rejestr. Stworzył on wizję blockchaina jako platformy obliczeniowej, która może wykonywać dobrze zdefiniowane funkcje za pomocą umów i argumentów. Konstrukcja EVM pozwala na całkowite odizolowanie kodu wykonywalnego i bezpieczne działanie opartych na niej aplikacji. Zacznijmy od zasad budowy Ethereum i stojącej za nim głównej idei.

GŁÓWNA IDEA. W przypadku Ethereum zamiast platformy wspierającej konkretne zastosowania tworzy się platformę wspierającą natywny język programowania, który dzięki swej rozszerzalności pozwala na wdrażanie w jej ramach logiki biznesowej.

Wkrótce wrócimy do rozważenia implikacji tej zasady. Tymczasem pomówmy o innej własności Ethereum, jaką jest konsensus. Koncepcję konsensusu omawialiśmy w poprzednich rozdziałach: w przypadku kryptowalut opartych na dowodzie pracy (PoW) sieć wynagradza górników, którzy rozwiązali kryptograficzną zagadkę, zatwierdzili transakcje i wydobyli nowe bloki. Ethereum zamierza wprowadzić inny algorytm konsensusu, zwany dowodem stawki (PoS). W algorytmie tym podmiot zatwierdzający czy twórca następnego bloku zostaje wybrany w pseudolosowy sposób na podstawie stawki, jaką w sieci ma konto. Im wyższą stawkę ma się w sieci, tym większa szansa na otrzymanie tej roli. Następnie podmiot zatwierdzający zaczyna wykuwanie kolejnego bloku i otrzymuje wynagrodzenie od sieci. W tym przypadku podmiot taki naprawdę wykuwa blok (jak kowal) zamiast go wydobywać, ponieważ w PoS koncept wydobywania opartego na sprzęcie został zastąpiony wirtualną stawką. Do pewnego stopnia przesłanką przechodzenia na PoS są wysokie wymagania energetyczne algorytmów PoW, które stały się powszechną bolączką. Peercoin był pierwszą kryptowalutą, która użyła PoS, ale bardziej znaczące implementacje dokonane w ostatnim czasie dotyczą ShadowCash, Nxt i Qora. Główne różnice między Bitcoinem a Ethereum jako protokołami zostały wyszczególnione na ilustracji 4.1.

Ilustracja 4.1. Porównanie Bitcoina i Ethereum jako platform obliczeniowych

cją i chce odzyskać swoją część etheru przed jej realizacją, może przedstawić i przyjąć propozycję specjalnego typu, dotyczącą utworzenia nowej DAO. Posiadacze tokenów, którzy poparli propozycję, mogą wówczas podzielić DAO i przesunąć swoje środki w etherze do nowej organizacji, doprowadzając do tego, że reszta będzie mogła dysponować jedynie swoim etherem.

Niestety, sposób, w jaki wdrożono narzędzie podziału, przyczynił się do powstania katastrofalnego błędu wielobieżności, który przesądził o podatności The DAO na atak9. Innymi słowy, ktoś mógł rekurencyjnie dzielić The DAO i wypłacać w nieskończoność środki w ETH równe jego początkowej inwestycji jeszcze przed zarejestrowaniem wypłaty w umowie pierwotnej The DAO.

Oto słaby punkt znaleziony w pliku umowy Solidity pod nazwą DAO.sol:

function splitDAO( uint _proposalID, address _newCurator ) noEther onlyTokenholders returns (bool _success) {

// [Added for explanation] The first step moves Ether and assigns new tokens uint fundsToBeMoved = (balances[msg.sender] * p.splitData[0].splitBalance) / p.splitData[0].totalSupply; if (p.splitData[0].newDAO.createTokenProxy.value(fundsToBeMoved)(msg.sender) == false) //

[Added for explanation] This is the line that splits the DAO before updating the funds in the account calling for the split ...

// Burn DAO Tokens

Transfer(msg.sender, 0, balances[msg.sender]); withdrawRewardFor(msg.sender); // be nice, and get his rewards // [Added for explanation] The previous line is key in that it is called before totalSupply and balances[msg.sender] are updated to reflect the new balances after the split has been performed

9 Wielobieżność jest cechą oprogramowania, którego procedura może zostać przerwana podczas wykonywania, a następnie uruchomiona od początku, gdy jednocześnie pozostała część procedury oczekuje w kolejce do wykonania.

totalSupply -= balances[msg.sender]; // [Added for explanation] This happens after the split balances[msg.sender] = 0; // [Added for explanation] This also happens after the split paidOut[msg.sender] = 0; return true; }

Jak widać, The DAO odwołuje się do tablicy balances w celu określenia, ile tokenów DAO może zostać przesuniętych. Wartość p.splitData[0] jest własnością propozycji przedkładanej w The DAO, a nie własnością samej The DAO. Właśnie to, w połączeniu w faktem, że WithdrawRewardFor jest wywoływane, zanim dochodzi do aktualizacji balances[], sprawiło, że atakujący mógł wywoływać fundsToBeMoved w nieskończoność, jako że jego saldo ciągle zwracało pierwotną wartość.

Bliższe przyjrzenie się withdrawRewardFor() ujawnia warunki, które uczyniły to możliwym:

function withdrawRewardFor(address _account) noEther internal returns (bool _success) { if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account]) throw;

uint reward = (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account]; if (!rewardAccount.payOut(_account, reward)) // [Added for explanation] this is the statement that is vulnerable to the recursion attack. We must go deeper. throw; paidOut[_account] += reward; return true; }

Przyjmując, że pierwsza instrukcja przyjmuje wartość „fałsz”, zostaje uruchomiona instrukcja oznaczona jako słaby punkt. Musimy wykonać jeszcze jeden krok, by w pełni zrozumieć, jak haker był w stanie to wykorzystać. Gdy po raz pierwszy wywoływane jest withdrawRewardFor (a więc gdy haker ma jeszcze prawdziwe środki na koncie, które może wypłacić), pierwsza instrukcja prawidłowo przyjmuje wartość „fałsz”, co uruchamia następujący kod:

Ilustracja 10. 3. Model Birch–Brown–Parulava

Model ten pomaga użytkownikowi w rozstrzygnięciu, czy wdrożyć rejestr z uprawnieniami, czy bez uprawnień. Od tego w dużym stopniu zależy decyzja na temat bazowego oprogramowania, na przykład wybór między Ethereum a Quorum.

Następnym modelem decyzyjnym jest IBM. Przedstawiono go na ilustracji 10.4.

Ilustracja 10.4. Diagram decyzyjny IBM określający, kiedy korzystać z blockchaina

Modele decyzyjne. Czy potrzebujesz blockchaina?

W kontekście tego diagramu warto uwypuklić ważną kwestię – w jaki sposób pewne decyzje są związane z określonymi funkcjami blockchaina. Na przykład relacja wynikająca z umowy może być dobrze realizowana w blockchainie za pomocą inteligentnych umów. Diagram może stać się dobrym sprawdzianem wstępnym kompatybilności blockchaina i funkcji, które oferuje, z twoim projektem.

Ostatni rozważany przez nas model decyzyjny, zaproponowany przez Wüsta i Gervaisa w dokumencie zatytułowanym „Czy potrzebujesz blockchaina?”, pokazano na ilustracji 10.5. Naszym zdaniem łączy on koncepcje dwóch poprzednich modeli.

Ilustracja 10.5. Model Wüsta–Gervaisa

Model ten próbuje określić zarówno sposoby wdrażania blockchaina, jak i odpowiedzieć na pytanie, czy w ogóle powinieneś rozważać takie rozwiązanie. Koncepcje przypominają te z poprzednich modeli, ale ścieżka nieco się różni, otwierając dodatkowe możliwości.

Błyskawiczne tworzenie prototypów z Hyperledger Composer

Hyperledger Composer to zestaw abstrakcji aplikacji wysokiego poziomu do modelowania twojego biznesu. Gdy uznasz, że twoja inicjatywa może skorzystać na wpro-

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.