ESSCP

Ethereum Solidity - Smart Contract Pattern

Ausgangslage

Warum ein Pattern für Solidity?

Das Interesse an dezentralisierten Anwendungen nimmt stetig zu. Um eine Business Anwendung auf der Ethereum Blockchain umzusetzen, bedarf es einer gewissen Vorplanung. Eine fehlerhafte, Struktur kann die Anwendung schnell unbrauchbar machen. Anpassungen sind nicht möglich! Der Contract muss erneut geschrieben und im Netzwerk „deployed“ werden. Ein Pattern ähnlich dem bekannten MVC Prinzip würde es Entwicklern ermöglichen, schneller und effizienter neue Anwendungen umzusetzen.

Risiken bei der Umsetzung:

Solidity ist eine junge Programmiersprache und kommt lediglich bei Ethereum zum Einsatz. Dadurch befindet sich die Sprache selbst noch in der Entwicklungsphase. Die Umsetzung von dezentralen Anwendung bringt viele neue Probleme mit sich. Ein Problem stellt die Einschränkung bei der Speicherung von Daten dar. Ein weiteres Problem ist die Unveränderbarkeit des Programmcodes dar - was bei einem "Trustless" System einerseits gegeben sein soll, aber andererseits nicht zwingend den gesamten Programmcode betreffen muss. Ein einfaches Umwälzen vom existierenden Pattern wird aufgrund der neuen Probleme voraussichtlich nicht möglich sein.

State of the Art:

Die Programmiersprache Solidity erlaubt Vererbung, zusätzlich wurde ab der Version 0.4 auch die Möglichkeit der Erstellung von Libraries integriert. Es gibt bis dato keine bekannten oder angesehenen Vorgehensweisen für große modulare Blockchain Anwendungen.

Projektziele:

Dieses Pattern als eine Art Anwendungsgrundlage soll Entwickler dabei unterstützen einfach und schnell auf der Ethereum Blockchain mit einer eigenen Anwendung loszulegen. Im besten Fall entwickelt sich dieses Pattern zu einem bekannten Startpunkt und findet weitere Unterstützer um das Projekt stetig weiter zu entwickeln.

Zentral vs. Dezentral

Welche Patterns kommen bei zentralen Anwendungen zum Einsatz? Welche Patterns sind besonders anwenderfreundlich und beliebt? Können diese Patterns auf einer dezentralen Anwendung angewendet werden?

Klassifikation Entwurfsmuster:

Entwurfsmuster lassen sich grundsätzlich durch deren Zweck und deren Wirkungsbereich unterscheiden.

  • Erzeugungsmuster (Erzeugen Objekte)
  • Strukturmuster (Vereinfachung der Struktur zwischen Klassen)
  • Verhaltensmuster (Zusammenspiel und Nachrichtenaustausch zwischen Objekten)

Eine dezentrale Sicht auf MVC:

Heutzutage wird das MVC Prinzip meist mit der Struktur des Frontend-Codes in Verbindung gebracht. Der Grund dafür ist die frühere strikte Trennung zwischen Frondend und Backend. Mittlerweile ist Javascript ein fester Bestandteil jeder modernen Web Anwendung und stellt dadurch oftmals schon den Teil des Controllers dar. Also die View als HTML, der Controller und das Model als Javascript komplett auf der Clientseite dazu findet man je nach Backend erneut Controller und Model als Schnittstelle auf der Serverseite.

Solution

Nachfolgend werden die Vorgehensweise und die daraus resultierenden Ergebnisse dargestellt.

Was zeichnet eine Ökosystem Anwendung aus?

Unternehmen bewegen sich immer mehr in die Automatisierung von Prozessen, dabei tritt oftmals das Problem auf, dass diese Anwendungen von einzelnen Teilnehmern betrieben werden und nicht wie gewünscht vom gesamten Netzwerk bzw. Ökosystem von Teilnehmern. Ökosystemanwendungen versuchen also die Prozesse auf der Ebene der Wertschöpfungskette zu automatisieren und bieten damit einen Rahmen für den Aufbau komplizierter und vernetzter Netzwerke um die Kosten zu senken und neue Möglichkeiten der Wertschöpfung zu eröffnen.

Blockchain Generation

