Trinary-Hash Funktion

Am 20.12.2018 verkündete die IF, die Veröffentlichung einer neuen sicheren Hash-Funktion für die trinäre Architektur und Plattform von IOTA.

Diese Hash-Funktion mit dem Namen “Troika” wurde von den erfahrenen Kryptographen von CYBERCRYPT extra für die Bedürfnisse des IoT entwickelt und wird eine starke kryptografische Grundlage für das endgültige IOTA-Protokoll bilden. Gegenwärtig gilt Troika als resistent gegen die bekannten Angriffsarten.

Aber die einzig wahre Methode, um zu testen, dass Troika sicher ist, besteht darin, die Forschungsgemeinschaft herauszufordern, sie zu brechen. Dafür hat die IF eine kumulierte Prämie von 200.000 Euro für jeden geschaffen, der es knacken kann. Die Entwickler erhoffen sich dadurch neue Erkenntnisse oder Verbesserungen, die Sie dann in einer verbesserten Version einfließen lassen können.

Ein Zeitplan wann der Umstieg auf Troika erfolgt existiert derzeit nicht, man möchte erst das Feedback abwarten.


Quellen

www.iota.org

https://blog.iota.org/iota-and-cybercrypt-announce-new-lightweight-trinary-cryptographic-hash-function-678e741315e8

Der Zustand von Qubic und die Zukunft der Smart Contracts auf IOTA

13.Apr’20

Übersetzung des Blogartikel von Autor Eric Hop, IOTA Foundation.


Die IOTA-Stiftung hat beschlossen, den Schwerpunkt auf einen neuen Smart Contract-Ansatz zu verlagern, der sich aus unserer früheren Arbeit ableitet. IOTA Smart Contracts ist eine 2-Layer-Lösung, die auf der Entwicklung von Coordicide in GoShimmer aufbaut. Eine kurze Einführung finden Sie hier. Die Weiterentwicklung von Qubic erfordert erhebliche Ressourcen und Zeit, und unser neuer Ansatz wird eine breitere und schnellere Anwendung ermöglichen. Wir haben einen funktionierenden Proof of Concept der Programmiersprache Qupla, der auf FPGA-Hardware ausgeführt werden kann, als Open Source zur Verfügung gestellt. Wir laden die Open-Source-Gemeinschaft ein, ihn zu erforschen.


Der Zustand von Qubic

Es ist schon eine Weile her, dass wir uns umfassend mit dem aktuellen Stand des Qubic-Projekts befasst haben. Dieser Artikel wird hier Abhilfe schaffen, indem er eingehend darauf eingeht, wo wir das Projekt derzeit sehen, wie weit wir gekommen sind, welche Lektionen wir gelernt haben und wie die IOTA-Stiftung die Entwicklung von Smart Contracts weiter vorantreiben wird.

Bitte beachten Sie: Wir gehen davon aus, dass der Leser über ein grundlegendes Verständnis des Qubic-Systems sowie der Artikelserie über das Qubic-Berechnungsmodell verfügt. Einige der in diesen Ressourcen verwendeten Begriffe haben sich möglicherweise im Laufe der Zeit aus Gründen der Klarheit etwas geändert.


Qubic: ein geschichtetes System

Wenn man sich Qubic genauer ansieht, dann besteht es eigentlich aus zwei sehr losen gekoppelten Schichten (Layern), die sich gegenseitig nicht allzu sehr zu benötigen scheinen. Diese beiden Schichten sind:

  1. Die Smart Contract (SC) Nachrichtenschicht, die als Level-2-Protokoll über dem IOTA Tangle läuft. Diese Schicht regelt die Ausführung von SCs durch ein Komitee von verarbeitenden Nodes. Die Nodes erzeugen einen Quorum-Konsens über die Verarbeitungsergebnisse und bieten einen Prüfungspfad über das Tangle. Diese Schicht kümmert sich nicht darum, wie die Verarbeitung erfolgt, sondern nur darum, dass die Ergebnisse durch den Prüfpfad, den SC-Code, die Eingabedaten und die Ausgabedaten nachweislich korrekt und überprüfbar sind.
  2. Die Ebene der virtuellen Maschine (VM) von Abra. Diese Schicht regelt die tatsächliche Ausführung des SC-Codes. Sie hat einen besonderen Schwerpunkt auf der Fähigkeit, auf IoT-Geräten mit geringem Ressourcenbedarf ausgeführt werden zu können. Die Schicht nimmt Eingabedaten entgegen, führt den (möglicherweise hardwarebeschleunigten) Code aus und gibt Ergebnisse aus. Dieser Schicht ist es gleichgültig, woher die Eingabedaten kommen und wohin die Ergebnisse gesendet werden.

Diese beiden separaten Schichten werden durch das Qubic Computation Model (QCM), einem Ereignisverarbeitungssystem, miteinander verbunden. Das QCM regelt die Weiterleitung der Eingabedaten von der SC-Schicht an die VM-Schicht und die Rückgabe der Ergebnisse von der VM-Schicht an die SC-Schicht. Das QCM ist ein sehr generisches Modell. Es nimmt nichts über die Ereignisverarbeitung vorweg, weder woher die Ereignisdaten kommen noch wohin die Verarbeitungsergebnisse gehen. Es handelt sich lediglich um einen einfachen Dispatching-Mechanismus, der eine vollständige Entkopplung zwischen den Schichten, die miteinander reden müssen, sicherstellt.


Verbindung der Schichten (Layer)

Wo also findet die Kopplung dieser beiden Systeme statt, wenn sie fast vollständig entkoppelt sind? Zunächst besteht die Notwendigkeit, Berechnungsergebnisse unabhängig voneinander verifizieren zu können. Das bedeutet, dass Sie neben einem Prüfpfad für die Eingabedaten und Ergebnisse der SC-Aufrufe auch den entsprechenden SC-Code benötigen, der aufgerufen wurde, um Teil dieses Prüfpfades zu sein. Auf diese Weise wissen Sie genau, welchen Code Sie mit den Eingabedaten ausführen müssen, wenn Sie das Ergebnis verifizieren wollen.

Beachten Sie, dass dies immer noch nicht die Verwendung des Qubic-spezifischen Qupla-Codes und des entsprechenden Abra VM zur Ausführung des SC erfordern würde. Sie könnten im Wesentlichen jede VM und jede Programmiersprache verwenden, solange der SC-Code mit diesen kompatibel ist. Unsere erste Proof-of-Concept-Implementierung des QCM vermischt in der Game of Life-Demo tatsächlich Qubic-spezifischen Abra-Code mit Standard-Java-UI-Code. Es gibt jedoch einen ganz bestimmten Grund, bei der Auswahl einer VM zur Ausführung Ihres SC-Codes vorsichtig zu sein. Da Nodes diesen Code immer dann ausführen, wenn Daten für die SC automatisch und unbeaufsichtigt ankommen, möchten Sie verhindern, dass laufende SC-Programme in der VM-Schicht ausgeführt werden (unbegrenzte Schleifen/Rekursionen). Sie benötigen einen Mechanismus, um das SC-Programm in Schach zu halten, so dass es nur für eine vernünftige, vorhersehbare Zeitspanne läuft.

In Ethereum wird dieses ausufernde Problem durch die Einführung von Gas-Gebühren gelöst. Die Höhe der Gebühren entspricht einem bestimmten Höchstbetrag der SC-Verarbeitung. Sobald dieses Maximum überschritten wird, wird die SC-Ausführung abgebrochen, wodurch verhindert wird, dass der unkontrollierte SC-Code unbegrenzt weiterläuft. Der Nachteil dieser Methode besteht darin, dass es schwierig sein kann, die Höhe der Gas-Gebühren, die Sie für Ihre SC benötigen werden, im Voraus vorherzusagen, wenn die SC irgendeine Art von nicht traditioneller Verarbeitung durchführt. Und wenn Sie zu wenig Gas-Gebühren bereitstellen, könnte dies dazu führen, dass Ihre SC-Ausführung abgebrochen wird, bevor sie abgeschlossen ist. In diesem Fall haben Sie die Gas-Gebühren verloren, ohne am Ende ein Vollzugsergebnis zu erhalten.

