Ethereum Development Tools – an Evaluation Matrix

Developing for the Ethereum World Computer – Revisited

When comparing development methods for and in the Ethereum space, it becomes obvious how brilliant the people involved actually are: as a developer, you have several choices of great development tools and environments, even though the development process for Dapps is quite difficult: it involves different “layers” (frontend with HTML/CSS/JavaScript and backend with the Ethereum blockchain), different languages (JavaScript for frontend dev, Solidity for backend dev), different contexts (public/private/proprietary blockchains).

Taking these different contexts into account, evaluating the different development environments is only possible by identifying the different aspects and value them according to the own preferred usage.

Aspects of Dapp Development

Ethereum-docs-intro (1)

  • Solidity Development / Solidity Environment
    User can edit Solidity content in a text editor, there should be at least syntax highlighting.
  • JavaScript/Web Environment
    User can edit JavaScript, HTML and CSS in a text editor and gets different levels of support like syntax highlighting, code completion, etc.
  • IDE
    User can not only edit code (Solidity and JavaScript), but can also compile, check into a versioning system, debug and deploy to some operating environment.
  • Versioning
    Versioning is supported, eg. by enabling the user to check edited content into a versioning system, show diffs, apply patches, etc.
  • Collaboration
    Modification of code by multiple users is supported, at minimum support of different versions of the code is possible to avoid conflicts.
  • Deployment
    Working code can be deployed to some environment which enables the user and other users to use the working program (a sandbox or real blockchain and a web application server for JavaScript like node.js and static content like HTML and CSS files)

A first Categorization and a Teaser

We will summarize in short the different aspects which are supported in these development environment: Solidity Browser / Ethereum Wallet, Truffle and Ethereum Studio.

This is also a teaser for the upcoming blog posts, which will explain the environments in detail.

Solidity Browser / Ethereum Wallet

In terms of architectural styles, both environments represent minimalism. They are slim and handy, easy to use and fast to learn, but lack some functionality if real development “in the large” is necessary.

Ethereum-docs-browser
Solidity Browser, only Solidity Development, no Environment, ie. not even save of file is possible

Ethereum-docs-wallet
Ethereum Wallet (Mist), only Solidity Environment, no save of file possible, but integrated compiler

Truffle (also: Embark, Dapple)

Truffle satisfies all aspects which a usual client application can offer, therefore you can think of Gothik, it is mighty, almost lavish, and well structured. If you come from web development in JavaScript with node.js, who should look no further, this environment is for you (at least if you don’t need support for online development, versioning and multi user directly in your environment, but use external tools like Git and testrpc for these aspects).

Ethereum-docs-truffle
Truffle, also Embark and Dapple: web development environments, usefully extended with Solidity support

Ethereum Studio, the all-in-one-solution

The Ethereum Studio, in our opinion, resembles Deconstructivism. Why’s that? Because here all aforementioned aspects of software development are taken apart and are reconstructed to fit perfectly to Dapp development. This is an all-in-one-solution which we can really recommend, with two limitation: you have to agree to a uncertain pricing model (it just doesn’t exist right now, you can still test the product) and a “closed” environment, which works seemless and smooth, but expects you to let in to this tool and the development process.

But no other tool lets you test your code this easy with manual and even unit testing built into the environment.

Ethereum-docs-studio
The all-in-one-solution, steep learning curve, but all you will ever need in multi user, versionized, unit tested Dapp development

Stay tuned for the detailed explanations of these great development tools.

KW 18.16 – Weekly Blockchainers Recap

Amazon’s Blockchain as a Service Amazon announced Blockchain as a Service. You can use a blockchain from Microsoft Azur or from the IBM Cloud, now Amazon also want to offer a service. I like working with AWS, so I hope the blockchain service will fit perfectly to the existing datacenter services. Akasha Project  The Akasha Project has a high disruption potential. It is a decentralized social multimedia network, based on Ethereum.  Akasha could be a game changer. Satoshi Nakamoto This week you found many articles about Craig Steven Wright. “Is he Satoshi, or not”, the trough is … the articles are interesting, but you know nothing, Jon Snow.

KW 17.16 – Weekly Blockchainers Recap

