Vorwort | 15 |
Glossar | 23 |
Kapitel 1: Einführung | 33 |
Was ist Bitcoin? | 33 |
Geschichte des Bitcoins | 36 |
Bitcoin: Anwendungsfälle, Anwender und deren Geschichten | 37 |
Erste Schritte | 38 |
Wahl einer Bitcoin-Wallet | 39 |
Schnelleinstieg | 41 |
Ihr erster Bitcoin | 43 |
Den aktuellen Bitcoin-Preis ermitteln | 44 |
Bitcoin senden und empfangen | 45 |
Kapitel 2: Wie Bitcoin funktioniert | 47 |
Transaktionen, Blöcke, Mining und die Blockchain | 47 |
Bitcoin-Übersicht | 47 |
Eine Tasse Kaffee kaufen | 48 |
Bitcoin-Transaktionen | 50 |
Inputs und Outputs von Transaktionen | 50 |
Transaktionsketten | 51 |
Wechselgeld | 52 |
Gängige Transaktionsformen | 53 |
Eine Transaktion konstruieren | 54 |
Die richtigen Inputs | 55 |
Die Outputs erzeugen | 56 |
Die Transaktion zum Kassenbuch hinzufügen | 57 |
Bitcoin-Mining | 58 |
Transaktionen in Blöcke einfügen | 60 |
Die Transaktion einlösen | 62 |
Kapitel 3: Bitcoin Core: die Referenzimplementierung | 65 |
Bitcoin-Entwicklungsumgebung | 66 |
Bitcoin Core aus dem Quellcode kompilieren | 66 |
Wahl einer Bitcoin-Core-Release | 67 |
Den Bitcoin-Core-Build konfigurieren | 68 |
Die Bitcoin-Core-Executables erzeugen | 70 |
Einen Bitcoin-Core-Knoten ausführen | 71 |
Bitcoin Core zum ersten Mal ausführen | 73 |
Den Bitcoin-Core-Knoten konfigurieren | 73 |
Bitcoin Core Application Programming Interface (API) | 77 |
Informationen zum Status des Bitcoin-Core-Clients abrufen | 78 |
Transaktionen untersuchen und decodieren | 79 |
Blöcke untersuchen | 81 |
Die Bitcoin Core API nutzen | 82 |
Alternative Clients, Bibliotheken und Toolkits | 85 |
C/C++ | 85 |
JavaScript | 86 |
Java | 86 |
Python | 86 |
Ruby | 86 |
Go | 86 |
Rust | 86 |
C# | 87 |
Objective-C | 87 |
Kapitel 4: Schlüssel und Adressen | 89 |
Einführung | 89 |
Public-Key-Kryptografie und Kryptowährungen | 90 |
Private und öffentliche Schlüssel | 91 |
Private Schlüssel | 92 |
Öffentliche Schlüssel | 94 |
Kryptografie mit elliptischen Kurven | 95 |
Einen öffentlichen Schlüssel generieren | 97 |
Bitcoin-Adressen | 99 |
Base58- und Base58Check-Codierung | 101 |
Schlüsselformate | 105 |
Schlüssel und Adressen in Python implementieren | 112 |
Fortgeschrittene Schlüssel und Adressen | 115 |
Verschlüsselte private Adressen (Encrypted Private Keys, BIP-38) | 115 |
Pay-to-Script-Hash-(P2SH-)Adressen und Multisig-Adressen | 116 |
Vanity-Adressen | 118 |
Paper-Wallets | 123 |
Kapitel 5: Wallets | 127 |
Wallet-Technologie in der Übersicht | 127 |
Nichtdeterministische (zufallsbasierte) Wallets | 128 |
Deterministische (Seed-basierte) Wallets | 129 |
HD-Wallets (BIP-32/BIP-44) | 130 |
Seeds und mnemonische Codes (BIP-39) | 131 |
Die Wallet-Best-Practices | 131 |
Eine Bitcoin-Wallet verwenden | 132 |
Details der Wallet-Technologie | 133 |
Mnemonische Codewörter (BIP-39) | 134 |
Eine HD-Wallet aus dem Seed-Wert erzeugen | 140 |
Einen erweiterten öffentlichen Schlüssel in einem Webshop nutzen | 145 |
Kapitel 6: Transaktionen | 151 |
Einführung | 151 |
Transaktionen im Detail | 151 |
Transaktionen – hinter den Kulissen | 152 |
Transaktions-Outputs und -Inputs | 153 |
Transaktions-Outputs | 155 |
Transaktions-Inputs | 157 |
Transaktionsgebühren (Fees) | 160 |
Gebühren in Transaktionen einfügen | 163 |
Transaktionsskripte und Skriptsprache | 164 |
Turing-Unvollständigkeit | 165 |
Zustandslose Verifikation | 166 |
Konstruktion von Skripten (Lock + Unlock) | 166 |
Pay-to-Public-Key-Hash (P2PKH) | 170 |
Digitale Signaturen (ECDSA) | 172 |
Wie digitale Signaturen funktionieren | 173 |
Die Signatur verifizieren | 175 |
Arten von Signatur-Hashes (SIGHASH) | 175 |
Die Mathematik hinter ECDSA | 177 |
Die Bedeutung der Zufälligkeit für Signaturen | 179 |
Bitcoin-Adressen, Guthaben und andere Abstraktionen | 179 |
Kapitel 7: Transaktionen und Skripting für Fortgeschrittene | 183 |
Einführung | 183 |
Multisignatur | 183 |
Pay-to-Script-Hash (P2SH) | 185 |
P2SH-Adressen | 187 |
Vorteile von P2SH | 188 |
Redeem-Skript und Validierung | 188 |
Data Recording Output (RETURN) | 189 |
Timelocks | 191 |
Transaktions-Locktime (nLocktime) | 191 |
Check Lock Time Verify (CLTV) | 192 |
Relative Timelocks | 194 |
Relative Timelocks mit nSequence | 195 |
Relative Timelocks mit CSV | 196 |
Median-Time-Past | 197 |
Timelock-Schutz gegen Fee-Sniping | 198 |
Skripte mit Ablaufsteuerung (Bedingungsklauseln) | 198 |
Bedingungsklauseln mit VERIFY-Opcodes | 199 |
Die Ablaufsteuerung in Skripten nutzen | 200 |
Komplexes Skriptbeispiel | 202 |
Kapitel 8: Das Bitcoin-Netzwerk | 205 |
Peer-to-Peer-Netzwerkarchitektur | 205 |
Arten und Rollen von Nodes | 206 |
Das erweiterte Bitcoin-Netzwerk | 207 |
Bitcoin-Relay-Netzwerke | 210 |
Netzwerkerkundung | 210 |
Full Nodes | 214 |
»Inventar« austauschen | 215 |
SPV-Nodes (Simplified Payment Verification) | 216 |
Bloomfilter | 219 |
Wie Bloomfilter funktionieren | 220 |
Wie SPV-Nodes Bloomfilter nutzen | 224 |
SPV-Nodes und Privatsphäre | 225 |
Verschlüsselte und authentifizierte Verbindungen | 225 |
Tor-Transport | 225 |
Peer-to-Peer-Authentifizierung und -Verschlüsselung | 226 |
Transaktionspools | 227 |
Kapitel 9: Die Blockchain | 229 |
Einführung | 229 |
Struktur eines Blocks | 230 |
Block-Header | 231 |
Blockkennungen: Block-Header und Blockhöhe | 231 |
Der Genesis-Block | 232 |
Blöcke in der Blockchain verlinken | 234 |
Merkle Trees (Hashbäume) | 234 |
Merkle Trees und Simplified Payment Verification (SPV) | 240 |
Bitcoins Test-Blockchains | 241 |
Testnet – Bitcoins Testspielwiese | 241 |
Segnet – das Segregated-Witness-Testnet | 243 |
Regtest – die lokale Blockchain | 243 |
Test-Blockchains für die Entwicklung nutzen | 244 |
Kapitel 10: Mining und Konsens | 247 |
Einführung | 247 |
Bitcoin-Ökonomie und Währungsgenerierung | 249 |
Dezentralisierter Konsens | 251 |
Unabhängige Verifikation von Transaktionen | 252 |
Mining-Nodes | 254 |
Transaktionen in Blöcken zusammenfassen | 254 |
Die Coinbase-Transaktion | 256 |
Coinbase-Belohnungen und Gebühren | 257 |
Struktur der Coinbase-Transaktion | 258 |
Coinbase-Daten | 259 |
Die Block-Header aufbauen | 261 |
Mining des Blocks | 262 |
Proof-of-Work-Algorithmus | 263 |
Target-Darstellung | 269 |
Retargeting zur Anpassung der Difficulty | 270 |
Den Block erfolgreich schürfen | 272 |
Einen neuen Block validieren | 272 |
Ketten von Blöcken zusammensetzen und auswählen | 273 |
Blockchain-Forks | 275 |
Mining und der Hashing-Wettlauf | 282 |
Die Lösung mit der Extra-Nonce | 284 |
Mining-Pools | 285 |
Konsensangriffe | 288 |
Die Konsensregeln ändern | 292 |
Hard Forks | 292 |
Hard Forks: Software, Netzwerk, Mining und die Chain | 293 |
Divergierende Miner und Difficulty | 295 |
Umstrittene Hard Forks | 296 |
Soft Forks | 296 |
Kritik an Soft Forks | 298 |
Soft-Fork-Signalisierung mittels Blockversion | 298 |
BIP-34-Signalisierung und -Aktivierung | 299 |
BIP-9-Signalisierung und -Aktivierung | 300 |
Entwicklung von Konsenssoftware | 302 |
Kapitel 11: Bitcoins und Sicherheit | 305 |
Sicherheitsgrundsätze | 305 |
Bitcoin-Systeme sicher entwickeln | 306 |
Die Wurzel des Vertrauens | 307 |
Best Practices für den Nutzer | 308 |
Physische Speicherung von Bitcoins | 309 |
Hardware-Wallets | 309 |
Risiken abwägen | 310 |
Risiken verteilen | 310 |
Multisignaturen und Kontrolle | 310 |
Überlebensfähigkeit | 310 |
Fazit | 311 |
Kapitel 12: Blockchain-Anwendungen | 313 |
Einführung | 313 |
Grundbausteine (Primitive) | 314 |
Anwendungen aus Grundbausteinen | 316 |
Colored Coins | 316 |
Colored Coins nutzen | 317 |
Colored Coins ausstellen | 318 |
Colored-Coins-Transaktionen | 318 |
Counterparty | 321 |
Zahlungs- und Zustandskanäle | 322 |
Zustandskanäle – grundlegende Konzepte und Terminologie | 323 |
Einfaches Zahlungskanalbeispiel | 325 |
Vertrauensfreie Kanäle aufbauen | 328 |
Asymmetrisch widerrufliche Commitments | 331 |
Hash Time Lock Contracts (HTLC) | 335 |
Geroutete Zahlungskanäle (Lightning Network) | 336 |
Einfaches Lightning-Network-Beispiel | 337 |
Lightning Network – Transport und Routing | 340 |
Vorteile des Lightning Network | 342 |
Fazit | 343 |
Anhang A: Das Bitcoin-Whitepaper von Satoshi Nakamoto | 345 |
Anhang B: Operatoren, Konstanten und Symbole der Transaktions-Skriptsprache | 357 |
Anhang C: Bitcoin Improvement Proposals | 363 |
Anhang D: Segregated Witness | 371 |
Anhang E: Bitcore | 385 |
Anhang F: pycoin, ku und tx | 389 |
Anhang G: Bitcoin-Explorer-(bx-)Befehle | 397 |
Index | 401 |
Über den Autor | 411 |
Kolophon | 412 |