Szczegóły ebooka

Ethereum dla zaawansowanych. Tworzenie inteligentnych kontraktów i aplikacji zdecentralizowanych

Ethereum dla zaawansowanych. Tworzenie inteligentnych kontraktów i aplikacji zdecentralizowanych

Andreas M. Antonopoulos, Gavin Wood

Ebook

Ethereum to platforma służąca do obsługi kryptowalut. Została zaprojektowana z zachowaniem wysokich standardów bezpieczeństwa i transparentności. Umożliwia uruchamianie zdecentralizowanych aplikacji (DApp) i inteligentnych kontraktów, które nie mają scentralizowanej kontroli ani pojedynczego punktu podatności na awarie i są zintegrowane z siecią obsługi płatności oraz operują na otwartym łańcuchu bloków. Ethereum cieszy się dużym zainteresowaniem takich organizacji jak IBM, Microsoft, NASDAQ, które coraz bardziej angażują się w korzystanie z tej platformy.

Ta książka jest praktycznym poradnikiem i encyklopedycznym źródłem wiedzy o Ethereum przeznaczonym dla programistów, którzy chcą przyswoić praktyczną wiedzę o łańcuchach bloków oraz tworzeniu inteligentnych kontraktów i zdecentralizowanych aplikacji - DApp. Znalazły się tu zarówno podstawowe informacje, jak i szereg zaawansowanych zagadnień związanych z Ethereum. Opisano, w jaki sposób tworzy się w nim transakcje, przedstawiono kwestie związane z kluczem publicznym, skrótami i podpisami cyfrowymi. Poszczególne zagadnienia, a także najlepsze praktyki, wzorce projektowe i antywzorce z obszaru bezpieczeństwa uzupełniono starannie opracowanymi przykładami kodu.

W tej książce między innymi:

  • uruchamianie klienta Ethereum
  • korzystanie z portfeli cyfrowych
  • interakcje z klientami Ethereum za pomocą wywołań RPC
  • tokeny reprezentujące aktywa, udziały czy głosy
  • budowa zdecentralizowanych aplikacji z użyciem komponentów w modelu P2P

Ethereum: oto nowy wymiar innowacji w programowaniu!


Przedmowa 15

Krótki słownik 25

1. Czym jest Ethereum? 37

  • Porównanie do Bitcoina 37
  • Komponenty łańcucha bloków 38
  • Narodziny Ethereum 39
  • Cztery wersje w rozwoju Ethereum 40
  • Ethereum - łańcuch bloków o ogólnym przeznaczeniu 41
  • Komponenty Ethereum 42
    • Lektura dodatkowa 43
  • Ethereum i kompletność w sensie Turinga 43
    • Kompletność w sensie Turinga jako "pożądana cecha" 44
    • Skutki kompletności w sensie Turinga 44
  • Od łańcuchów bloków ogólnego użytku do aplikacji DApp 45
  • Trzecia era internetu 45
  • Kultura rozwoju Ethereum 46
  • Dlaczego warto poznać Ethereum? 47
  • Czego nauczysz się dzięki tej książce? 47

2. Podstawy Ethereum 49

  • Jednostki waluty ether 49
  • Wybieranie portfela Ethereum 50
  • Kontrola i odpowiedzialność 51
  • Rozpoczynanie pracy z portfelem MetaMask 52
    • Tworzenie portfela 53
    • Zmienianie sieci 55
    • Zdobywanie testowych etherów 56
    • Wysyłanie etherów z portfela MetaMask 58
    • Przeglądanie historii transakcji dla adresu 59
  • Wprowadzenie do światowego komputera 60
  • Konta EOA i konta kontraktów 61
  • Prosty kontrakt - kran z testowymi etherami 61
  • Kompilowanie kontraktu Faucet 64
  • Tworzenie kontraktu w łańcuchu bloków 66
  • Interakcja z kontraktem 67
    • Wyświetlanie adresu kontraktu w eksploratorze bloków 68
    • Zasilanie kontraktu 68
    • Wycofywanie środków z kontraktu 69
  • Podsumowanie 72

