Suche
Smart Contracts und decentralized Applications mit Ethereum

Die Ethereum Blockchain – eine Einführung

Lothar Wieske

© Shutterstock / Wit Olszewski

 

Ethereum ist der zweite große Wurf in Sachen Blockchain-Technologie, Bitcoin war der erste. Digitale Währung und kryptografische Zahlungen trafen den Nerv der Zeit inmitten der tobenden Finanzkrise. Bei Bitcoin geht es eigentlich immer nur um Zahlungen in eine Richtung – was im Gegenzug geschieht, hängt irgendwie in der Luft. Genau da geht Ethereum mit programmierbaren Zug-um-Zug-Geschäften weiter und nennt die zur Ausführung kommenden Programme einfach Contracts.

Blockchain Techies sprechen eine eigene Sprache. Es geht aber hauptsächlich um vier Achsen oder Attribute, die eigentlich ständig vorkommen und verwendet werden: distributed/localized, decentralized/centralized, permissionless/permissioned und tokenized/tokenless.

Beginnen wir mit distributed/localized. Die meisten heute verwendeten Systeme zur Buchhaltung und für den Zahlungsverkehr werden in eigenen Serverräumen oder im eigenen Rechenzentrum mit relationalen Datenbanken implementiert. Entsprechend wird eine localized Blockchain auf einer überschaubaren Zahl von Infrastrukturen von einer überschaubaren Zahl von Organisationen betrieben. Im Gegensatz dazu läuft eine distributed Blockchain auf einer größeren Zahl von unabhängigen Infrastrukturen und wird von einer größeren Zahl von unabhängigen Organisationen betrieben. Diese Konstellation bedingt vollständige Replikate der Blockchain und, neben weiteren Techniken zur Absicherung, den Einsatz eines Konsensprotokolls, um deren Konsistenz sicherzustellen und beizubehalten. Distributed Blockchains widerstehen damit auch größeren Systemausfällen oder böswilligen Angriffen.

Decentralized Blockchains geben allen Teilnehmern a priori gleiche Privilegien. Das schließt nicht aus, dass die Teilnehmer später spezielle Rollen aushandeln. Aber es bedeutet, dass es keine vorher definierten Teilnehmer für solche speziellen Rollen gibt. Im Gegensatz dazu vergibt eine centralized Blockchain an ausgewählte Teilnehmer spezielle Rollen. Authentifizierung und Autorisierung liegen bei einer centralized Blockchain dicht beieinander. Bei einer decentralized Blockchain agieren die Teilnehmer aber typischerweise anonym oder pseudonym. Gerade diese fehlende Identifizierung birgt das Risiko byzantinischer Fehler.

Der Nakamoto Consensus von Bitcoin liefert eine neue praktische Lösung für ein langjähriges Problem der Informatik: das Problem der byzantinischen Generäle. Wie kann Vertrauen ohne vertrauenswürdige Dritte sichergestellt werden? Seit einem wichtigen Unmöglichkeitsresultat „Impossibility of distributed consensus with one faulty process“ (Michael Fischer, Nancy Lynch, Michael Paterson) aus dem Jahr 1985 ist klar, dass es dafür keine allgemeine Lösung gibt. Unter einschränkenden Annahmen sind aber Teil- oder Sonderlösungen möglich.

Bei permissionless Blockchains darf jeder mitmachen, niemand kann oder muss eine Erlaubnis nachfragen. Permissioned Blockchains sind dagegen geschlossene Veranstaltungen (harte Tür), nur bestimmte Teilnehmer dürfen zugreifen. Permissionless Blockchains arbeiten also mit unbekannten Teilnehmern ohne unterscheidbare Rechte und Privilegien. Im Gegensatz dazu kennen permissioned Blockchains ihre Pappenheimer und weisen ihnen auch gezielt besondere Rechte und Privilegien zu.