ECB – works on blockchain  The European Central Bank works on blockchain concepts, but they don’t talk about their own currency, they just spend some work on distributed ledger technologies (DLT). Since R3 announced Corda the big players don’t talk about blockchain anymore, they use the description DTL. more IBM IBM launch a blockchain cloud service, you can start your own test environment directly at the Bluemix site. Local Meeting in Ethereum Space: the Ethereum-MZ meetup Last week there was an Ethereum Meetup in Mainz (at the Hipster space dock eins mainz, an old customs port). So, Mainz really is a beautiful city, but with 200.000 citizens, why is there a Ethereum Meetup? For a really good reason: Heiko Hees, core developer of the Ethereum Python client pyethapp, which is one of the Ethereum Foundation supported clients, founded his company brainbot technologies AG there. Heiko and Max from brainbot gave a introductory talk about Ethereum and an insight in developing for the platform with the Ethereum wallet to an interested and active auditorium. Several people had to leave at 11 pm for Frankfurt, but would have liked to stayed even longer. Nice, interested people, cool location and last but not least beer & pizza. Thanks again Heiko & brainbot! If you have the opportunity to go to the next meetings, you should not hesitate.

KW 16.16 – Weekly Blockchainers Recap

Die Blockchain bei der JAX 2016 Vom 18.04. – 22.04. fand mit ca. 2000 Besuchern die größte Entwicklerkonferenz Deutschlands in Mainz statt. Anfänglich stand JAX für Java, Apache und XML und dies sind auch immer noch die Schwerpunkte, es geht viel um Enterprise- und Webentwicklung mit Java, um Architekturen und Vorgehensmodelle in der IT usw.. Umso erstaunter war ich, dass mit Taming the Bitcoin Blockchain von Caterina Rindi ein reines Blockchainthema als Keynote vorkam, zwar erst um 20 Uhr abends, aber mit ca. 200 Teilnehmern sehr gut besucht (von denen auf Caterinas Nachfrage auch einige Bitcoins besitzen). Der Vortrag war eine gute Einführung, Caterina kam über NGOs zu Bitcoins und beschäftigt sich seitdem aus einer fachlichen Sicht mit der Blockchaintechnologie. Eine weitere Nachfrage von Caterina ans Publikum: „wer kennt Ethereum?“. Auch hier gab es vereinzelte Meldungen, aber „noch zu wenig“.  Genau dies war auch die Kernaussage Ihres Vortrags: ihr seid Entwickler, ihr könnt mit dieser Technologie die Welt ändern, also macht das auch. Dieser Aussage können wir uns nur anschließen. Decentralized, Peer-To-Peer Bitcoin Exchange Bitsquare to Launch Next Week Nachdem mit OpenBazzar ein peer to peer Marktplatz für alles mögliche live gegangen ist, gibt es bald die dezentrale Bitcoin Börse Bitsquare. Der Ansatz ist hat ein hohes Disruptionspotential. Zentrale Marktplätze bekommen Konkurrenz. SWIFT arbeitet an der Blockchain Technologie Bekanntlich ist das SWIFT Netzwerk der quasi Bankenstandard. Die Blockchain Technologie gefährdet dieses Monopol. Um selber im “Driver Seat” zu bleiben, arbeiten sie jetzt intensiv an dieser Technologie.

KW 15.16 – Weekly Blockchainers Recap

The FED discuss the potential of blockchains A member of the US Federal Reserve’s board of governors issued new remarks this week on the potential of blockchain technology. In her speech, Lael Brainard said she believes the financial industry and regulators should be optimistic of technologies that have the potential to bring positive change. Ethereum based Energy trading The idea sounds good, you can sell your energy from your solar cells direct based on Ethereum smart contracts to an end user. The decentraliced energy market fits to the decentralized privat energy producer. Strong disruption alert on this concept. Andreas Antonopoulos .. has published a new motivating video about Bitcoin basics and ideas. Better than boring TV shows in the evening. He is an inspiring Bitcoin evangelist.

Wir machen uns die Welt … wie sie uns gefällt

Nach der Entdeckung der neuen Welt und dem Überwinden der ersten Hindernisse wollen wir uns nun sesshaft machen und anfangen, Applikationen und Smart Contracts jenseits von “Hello World” zu entwickeln.

Aber wie fangen wir an? Die ersten Erfahrungen mit dem fantastischen Tool cosmo.to waren viel versprechend, leider ist das Tool mittlerweile online nicht mehr verfügbar. Der wahrscheinliche Grund ist die Tatsache, dass das Standard-Ethereum-Wallet von ethereum.org die gleiche Funktionalität und noch viel mehr bietet. Allerdings zu Lasten der Übersichtlichkeit.

