Ethereum dla zaawansowanych. Tworzenie inteligentnych kontraktów i aplikacji zdecentralizowanych - ebook
Ethereum dla zaawansowanych. Tworzenie inteligentnych kontraktów i aplikacji zdecentralizowanych - 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!
Spis treści
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
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-5575-0 |
Rozmiar pliku: | 7,6 MB |