Viele Blockchains besitzen native Tokens und heißen deswegen tokenized Blockchains. Bei Bitcoin sind diese Tokens die Bitcoins (BTC) und bei Ethereum sind es Ethers (ETH). Auf tokenized Blockchains lassen sich mit unterschiedlichen Mechanismen weitere Tokens aufsetzen (Bitcoin/Colored Coins, Ethereum/Smart Contracts). Native Tokens dienen in tokenized Blockchains typischerweise zwei Hauptzwecke: sie belohnen die Teilnehmer am Consensus-Protokoll und verhindern Spam- und DDoS-Angriffe. Wirtschaftliche Anreize zur Consensus-Bildung sind nur für decentralized Blockchains wirklich von Bedeutung, und hier sind sie auch notwendig. Niemand wird ohne Belohnung Gerätekosten und Stromverbrauch beisteuern, wenn es nicht auch etwas zu verdienen gibt. Tokenless (centralized) Blockchains kommen beispielweise dann zum Einsatz, wenn traditionelle Clearing/Settlement-Systeme für klassische Währungen mit Blocktech aufgesetzt werden sollen. Dann werden Euro oder US-Dollar als Tokens auf der Blockchain abgebildet und können Gegenstand entsprechender Transactions werden.

Das Blockchain Dossier auf JAXenter:

Blockchains: disruptiv oder evolutionär

Nach dieser Betrachtung einiger Blocktech-Vokabeln ergibt sich doch ein recht klares Bild. Im Kern geht es um zwei Cluster decentralized/distributed/permissionless/tokenized und centralized/localized/permissioned/tokenless. Das erste Cluster, initiiert durch Bitcoin, versteht sich als disruptive Innovation und verbindet mit seinen Ansprüchen an gesellschaftliche und unternehmerische Umwälzungen auch soziale und politische Ambitionen. Das zweite Cluster bildet den Kern der Bemühungen von Banken und Versicherungen und beansprucht eine inkrementelle Innovation rund um Kostenstrukturen und Durchlaufzeiten im Clearing-/Settlement.

Ethereum ist decentralized/distributed/permissionless/tokenized. Auf der Webseite von Etherum steht dazu: „Ethereum is a decentralized platform that runs smart contracts: applications that run exactly as programmed without any possibility of downtime, censorship, fraud or third party interference.“ [1]

Man kann es als Kryptowährung und Bezahlsystem verstehen; wird dem Entwurf damit aber nicht gerecht. Das Token Ether erfüllt neben den beiden Funktionen Belohnung für Consensus und Abschreckung gegen Spam/DDoS eine dritte Funktion: Treibstoff zur Ausführung von Smart Contracts. Und Ethereum ist für diese Welt der Smart Contracts das Rollenmodell. Mit seinen Möglichkeiten zur Abbildung von Tokens, Assets, Identitäten und Lebenszyklen hat es die Türen geöffnet für ein Internet of Value und bläst mit dezentraler Automatisierung zum Angriff auf Geschäftsmodelle mit Mittelsmann. Wir fangen erst an, die Möglichkeiten und Wirkungen zu verstehen und können sie einstweilen vielleicht nur schemenhaft ausmalen. Dazu gehört auch Lernen. Denn diese Welt ist nicht einfach und bringt viel Neues und Dinge, die erst noch entwickelt werden müssen.

Ethereum Blockchain: Aufbau und Abläufe

Ethereum wurde Ende 2013 in einem Whitepaper [2] von Vitalik Buterin konzeptuell vorgestellt und Anfang 2014 im Yellow Paper [3] von Gavin Wood formalisiert ausgearbeitet. Ethereum wird von der in der Schweiz ansässigen Ethereum Foundation entwickelt. Die Entwicklung wurde im Juli und August 2014 mit einem Vorverkauf der Kryptowährung Ether im Tausch gegen Bitcoins finanziert. Insgesamt wurden dabei 31 591 BTC gegen 60 102 216 ETH mit einem damaligen Marktwert von 18 Millionen US-Dollar getauscht. Im Juli 2015 startete der Betrieb von Ethereum mit einem Public Beta Release – genannt Frontier. Im März 2016 kam das Release Homestead mit Fehlerbehebungen und Sicherheitsverbesserungen. Als nächste Releases stehen Metropolis und Serenity an. Metropolis bringt grafische Werkzeuge und Serenity stellt den Consensus von Proof of Work (PoW) mit Ethhash auf Proof of Stake (PoS) mit Casper um.

Die Ethereum Blockchain besteht aus einer Liste von Blocks, die wiederum jeweils Listen von Transactions enthalten. Und Transactions ändern die Zustände von Accounts. Diese Zustände der Accounts werden in allen Nodes berechnet und abgeglichen.