3. Klienty Ethereum 73

  • Sieci Ethereum 74
    • Czy powinieneś uruchamiać pełny węzeł? 74
    • Wady i zalety pełnych węzłów 75
    • Wady i zalety publicznych sieci testowych 75
    • Wady i zalety lokalnego symulowania pracy łańcuchów bloków 76
  • Uruchamianie klienta Ethereum 77
    • Wymagania sprzętowe związane z pełnym węzłem 77
    • Wymagania programowe dotyczące budowania i uruchamiania klientów (węzłów) 78
    • Klient Parity 79
    • Klient Go-Ethereum (Geth) 80
  • Pierwsza synchronizacja łańcuchów bloków opartych na Ethereum 82
    • Uruchamianie klienta Geth lub Parity 83
    • Interfejs JSON-RPC 83
  • Zdalne klienty Ethereum 85
    • Portfele mobilne (na smartfony) 86
    • Portfele działające w przeglądarkach 86
  • Podsumowanie 88

4. Kryptografia 89

  • Klucze i adresy 89
  • Kryptografia klucza publicznego a kryptowaluty 90
  • Klucze prywatne 92
    • Generowanie klucza prywatnego na podstawie liczby losowej 92
  • Klucze publiczne 94
    • Kryptografia krzywej eliptycznej 95
    • Operacje arytmetyczne na krzywej eliptycznej 97
    • Generowanie klucza publicznego 98
    • Biblioteki do pracy z krzywą eliptyczną 99
  • Kryptograficzne funkcje skrótu 99
    • Kryptograficzna funkcja skrótu w Ethereum - Keccak-256 101
    • Z której funkcji skrótu korzystasz? 101
  • Adresy Ethereum 102
    • Formaty adresów Ethereum 102
    • Protokół ICAP 103
    • Kodowanie szesnastkowe z sumami kontrolnymi opartymi na wielkości liter (EIP-55) 104
  • Podsumowanie 106

5. Portfele 107

  • Przegląd technologii używanych w portfelach 107
    • Portfele niedeterministyczne (losowe) 108
    • Portfele deterministyczne (z ziarnem) 110
    • Portfele HD (BIP-32 i BIP-44) 110
    • Ziarna i kody mnemoniczne (BIP-39) 110
  • Zalecane praktyki dotyczące portfeli 112
    • Kody mnemoniczne (BIP-39) 112
    • Tworzenie portfela HD na podstawie ziarna 118
    • Portfele HD (BIP-32) i ścieżki (BIP-43/44) 119
  • Podsumowanie 123

6. Transakcje 125

  • Struktura transakcji 125
  • Wartość nonce w transakcji 126
    • Śledzenie wartości nonce 127
    • Luki w wartościach nonce, powtarzające się wartości nonce i zatwierdzanie 129
    • Współbieżność, źródło transakcji i wartości nonce 130
  • Paliwo dla transakcji 131
  • Odbiorca transakcji 132
  • Wartość i dane transakcji 133
    • Przekazywanie środków do kont EOA i kontraktów 135
    • Przekazywanie danych do kont EOA lub kontraktów 135
  • Specjalne transakcje - tworzenie kontraktu 137
  • Podpisy cyfrowe 139
    • Algorytm ECDSA 139
    • Jak działają podpisy cyfrowe? 140
    • Sprawdzanie poprawności podpisu 140
    • Obliczenia w algorytmie ECDSA 141
    • Podpisywanie transakcji w praktyce 142
    • Tworzenie i podpisywanie nieprzetworzonych transakcji 143
    • Tworzenie nieprzetworzonych transakcji zgodnych z EIP-155 143
  • Przedrostek w podpisie (v) i odzyskiwanie klucza publicznego 144
  • Oddzielanie podpisywania od przesyłania (podpisywanie w trybie offline) 145
  • Rozsyłanie transakcji 147
  • Rejestrowanie danych w łańcuchu bloków 147
  • Transakcje z wieloma podpisami 148
  • Podsumowanie 148