In Qubic lösen wir dieses Problem deterministisch, indem wir ein funktionales Datenflussprogrammierungsmodell in der Abra VM haben, dass keine unbegrenzten Schleifen/Rekursion zulässt und daher an und für sich nicht Turing-fähig ist. Jede Funktion definiert klar, wie viel Verarbeitung sie leisten wird. Es gibt keine direkte Verzweigung oder Schleifenbildung in der Abra VM, was bedeutet, dass jede Funktion immer genau die gleiche Anzahl von Anweisungen ausführt. Selbst wenn eine Funktion rekursiv aufgerufen wird, ist sie auf eine bestimmte maximale Anzahl von Aufrufen beschränkt. Unbegrenzte Schleifen können auf einer höheren Ebene, durch das QCM, aktiviert werden, aber die Einheit der Ausführung ist absolut klar und garantiert auf Funktionsebene begrenzt. Wenn Sie erwarten, dass Ihnen die Aufrufe für eine Funktion ‘ausgehen’, können Sie Ihren Code so gestalten, dass der Fortsetzungszustand des SC Teil der resultierenden Ausgabe ist. Und das wiederum ermöglicht es Ihnen, die Ausführung von diesem Punkt aus in einer nächsten Runde begrenzter Aufrufe fortzusetzen. Wir sagen daher, dass die Ausführung durch den QCM Quasi-Turing-Abschluss ist.

Beachten Sie, dass, obwohl die Möglichkeit der Bereitstellung von Belohnungen als potenzieller Anreiz für die Verarbeitung besteht, es in Qubic nicht erforderlich ist, das Äquivalent der Ethereum-Gebühren für die Verarbeitung bereitzustellen. Es könnte andere Anreize geben, die genauso gut oder sogar besser funktionieren. Zum Beispiel, wenn eine Baugruppe speziell dafür ausgelegt ist, bestimmte Sensordaten zu aggregieren. Ein Prüfpfad oder sogar redundante Berechnungen könnten in einem solchen Fall Anreiz genug sein.


Abra Virtual Machine

Das Abra VM-Programmiermodell ist insofern sehr ehrgeizig, als dass es uns nicht nur ein Programmiermodell zur Verfügung stellt, das Quasi-Turing-fähig gemacht werden kann, sondern es entfernt sich auch von Standard-Opcode-basierten sequenziellen Befehlen, die von einer komplexen CPU verarbeitet werden. Stattdessen bietet es uns eine maximale Parallelisierung von Operationen durch ein Datenflussmodell, das letztlich nur zwei Arten von Operationen hat, mit denen jede Funktion implementiert werden kann: Lookup-Tables (LUTs) und Fusionen. Diese Operationen wurden speziell wegen ihrer Fähigkeit ausgewählt, einfach direkt in der Schaltung instanziiert zu werden. Die maximale Parallelisierung von Operationen wird nur bei der Instantiierung in Schaltkreisen erreicht. Die einzigen sequenziellen Datenflusspfade werden durch Operationen gebildet, die direkt von den Ergebnissen früherer Operationen abhängen. Alles andere kann parallel ausgeführt werden. Sie erhalten also maximal parallele sequenzielle Datenflusspfade.

Die Einfachheit des Abra VM-Programmiermodells bedeutet auch, dass es sehr einfach ist, einen Software-Emulator (Interpreter) zu erstellen, der diese VM auf einem Standardprozessor ausführen kann. In diesem Fall gehen viele Möglichkeiten der Parallelverarbeitung verloren, aber es werden trotzdem korrekte Verarbeitungsergebnisse geliefert. Für einfache SCs, die nur spärlich aufgerufen werden, könnten Sie also auf eine software-emulierte Abra-VM zurückgreifen. Wenn Sie jedoch Hardware-Beschleunigung benötigen, müssen Sie die VM tatsächlich in einer Schaltung implementieren. An dieser Stelle stellen wir uns drei Ebenen der Hardware-Implementierung vor.

  1. Verwenden Sie vorhandene FPGAs, um die Abra-VM zu implementieren. Dies hat den Vorteil, dass Sie den VM-Schaltkreis nur einmal für jeden unterschiedlichen FPGA-Typ erstellen müssen und Sie anschließend beliebigen Abra-VM-Code auf einem solchen Gerät ausführen können. Allein diese Fähigkeit ist bahnbrechend. Derzeit benötigen Sie einen sehr leistungsfähigen PC, der lange Zeit läuft, um die Schaltung für ein Programm zu entwerfen, das auf einem bestimmten FPGA-Typ läuft, und das ist etwas, das Sie jedes Mal tun müssen, wenn Sie etwas an Ihrem Programm ändern oder wenn Sie einen anderen FPGA-Typ anvisieren. Stattdessen layouten Sie jetzt die Schaltung für unsere Open Source Abra VM nur einmal für jeden FPGA-Typ. Danach können Sie das Programm, das Sie auf der VM ausführen möchten, einfach ändern, neu kompilieren, laden und auf jedem FPGA ausführen, der die Abra-VM ohne weitere Änderungen implementiert hat.
  2. Verwenden Sie einen ASIC, um die Abra VM direkt zu implementieren. Das bedeutet, dass wir ein Open-Source-ASIC-Design für eine Abra-VM erstellen werden. Der Vorteil ist, dass wir die Erstellung eines programmierbaren Bauteils vermeiden, das auf einem anderen (proprietären) programmierbaren Bauteil (FPGA) läuft. Statt die Blöcke des FPGA zu programmieren, können wir direkt einen ASIC-Schaltkreis erstellen, der die Abra-VM implementiert. Das bedeutet nicht nur eine Geschwindigkeitssteigerung, sondern auch eine enorme Verringerung der Menge der erforderlichen Schaltungen. Ein solcher Abra VM ASIC könnte leicht als Co-Prozessor für aktuelle Hardware oder als Hauptprozessor für bestimmte IoT-Anwendungen eingesetzt werden.
  3. Wenn Sie einen spezifischen Code für den Abra VM programmiert haben und überprüft haben, dass er korrekt funktioniert, könnten Sie auch einen ASIC erstellen, der die Operationen für diesen spezifischen Code als dedizierte Schaltung implementiert. Sie würden den allgemeinen Aspekt der Programmierbarkeit der VM-Implementierung verlieren, aber es gibt viele Anwendungsfälle, in denen Sie die einmal eingesetzte Hardware nie mehr ändern werden. Vor allem bei Sensoren und anderen Geräten, die Sie in Bereichen einsetzen, in denen Sie nach dem Einsatz nicht mehr so leicht darauf zugreifen können. Dies ist die IoT-Vision, auf die wir letztendlich hinarbeiten. Die Einfachheit der Operationen, aus denen sich der spezifische Programmcode zusammensetzt, macht die Erstellung eines ASICs relativ einfach, und der generierte Schaltkreis erlaubt tatsächlich eine Reihe verrückter Optimierungen auf der Ebene der Logikgatter, da er keine programmierbaren Allzweck-Schaltkreise mehr verwendet.