Lesen Sie auch: Kann die Blockchain die Welt verändern? Das sagen die Influencer der Szene

Beim Abarbeiten der Blocks und Transactions in der Ethereum Blockchain werden Accounts erstellt oder geändert, wobei es zwei Typen von Accounts gibt: Normal Accounts und Contract Accounts. Beide verwalten Beträge. Bei Normal Accounts bleibt es dabei, bei Contract Accounts kommt noch der Code des Contracts dazu. Außerdem werden in einem lokalen Speicher Zwischenstände der Vertragsausführung abgelegt, beispielsweise Variablenbelegungen. Beträge werden überwiesen, indem eine entsprechende Message erstellt und als Transaction unterschrieben und verschickt wird. Für Normal Accounts bedeuten Empfang und Versand von Messages entsprechende Überweisungen von Beträgen. Es gibt aber auch komplexere Messages. Mit dem Versand einer „Create Transaction“ Message von einem Normal Account an einen anderen Normal Account wird daraus ein Contract Account und der Code des Contracts mit dem Mining der Transaction entsprechend gefüllt. Mit weiteren Messages kann der Contract-Code aktiviert und ausgeführt werden.

In der Ethereum Blockchain kann man mit einem Browser und dem URL https://etherscan.io navigieren. So entsteht am besten ein Eindruck für die Zusammenhänge der vorgestellten Konzepte. Für den Einstiegsblock 2700017 finden Sie insgesamt zwei Transactions.

Abb. 1: Alle Informationen zum Einstiegsblock 2700017

 

Abb. 2: Senderaccount 0x2a** zu Receiveraccount 0x1d**

 

Die erste überträgt einen Betrag von etwa 1 Ether vom Senderaccount 0x2a** zum Receiveraccount 0x1d**.

Abb. 3: Senderaccount 0x2a** zu Receiveraccount 0x1d**

Die zweite Transaktion überträgt 20 Ether vom Senderaccount 0x40** zum Receiveraccount 0xaa**.

Abb. 4: Senderaccount 0x40** zu Receiveraccount 0xaa**

Bei der ersten Transaction handelt es sich bei Sender und Receiver um Normal Accounts, bei der zweiten Transaction ist der Sender zwar ein Normal Account, aber der Receiver ist ein Contract Account. Bei der Ausführung des Contracts entsteht eine weitere Transaction, eine so genannte Contract Internal Transaction.

 

Abb. 5: Contract Internal Transaction: 20 Ether von 0xaa** zu 0x02**

 

Abb. 6: Normal Account 0x1d**

 

Abb. 7: Contract Account 0xaa**

 

Die Rolle des Block Headers für die Stabilität der Ethereum Blockchain

Die Ethereum Blockchain als doppelt geschachtelte Liste (Blocks, Transactions) führt in jedem Block einen Block Header mit einer ganzen Reihe von Feldern, deren starke Verzahnung die Statik und Dynamik der Datenstruktur absichert. Die fünfzehn Felder im Ethereum Block Header sind in Abschnitt 4.3 des Yellow Papers vollständig beschrieben (parentHash, ommersHash, beneciary, stateRoot, transactionsRoot, receiptsRoot, logsBloom, difficulty, number, gasLimit, gasUsed, timestamp, extraData, mixHash, nonce). Eine kleinere Auswahl dieser Felder liefert bereits einen guten Überblick über die eingesetzten Mechanismen.

Intern verbaut Ethereum einen Merkle Tree für die Liste der Transactions im Block, und aus der Ausführung der Transactions resultierend einen Patricia-Trie für die Accounts sowie einen Patricia-Trie für die Receipts der Transactions (Abb. 8). Damit ist transactionRoot als Merkle Root der Liste der Transactions entscheidend für die Absicherung der Statik der Blockchain im aktuellen Block. Durch die Rückwärtsverkettung mit dem parentHash entsteht zusätzlich eine Absicherung der gesamten vorangegangenen Historie der Ethereum Blockchain. Durch die Patricia Roots stateRoot und receiptsRoot wird zusätzlich die Dynamik der Ethereum Blockchain abgesichert.

Abb. 8: Merkle Tree und Patricia-Tries bei Ethereum

 