7. Inteligentne kontrakty i język Solidity 149

  • Czym jest inteligentny kontrakt? 149
  • Cykl życia inteligentnego kontraktu 150
  • Wprowadzenie do wysokopoziomowych języków w Ethereum 151
  • Tworzenie inteligentnego kontraktu za pomocą Solidity 153
    • Wybieranie wersji języka Solidity 153
    • Pobieranie i instalowanie Solidity 154
    • Środowisko programistyczne 154
    • Pisanie prostego programu w języku Solidity 155
    • Kompilowanie przy użyciu kompilatora Solidity (solc) 155
  • Interfejs ABI kontraktów w Ethereum 155
    • Wybieranie kompilatora Solidity i wersji języka 156
  • Programowanie w języku Solidity 157
    • Typy danych 157
    • Wbudowane zmienne globalne i funkcje 159
    • Definicja kontraktu 161
    • Funkcje 162
    • Konstruktor kontraktu i polecenie selfdestruct 163
    • Dodawanie konstruktora i polecenia selfdestruct do kontraktu Faucet 164
    • Modyfikatory funkcji 165
    • Dziedziczenie kontraktów 166
    • Obsługa błędów (assert, require i revert) 168
    • Zdarzenia 169
    • Wywoływanie innych kontraktów (polecenia send, call, callcode i delegatecall) 172
  • Kwestie związane z paliwem 176
    • Unikanie tablic o dynamicznie określanej wielkości 177
    • Unikanie wywołań innych kontraktów 177
    • Szacowanie kosztów paliwa 177
  • Podsumowanie 178

8. Inteligentne kontrakty i język Vyper 179

  • Luki a Vyper 179
  • Porównanie z Solidity 180
    • Modyfikatory 180
    • Dziedziczenie klas 181
    • Wewnątrzwierszowe stosowanie asemblera 181
    • Przeciążanie funkcji 182
    • Rzutowanie typów zmiennych 182
    • Warunki wstępne i końcowe 183
  • Dekoratory 184
  • Kolejność funkcji i zmiennych 184
  • Kompilacja 185
  • Ochrona przed błędami przepełnienia na poziomie kompilatora 186
  • Odczyt i zapis danych 186
  • Podsumowanie 187

9. Bezpieczeństwo inteligentnych kontraktów 189

  • Zalecane praktyki z zakresu bezpieczeństwa 189
  • Zagrożenia z obszaru bezpieczeństwa i antywzorce 190
  • Wielobieżność 190
    • Praktyczny przykład - The DAO 194
  • Przepełnienie i niedopełnienie arytmetyczne 194
    • Przykłady praktyczne - PoWHC i przepełnienie przy transferze zbiorczym (CVE-2018-10299) 198
  • Nieoczekiwane ethery 198
    • Więcej przykładów 202
  • DELEGATECALL 202
    • Praktyczny przykład - portfel Parity z wielopodpisem (drugi atak) 206
  • Domyślne poziomy widoczności 207
    • Praktyczny przykład - portfel Parity z wielopodpisem (pierwszy atak) 208
  • Złudzenie losowości 209
    • Praktyczny przykład - kontrakty z generatorami liczb pseudolosowych 210
  • Korzystanie z zewnętrznych kontraktów 210
    • Praktyczny przykład - przynęta i wielobieżność 214
  • Atak związany z krótkimi adresami i parametrami 215
  • Niesprawdzanie wartości zwracanych przez funkcję call 217
    • Przykład praktyczny - kontrakty Etherpot i King of the Ether 218
  • Sytuacje wyścigu i front running 219
    • Praktyczne przykłady - ERC20 i Bancor 221
  • Ataki DoS 221
    • Praktyczny przykład - GovernMental 223
  • Manipulowanie znacznikiem czasu bloku 224
    • Praktyczny przykład - GovernMental 225
  • Ostrożnie z konstruktorami 225
    • Praktyczny przykład - Rubixi 226
  • Niezainicjowane wskaźniki do pamięci trwałej 226
    • Praktyczne przykłady - przynęty OpenAddressLottery i CryptoRoulette 228
  • Liczby zmiennoprzecinkowe i precyzja 229
    • Praktyczny przykład - Ethstick 230
  • Uwierzytelnianie z użyciem zmiennej tx.origin 230
  • Kontrakty bibliotek 232
  • Podsumowanie 233

10. Tokeny 235

  • W jaki sposób tokeny są używane? 235
  • Tokeny i wymienność 237
  • Ryzyko związane z drugą stroną transakcji 237
  • Tokeny i nieodłączność (wewnętrzność) 237
  • Używanie tokenów - narzędzia czy aktywa 238
    • To kaczka! 239
    • Tokeny narzędziowe - komu są potrzebne? 239
  • Tokeny w Ethereum 240
    • Standard ERC20 241
    • Tworzenie własnego tokenu ERC20 244
    • Problemy z tokenami ERC20 254
    • ERC223 - proponowany standard interfejsu kontraktów tokenów 255
    • ERC777 - proponowany standard interfejsu kontraktów tokenów 256
    • ERC721 - standard niewymiennych tokenów 258
  • Stosowanie standardów związanych z tokenami 260
    • Czym są standardy dotyczące tokenów? Do czego służą? 260
    • Czy powinieneś stosować opisane standardy? 260
    • Bezpieczeństwo dzięki dojrzałości 261
  • Rozszerzenia standardów dotyczących interfejsów tokenów 261
  • Tokeny i emisje ICO 262
  • Podsumowanie 263

