Ethereum - Grundlagen und Programmierung
✍ Scribed by Andreas M. Antonopoulos, Gavin Wood
- Publisher
- O'Reilly
- Year
- 2019
- Tongue
- German
- Leaves
- 432
- Category
- Library
No coin nor oath required. For personal study only.
✦ Synopsis
Andreas M. Antonopoulos, Gavin Wood
Lektorat: Ariane Hesse
Übersetzung: Peter Klicman
Korrektorat: Sibylle Feldmann, www.richtiger-text.de
Fachgutachter:
* Dr. Susanne Guth-Orlowski sowie Markus Angermann (FH St. Pölten)
* Ralph Pichler und Matthias Tarasiewicz (RIAT, www.riat.at)
Herstellung: Stefanie Weidner
Umschlaggestaltung: Michael Oréal, www.oreal.de
Satz: III-satz, www.drei-satz.de
Druck und Bindung: mediaprint solutions GmbH, 33100 Paderborn
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie;
detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
Print 978-3-96009-110-3
PDF 978-3-96010-348-6
ePub 978-3-96010-349-3
mobi 978-3-96010-350-9
- Auflage 2019
Copyright © 2019 dpunkt.verlag GmbH
Wieblinger Weg 17
69123 Heidelberg
✦ Table of Contents
Inhalt
Vorwort
Glossar
Kapitel 1: Was ist Ethereum?
Vergleich mit Bitcoin
Komponenten einer Blockchain
Die Geburt von Ethereum
Die vier Entwicklungsstufen von Ethereum
Ethereum: eine Allzweck-Blockchain
Die Komponenten von Ethereum
Weiterführende Literatur
Ethereum und Turing-Vollständigkeit
Turing-Vollständigkeit als »Feature«
Auswirkungen der Turing-Vollständigkeit
Von Allzweck-Blockchains zu dezentralisierten Anwendungen (Decentralized Applications, DApps)
Das dritte Internetzeitalter
Ethereums Entwicklungskultur
Warum Ethereum lernen?
Was Sie in diesem Buch lernen
Kapitel 2: Ethereum-Grundlagen
Ether-Währungseinheiten
Eine Ethereum-Wallet wählen
Kontrolle und Verantwortung
Einführung in MetaMask
Eine Wallet anlegen
Netzwerke wechseln
Test-Ether beschaffen
Ether aus MetaMask senden
Die Transaktionshistorie einer Adresse untersuchen
Der Weltcomputer
Externally Owned Accounts (EOAs) und Kontrakte
Ein einfacher Kontrakt: ein Test-Ether-Faucet
Den Faucet-Kontrakt kompilieren
Den Kontrakt in der Blockchain registrieren
Interaktion mit dem Kontrakt
Die Kontraktadresse in einem Block-Explorer ansehen
Den Kontrakt finanzieren
Abhebungen aus unserem Kontrakt
Fazit
Kapitel 3: Ethereum-Clients
Ethereum-Netzwerke
Soll ich einen Full Node betreiben?
Vor- und Nachteile eines Full Node
Vor- und Nachteile eines öffentlichen Testnetzwerks
Vor- und Nachteile der Simulation einer lokalen Blockchain
Einen Ethereum-Client betreiben
Hardwareanforderungen für einen Full Node
Softwareanforderungen für die Kompilierung und den Betrieb eines Clients (Node)
Parity
Go-Ethereum (Geth)
Die erste Synchronisation Ethereum-basierter Blockchains
Geth oder Parity ausführen
Die JSON-RPC-Schnittstelle
Entfernte Ethereum-Clients
Mobile (Smartphone) Wallets
Browser-Wallets
Fazit
Kapitel 4: Kryptografie
Schlüssel und Adressen
Public-Key-Kryptografie und Kryptowährungen
Private Schlüssel
Generierung eines privaten Schlüssels aus einer Zufallszahl
Öffentliche Schlüssel
Kryptografie mit elliptischen Kurven
Arithmetische Operationen bei elliptischen Kurven
Einen öffentlichen Schlüssel generieren
Bibliotheken für elliptische Kurven
Kryptografische Hashfunktionen
Ethereums kryptografische Hashfunktion: Keccak-256
Welche Hashfunktion nutze ich?
Ethereum-Adressen
Ethereum-Adressformate
Inter Exchange Client Address Protocol
Hex-Codierung mit Prüfsumme durch Großschreibung (EIP-55)
Fazit
Kapitel 5: Wallets
Übersicht über die Wallet-Technologie
Nichtdeterministische (zufallsbasierte) Wallets
Deterministische (Seed-basierte) Wallets
Hierarchisch-deterministische Wallets (BIP-32/BIP-44)
Seeds und mnemonische Codes (BIP-39)
Die Wallet-Best-Practices
Mnemonische Codewörter (BIP-39)
Eine HD-Wallet aus dem Seed-Wert erzeugen
HD-Wallets (BIP-32) und Pfade (BIP-43/44)
Fazit
Kapitel 6: Transaktionen
Die Struktur einer Transaktion
Die Transaktions-Nonce
Die Nonces nachhalten
Lücken in Nonces, doppelte Nonces und Bestätigungen
Nebenläufigkeit, Transaktionsursprung und Nonces
Transaktionsgas
Transaktionsempfänger
Transaktionswert und -daten
Mittel an EOAs und Kontrakte senden
Nutzdaten an EOAs oder Kontrakte senden
Spezielle Transaktion: Kontrakterzeugung
Digitale Signaturen
Elliptic Curve Digital Signature Algorithm
Wie digitale Signaturen funktionieren
Die Signatur verifizieren
Die Mathematik hinter ECDSA
Signieren von Transaktionen in der Praxis
Erzeugen/Signieren einer Rohtransaktion
Eine Rohtransaktion generieren mit EIP-155
Der Signaturpräfixwert (v) und die Public-Key-Recovery
Trennung von Signierung und Übertragung (Offlinesignierung)
Propagation von Transaktionen
Aufzeichnen in der Blockchain
Multisignatur-Transaktionen (Multisig)
Fazit
Kapitel 7: Smart Contracts und Solidity
Was ist ein Smart Contract?
Lebenszyklus eines Smart Contract
Einführung in Ethereum-Hochsprachen
Smart Contracts mit Solidity entwickeln
Eine Solidity-Version wählen
Download und Installation
Entwicklungsumgebung
Ein einfaches Solidity-Programm entwickeln
Kompilieren mit dem Solidity-Compiler (solc)
Das Ethereum-Kontrakt-ABI
Wahl einer Solidity-Compiler- und Sprachversion
Programmieren mit Solidity
Datentypen
Vordefinierte globale Variablen und Funktionen
Kontraktdefinition
Funktionen
Kontraktkonstruktor und selfdestruct
Unser Faucet-Beispiel um einen Konstruktor und selfdestruct erweitern
Funktionsmodifikatoren
Kontraktvererbung
Fehlerbehandlung (assert, require, revert)
Events
Andere Kontrakte aufrufen (send, call, callcode, delegatecall)
Überlegungen zum Gasverbrauch
Dynamisch dimensionierte Arrays vermeiden
Aufrufe anderer Kontrakte vermeiden
Die Gaskosten kalkulieren
Fazit
Kapitel 8: Smart Contracts und Vyper
Sicherheitslücken und Vyper
Vergleich mit Solidity
Modifikatoren
Klassenvererbung
Inline-Assembler
Funktionsüberladung
Variablen-Typecasting
Vor- und Nachbedingungen
Dekoratoren
Funktions- und Variablenanordnung
Kompilierung
Schutz vor Überlauffehlern auf Compilerebene
Daten lesen und schreiben
Fazit
Kapitel 9: Sicherheit von Smart Contracts
Best Practices
Sicherheitsrisiken und Anti-Pattern
Reentrancy-Angriffe
Die Sicherheitslücke
Präventive Techniken
Reales Beispiel: DAO
Arithmetischer Über-/Unterlauf
Die Sicherheitslücke
Präventive Techniken
Reale Beispiele: PoWHC und Batch Transfer Overflow (CVE-2018–10299)
Unerwartete Ether
Die Sicherheitslücke
Präventive Techniken
Weitere Beispiele
DELEGATECALL
Die Sicherheitslücke
Präventive Techniken
Reales Beispiel: Parity Multisig Wallet (zweiter Hack)
Standardsichtbarkeit
Die Sicherheitslücke
Präventive Techniken
Reales Beispiel: Parity Multisig Wallet (erster Hack)
Entropie-Illusion
Die Sicherheitslücke
Präventive Techniken
Reales Beispiel: PRNG-Kontrakte
Referenzierung externer Kontrakte
Die Sicherheitslücke
Präventive Techniken
Reales Beispiel: Reentrancy-Honeypot
Kurze Adressen/Parameter
Die Sicherheitslücke
Präventive Techniken
Ungeprüfte CALL-Rückgabewerte
Die Sicherheitslücke
Präventive Techniken
Reales Beispiel: Etherpot und King of the Ether
Race Conditions/Front Running
Die Sicherheitslücke
Präventive Techniken
Reale Beispiele: ERC20 und Bancor
Denial of Service (DoS)
Die Sicherheitslücke
Präventive Techniken
Reales Beispiel: GovernMental
Manipulation der Blockzeitstempel
Die Sicherheitslücke
Präventive Techniken
Reales Beispiel: GovernMental
Konstruktoren
Die Sicherheitslücke
Präventive Techniken
Reales Beispiel: Rubixi
Nicht initialisierte Zeiger auf Speicher
Die Sicherheitslücke
Präventive Techniken
Reale Beispiele: OpenAddressLottery- und CryptoRoulette-Honeypot
Fließkomma und Genauigkeit
Die Sicherheitslücke
Präventive Techniken
Reales Beispiel: Ethstick
Tx.Origin-Authentifizierung
Die Sicherheitslücke
Präventive Techniken
Kontraktbibliotheken
Fazit
Kapitel 10: Tokens
Wie Tokens genutzt werden
Tokens und Fungibilität
Kontrahentenrisiko
Tokens und »Wesenhaftigkeit«
Tokens nutzen: Utility oder Equity
Ententest
Utility-Tokens: Wer braucht sie?
Tokens bei Ethereum
Der ERC20-Token-Standard
Ein eigenes ERC20-Token ausgeben
Probleme mit ERC20-Tokens
ERC223: ein vorgeschlagener Schnittstellenstandard für Token-Kontrakte
ERC777: ein vorgeschlagener Schnittstellenstandard für Token-Kontrakte
ERC721: Standard für nicht fungible Tokens (Deeds)
Token-Standards nutzen
Was sind Token-Standards? Was ist deren Zweck?
Sollte man diese Standards nutzen?
Sicherheit durch Reife
Erweiterungen von Token-Interface-Standards
Tokens und ICOs
Fazit
Kapitel 11: Orakel
Warum Orakel benötigt werden
Anwendungsfälle und Beispiele
Entwurfsmuster für Orakel
Datenauthentifizierung
Rechnende Orakel
Dezentralisierte Orakel
Orakel-Clientschnittstellen in Solidity
Fazit
Kapitel 12: Dezentralisierte Anwendungen (DApps)
Was ist eine DApp?
Backend (Smart Contract)
Frontend (Web-Nutzerschnittstelle)
Datenspeicher
Dezentralisierte Nachrichtenkommunikationsprotokolle
Ein einfaches DApp-Beispiel: Auktions-DApp
Auktions-DApp: Backend-Smart-Contracts
Auktions-DApp: Frontend-Nutzerschnittstelle
Weitere Dezentralisierung der Auktions-DApp
Die Auktions-DApp in Swarm speichern
Swarm vorbereiten
Dateien in Swarm hochladen
Der Ethereum-Nameservice (ENS)
Geschichte des Ethereum-Nameservice
Die ENS-Spezifikation
Untere Schicht: Namenseigner und Resolver
Mittlere Schicht: die .eth-Nodes
Oberste Schicht: die Deeds
Einen Namen registrieren
Den ENS-Namen verwalten
ENS-Resolver
Einen Namen in einen Swarm-Hash (Inhalt) auflösen
Von der App zur DApp
Fazit
Kapitel 13: Die Ethereum Virtual Machine
Was ist die EVM?
Vergleich mit existierender Technologie
Der EVM-Befehlssatz (Bytecode-Operationen)
Ethereum-Zustand
Solidity in EVM-Bytecode kompilieren
Kontrakt-Deployment
Disassemblierung des Bytecodes
Turing-Vollständigkeit und Gas
Gas
Gasberechnung während der Ausführung
Erwägungen zur Gasberechnung
Gaskosten versus Gaspreis
Block-Gaslimit
Fazit
Kapitel 14: Konsens
Konsens über Proof of Work
Konsens über Proof of Stake (PoS)
Ethash: Ethereums Proof-of-Work-Algorithmus
Casper: Ethereums Proof-of-Stake-Algorithmus
Konsensgrundsätze
Kontroverse und Wettbewerb
Fazit
Anhang A: Ethereum-Fork-Historie
Anhang B: Ethereum-Standards
Anhang C: Ethereum EVM-Opcodes und Gasverbrauch
Anhang D: Entwicklungswerkzeuge, Frameworks und Bibliotheken
Anhang E: Einführung in web3.js
Anhang F: Kurzlink-Referenz
Index
Über die Autoren
Über den Übersetzer
Über die Fachgutachter
Kolophon
✦ Subjects
Ethereum, Blockchain, RIAT, Polkadot
📜 SIMILAR VOLUMES
Viele Anzeichen sprechen daf?r, da? C++ zu <I>der</I> Programmiersprache der neunziger Jahre wird: Auf Konferenzen im Bereich der objektorientierten Softwareentwicklung behandeln typischerweise etwa die H?lfte der programmiersprachenorientierten Beitr?ge C++. Die Gr?nde f?r diese Entwicklung sind of
<p>Dieses Lehrbuch ist die erste umfassende und einheitliche Einführung in die Constraint-Programmierung. Das noch junge Gebiet hat von Anfang an Forschung und Praxis neue Impulse gegeben. Constraint-Programmierung kann vorteilhaft eingesetzt werden zum Schließen auch bei unvollständiger Information