Diese verkürzte Darstellung hat beispielweise den Umgang mit Uncles beim Mining übersprungen. Wer sich für eine vollständige Darstellung interessiert, wird wohl am Yellow Paper nicht vorbeikommen.

Mining in der Ethereum Blockchain

Im Ethereum-Netz schreiben die Nodes rund fünf Blocks pro Minute. Der Vorteil ist, dass Transactions so viel schneller abgewickelt werden können, der Nachteil jedoch, dass mit Intervallen im ganz kleinen zweistelligen Sekundenbereich gar nicht mehr alle Nodes auf eine aktuelle Blockchain mit aktuellen Blocks zugreifen können. Den entstehenden Gefahren kann man begegnen, indem man als Nutzer bei größeren Beträgen mehrere Bestätigungen oder Blöcke abwartet. Der Einsatz eines vereinfachten GHOST-Protokolls (Greedy Heaviest Observed Subtree) bei Ethereum seit 2013 mindert zusätzlich die Nachteile vieler verwaister Blöcke bei hohen Blockraten. Neben dem GHOST-Protokoll nutzt der bei Ethereum eingesetzte Ethash Proof of Work neben der reinen CPU- auch RAM-Leistung. Das mindert die Vorteile von speziellen Prozessoren (ASICs), mit denen sich viele große Mining Pools besonderen Wettbewerbsvorteil verschaffen. Der Hash des ursprünglichen Proof of Work muss sozusagen Extrarunden einlegen. Denn er füttert einen Zufallsgenerator, der 64 Hashes bestimmt, die entweder berechnet oder aus einer Datei, genannt DAG, gelesen werden müssen. Das Lesen der Hashs aus dem DAG ist deutlich schneller als die Berechnung. Das bringt auch das Mining mit GPUs wieder deutlich nach vorn.

Die Ethereum-Infrastruktur: Virtual Machine, Whisper und Swarm

Die Infrastruktur zur Ausführung der Contract Codes besteht aus: Compute (Ethereum Virtual Machine, EVM), Network (Whisper) und Storage (Swarm). Die Ausführung der Contract Codes hat ausschließlich deterministische Elemente. Diese Eigenschaft zusammen mit der strikten Ordnung der Transactions durch die Ethereum Blockchain führt dazu, dass alle Nodes zum gleichen Ergebnis kommen müssen und sich darüber mit den Patricia Roots auch austauschen und absichern. Ethereum Contracts kosten Ethers. Jede Rechenleistung, jede Netzwerkleistung und jede Speicherleistung kostet so genanntes Gas. Für jeden Contract muss vorher festgelegt werden, wieviel Gas die Ausführung maximal kosten darf. Ein Zähler behält diese Kosten im Auge und führt Buch. Wenn das Geld ausgeht oder der Anschlag erreicht ist, hält die Ausführung schlicht an. Ethereum Contracts sind kleine Programme. Solidity ist eine von mehreren Hochsprachen zur Formulierung von Contracts. Solidity-Programme werden in Bytecode zur eigentlichen Ausführung auf EVM übersetzt. Dann nur noch etwas Ether dazu und es kann losgehen.

Aufgrund des dezentralen Charakters der Ethereum Blockchain werden Anwendungen, die solche Funktionalitäten als Backend-Services über APIs mit JSON nutzen, auch als decentralized Applications bezeichnet. Mit der Erstellung von Ethereum Contracts – Smart Contracts – ist dafür auf der Seite der Blockchain schon alles getan. Der Rest findet im gewohnten Set-up von Webanwendungen statt, die mit den Accounts der Ethereum Blockchain interagieren. In der Digitalisierung werden decentralized Applications gerade erst ausgelotet. Die vielversprechenden Möglichkeiten umfassen staatliche Funktionen wie ein Grundbuch als Inventar der Eigentumsverhältnisse an Grundstücken, unternehmerische Funktionen wie automatisiertes Versicherungswesen und eher spielerische Funktionen wie ein faires Roulette.

Abb. 9: Decentralized Applications mit Ethereum

 

Smart Contracts entwickeln mit Ethereum

