Bitcoin dla zaawansowanych
Programowanie z użyciem otwartego łańcucha bloków
Być może słowo „bitcoin” kojarzy Ci się z niezwykle skomplikowanym i
niebezpiecznym półświatkiem cyberprzestępców. Możliwe, że widzisz w rozwoju tej
kryptowaluty szansę ucieczki przed pazernością bankierów. A może po prostu chcesz
dokładniej dowiedzieć się, czym jest ta technologia, jakie może mieć wkrótce
znaczenie dla nowoczesnych firm i jak ją wykorzystać we własnych aplikacjach. Warto!
Zdecentralizowana waluta bitcoin, choć wciąż jest na wczesnym etapie rozwoju, już
zapoczątkowała warty wiele miliardów dolarów globalny rynek otwarty dla każdego, kto
posiada wiedzę, pasję i jest gotów do działania.
Niniejsza książka jest przeznaczona dla każdego, kto chce zrozumieć zasady
funkcjonowania bitcoina i kryptowalut.
Skorzystają z niej zwłaszcza programiści, którzy będą mogli nauczyć się pisania
oprogramowania związanego z bitcoinem. Znalazło się tu objaśnienie technicznych
podstaw bitcoina i kryptowalut, podano informacje na temat zdecentralizowanej sieci
bitcoina, architektury P2P, cyklu życia transakcji i zasad bezpieczeństwa, a także omówienie
nowych technologii. Sporo miejsca poświęcono zastosowaniom łańcucha bloków. Dzięki
ciekawie i zrozumiale przedstawionym informacjom zawartym w książce zyskasz aktualną
wiedzę, która pozwoli Ci wkroczyć na ścieżkę bitcoina!
W tej książce między innymi:
- zasady funkcjonowania bitcoina i łańcucha bloków (zrozumie je nawet nieinżynier!)
- sposób działania kryptowalut z punktu widzenia architektury systemu
- informacje o zdecentralizowanej sieci bitcoina, o tworzeniu transakcji i kopaniu
bitcoinów
- implementację wzorcową Bitcoin Core
- technologie obsługi portfeli i sieci bitcoina
Przedmowa (13)
Krótki słowniczek (21)
1. Wprowadzenie (31)
- Czym jest bitcoin? (31)
- Historia bitcoina (33)
- Zastosowania bitcoina, jego użytkownicy i ich historie (34)
- Pierwsze kroki (35)
- Wybór portfela bitcoina (36)
- Szybkie wprowadzenie (38)
- Pozyskiwanie pierwszego bitcoina (39)
- Określanie aktualnej ceny bitcoinów (40)
- Przesyłanie i otrzymywanie bitcoinów (41)
2. Jak działają bitcoiny? (43)
- Transakcje, bloki, kopanie i łańcuch bloków (43)
- Omówienie bitcoinów (43)
- Zakup kubka kawy (44)
- Transakcje w bitcoinach (46)
- Wejścia i wyjścia w transakcjach (46)
- Łańcuchy transakcji (46)
- Wydawanie reszty (48)
- Typowe formy transakcji (48)
- Tworzenie transakcji (49)
- Wybór odpowiednich wejść (50)
- Generowanie wyjść (51)
- Dodawanie transakcji do księgi (52)
- Kopanie bitcoinów (53)
- Kopanie bloków transakcji (54)
- Wydawanie środków z transakcji (56)
3. Bitcoin Core - implementacja wzorcowa (59)
- Środowisko programistyczne związane z bitcoinami (60)
- Budowanie implementacji Bitcoin Core z użyciem kodu źródłowego (60)
- Wybór wersji implementacji Bitcoin Core (61)
- Konfigurowanie budowania implementacji Bitcoin Core (62)
- Budowanie plików wykonywalnych implementacji Bitcoin Core (64)
- Uruchamianie węzła z implementacją Bitcoin Core (65)
- Pierwsze uruchamianie implementacji Bitcoin Core (66)
- Konfigurowanie węzła z implementacją Bitcoin Core (66)
- Interfejs API oprogramowania Bitcoin Core (70)
- Pobieranie informacji na temat stanu klienta Bitcoin Core (71)
- Sprawdzanie i dekodowanie transakcji (72)
- Badanie bloków (73)
- Używanie programowego interfejsu oprogramowania Bitcoin Core (74)
- Inne klienty, biblioteki i pakiety narzędzi (77)
- C i C++ (77)
- JavaScript (78)
- Java (78)
- Python (78)
- Ruby (78)
- Go (79)
- Rust (79)
- C# (79)
- Objective-C (79)
4. Klucze i adresy (81)
- Wprowadzenie (81)
- Kryptografia z użyciem klucza publicznego a kryptowaluty (82)
- Klucze prywatny i publiczny (83)
- Klucze prywatne (83)
- Klucze publiczne (85)
- Objaśnienie kryptografii z użyciem krzywej eliptycznej (86)
- Generowanie klucza publicznego (88)
- Adresy bitcoin (90)
- Kodowanie Base58 i Base58Check (91)
- Formaty kluczy (95)
- Obsługa kluczy i adresów w Pythonie (101)
- Zaawansowane postacie kluczy i adresów (104)
- Szyfrowane klucze prywatne (BIP-38) (104)
- Adresy P2SH i adresy wielopodpisowe (105)
- Adresy vanity (106)
- Portfele papierowe (111)
5. Portfele (115)
- Przegląd technologii obsługi portfeli (115)
- Portfele niedeterministyczne (losowe) (116)
- Portfele deterministyczne (z ziarnem) (117)
- Portfele HD (oparte na dokumentach BIP-32 i BIP-44) (117)
- Ziarna i kody mnemoniczne (BIP-39) (118)
- Dobre praktyki związane z portfelami (119)
- Używanie portfela bitcoinów (119)
- Szczegółowe omówienie technologii używanych w portfelach (121)
- Mnemoniczne słowa kodowe (BIP-39) (121)
- Tworzenie portfela HD na podstawie ziarna (126)
- Używanie rozszerzonego klucza publicznego w sklepie internetowym (132)
6. Transakcje (137)
- Wprowadzenie (137)
- Szczegółowe omówienie transakcji (137)
- Transakcje - operacje wykonywane na zapleczu (137)
- Wyjścia i wejścia transakcji (139)
- Wyjścia transakcji (140)
- Wejścia transakcji (142)
- Opłaty transakcyjne (145)
- Dodawanie opłat do transakcji (148)
- Skrypty transakcji i język Script (149)
- Niekompletność w sensie Turinga (150)
- Weryfikacja bezstanowa (150)
- Tworzenie skryptów (blokowanie i odblokowywanie) (150)
- Skrypt P2PKH (154)
- Podpisy cyfrowe (ECDSA) (155)
- Jak działają podpisy cyfrowe? (157)
- Sprawdzanie poprawności podpisu (158)
- Typy skrótów podpisów (SIGHASH) (158)
- Obliczenia w algorytmie ECDSA (160)
- Znaczenie losowości w podpisach (162)
- Adresy bitcoin, stan konta i inne abstrakcyjne pojęcia (162)
7. Zaawansowane transakcje i skrypty (165)
- Wprowadzenie (165)
- Skrypty wielopodpisowe (165)
- Transakcje P2SH (167)
- Adresy P2SH (169)
- Zalety stosowania P2SH (170)
- Skrypt wypłaty i sprawdzanie poprawności (170)
- Wyjścia rejestrujące dane (z operatorem RETURN) (171)
- Blokady oparte na czasie (172)
- Blokady oparte na czasie na poziomie transakcji (nLocktime) (173)
- Blokady CLTV (174)
- Względne blokady oparte na czasie (175)
- Względne blokady oparte na czasie z użyciem pola nSequence (176)
- Względne blokady oparte na czasie z operacją CSV (177)
- Mechanizm Median-Time-Past (178)
- Zabezpieczanie się przed "celowaniem w opłaty" za pomocą blokad opartych na
czasie (179)
- Skrypty z przepływem sterowania (klauzule warunkowe) (179)
- Klauzule warunkowe z kodami operacji VERIFY (180)
- Przepływ sterowania w skryptach (181)
- Przykładowy złożony skrypt (182)
8. Sieć bitcoina (185)
- Architektura sieci P2P (185)
- Typy i role węzłów (186)
- Rozszerzona sieć bitcoina (187)
- Sieć Bitcoin Relay Network (190)
- Wykrywanie sieci (190)
- Kompletne węzły (194)
- Przesyłanie "zawartości magazynu" (194)
- Węzły SPV (195)
- Filtry Blooma (198)
- Jak działają filtry Blooma? (199)
- W jaki sposób węzły SPV używają filtrów Blooma? (202)
- Węzły SPV a prywatność (203)
- Połączenia szyfrowane i uwierzytelniane (204)
- Transfer za pomocą sieci Tor (204)
- Uwierzytelnianie i szyfrowanie w sieci P2P (204)
- Pule transakcji (205)
9. Łańcuch bloków (207)
- Wprowadzenie (207)
- Struktura bloku (208)
- Nagłówek bloku (209)
- Identyfikatory bloku - skrót nagłówka bloku i wysokość bloku (209)
- Blok początkowy (210)
- Łączenie bloków w ich łańcuchu (211)
- Drzewa skrótów (212)
- Drzewa skrótów i węzły SPV (218)
- Testowe łańcuchy bloków bitcoina (218)
- Testnet - poligon doświadczalny bitcoina (219)
- Segnet - testnet z obsługą technologii Segregated Witness (220)
- Regtest - lokalny łańcuch bloków (221)
- Używanie testowych łańcuchów bloków w trakcie prac programistycznych (222)
10. Kopanie i konsensus (223)
- Wprowadzenie (223)
- Ekonomia i podaż pieniądza w systemie bitcoina (224)
- Zdecentralizowane osiąganie konsensusu (226)
- Niezależne sprawdzanie poprawności transakcji (227)
- Węzły służące do kopania (228)
- Łączenie transakcji w bloki (229)
- Transakcja coinbase (230)
- Nagrody i opłaty w transakcji coinbase (231)
- Struktura transakcji coinbase (232)
- Dane coinbase (233)
- Tworzenie nagłówka bloku (235)
- Wykopywanie bloku (236)
- Algorytm Proof-of-Work (236)
- Reprezentacja celu (242)
- Zmiana celu, aby dostosować trudność (242)
- Udane wykopanie bloku (244)
- Sprawdzanie poprawności nowego bloku (245)
- Łączenie bloków i wybieranie łańcuchów (246)
- Rozgałęzienia łańcucha bloków (247)
- Kopanie i wyścig w obliczaniu skrótów (254)
- Rozwiązanie z użyciem dodatkowej wartości nonce (256)
- Kopalnie (256)
- Ataki związane z konsensusem (260)
- Zmienianie reguł osiągania konsensusu (263)
- Twarde rozgałęzienia (263)
- Twarde rozgałęzienia: oprogramowanie, sieć, kopanie i łańcuch (264)
- Podział górników na grupy a poziom trudności (265)
- Kontrowersyjne twarde rozgałęzienia (266)
- Miękkie rozgałęzienia (267)
- Krytyka miękkich rozgałęzień (268)
- Sygnalizowanie miękkich rozgałęzień za pomocą wersji bloku (269)
- Sygnalizowanie i aktywowanie zmian w specyfikacji BIP-34 (269)
- Sygnalizowanie i aktywowanie zmian w specyfikacji BIP-9 (270)
- Rozwój oprogramowania zgodnie z konsensusem (272)
11. Bezpieczeństwo bitcoina (273)
- Reguły bezpieczeństwa (273)
- Bezpieczny rozwój systemów bitcoina (274)
- Dobre praktyki z obszaru zabezpieczeń dla użytkowników (276)
- Fizyczne przechowywanie bitcoinów (276)
- Portfele sprzętowe (277)
- Równoważenie ryzyka (277)
- Dywersyfikacja ryzyka (277)
- Wielopodpis i zarządzanie (278)
- Zachowanie dostępu (278)
- Wnioski (278)
12. Rozwiązania związane z łańcuchem bloków (279)
- Wprowadzenie (279)
- Cegiełki (podstawowe mechanizmy) (279)
- Rozwiązania oparte na cegiełkach (282)
- Colored coins (282)
- Używanie colored coins (283)
- Emisja colored coins (283)
- Transakcje z użyciem colored coins (284)
- Counterparty (287)
- Kanały płatności i kanały stanowe (287)
- Kanały stanowe - podstawowe zagadnienia i terminologia (288)
- Prosty przykładowy kanał płatności (290)
- Tworzenie kanałów niewymagających zaufania (292)
- Asymetryczne odwoływalne zobowiązania (295)
- Kontrakty HTLC (298)
- Kanały płatności z trasowaniem (Lightning Network) (299)
- Prosty przykład działania sieci Lightning Network (300)
- Przesył i trasowanie w sieci Lightning Network (303)
- Korzyści ze stosowania sieci Lightning Network (304)
- Wnioski (305)
A. Artykuł Satoshiego Nakamoty na temat bitcoina (307)
B. Operatory, stałe i symbole języka skryptowego transakcji (319)
C. Dokumenty BIP (325)
D. Mechanizm Segregated Witness (331)
E. Bitcore (343)
F. Biblioteki pycoin oraz narzędzia ku i tx (347)
G. Polecenia z narzędzia Bitcoin Explorer (bx) (355)
Skorowidz (359)
368 stron, Format: 16.7x23.7, oprawa miękka