Die wirklichen Verbesserungen des Abra VM-Programmiermodells, wie der reduzierte Energiebedarf, die Aspekte des Datenflusses und die Möglichkeit des Wave-Pipelining werden diese letzte Implementierungsebene benötigen, um wirklich zu glänzen. Die allgemeineren programmierbaren Ebenen sind mit bestimmten Designeinschränkungen verbunden, die zusätzlichen Overhead verursachen werden.


Ternäre Kodierung

Vielleicht ist Ihnen aufgefallen, dass in all dem oben genannten noch keine Erwähnung des Wortes Ternär enthalten ist. Natürlich wäre es möglich, diese gesamte Vision binär umzusetzen, aber ein Teil der Qubic-Vision war schon immer die Fähigkeit, über die Grenzen der derzeitigen Ausführungsmodelle hinauszugehen und die Hardware über das Mooresche Gesetz hinaus zu erweitern, das wohl sein Ende gefunden hat. Zu diesem Zweck haben wir immer die Vision eines ternären Ausführungsmodells gehabt. Auch wenn es noch keine nativen ternären Prozessoren gibt, so kann dieses Modell doch einige Vorteile bieten. Die bemerkenswertesten unmittelbaren Vorteile sind: Datendichte und Berechnungsgeschwindigkeit.

Unser Programmiermodell arbeitet mit Schaltungen und daher mit der Informationseinheit der untersten Ebene. Bei binären Systemen wäre das ein Bit. Aber das Abra-Datenflussmodell erfordert auch eine Darstellung der “Abwesenheit von Daten” (Null), die für seinen Entscheidungslogikmechanismus entscheidend ist. Die normale Art und Weise, dies in binären Systemen darzustellen, wäre, ein zusätzliches Bit zu haben, um diesen Zustand anzuzeigen. Das bedeutet, dass jedes Informationsbit durch zwei Bits repräsentiert werden muss, um alle drei möglichen sich gegenseitig ausschließenden Zustände (0, 1 und null) kodieren zu können. Da aber 2 Bits 4 Zustände repräsentieren können, erscheint es nur natürlich, dies in vollem Umfang zu nutzen. Durch die Verwendung der ternären Kodierung benötigen wir immer noch nur 2 Bits, um die 4 sich gegenseitig ausschließenden Zustände (-, 0, 1 und null) darzustellen. Das bedeutet, dass wir Werte im Vergleich zur binären Kodierung, die sonst einen dieser 4 möglichen Zustände verschwenden würde, effizienter kodieren können. Im Vergleich zur ternären Kodierung benötigt die binäre Kodierung etwa 50% mehr 2-Bit-Informationseinheiten, um den gleichen Wertebereich darstellen zu können. Beispielsweise können 16 Bit Werte von -32768 bis +32767 kodieren, während nur 11 Trits bereits Werte von -88573 bis +88573 kodieren können.

Sobald Sie weniger Informationseinheiten zur Darstellung desselben Wertebereichs benötigen, sind auch bestimmte Berechnungen viel schneller. Nehmen Sie zum Beispiel einen einfachen Ripple-Carry-Addierer. Um zwei Werte zu addieren, addiert er zwei entsprechende Informationseinheiten, was jedoch zu einem Übertrag auf die Addition der nächsten Einheit führen kann. Das heißt, wenn Sie 50 % mehr Einheiten benötigen, um einen Wertebereich darzustellen, dauert die Ausführung einer solchen Addition ebenfalls 50 % länger. Der Engpaß hierbei ist die Tatsache, dass jede Addition von der vorherigen Addition abhängt, da sie den Übertrag berücksichtigen muss. Die nächste Addition kann also erst dann erfolgen, wenn die vorhergehende vollständig ist und der Wert des Übertrags bekannt ist. Bringen Sie dies nun auf eine andere Ebene: Multiplikation. Wenn Sie die einfache Methode verwenden, jede Einheit mit jeder Einheit zu multiplizieren, erhalten Sie eine zweidimensionale Abhängigkeit, was bedeutet, dass die Verarbeitungszeit bei Verwendung desselben Algorithmus mit binärer Kodierung 150% x 150% oder 225% der Zeit benötigt, die der Algorithmus bei Verwendung einer ternären Kodierung benötigen würde.

Die ternäre Kodierung, die wir für unsere FPGA-Prototyp-Implementierung verwendet haben, nennen wir 2b-Kodierung. Diese kodiert die 4 Zustände (-, 0, 1 und null) jeweils als (10, 11, 01 und 00). Wir nennen diese 2b-Kodierung, weil sie, wie oben diskutiert, 2 Bits pro Informationseinheit verwendet. Wir haben auch eine Alternative entwickelt, die wir 3b-Kodierung nennen, die 3 Bits pro Informationseinheit verwendet und die 4 Zustände jeweils als (100, 010, 001 und 000) kodiert. Die 3b-Kodierung mag vielleicht verschwenderischer erscheinen, aber sie hat eine Reihe interessanter Eigenschaften, die für die dritte Ebene der Hardware-Implementierung (direkter Code zur Schaltung) von größerer Bedeutung sind und in Zukunft noch eingehender untersucht werden sollen. Der Abra-Code ist völlig unabhängig von der verwendeten Kodierung. Die tatsächlich verwendete Kodierung wird letztlich von der spezifischen Implementierung der Abra-VM diktiert.

Sowohl die 2b- als auch die 3b-Kodierung verwenden alle Nullen, um den Nullzustand zu kodieren. Dies sollte dazu beitragen, den Energiebedarf der Hardware zu reduzieren, da der Null-Zustand der Standardzustand für alle Schaltkreise ist und normalerweise die meiste Energie darauf verwendet wird, den Zustand zu ändern. Abra ist so konzipiert, dass Entscheidungspfade so früh wie möglich zur Verwendung des Null-Zustands gezwungen werden, so dass keine Daten durch den größten Teil der Schaltung wandern und nicht verwendete Schaltungen ohne Umschalten im Standard-Null-Zustand bleiben können.


„Echte” ternäre Hardware

Wie die Kodierung auf tatsächlich nativer ternärer Hardware aussehen wird, ist derzeit schwer vorstellbar, da wir noch kein funktionierendes ternäres System haben, mit dem wir arbeiten könnten. Eine interessante Idee, die aus der Qubic-Forschung hervorging, ist, dass man ein binäres Bit und den erforderlichen Nullzustand mit einem einzigen ternären Trit kodieren könnte da ternäre Prozessoren vermeintlich mit 3 Zuständen arbeiten. Dies würde bedeuten, dass ternäre Hardware unser Datenflussmodell direkt mit binärer Informationskodierung unterstützen kann. Anstatt also 2 Drähte und alle zugehörigen Schaltkreise pro Draht zu benötigen, um ein Bit und ein Null-Kennzeichen zu erzeugen, bräuchte man nur einen einzigen Draht und die zugehörigen Schaltkreise, wodurch vielleicht sogar die Schaltkreise/die benötigte Energie halbiert würde, die sonst für die gleiche binär codierte Verarbeitung in binärer Hardware erforderlich wäre. Ternäre Hardware ist derzeit in erster Linie eine Denksportaufgabe, aber es ist definitiv ein aufregendes Unterfangen für die Zukunft.


Hardware-Operationen

Das Abra-Programmiermodell hat ursprünglich 5 verschiedene explizite Operationen. 3 dieser Operationen reduzieren sich auf eine einfache Verdrahtung, sobald man sie auf Schaltungsebene implementiert. Sie sind nur notwendig, um Informationen als Trit-Vektoren zu gruppieren und weiterzugeben. Da aber auf der Schaltungsebene alles auf einzelnen Trits arbeitet, sind diese Trit-Vektoren meist konzeptionell. Daher erzwingen die Verkettungs- und Slicing-Operationen lediglich die korrekte Gruppierung von Informationen. Die Aufruf-Operation ist nur vorhanden, um effizient Code in einen Aufruf-Baum reduzieren zu können, aber sobald sie in einer Schaltung implementiert ist, erzwingt jede Aufruf-Operation die Instantiierung des gesamten aufgerufenen Funktionsbaums in der Schaltung und verknüpft die Eingangs- und Ausgangs-Trit-Vektoren mit ihren Quell- und Zielvektoren.