11. Wyrocznie 265

  • Dlaczego potrzebne są wyrocznie? 265
  • Przypadki użycia wyroczni i przykłady 266
  • Wzorce projektowe dotyczące wyroczni 267
  • Uwierzytelnianie danych 270
  • Wyrocznie obliczeniowe 271
  • Zdecentralizowane wyrocznie 272
  • Interfejsy klientów wyroczni w języku Solidity 273
  • Podsumowanie 277

12. Zdecentralizowane aplikacje (DApp) 279

  • Czym jest aplikacja DApp? 280
    • Back-end (inteligentny kontrakt) 281
    • Front-end (internetowy interfejs użytkownika) 281
    • Przechowywanie danych 282
    • Zdecentralizowane protokoły przekazywania komunikatów 282
  • Prosta przykładowa aplikacja DApp - Auction 283
    • Aplikacja Auction - inteligentne kontrakty back-endu 284
    • Aplikacja Auction - front-endowy interfejs użytkownika 287
  • Dalsze decentralizowanie aplikacji Auction 288
  • Zapisywanie aplikacji Auction w systemie Swarm 289
    • Przygotowywanie systemu Swarm 289
    • Przesyłanie plików do systemu Swarm 290
  • Usługa Ethereum Name Service (ENS) 292
    • Historia usługi ENS 292
    • Specyfikacja usługi ENS 292
    • Dolna warstwa - właściciele nazw i resolwery 293
    • Warstwa pośrednia - węzły .eth 295
    • Najwyższa warstwa - tokeny deed 296
    • Rejestrowanie nazwy 297
    • Zarządzanie nazwą w usłudze ENS 300
    • Resolwery w usłudze ENS 301
    • Tłumaczenie nazwy na skrót w systemie Swarm (treść) 302
  • Od tradycyjnych aplikacji do aplikacji DApp 303
  • Podsumowanie 304

13. Maszyna wirtualna Ethereum 305

  • Czym jest maszyna EVM? 305
    • Porównanie z istniejącymi technologiami 307
    • Zbiór instrukcji maszyny EVM (operacje w kodzie bajtowym) 307
    • Stan w Ethereum 310
    • Kompilowanie kodu w języku Solidity do kodu bajtowego maszyny EVM 311
    • Kod do instalowania kontraktu 314
    • Dezasemblacja kodu bajtowego 315
  • Kompletność w sensie Turinga a paliwo 319
  • Paliwo 320
    • Obliczanie zużycia paliwa w trakcie wykonywania kodu 320
    • Uwagi związane z obliczaniem zużycia paliwa 321
    • Zużycie paliwa a cena paliwa 321
    • Limit paliwa dla bloku 322
  • Podsumowanie 323

14. Konsensus 325

  • Konsensus oparty na dowodach pracy 326
  • Osiąganie konsensusu na podstawie dowodów stawki 326
  • Ethash - algorytm dowodów pracy w Ethereum 327
  • Casper - algorytm dowodów stawki dla Ethereum 328
  • Reguły osiągania konsensusu 329
  • Kontrowersje i konkurencja 329
  • Podsumowanie 330

A. Historia forków w Ethereum 331

B. Standardy używane w Ethereum 339

C. Kody operacji i zużycie paliwa w maszynie EVM w Ethereum 347

D. Narzędzia programistyczne, platformy i biblioteki 355

E. Biblioteka web3.js - samouczek 373

F. Krótkie odsyłacze 377

Skorowidz 379

  • Tytuł: Ethereum dla zaawansowanych. Tworzenie inteligentnych kontraktów i aplikacji zdecentralizowanych
  • Autor: Andreas M. Antonopoulos, Gavin Wood
  • Tytuł oryginału: Mastering Ethereum: Building Smart Contracts and Dapps
  • Tłumaczenie: Tomasz Walczak
  • ISBN: 978-83-283-5575-0, 9788328355750
  • Data wydania: 2019-09-17
  • Format: Ebook
  • Identyfikator pozycji: ethzaa
  • Wydawca: Helion