Wir wollen deshalb hier einen Überblick der bekanntesten Entwicklungsumgebungen geben, mit einer subjektiven Einordnung in Architekturstile:

  • Minimalismus: minimal, übersichtlich, aber auch schlicht: der Solidity Browser. Super zum Erlernen der Sprache Solidity, aber das war’s dann auch schon. Persistierung? Versionierung? Alles nicht vorgesehen. Super für den Einstieg.
  • Bauhaus: funktional und praktisch: das Ethereum Wallet dient nicht nur als Wallet selbst, sondern ermöglicht die Erstellung und das Deployment von Smart Contracts und die Verwaltung von eigenen Tokens.
  • Gotik: opulent, gut strukturiert, mächtig: Truffle ist ein reines Javascript-Framework und verwendet alle Komponenten, die moderne Javascript-Entwicklung bietet: Gulp, Mocha, Chai, etc. Sehr gut dokumentiert, ebenfalls gut für den Einstieg geeignet, bietet darüber hinaus aber auch viel mehr.
  • Kubismus: ganz anders, aber erfolg- und einflussreich: die Entwicklungsumgebung von Microsoft, Visual Studio (Community) oder der neue Open Source Editor Visual Studio Code zusammen mit BlockApps STRATO, einer zentralisierten Blockchain. Leicht zu nutzen, mit automatischer Frontenderstellung. Etwas für den anderen, schnellen Einstieg in private Chains mit Microsoft Azure.
  • Dekonstruktivismus: das “new kid on the block”, das Ethereum Studio von <ether.camp> macht alles etwas anders, nach unserer Meinung auch besser: eine verteilte Entwicklungsumgebung auf Basis von cloud9, ein integrierter Sandbox-Ethereum-Node, eine Deploymentmöglichkeit in alle möglichen Umgebungen (die JSON-RPC verstehen). Leider auf Dauer nicht kostenlos, Preise sind noch nicht bekannt.

In den nächsten Wochen werden wir die hier erwähnten (es gibt noch zahlreiche andere!) Entwicklungsumgebungen genauer testen, immer mit dem gleichen Tokenbeispiel. Stay tuned!

KW 14.16 – Weekly Blockchainers Recap

R3 Introducing Corda  R3 works on their own distributed ledger Systems Corda. The first blockchain test from R3 with 11 banks based on Ethereum and Microsoft technologies. Corda should not become just another blockchain, it should be something different, a distributed ledger between trusted partners. more IBM IBM starts to combine their blockchain activities with watson. I think watson is a realy interesting AI technology. I  have no idea what kind of product will come out of this combination. We have to look on this activity. more Microsoft The Microsoft Ethererum blockchain activities looks pretty serious. Azure can become a standard cloud service for blockchain nodes. OpenBazzar OpenBazzar is new decentralized market place. In the new Silicon Valley econnomy the market places have the control about every transaction. OpenBazzar can break this new empires with a new concept of a decentralized marketplace with bitcoin based transactions.

KW 13.16 – Weekly Blockchainers Recap

Brave Browser mit Bitcoin Wallet  Diese Woche bin ich an einem Artikel zu einem neuen Browser hängen geblieben – Brave. Erst einmal ist Brave nur in neuer Browser mit dem ich geschützt im Netz Surfen kann. In Zukunft soll der tapfere Browser ein Bitcoin Wallet für Micropayments enthalten. Hier wird die Geschichte interessant, die Kombination von Browser und Wallet kann bedeutend für das Internet of Money werden. Bei meinen ersten Tests machte der Browser einen guten Eindruck, ich bin auf keinerlei Probleme gestoßen. Solidity im Visual Studio Die Ethereum Sprache Solidity für Smart Contacts wurde in die Microsoft Visual Studio Entwicklungsumgebung integriert. Es unterstützt die Strategie von Microsoft Azure Cloud Services für Ethereum zu verkaufen.   Zum 1. April gab es noch 2 schöne Blockchain Geschichten 😉 Die RWE benutzen den überflüssigen Strom zum Minen. Bottrop wird somit zum Bitcoin Mining Zentrum. Ethereum und R3 bringen zusammen eine Crypto-Währung raus. Bitte einmal an die Vereinbarung heran zoomen.

Ethereum Usecase: Online Identitätsprüfung

Die Identitätsprüfung des Kunden bei Onlinegeschäften ist in der Regel ein Prozess, der mehrere Tage in Anspruch nimmt. Die Identifizierung wird zum großen Teil über das PostIdent Verfahren abgewickelt, das von dem Kunden verlangt zur Postfiliale zu fahren, um sich vor Ort identifizieren zu lassen. Die schnellste (mir bekannte) Onlineidentifizierungsmethode bietet idnow, das z.B. von Number26 bei der Kontoeröffnung benutzt wird. Dabei wird in einem Video-Chat die Identität des Kunden überprüft. Der Prozess nimmt etwa 5 Minuten in Anspruch und ist mit gängigen Smartphones durchführbar.