Damit bleiben nur noch 2 Operationen übrig, die tatsächlich als logische Schaltung implementiert werden. Die erste ist die ternäre Lookup-Operation, die 3 Eingangstrits nimmt und einen einzelnen Trit gemäß der entsprechenden Lookup-Tabelle ausgibt. Die zweite ist die Merge-Operation, die getrennte Datenfluss-Eingänge zu einem einzigen Ausgang kombiniert und entweder als eine sehr spezielle Lookup-Operation oder durch Verwendung einfacher ODER-Gatter implementiert werden kann. Nur eine Eingabe darf ungleich Null sein und wird zur Ausgabe. Die Sprache Qupla, die den Abra-Code generiert, stellt sicher, dass nur ein Pfad ungleich Null sein kann. Alle anderen Werkzeuge, die direkt Abra-Code erzeugen würden, sind erforderlich, um dies sicherzustellen.


Der FPGA-Proof of Concept

Um das Programmiermodell auf FPGA zu ermöglichen, haben wir den FPGA so programmiert, dass er eine Bank von so genannten QLUTs (Qubic Look-Up Tables) bereitstellt. Jeder QLUT nimmt drei 2b-kodierte Trits als Eingabe und gibt dann einen weiteren 2b-kodierten Trit über eine konfigurierbare Nachschlagetabelle aus. Fusionen werden innerhalb der QLUTs durch Setzen eines speziellen Konfigurationsbits implementiert, das sie veranlasst, eine vordefinierte Lookup-Operation mit leicht unterschiedlicher Semantik zu verwenden.

Natürlich enthält der FPGA auch die zusätzliche Konfigurationslogik, die notwendig ist, um jede Eingangsoperation mit jeder Ausgangsoperation verbinden zu können. Diese Logik kann durch eine spezielle binäre Konfigurationsdatei konfiguriert werden, die leicht direkt aus dem auszuführenden VM-Code generiert werden kann. Der Code wird derzeit “on the fly” konvertiert, wenn er an den FPGA gesendet wird. Sie enthält die Konfigurationsdaten für jedes einzelne QLUT und die Konfigurationsdaten für die Verbindungen zwischen den QLUTs.

Die QLUTs wurden bereits getestet, indem die gesamte Qupla-Testsuite im Emulator ausgeführt wurde, während eine bestimmte Funktion hardwarebeschleunigt wurde. Wir erlauben dem Benutzer, eine Funktion als hardwarebeschleunigt zu markieren, und die Qupla-Umgebung lädt automatisch die Konfigurationsdaten für diese Funktion in den FPGA. Wenn dann der Emulator ausgeführt wird, übergibt er jedes Mal, wenn er auf diese spezifische Funktion trifft, die Eingangsdaten der Funktion an das FPGA und verwendet die resultierenden Ausgangsdaten, anstatt das Ergebnis für diese Funktion vom Emulator berechnen zu lassen. Wir haben mehrere repräsentative Funktionen auf diese Weise getestet und freuen uns, berichten zu können, dass dies perfekt funktioniert.

Als Nächstes benötigen wir eine FPGA-Version des Qubic Supervisors, d.h. der Entität, die Eingangsdatenereignisse an den korrekten VM-Code sendet und die berechneten Ergebnisse weiterleitet. Um zu vermeiden, dass wir ein Miniaturbetriebssystem schreiben müssen, werden wir zunächst eine einfache Embedded-Linux-Version verwenden, die auf einer CPU laufen kann, die auf dem FPGA eingebettet ist. Auf diese Weise können wir bestimmte Funktionen out of the box nutzen, ohne sie selbst entwickeln zu müssen. Es ist uns bereits gelungen, dieses Linux auf dem FPGA zu booten und es zu verwenden, um die Kommunikation zwischen dem Emulator und dem FPGA über ein einfaches Socket-Protokoll abzuwickeln. Der nächste Schritt wird die Implementierung des Supervisors und einiger zusätzlicher Verknüpfungscodes sein, um stattdessen die Kommunikation mit der Außenwelt über HTTP zu ermöglichen.

Der nächste Schritt wäre die Implementierung eines HTTP-Listeners auf dem Embedded-Linux des FPGAs, der auf zwei Arten von Anfragen reagieren kann. Der erste Anfragetyp kann verwendet werden, um die Konfigurationsdatei auf den FPGA zu übertragen, und dieser wird dann zur Konfiguration des Programmiermodells, zur Einrichtung einer HTTP-Callback-Adresse und zur Initialisierung des Supervisors verwendet. Der zweite Anforderungstyp ist eine Eingabedatenanforderung, die verwendet werden kann, um die Ausführung einer Funktion mit den vom Supervisor bereitgestellten Eingabedaten auszulösen. Nach der Berechnung des Ergebnisses sendet der Supervisor die resultierenden Ausgabedaten asynchron an die HTTP-Callback-Adresse.

Beachten Sie, dass dies bedeutet, dass der anfängliche End-to-End-Proof of Concept (Qupla-to-FPGA, der ursprünglich für Ende Januar 2020 geplant war) noch nicht die volle Supervisor-Funktionalität haben wird, sondern nur in der Lage sein wird, eine einzige beliebige Funktion auf dem FPGA einzurichten und aufzurufen und das Ergebnis zurückzugeben. Das Laden und Aufrufen mehrerer Funktionen und komplexere Planung durch EEE wird der nächste Schritt für die Implementierung im Supervisor-Code sein.

Auf der Softwareseite ist der Qupla-Compiler jetzt in der Lage, eine spezifische Version des Abra-Codes zu erzeugen, die leichter eine 1-zu-1-Konvertierung in die binäre Konfigurationsdatei ermöglicht, indem alle Verkettungs-, Slice- und Aufrufoperationen eliminiert werden. Wir haben überprüft, dass der resultierende transformierte Code immer noch korrekt funktioniert, indem wir die Testsuite mit diesem Code im Emulator ausgeführt haben. Der Emulator selbst ist nun in der Lage, über die Socket-Schnittstelle eine Schnittstelle zum FPGA herzustellen. Er sendet die generierte Konfigurationsdatei an das FPGA und ruft diese Funktion bei Bedarf auf. In Zukunft wird der Qupla-Supervisor in der Lage sein, Ereignisse über die HTTP-Schnittstelle zum und vom FPGA zu senden.


Erste Lehren aus dem PoC

Bis jetzt funktioniert alles wie vorgesehen. Wir haben ein völlig neues Verarbeitungsmodell geschaffen, das jede Art von allgemeiner Verarbeitung durchführen kann. Das Modell behandelt die RAM-Speicherung genauso wie jede andere Art von E/A, d.h. es liegt außerhalb des Geltungsbereichs des Abra-Codes und wird an Entitäten weitergegeben, die Daten für uns mit Hilfe von EEE speichern/abrufen können. Dies erfordert eine andere Art der Problembetrachtung, und es wird wichtig sein, die resultierende Komplexität zu bewerten und/oder zu sehen, ob es eine Möglichkeit gibt, die Komplexität in Qupla-Sprachkonstrukten zu verbergen, oder ob eine noch höhere Computersprache erforderlich ist. So wurde beispielsweise bereits die Notwendigkeit einer Art von Schleifenkonstrukt erkannt.