Es gibt zwei große öffentliche Instanzen des Ethereum-Netzwerks. Da ist zum einen das Ethereum Mainnet. Darum geht es meist, wenn über Ethereum gesprochen wird. Und darin geht es um echtes Geld. Hier ist also Vorsicht geboten. Denn was weg ist, ist weg. Zum anderen gibt es das Ethereum Testnet. Das trägt den Namen Morden und ist ein Produkt der Community mit wertlosen Ethers. Technisch sind beide Netze gleich aufgebaut. Unterschiede gibt es aber bei Genesis Block und Network ID sowie bei der Difficulty. Genesis Block und Network ID müssen übereinstimmen, damit zwei Ethereum Nodes miteinander kommunizieren können. So ist es leicht, beide Welten auseinanderzuhalten (Mainnet: Network ID 1; Testnet: Network ID 2). Die deutlich niedrigere Difficulty in Morden hilft dabei, dass die Wartezeiten und Stromkosten beim Entwickeln und Testen nicht ins Unermessliche steigen. Im September/Oktober 2016 gab es zahlreiche DoS-Attacken auf das Ethereum-Netzwerk. Die Gegenmaßnahmen resultierten in zwei Schritten: dem Hard Fork Tangerine Whistle und dem Hard Fork Spurious Dragon. Der Hard Fork im Testnet am 20. November 2016 führte zu einem weiteren ungewollten Hard Fork nach wenigen Blöcken. Weil der Hard Fork im Mainnet erst für den 22. November 2016 vorgesehen war, entstanden keine Schäden im Mainnet. Neben dem seit Juli 2015 laufenden Testnet Morden baut man nun ein weiteres Testnet, nämlich Ropsten, mit weniger Altlasten (Morden: Network ID 2; Ropsten: Network ID 3).

Grundsätzlich empfiehlt es sich, beim Entwickeln und Testen mit eigenen lokalen und privaten Testnetzen mit einem oder mehreren Knoten einzusteigen und möglichst bald auch in Morden seine Transactions und Smart Contracts zu testen. Dort tifft man auf andere Entwickler mit anderen Ethereum Nodes und auf anderer Hardware, mit anderen Latenzen/Clients/Versionen usw. Wer also mit und für Ethereum entwickeln will, baut sich ein kleines Netz mit einem oder mehreren Knoten. Im Netz finden sich dafür zahlreiche Anleitungen, wobei ich eine Kapselung mit Docker präferiere.

Nachdem man einige Basisoperationen wie das Anlegen eines Normal Accountd, Transaction Normal Account zu Normal Account, Bauen, Senden oder Minen ausgeführt hat, kann es an den ersten Smart Contract gehen. Dazu gilt es, sich die Grundzüge von Solidity, der Skriptsprache für Ethereum Smart Contracts, zu erarbeiten und für die nächsten Schritte am besten mit einem fertigen Contract wie dem Minimum Viable Token zu beginnen [4]. Als Begleitmaterial für diesen Artikel finden sie als GitHub Repository eine vollständige Automatisierung dieses Beispiels mit aufgezeichnetem GIF-Video. So können sie sich das Ganze für erste Eindrücke stressfrei anschauen oder es gleich als Anregung für eigene weitergehende Experimente nutzen [5].

The DAO: Decentralized Autonomous Organisation

Dem Investmentunternehmen The DAO lag die Überlegung zugrunde, dass ein Unternehmen nichts anderes ist als ein Netzwerk aus Verträgen, in denen sein Schalten und Walten definiert wird. Mit einer geeigneten domänenspezifischen Sprache lässt sich ein solches Unternehmen auch rein formal und digital definieren. Bei The DAO erwarben die Teilnehmer elektronische Tokens. Das spülte Geld in die Kasse des Unternehmens. Diese Tokens standen gleichzeitig für Stimmrechte zur Vergabe des eingeworbenen Gelds. Auf eine anfängliche Versteigerungsphase zum Geldeinsammeln folgte also eine Abstimmungsphase zur Entscheidung über die Vergabe der Gelder an eingereichte Vorschläge und Bewerbungen und schließlich die eigentliche Vergabe.

Ausgedacht und programmiert hat das Ganze die Firma Slock.it aus Sachsen, die ansonsten eine universelle Plattform für das Internet of Things baut. Namentlich stehen dahinter die Brüder Christoph und Simon Jentzsch sowie Stephan Tual. Die Smart Contracts für The DAO wurden am 30. April 2016 online gestellt. Das damit losgetretene Crowdfunding übertraf alles bisher Dagewesene. Mehr als 18 000 Stimmberechtigten zahlten 11,5 Millionen ETH mit einem Gegenwert von ca. 150 Millionen US-Dollar ein. The DAO kann man sich auf der Ethereum Blockchain anschauen (Abb. 10). Die Addressee des Contract Accounts ist:

0xbb9bc244d798123fde783fcc1c72d3bb8c189413

Abb. 10: The DAO auf der Ethereum Blockchain

Was geschah? In einem Blogbeitrag forderten die drei Autoren Dino Mark, Vlad Zamfir und Emin Gün Sirer am 27. Mai 2016 ein Aussetzen der Auszahlungen von The DAO bis zur Bereinigung einiger Angriffsmöglichkeiten. Am 14. Juni 2016 standen Verbesserungen zur Verfügung und warteten auf die Freigabe durch die Entwickler von The DAO. Am 17. Juni erfolgte jedoch ein Hack, der eine Kombination verschiedener Angriffsmöglichkeiten ausnutzte, damit einen Teilbetrag von 3,6 Millionen Ether mit einem Gegenwert von rund 50 Millionen US-Dollar auf einen neuen Account abzweigte und so dem Zugriff durch The DAO entzog. Durch eine Art Zeitsperre im Smart Contract von The DAO hätte der Hacker erst 28 Tage abwarten müssen, um Zugriff auf diesen Betrag zu erhalten. Diese Zeit nutzten die Entwickler, um sich mit einem Gegenangriff den Betrag zurückzuholen.

Die dann folgenden Ereignisse und Diskussionen sind schwierig nachzuverfolgen, weil die erhitzten Gemüter unterschiedliche Sichten auf die entstandene Lage und den zu entwickelnden Ausweg berichten. Im Ergebnis entstand ein so genannter Hard Fork, es wurde also von höherer Stelle in den weiteren Verlauf der Ethereum Blockchain eingegriffen.

Vielleicht hat damit auch die Ethereum-Welt und vielleicht sogar die Blockchain-Welt ihren „Too big to fail“-Moment gesehen. Jedenfalls gibt es nun bei Ethereum zwei Stränge: Ethereum Core ist der Strang nach und mit dem Hard Fork. Er hat die größere Marktkapitalisierung und wird vom Ethereum Client Geth fortgeschrieben (Vitalik Buterin). Ethereum Classic hingegen ist der Strang, der den Hard Fork ablehnt und ausblendet. Er hat nur ein Zehntel der Marktkapitalisierung und wird vom Ethereum Client Parity fortgeschrieben. Die Situation bleibt schwierig, und irgendwie kehrt bei Ethereum keine Ruhe mehr ein. Die Stimmberechtigten von The DAO jedenfalls bekamen ihre Einlagen in Ether zurückerstattet, und damit ist das soziale Experiment einer dezentralen autonomen Unternehmung erst einmal beendet.

Fazit

Ethereum ist bezüglich seiner Marktkapitalisierung die zweitwichtigste Kryptowährung und hat die decentralized/distributed/permissionless/tokenized Blockchains in wichtiger Weise ergänzt. Wir können jetzt Smart Contracts und decentralized Applications. Damit entfaltet Ethereum disruptives Potenzial auch jenseits von FinTech, InsurTech oder Legal Tech. Eine gescheiterte Firmengründung hat man mit The DAO auch schon hinter sich gebracht. Die Grundprinzipien der Blockchain erhalten mit Ansätzen wie Patricia-Tries, einem verbesserten Proof of Work und die Anbahnung eines künftigen Proofs of Stake interessante neue Impulse. Bleibt die Frage nach einer Blockchain des anderen Lagers: centralized/localized/permissioned/tokenless.

Lesen Sie auch:

Bitcoin Flipping: Es gibt keine Branche, die von Blockchain nicht betroffen ist

Verwandte Themen:

Geschrieben von
Lothar Wieske
Lothar Wieske
Lothar Wieske ist Cloud Architect. Ihn interessiert das Zusammenspiel von Cloud/Data/IoT/Mobile/Social und digitaler Disruption als Bindeglied und Wirkmechanismus. Mal schauen, was Augmented Reality, Bionics, Blockchain und Cognitive Computing demnächst noch so bringen.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.