Was wäre aber, wenn man den Identitfikationsprozess noch schneller und mit noch weniger Intermediären durchführen könnte? Das Zauberwort heißt Ethereum.

Der große Anspruch von Ethereum ist es einen offen zugägnlichen Welt-Computer zu schaffen, der in der Lage ist die Programme, die er ausführt und den Laufzeitzustand, der sich aus der Ausführung dieser Programme ergibt, in eine Blockchain so zu verpacken, dass es keine Möglichkeit gibt die Programme oder deren Laufzeitzustand zu verfälschen.

Jeder Benutzer und jedes Programm in Ethereum haben eine oder mehrere öffentlich bekannte Adressen. Zusätzlich zu der öffentlichen Adresse hat jeder Benutzer einen privaten (geheimen) Schlüssel mit dem er Transaktionen in Ethereum signieren kann.

Welche Möglichkeiten würden sich ergeben, wenn die Behörde bei der Ausstellung eines neuen Personalausweises für alle Ausweisdaten (Name, Vorname, Geburtsdatum, Adresse, …), einen Hash-Wert berechnen und in einem öffentlich zugänglichen Identitätsverzeichnis an die Ethereum-Adresse des Kartenbesitzers binden würde?

In Ethereum kann man so ein Identitätsverzeichnis mit wenigen Codezeilen durch den folgenden Contract abbilden:

contract IdentityRegistry {
    address owner; // Der Besitzerer der Registry (die Behörde)
    string name;   // Der Name der Registry
    
    // Abbildung von Ethereum Adresse
    // zu dem Hash-Wert der Personalausweisdaten
    mapping(address => uint256) idHashes;  
    
    // der Konstruktor wird einmalig beim Anlegen des Contracts ausgeführt
    function IdentityRegistry(string _name) {
        owner = msg.sender;   // hier merken wir uns den Contract-Ersteller als Besitzer
        name = _name;         // den Namen der Registry setzen
    }
    
    // Liefert den Namen der Registry, verändert nicht den Zustand
    function getName() constant returns (string) {
        return name;
    }
    
    // Beschreibt wie der Hash-Wert für die Daten gebildet wird
    // Alle Informationen werden durch "/" getrennt, hintereinander abgelegt
    // Es wird SHA-1 Hashwert der Zeichenkette berechnet
    function getIdHashFormat() constant returns (string) {
        return "sha-1(NAME/GIVENNAMES/DATEOFBIRTH/PLACEOFBIRTH/NATIONALIY/ADDRESS1/ADDRESS2/ADDRESS3)";
    }
    
    // Diese Methode kann nur von dem Besitzer (Bürgeramt) aufgerufen werden.
    // das "throw" rollt die Transaktion zurück, wenn die Transaktion
    // nicht vom Besitzer der Registry (Bürgeramt) aufgerufen wurde.
    // Die Funktion bindet den Hash-Wert an die Ethereum Adresse des Ausweisbesitzers
    function registerIdHash(address who, uint256 hash) {
        if(owner != msg.sender) throw;
        idHashes[who] = hash;
    }
    
    // Wird vom Gegenüber (z.b. Bank) aufgerufen, um den Hash-Wert einer
    // Ethereum Adresse zu überprüfen
    function verifyIdentity(address who, uint256 hash)
    constant returns(bool) {
        return idHashes[who] == hash;
    }
    
    // Falls keine der oben definierten Methoden aufgerufen wurde,
    // sorgt diese Funktion, dass die Transaktion zurückgerollt wird.
    function() {
        throw;
    }
}

Beantrag beispielsweise Max Mustermann, geboren am 01.01.1990 aus Musterstrasse 12, Musterhausen den Ausweis, berechnet das Amt zunächst den Hash-Wert aus allen oben genannten Daten, z.B.:

sha1("MUSTERMANN/MAX/01.01.1990/MUSTERHAUSEN/DEUTSCH/MUSTERHAUSEN/MUSTERSTRASSE 12") = 1417400950720517943593210833135938663929334829119

Dieser Hash-Wert wird anschliessend vom Amt im Identitätsverzeichnis an Maxs öffentliche Ethereum-Adresse (0xDBEc37…) gebunden, z.B.:

identityRegistry.registerIdHash(
    0xDBEc371775c57f59fDA5BBa2c9FC8876968F34E3, 
    1417400950720517943593210833135938663929334829119)

Hierbei ist es wichtig anzumerken, dass aus dem Hash-Wert der Daten keine Rückschlüsse auf die Daten selbst gezogen werden können.