Zwei unmittelbare Hürden zeichnen sich derzeit ab und erfordern eine Lösung.

  1. Der derzeitige Ressourcenbedarf der QLEs auf dem ausgewählten FPGA (DE10-Nano) beschränkt uns auf insgesamt nur 512 QLEs. Dies mag ein wenig optimiert werden, aber wir erwarten nicht, dass sich dieser Bedarf auf mehr als etwa das Doppelte erhöht. Natürlich könnten wir einen größeren, teureren FPGA auswählen, aber für das Prototyping wollen wir es einfach und erschwinglich halten für Leute, die unsere Anstrengungen kopieren und damit herumspielen möchten. Eine direkte Folge davon ist, dass wir nur einige kleinere Funktionen auf den FPGA laden können, und der Kommunikations-Overhead beim Aufruf dieser Funktionen überwiegt meist den Verarbeitungsgewinn. Das war zu erwarten, und wir hoffen, dass wir, sobald wir zum nächsten Schritt übergehen, einem ASIC Abra VM, über diese Größenordnung hinausgehen können.
  2. Die Instantiierung von Funktionsaufrufen wird sehr schnell unerschwinglich. Aufgrund der Aufrufbaum-Natur des Codes hat die Expansion eines solchen Aufrufbaums ein exponentielles Wachstum. Wenn X dreimal Y aufruft, was wiederum viermal Z aufruft, erhalten Sie drei vollständige Y-Instanziierungen, die 3×4 oder 12 vollständige Z-Instanziierungen verursachen. Sie können sehen, wie schnell dies eskaliert. Die Lösung dieses Problems wird unser Hauptaugenmerk sein müssen. Derzeit schwirren einige Ideen herum, aber wir haben uns noch nicht mit allen Konsequenzen für das Datenflussmodell befasst.

Übrigens leidet der Abra-Emulator nicht unter diesen Problemen, weil er die Funktionsinstantiierung durch einen gewöhnlichen stapelbasierten Funktionsaufrufmechanismus emuliert und die Lookup-Tabellen in einem von den Lookup-Anweisungen getrennten Speicher ablegt. Heutige Gigabyte RAM-Größen würden Millionen von Abra VM-Befehlen ohne Probleme ermöglichen.


Schlussfolgerung

Nach einem langen Weg mit vielen unvorhergesehenen Hürden haben wir bewiesen, dass das Abra-Datenflussprogrammiermodell durchgängig funktioniert, von der Programmiersprache Qupla bis zur Ausführung des generierten Codes auf dedizierter FPGA-Hardware. Wir laden alle ein, mit dem Qupla-Repository herumzuspielen und zu sehen, was Qupla kann und wie es im Emulator läuft. Diejenigen, die sich mehr für Hardware interessieren, können mit dem Qubic HDL-Repository herumspielen und tatsächlich Code auf einem DE10-Nano ausführen, so wie wir es tun, oder sogar den Code an Ihr eigenes bevorzugtes FPGA-System anpassen.


Eine neue Ausrichtung für Smart Contracts auf IOTA

Auch wenn diese Arbeit die Vision hinter Qubic beweist und einen großen Schritt nach vorn darstellt, sind noch weitere Fragen zu lösen und es sind noch erhebliche Entwicklungsinvestitionen erforderlich, um Qubic produktionsreif zu bekommen. Unsere umfangreiche Arbeit an Qubic hat viel wertvolle Forschung und Entwicklung hervorgebracht und bildet die Grundlage für unseren weiteren Ansatz. Dementsprechend hat die IOTA-Stiftung die Entscheidung getroffen, die Entwicklung von Qubic anzuhalten und den Fokus speziell auf den Smart Contract Layer zu richten.

Der Hauptgrund für diese Entscheidung besteht darin, dass IOTA mit der neuartigen Smart-Contract-Lösung, die in Verbindung mit der Coordicide-Node-Software arbeitet, schneller auf den Markt gebracht werden kann. Am Ende verfügen wir über ein komplettes System – bereit für eine breitere und schnellere Einführung.

IOTA Smart Contracts ist das, was wir unsere Smarte Layer-2-Contract Lösung nennen. Sie ist aus der in diesem Beitrag beschriebenen Entwicklung hervorgegangen und wurde von Grund auf neu konzipiert. Mit IOTA Smart Contracts wollen wir eine Vision für Smart Contracts verfolgen, die skalierbar ist und niedrige Transaktionskosten hat.

Wir arbeiten derzeit an einer Alpha-Version der IOTA Smart Contracts im Rahmen der GoShimmer-Implementierung, und wir werden in Kürze weitere Informationen über diesen neuen Weg veröffentlichen. Wenn die Alpha-Version fertig ist, wird sie von einer Reihe einfacher Smart Contract PoCs begleitet werden, um Community-Entwicklern den Einstieg zu erleichtern und zu demonstrieren, was möglich ist, um eine neue Ära von Anwendungen auf der Basis von IOTA anzustoßen.

Fühlen Sie sich jederzeit eingeladen, unser Ingenieursteam direkt in den Smart-Contract-Kanälen über den IOTA-Discord zu erreichen und Fragen zu diesem von uns eingeschlagenen neuen Weg zu stellen.


Quellen

https://blog.iota.org/the-state-of-qubic-63ffb097da3f

Alles Zusammengefügt

Wie im Qubic Teaser-Video (wurde gelöscht) vorgestellt, gibt es hier eine Reihe von Qubics (insbesondere: eine Orakelmaschine, eine ausgelagerte Berechnung und einen Smart-Contract), die zusammen arbeiten und sich im Laufe der Zeit weiterentwickeln, um etwas Nützliches zu tun – in diesem Fall den Devisenhandel.

Wechselkurs qubic:

dient als primitive Orakelmaschine, die regelmäßig den Wechselkurs auf dem Tangle veröffentlicht. Der Datenersteller kann vordefiniert sein oder nicht. In diesem Szenario holen die Orakel Daten von außerhalb der Tangle-Umgebung, was mit anderen Mitteln unmöglich ist.

Forex-Prognose qubic:

Nimmt die vom Wechselkurs qubic gelieferten Daten und prognostiziert den Kurs für die nahe Zukunft. In diesem Szenario führen die Orakel intensive ausgelagerte Berechnungen durch, die auf Low-Level-Geräten zu schwierig oder teuer wären.

Portfoliomanagement qubic:

Nimmt die von den beiden oben genannten qubics gelieferten Daten und verkauft oder kauft gebundene virtuelle USD für gebundene virtuelle EUR. In diesem Szenario führen die Orakel einen Smart Contract aus, der es dem Eigentümer ermöglicht, nicht den gesamten Handel manuell abwickeln zu müssen.

Smart Contracts (alte Qubic Vision)

Was sind Smart Contracts?

Smart Contracts (dt. Intelligente Verträge) sind programmierte selbstausführende Verträge, wobei die vertraglichen Verpflichtungen zwischen Käufer und Verkäufer verkapselt in der Software verankert wird. Grundsätzlich wurden SCs erschaffen, um die Durchsetzung eines Vertrages durch Dritte, wie beispielsweise einer zentralen Behörde überflüssig machen. SCs ermöglichen die Durchführung vertrauenswürdiger Transaktionen, welche nachvollziehbar, transparent und nicht umkehrbar sind. Von “Experten” wird allgemein erwartet, dass diese intelligenten Verträgen in der Zukunft verwendet werden, um viele Arten realer Papierverträge zu ersetzen. Mit diesen neuen technologischen Möglichkeiten lassen sich in vielen Branchen viele Arten von Geschäftsprozessen erheblich effizienter ausführen und Kosten reduzieren.

Die IOTA Lösung

