Von Simon Dosch
Voraussichtliche Lesedauer: 6 Minuten
EDEN: Ethereum Development Environment & Network
Entwickeln mit Ethereum Blockchain ist im Moment ein heißes Thema und eine Technologie, die noch dabei ist, sich selbst zu finden. Trotzdem wagen sich bereits einige mutige Entwickler hier bei MaibornWolff daran, Blockchain-basierte Applikationen zu entwickeln. Im Bereich „Distributed Ledger Technologies“ beschäftigen wir uns ausschließlich mit Software-Lösungen, welche die einzigarten Eigenschaften der Blockchain nutzten, um…
Entwickeln mit Ethereum
Blockchain ist im Moment ein heißes Thema und eine Technologie, die noch dabei ist, sich selbst zu finden. Trotzdem wagen sich bereits einige mutige Entwickler hier bei MaibornWolff daran, Blockchain-basierte Applikationen zu entwickeln. Im Bereich „Distributed Ledger Technologies“ beschäftigen wir uns ausschließlich mit Software-Lösungen, welche die einzigarten Eigenschaften der Blockchain nutzten, um Probleme neu, oder ganz und gar neue Probleme zu lösen.
So anders und revolutionär verteilte Anwendungen erscheinen mögen, so ist man bei ihrer Entwicklung doch mit allzu herkömmlichen Problemen konfrontiert:
Die Notwendigkeit von Frameworks, Test-Umgebungen, sowie allerlei Tools zum Testen und sichern der Qualität, macht vor der Welt der Smart Contracts keinen Halt.
Mit dem „Ethereum Development Environment & Network“ – Projekt, oder kurz: EDEN, haben wir Entwickler einen Ort, wo alles Nötige gesammelt wird, um schnell und effizient neue Prototypen und Ideen auf Ethereum auszuprobieren. Unser kleines Paradies quasi.
Und damit wir im Paradies nicht alleine bleiben ist EDEN open source!
Ich werde die derzeitigen Bestandteile von EDEN in diesem Artikel kurz vorstellen.
- Private “proof-of-work” Blockchain (2x Geth) + EthStats Dashboard
- Private “proof-of-authority” Blockchain (6x Parity) + EthStats Dashboard
- “Toolbox” mit Truffle, Oyente und weiteren Utils
Blockchain, ready-to-use
Ein Smart Contract für Ethereum ist schnell geschrieben. Online Editor und Compiler „Remix“ ist hierfür eine gute Wahl. Doch unseren Code auf einer Ethereum Blockchain auszuführen, ist leichter gesagt als getan.
Welches Ethereum-Netz eignet sich am besten für unsere Prototyping- und Entwicklungszwecke? Das Ethereum Mainnet kommt selten in Frage, da dessen Nutzung echtes Ether und damit Geld kostet. Und das wollen wir im Falle eines Prototyps erst einmal vermeiden. Auch die offiziellen Ethereum Testnets wie „Ropsten“ oder „Rinkeby“ sind nicht gerade trivial zu nutzen. Wir brauchen auch hier „Test“-Ether, die wir für jeden unserer Accounts von öffentlichen sogenannten „Faucets“ beziehen müssten. Außerdem müssen wir auch diese Blockchains erst einmal herunterladen und mit unserem Rechner synchronisieren.
Auf der anderen Seite des Spektrums befindet sich „Ganache“, ein JavaScript Programm, welches das Verhalten einer Blockchain simuliert. Wir nutzen wir es für automatisierte Tests.
In der Mitte liegt bekanntlich das Gold, oder in diesem Fall: der Wal. Wir haben zwei verschiedene Docker Umgebungen erstellt, die es uns ermöglichen, eine private Blockchain auf unserem eigenen Rechner zu starten. In beiden Fällen werden direkt mehrere Nodes gestartet, um echte Begebenheiten zu simulieren, unsere Accounts befüllt, sowie ein „EthStats“ Service gestartet. Dieser gibt uns einen schönen visuellen Überblick über den derzeitigen Zustand unser Test-Blockchain.
Die beiden Setups unterscheiden sich lediglich im Konsens-Mechanismus. Wir haben die Möglichkeit, entweder „proof-of-work“ oder „proof-of-authority“ zu nutzen.
Ersteres ist Standard und wird auch von Bitcoin, dem Ethereum Mainnet und Ropsten genutzt. Die zweite Option ist besonders im Kontext großer Unternehmen interessant. Diese planen oft nicht mit einem Betrieb auf dem Mainnet, sondern auf einer von mehreren autorisierten Unternehmen betriebenen „Konsortium“-Blockchain. Hierbei fällt der energieaufwendige Prozess des „Mining“ weg. Auch deshalb eignet sich dieses Setup gut zum Entwickeln, da alle Bestandteile einer echten Blockchain vorhanden sind, wir aber keine schwitzenden Entwicklungsrechner und lange Block-Wartezeiten während Präsentationen haben.
Weitere Vorteile der Docker-Blockchains sind, dass wir einen zentralen Ort haben, um auf Änderungen im Setup der Nodes zu reagieren und dass sogar Dinge wie unser eigenes ENS (Ethereum Name Service) bereits deployed und nutzbar sind.
Einfaches Deployment und Testing
Wer besonders schnell starten möchte, kann unseren „Toolbox“ Container nutzen. Wir haben einen Docker Container gebaut, auf dem alle wichtigen Programme zum Deployen, Untersuchen und Testen von Smart Contracts bereits vorinstalliert sind. Man kann sein Smart Contract Projekt einfach als „Volume“ einhängen und mit den verfügbaren Tools darauf zugreifen.
Zunächst möchte ich den Fokus auf das „Truffle“-Framework lenken. Wir können Unit-Test-ähnliche Tests für unsere Contracts schreiben und diese mit Truffle ausführen. Das hierzu benötigte „Ganache/CLI“ ist bereits vorinstalliert. Desweiteren hilft uns Truffle beim Deployment unserer Contracts auf unsere lokale Blockchain. Wir können komplizierte Deployment-Szenarien für voneinander abhängige Smart Contracts entwerfen und ausführen, sowie die Adresse des neuen Contracts an Applikationen weiterleiten, die diesen nutzen sollen.
Praktische Tools
Zuletzt haben wir auf unserem „Toolbox“ Container Zugriff auf einige oft verwendete Smart Contracts wie „string-utils“ und eine Python Script-Sammlung namens „Oyente“. Mit dieser können wir unseren Solidity Code (die Programmiersprache von Ethereum Smart Contracts) auf bekannte Fehler und Angriffsmöglichkeiten untersuchen lassen, was uns dabei hilft, sichereren Code zu schreiben.
EDEN ist noch nicht abgeschlossen und wir planen, es noch um viele nützliche Tools zu erweitern. Hierzu sind wir auch immer offen für Ideen von außen. Denkbar wäre ein Standard für die Nutzung von Truffle in Verbindung mit Continuous Integration/Development in GitLab. Doch auch zum jetzigen Zeitpunkt kann es uns viel Zeit beim Aufsetzen neuer Projekte sparen und wir kommen schneller zu besseren Ergebnissen.