Anhand der neuen dezentralen Anwendungsmöglichkeiten lassen sich die Generationen von Ökosystemanwendungen, wie folgt einteilen:

  • 1. Generation: Einfluss auf die Wirtschaft durch Datenskalierung und Synchronisation von papierbasierten internen Prozessen großer Unternehmen Mithilfe von Datenzentren.
  • 2. Generation: Einfluss auf die Wirtschaft durch Datenskalierung und Synchronisation von papierbasierten internen Prozessen kleinerer Unternehmen Mithilfe von Cloud Anbietern.
  • 3. Generation: Verwendung von Blockchains und Smart Contracts um abgestimmte Prozesse auf Ökosystemebene zu erzeugen.

Anforderungsanalyse

Um ein Pattern für eine dezentrale Anwendung zu erstellen, müssen zuerst die Probleme und Herausforderungen definiert werden.

Weil eine Blockchain grundsätzlich keine Änderungen zulässt, muss eine Möglichkeit geschaffen werden, nur Teile einer Anwendung zu erneuern und einer bestehenden Anwendung neu zuzuweisen.

Um das zu ermöglichen, muss eine dezentrale Anwendung weitreichend in seine unterschiedlichen Bestandteile aufgeteilt werden.

  • Daten und Struktur der Daten
  • Logische Operationen
  • Controller zwischen Daten und Logik
  • Libraries für wiederkehrende Anforderungen

Zusätzlich ist es notwendig eine Art Routing in die Struktur einer dezentralen Anwendung zu bringen. Das Pattern wird deshalb um einen Proxy und Gateway Contract erweitert und ermöglich dadurch eine erhöhte Flexibilität. Dadurch ergibt sich die nachfolgend dargelegte Struktur:

  • Proxy Gateway Contract
  • Logic Contracts
  • Service Contracts
  • Controller Contracts
  • Database Contracts

Overview Contracts:

Proxy Gateway
one
contract that acts as permission board and manages all engaged contracts
includes simple proxy gateway inheritance contract ProxyGateway ProxyGatewayEngaged
Logic
multiple
contract that hold´s the actual application logic
Controller
multiple
contract that operates with data
Database
multiple
contract that stores the actual data
Services
multiple
contract for libraries and microservices
MathServiceContract

Zusammenfassung

Die Aufteilung der für eine größere Anwendung verwendeten Contracts auf den dafür vorgesehenen Einsatzzweck, ermöglicht es uns Teile davon durch einen anderen Contract zu ersetzen. Die zwei wichtigsten Contracts stellen dabei der Proxy Gateway Contract und der Connected Engaged Contract dar. Der Proxy Contract speichert die Verwalter(Owner) der Anwendung. Die maximale Anzahl der Verwalter ist auf 21 beschränkt. Ein Verwalter kann Anfragen für Änderungen erstellen. Beispielsweise kann ein Verwalter eine Anfrage zum Entfernen oder hinzufügen von Contracts, Verwalter oder Manager stellen. Eine Anfrage wird durchgeführt bzw. abgewiesen wenn mehr als die Hälfte dafür oder dagegen stimmt. Der Proxy Contract speichert die gesamten Contracts und ist alleinig berechtigt den Connected Engaged Contract zu bearbeiten.
Der Gateway Contract speichert alle involvierten Contracts mit deren Name und Adresse und ermöglich dadurch eine unverbindliche Verbindung.
Ein Service Contract stellt Funktionen bereit die möglicherweise über mehrere logische Contracts hinweg nützlich sein können. Beispielsweise Funktionen die mathematische Aufgaben erledigen oder Funktionen die diversen Einschränkungen der Sprache verbessert bearbeiten.
Die restlichen Contracts stellen den Flow eines Applikationsteil dar.
Logic -> Controller -> Database
Ein Logic Contract enthält die Logik eines Anwendungsbereiches. Ein Controller Contract hält Operationen für Datenbank Änderungen bereit. Der Controller Contract ist jeweils nur vom jeweiligen logischen Contract aus erreichbar. Ein Database Contract hält die eigentlichen Daten.
Gemeinsam ergibt sich dadurch eine Struktur um skalierbare Business Lösungen auf der Ethereum Blockchain umzusetzen.

High Level View - Pattern

Overview Pattern