Um es vorweg zu nehmen, die IF priorisiert eine Lösungen mithilfe des viel allgemeiner gehaltenen Quorum-based Computing (Qubic) in Verbindung mit IOTA Streams, Flash-Channels, usw. Das bedeutet aber nicht, dass es in Zukunft keinen einfachen “Ja/Nein-Smart Contract” als Second Layer Lösung geben wird, da es auch einfache Anwendungsbereiche geben wird, in denen ein starrer Ja/Nein Vertrag ersetzt werden könnte.

Neben der Qubic/IOTA Streams Lösung, auf die ich im nächsten Abschnitt eingehen werde, steht es aufgrund des Genehmigungslosen Zugangs zur Netzwerkinfrastruktur jedem frei, eine eigene Anwendung zu erstellen, die in der Lage ist, die Aufgabe eines “Smart Contracts” in ähnlicher Weise zu erfüllen. Die Anwendung wäre nur intern, nicht wie ein ERC20-Token und die internen Regeln könnten selbst interpretiert werden. Da im Tangle ausschließlich ein netzwerkbasierter Konsens über Transaktionen möglich ist, hat dies zur Folge, dass innerhalb der Anwendung eine eigene Entscheidung (Konsens) getroffen werden muss. Jedes Unternehmen könnte für sich selber eine Anwendung kreieren, die genau auf die eigenen Bedürfnisse zugeschnitten ist, welche Konsensregeln oder Quellen der Wahrheit dabei intern verwendet werden ist jedem Unternehmen selbst überlassen.

Jetzt zu der IOTA Lösung, während Qubic den traditionellen Smart Contract (wie bei Ethereum) nativ unterstützen könnte, eröffnet die Kombination von Qubic in Verbindung mit IOTA Streams, Flash-Channels und gebührenfreien Mikrotransaktionen völlig neue Möglichkeiten. Für viele Anwendung benötigt IOTA keine vorher festgelegten starren “Smart Contracts”, beispielsweise würde die Bezahlung an einer E-Ladesäule mittels IOTA Streams ablaufen. Dazu wird zwischen dem Fahrzeug und der E-Ladesäule ein privater IOTA Stream-Kanal eröffnet um einen Datenstrom aufzubauen, jetzt wird pro Datenpunkt in Mikrotransaktionen bezahlt und die Bezahlung stoppt sobald nichts mehr empfangen wird, dafür wird kein Smart Contract benötigt. In der angestrebten Maschinenwirtschaft werden zudem viele Probleme mit autonomen Sensorabfragen gelöst werden.

Das Quorum Verfahren (Mehrheitsabstimmung) ist eine weitere Möglichkeit um autonome Entscheidungen treffen zu können und dabei Daten aus der realen Welt für eine Entscheidungsfindung zu nutzen. Beispielsweise können Oracles verwendet werden, um den Aktienkurs eines Unternehmens, von verschiedenen Börsen auf der Welt (verschiedenen Oracles), zu einem Durchschnittskurs zu kumulieren und periodisch im Tangle zu speichern. Diese Daten können anschließend von jedem interessierten Nutzer zur Weiterverarbeitung abgerufen und ggf. bezahlt werden. Ein großer Vorteil gegenüber den “Smart Contracts” ist, dass ein Quorum nur auf einer kleinen Anzahl an Rechnern im System ausgeführt werden muss, dieser Umstand ist speziell an die Bedürfnisse des verteilten Rechnens des IoT angepasst. Während beispielsweise bei Ethereum alle Rechner im System zu einem Konsensus kommen müssen, sind es bei Qubic nur die beteiligten Rechner oder Sensoren.

Hinweis: Oracle – jeder Betreiber wird ggf. für seine ehrlichen Daten (Sensoren, etc.) mit Iota-Token bezahlt. Es kommt darauf an, ob jemand bereit ist für die angebotene Dienstleistung zu bezahlen. Es werden sich in Zukunft völlig neu Geschäftsfelder bilden.


Zwei Beispiele für des Einsatz des Quorum-Verfahrens:

1)   Smart Home: Ein Nutzer möchte die Zimmertemperatur auf einen konstanten Wert festlegen und erstellt dazu ein individuelles qubics (verpackte Verarbeitungsaufgabe). Dieses qubics tauscht sich mit einer Oracle Maschine, die kontinuierlich Daten von den Sensoren zur Zimmertemperatur erhält aus, ermittelt einen Durchschnittswert und reagiert entsprechend mit einer Anpassung, wenn notwendig.

2)   Portfolio Management: Eine Oracle Maschine sammelt Kursdaten aus verschiedenen Oracles (Börsen). Externe Berechnungen liefern aus diesen Daten eine Prognose zur zukünftigen Kursentwicklung, der Nutzer erstellt nach dem erhalt der Prognose ein individuelles qubics, welches bei einem bestimmten Kurswert kaufen bzw. verkaufen soll. Ist dieser Prozess einmal in Gang gesetzt, müsste der Nutzer sich um nichts weiter kümmern, da die drei Funktionen voll automatisch in ineinandergreifen und den Handel automatisch ausführen.



Quellen

www.iota.org

https://qubic.iota.org

Ausgelagerte Berechnungen

Für jedes Rechengerät (Handy, Kühlschrank, etc.) wird es immer Aufgaben geben, die zu ressourcenintensiv für das Gerät sind um sie zu berechnen, oder Aufgaben die Daten erfordern, die über das hinausgehen was lokal verfügbar ist. Dies gilt insbesondere für die Geräte, die das Internet der Dinge (IoT) umfassen. Diese Geräte sind in der Regel durch einen Mangel an Speicher, Rechenleistung, Energieverfügbarkeit oder ähnlichem eingeschränkt.

Was wäre, wenn solche stromsparenden Geräte einfach intensive Berechnungen an eine externe, leistungsfähigere Maschine auslagern könnten? Es würde dem gesamten Projekt zahlreiche Vorteile in Bezug auf Kosten und Funktionalität bieten.

Das ultimative Ziel bei der sicheren ausgelagerten Berechnung ist die Entwicklung von Protokollen, die den Rechenaufwand der Clients minimieren und die Vertraulichkeit und Integrität ihrer Daten gewährleisten.

Qubic ermöglicht genau solche ausgelagerten Berechnungen und ermöglicht eine sichere, genehmigungsfreie Teilnahme für Verbraucher und Produzenten. Das Protokoll ermöglicht es jedem, eine Rechenaufgabe auf einem oder mehreren externen Geräten zu erstellen oder auszuführen, die wiederum die Ergebnisse an den Antragsteller zurücksenden. Ebenso kann jeder Nutzer Aufgaben im Tangle finden und an deren Bearbeitung teilnehmen.

Wie bei Orakelmaschinen findet diese Verarbeitung dezentral und sicher statt, wobei das Qubic-Protokoll sicherstellt, dass die Ergebnisse mit einem hohen Maß an Sicherheit vertraut werden können.

Wenn man jetzt über eine Verbindung von Qubic, mit den Technologien der Cloud.- und/oder Fog-Datenverarbeitung, dem Economic-Clustering und den Swarm-Clients nachdenket, eröffnen sich völlig neue bahnbrechende Anwendungsbereiche. Dieser Technologie Zusammenschluss könnte paralleles Rechnen auf eine neue Ebene heben. Große Probleme (Berechnungen) können viel schneller gelöst werden, indem die Berechnungen auf viele Geräte (Prozessoren) aufgeteilt werden.


Quellen

www.iota.org

https://qubic.iota.org

Qubics

Individuelle qubics sind im wesentlichen vorgefertigte quorumbasierte (Mehrheitsprinzip) Rechenaufgaben.