Möchte Max ein Konto bei der Musterbank eröffnen, könnte er nun über ein Onlineformular der Musterbank seine persönlichen Daten eingeben und zusätzlich seine öffentliche Ethereum-Adresse senden. Mit diesen Informationen kann die Musterbank bereits überprüfen, ob der Datensatz korrekt ist. Genauso wie das Bürgeramt, berechnet die Musterbank den Hash-Wert und vergleicht diesen mit dem Hash-Wert aus dem Identitätsverzeichnis des Bürgeramts. Z.B.:

bool res = identityRegistry.verifyIdentity(
    0xDBEc371775c57f59fDA5BBa2c9FC8876968F34E3,
    1417400950720517943593210833135938663929334829119)

Damit ist überprüft, ob der Datensatz valide ist, aber noch nicht ob Max auch der tatsächliche Absender der Information ist. Um auch das zu überprüfen, instantiiert die Musterbank einen weiteren Contract auf Ethereum und wartet darauf, dass Max mit seinem privaten (geheimen) Schlüssel die Bestätigungsmethode aus dem Contract aufruft und damit beweist, dass er tatsächlich der Besitzer des Ethereum Kontos mit der öffentlichen Adresse 0xDBEc37… ist. Der Contract sieht wie folgt aus:

contract IdentityConfirmation {
    address createdBy;    // Ersteller des Contracts (Musterbank)
    address who;          // Wer soll sich identifizieren (Max)
    bool confirmed;       // wurde die Identität bestätigt?
    
    // dieses Event wird verschickt,
    // wenn Max die Funktion "confirm" aufruft
    event IdentityConfirmed(address who);
    
    function IdentityConfirmation(address _who) {
        who = _who;
        createdBy = msg.sender;
        confirmed = false;
    }
    
    // wenn die Methode von Max aufgerufen wird, d.h.,
    // der Aufruf mit dem privaten Schlüssel von Max signiert wurde
    // bekommt die Musterbank die Bestätigung über
    // die erfolgreiche Authentifizierung
    function confirm() {
        if(who == msg.sender) {
            confirmed = true;
            IdentityConfirmed(msg.sender);    
            suicide(createdBy);
        }
    }
    
    function() {
        throw;
    }
}

Anbei der gesamte Vorgang zusammengefasst in einem Sequenzdiagramm:

Sequence Diagram

Weitere Überlegungen

Das vorgestellte Konzept ist eine grobe Skizze. Ein produktives System bräuchte noch weitere Feature wie z.B Aktualisierung / Sperrung / Entsperrung des Eintrags im Umzugsfall oder beim Verlust des privaten Schlüssels bzw. beim Ablauf des Ausweises.

Falls die Behörden nicht die Blockchain-Technologie adaptieren sollten, kann man sich auch folgende Alternativen vorstellen:

  • Es existiert ein Intermediär vergleichbar zu idnow, der den Aufbau des Identitätsverzeichnisses übernimmt und den Dienst gegen Gebühr anbietet.
  • Das Identitätsverzeichnis wird innerhalb des Konsortiums/Verbands aufgebaut und benutzt.

Schließlich wäre noch zu untersuchen, ob man mit dem privaten Ethereum Schlüssel außerhalb von Ethereum Daten signieren kann (public/private-key Verfahren). Das würde den zweiten Contract überflüssig machen.

KW 11.16 – Weekly Blockchainers Recap

Die Revolution frisst ihre Kinder Diese Woche sind mir zwei Artikel besonders aufgefallen, die beide zu dem alten Zitat von Pierre Vergniaud aus den Zeiten der französischen Revolution passen. Zu einem Teil des aktuellen PWC Reports passt die Überschrift: While Fintech Disrupts Banks, the Blockchain Disrupts Fintech. Des weiteren gab es verschiedene Presseberichte über ein Startup Arcade City, die eine Art Blockchain basierenden Uber Clone raus gebracht haben. Wenn man ein 1/4 Sekunde drüber nachdenkt, vereinfacht es noch mal sehr viel am Uber Geschäftsmodell. Uber beschäftigt sich mit den Abrechnungen der Kunden und Fahrer, dass wird zum großen Teil hinfällig. Why Latin American economies are turning to bitcoin In dem hier besprochenen Buch Crypto Currencies wird, aus einer persönlichen  Betroffenheit des Autors, ausführlich über die Möglichkeiten des Bitcoins in Ländern ohne stabiles Währungs- und Banksystem diskutiert. Dieses scheint auch für Sir Richard Branson nach einem richtig guten Geschäft zu riechen.