Qubic nutzt das IOTA Tangle, um qubics von ihren Besitzern zu verpacken und an die Oracles zu verteilen, die sie verarbeiten werden.

Qubics werden als Nachrichten in normalen IOTA-Transaktionen veröffentlicht und enthalten spezielle Anweisungen, sogenannte Metadaten, wie und wann sie zu verarbeiten sind. Oracles können qubische Metadaten lesen, um zu entscheiden, ob sie die erforderliche Verarbeitung für die zugehörigen Belohnungen durchführen oder nicht. Qubic-fähige IOTA-Nodes (kurz Q-Nodes) können einen Großteil dieser Entscheidungsfindung automatisch auf der Grundlage der von ihren Operatoren festgelegten Parameter bewältigen.

Qubic Aufgaben werden mit der ternär basierten funktionalen Zwischenprogrammiersprache namens Qupla/Abra spezifiziert. Das Qubic-Programmiermodell ermöglicht es, dass Daten im gesamten System von qubic zu qubic fließen. Technisch gesehen sind qubics ereignisgesteuert, d.h. sie hören den Tangle direkt auf Eingabedaten ab und werden bei jeder Änderung der Eingabedaten ausgeführt. Da qubics ihre Ergebnisse zurück ins Tangle melden, kann die Ausführung eines einzelnen qubic dazu führen, dass viele andere qubics in einer Art “Kettenreaktion” laufen. qubics fungieren als Auslöser für andere qubics, die wiederum andere qubics usw. auslösen.

Mit anderen Worten, qubics können im Ruhezustand im Tangle leben. Wenn bestimmte Eingangsdaten verfügbar werden oder sich ändern, “erwachen” sie und beginnen mit der Verarbeitung, was dazu führen kann, dass eine Kaskade von anderen qubics aufwacht, wenn neue Ergebnisse verfügbar werden. Dies ermöglicht eine sehr dynamische Programmierumgebung, da Sie jederzeit neue qubics hinzufügen und an beliebige Eingabedaten binden können.

Darüber hinaus kann jeder eine Transaktion mit dem qubic-code, den er ausführen möchte, veröffentlichen und für die entsprechenden Belohnungen die Ergebnisse im Tangle sehen.


Die folgenden Schritte beschreiben den Lebenszyklus eines qubic:

  • Bereiten Sie ein qubic für die Verarbeitung vor.
  • Entscheiden Sie sich für die angebotenen Belohnungen.
  • Entscheiden Sie, in welcher assembly das qubic laufen soll.
  • Koppeln Sie das qubic an der assembly (oder einer bestimmten Epoche dieser assembly).
  • Warten Sie, bis die assembly mit der Bearbeitung des qubic beginnt.
  • Sammeln Sie die bestätigten Verarbeitungsergebnisse.
  • Bewertung des Konsenses über das quorum
  • Sammeln Sie die offenbarten Verarbeitungsergebnisse.
  • Zahlen Sie die versprochene Belohnung an die quorum-Teilnehmer, sobald die Ergebnisse vorliegen.


Um ein qubic vorzubereiten, verpackt der Eigentümer den Qupla/Abra-Code und die qubic-Metadaten innerhalb einer IOTA-Transaktion. Eine IOTA-Transaktion, die Abra-Code und qubische Metadaten enthält, wird als qubische Transaktion bezeichnet. In dieser Hinsicht nutzt Qubic den wertfreien, reinen Datentransaktionsmechanismus des IOTA-Protokolls.

Der Besitzer wählt dann aus, welche assembly das qubic verarbeiten soll, indem er nach bestimmten Transaktionen im Tangle sucht, die Informationen über eine Oracle assembly liefern. Diese werden als assembly-Transaktion bezeichnet. Das Anhängen einer qubic-Transaktion an eine assembly-Transaktion informiert die Oracles darüber, dass die qubic zur Bearbeitung zur Verfügung steht.

Oracles sind also die Q-Nodes-Operatoren, die qubics verarbeiten. Sie hören den Tangle für qubische-Transaktionen ab und konstruieren ein privates Sub-Tangle, um sie zu verfolgen. Qubische-Transaktionen müssen gut formuliert und signiert sein, sonst weigern sich die Nodes, sie zu verarbeiten.

Sobald eine qubic-Transaktion validiert wurde, bereitet der Node das qubic für den Betrieb auf der jeweiligen Hardware des Nodes vor und plant das qubic für die Verarbeitung. Sobald das qubic bearbeitet, ein Quorum erreicht und die Ergebnisse in den Tangle gestellt wurden, geschehen zwei Dinge: 1) das qubic geht wieder inaktiv und wartet auf die nächste Änderung der Eingänge und 2) der Kaskadeneffekt wird ausgelöst, so dass abhängige qubics anlaufen und mit der Verarbeitung mit neuen Eingängen beginnen.


Quellen

www.iota.org

https://qubic.iota.org

Oracles, assemblys und quorums

Blockchains und auch IOTAs Tangle können keine Daten außerhalb ihres Netzes abgreifen. Ein Oracle ist ein Datenkanal, meist von einem Drittanbieter zur Verfügung gestellt, der diesen Zugriff in die reale Welt dennoch vertrauenswürdig ermöglicht.

Da einem einzelnem Oracle nicht immer Vertrauen geschenkt werden kann (mögliche böswillige Absichten), werden mehrere Oracles zu einem assembly (Versammlung) zusammengefasst, wo sie ihre Ergebnisse unabhängig von den anderen Oracles einbringen.

Ein automatisiertes quorum-Verfahren (Konsensus-Verfahren > mindestens 2/3 der Orakel in der Versammlung stimmen dem Ergebnis zu) entscheidet dann, ob das Ergebnis als korrekt frei gegeben werden kann und dementsprechend Belohnungen für die Oracles mit der richtigen Aussage ausbezahlt werden. Mit IOTA als Basistechnik kann dieser Prozess in Echtzeit durchgeführt werden und ermöglicht weitreichende Einsatzmöglichkeiten, beispielsweise im Finanzmarkt, dem Kryptomarkt, bei Versicherungen, der Wett- und Spieleindustrie usw.

Neben einfachen Entscheidungen wie „öffne das Fenster, wenn die Temperatur im Raum 30 Grad erreicht hat“, sind auch komplexere Anwendungsfälle möglich, beispielsweise kann auch ein Auto ein Oracle sein, dieses sammelt Sensormessdaten für Schadstoffkonzentrationen, Temperatur, Luftfeuchtigkeit, Staus, Unfälle usw., wenn jetzt mehrere Oracle-Autos das gleiche melden, werden diese Daten als ,,Wahr,, bestätigt und in den Tangel geschrieben. Diese verifizierten Daten haben jetzt einen Wert und eröffnen völlig neue Geschäftsfelder, beispielsweise können Umweltbehörden, Rettungsdienste, Polizei, Transportfirmen, Nachrichtenagenturen etc. auf diese Daten zugreifen und ihre Abläufe bzw. Serviceangebote verbessern.

Hinweis: Oracle – jeder Betreiber wird ggf. für seine ehrlichen Daten (Sensoren, etc.) mit Iota-Token bezahlt. Es wird darauf ankommen, ob jemand bereit ist für die angebotene Dienstleistung zu bezahlen.


Quellen

www.iota.org

https://qubic.iota.org

Q-Nodes

Q-Nodes sind Qubic-fähige Nodes (kraftvolle Server, IRI-Nodes), diese Nodes bieten ihre eigene ungenutzte Rechenleistung oder Speicherkapazität als „Proof-of-Work“ Dienstleistung im Tangle an. Qubic bietet einen großen Anreiz für Menschen diese Q-Nodes zu betreiben: Lassen Sie andere Teilnehmer im Netzwerk ihre freie Rechenleistung oder Speicherkapazität nutzen, um so einen nützlichen Service zu bieten und werden Sie dafür mit IOTA-Token bezahlt. Q-Nodes können alten, verlassenen PCs neues Leben einhauchen und sie können traditionellen „Minern“ von Kryptowährungen eine Möglichkeit bieten, Geräte zu monetisieren, indem sie nützliche Berechnungen durchführen, anstatt bedeutungslose (und verschwenderische) kryptografische Rätsel zu lösen.

In Zukunft wird Qubic diese weltweit ungenutzte Rechenleistung nutzen, um alle Arten von Rechenproblemen zu lösen. Qubic ist optimiert für IoT – niedriger Energieverbrauch und geringer Speicherbedarf – aber das schließt nicht aus, dass groß angelegte Berechnungen durchgeführt werden, insbesondere für Berechnungen, die parallelisiert und auf eine große Anzahl von Prozessoren verteilt werden können.



Quellen

www.iota.org

https://qubic.iota.org

Qupla & Abra

Die Entwicklung der ursprünglichen Abra Programmiersprache vergrößerte im Laufe der Zeit derartig den Umfang, dass diese limitierte Sprache für die neu entstandenen Anforderungen an Qubic nicht mehr ausreichte. Das hatte man im Vorfeld nicht erwartet, daher hat sich die IF entschlossen, den vorhandenen Parser / Interpreter / Compiler zu überarbeiten und zu einer übergeordneten Programmiersprache namens Qupla (kurz für QUbic Programming LAnguage) zu überführen. Laut den Erklärungen von Eric Hop dem Chefentwickler von Qubic, lassen sich einige Konzepte in Abra (ternär) nicht ohne weiteres auf eine bestehende binäre Sprache abbilden, noch lassen sich viele Konzepte von bestehenden binären Sprachen leicht oder gar nicht auf Abra abbilden z.B. Speicherverwaltung oder dynamische Typen bei der Java Programmierung. Dies ist aber notwendig, weil derzeitige Hardware noch binär funktioniert und man eine längere Zeit zweigleisig fahren muss.

Somit wurde Qupla im Dezember 2018 als übergeordnete Programmiersprache für Qubic eingeführt. Abra ist jetzt die Tritcode-Spezifikation und Qupla generiert den Abra-Tritcode entsprechend dieser Spezifikation in einer auf das IoT ausgerichteten Datenflussarchitektur. Qupla ist die erste übergeordnete Programmiersprache, die die neue Abra-Spezifikation implementiert.

Abraist eine ternär basierte funktionale „low-level“ Zwischenprogrammierspracheund ist extrem minimal, sein Laufzeitmodell wird durch eine gemeinsame Tritcode-Spezifikation implementiert, die es ermöglicht, Abra-Code überall auszuführen.

Abra wurde im Hinblick auf Hardware auf dem neusten Stand der Technik entwickelt. Qubic soll wie das IoT selbst, auf einer Vielzahl von Hardware laufen. Um den gleichen Code auf verschiedenen Hardwareplattformen ausführen zu können, werden die qubics in dieser Zwischensprache verpackt, was im Wesentlichen bedeutet, dass sich die Sprache für eine einfache Übersetzung für bestimmte Hardware eignet. Dadurch wird Qubic weitgehend unabhängig von der Hardware.

Eine funktionale Programmiersprache ermöglicht eine einfachere Analyse, um die Richtigkeit des Codes nachzuweisen. Das Schreiben korrekter Programme ist keine triviale Aufgabe. Wir haben in der Vergangenheit gesehen, wie schwierig es ist, selbst einfache Smart Contracts fehlerfrei zu gestalten. Eine Sprache zu haben, die sich für eine automatisierte Analyse eignet, ist eine drastische Verbesserung gegenüber einer traditionellen, zwingenden Sprache. Als zusätzlichen Vorteil bieten sich funktionale Programme für eine starke Nutzung der Parallelisierung an, was bedeutet, dass verschiedene Teile eines größeren Programms gleichzeitig ausgeführt werden können, um mehrere CPUs oder sogar mehrere Geräte zu nutzen.

Abra besteht aus Funktionen, die ihrerseits aus Funktionen bestehen können, die asymptotisch auf Funktionen konvergieren, die einen ternären Wert oder null zurückgeben können, was auf die Beendigung eines logischen Zweiges hinweist. Es gibt keinen Kontrollfluss, sondern eine implizite Verzweigung und Zusammenführungen von Daten, beim ausführen dieser Funktionen. Ein gegebener Endpunkt wird als der überlebende Funktionszweig betrachtet, der einen Wert zurückgegeben hat. Abra gehört damit zu einem Programmierparadigma, der sogenannten Datenflussprogrammierung und eignet sich für die sogenannte Wellen-Parallelverarbeitung. Die Daten können durch die verschiedenen Ebenen des Prozessors fließen, ohne dass Synchronisations- oder Pufferungsverzögerungen erforderlich sind. Es hat sich gezeigt, dass damit die Taktfrequenzen 2- bis 7-fach höher sind als bei herkömmlichen Parallelverarbeitung.

Eine letzte Anmerkung zu den Optimierungen: Abra wird mit einer Bibliothek von vordefinierten Grundfunktionen für die gängigsten Plattformen geliefert. Obwohl die meisten Funktionen auf einem sehr niedrigen Niveau definiert sind, erlaubt es die Natur von Abra, Funktionen mit hardwarespezifischen Implementierungen zu überschreiben, die bei Bedarf effizienter sind.


Quellen

www.iota.org

https://qubic.iota.org


Was ist Qubic?

Qubic ist ein dezentrales Protokoll und steht für quorum-based computation (QBC), der Code bietet universelle, cloud- oder fog-basierte, erlaubnislose, Mehrfachverarbeitungs-Funktionen auf dem Tangle. Der QBC Code legt einen zweiten Layer auf das Tangle-Protokoll und nutzt den IOTA-Token für die Bezahlung von Dienstleistungen, der Code wird immer von mehreren IOTA-Nodes ausgeführt. Dieses Protokoll soll dazu dienen, eine neuartige Form von Smart Contracts und Oracles auf Basis des Tangles zu ermöglichen bei dem Mikrozahlungen während der Ausführung in Echtzeit erfasst werden, zudem soll sich mit dem Protokoll Quorum-basierte Rechenpower auslagern lassen.

Zusammenfassend ist Qubic ein auf der IOTA Plattform basierender globaler Supercomputer mit weitreichenden Anwendungsmöglichkeiten. Qubic bietet einen Weg zur sicheren Kommunikation mit der Außenwelt in einer vertrauenswürdigen Umgebung und es bietet ein Belohnungssystem (IOTA-Token) für Anreize zur ehrlichen Teilnahme am Tangle. Im IoT wird es Millionen von Teilnehmern geben, jedes Gerät besitzt seine eigene Wallet und nutzt die Kryptowährung IOTA, um sich gegenseitig zu bezahlen, Qubic wird mittels neuartiger Smart-Contracts dazu verwendet werden, einfache und komplexe Abläufe zu automatisieren.

Im Detail legt das mächtige Qubic-Protokoll den Aufbau, die Ausführung und den evolutionären Lebenszyklus von Qubics fest. Es nutzt das IOTA-Protokoll für eine sichere, dezentrale Kommunikation zwischen den verschiedenen Teilnehmern. Da IOTA über ein eigenes eingebautes Zahlungssystem verfügt, werden IOTA-Token verwendet, um ein Anreizsystem für qubic-Operatoren zu schaffen. Jeder kann selbst entscheiden, ab welcher Schwelle eine Belohnung interessant genug wird, um teilzunehmen.