Exonum zum ersten Mal kaufen: Warum wir uns für Java entschieden haben

    Der Kern unseres Frameworks für die Entwicklung privater Exonum-Blockchains ist in Rust geschrieben, da sich dieser PL auf die Speichersicherheit konzentriert. Neben vielen Vorteilen bietet Rust jedoch eine Reihe von Funktionen, die die „Interaktion“ damit erschweren: Seine Syntax ist für viele Entwickler ungewöhnlich, und die Eintrittsschwelle ist ziemlich hoch.

    Um die Arbeit mit der Exonum-Plattform zu erleichtern und für das Publikum zugänglicher zu machen, haben wir uns entschlossen, eine verbindliche Bibliothek zu schreiben. Die Sprache für das Binden war Java.

    Warum wir Java gewählt haben, erzählen wir unter cat.


    / Exonum

    Ein paar Worte zu Exonum


    Exonum ist unser Open Source Framework für die Entwicklung privater Blockchains. Die Blockchain von Exonum ist viel schneller als öffentliche Blockchains und kann bis zu 5.000 Transaktionen pro Sekunde verarbeiten. Zum Vergleich: In Ethereum entspricht dieser Indikator mehreren Dutzend , während Bitcoin noch kleiner ist .

    Exonum verwendet dabei den byzantinischen Konsensus-Algorithmus zum Schutz von Daten. Es erfordert kein Mining und garantiert die korrekte Ausführung von Transaktionen, selbst wenn ein Drittel der Netzwerkknoten gefährdet ist.

    Die Exonum-Plattform kann in allen Bereichen eingesetzt werden: finanziell, technologisch und rechtlich. Das Framework eignet sich insbesondere zum Erstellen digitaler Rechteverwaltungssysteme (die Demo kann sein)auf der offiziellen Website ) und Organisation der Abstimmung ( Demo ). In beiden Fällen sind alle vorkommenden Prozesse so transparent wie möglich und durch kryptographische Mechanismen geschützt.

    Im vergangenen Jahr wurde der Landeskataster der Ukraine mit der Exonum-Plattform umgesetzt. Zuvor hatte Exonum in Georgien ein Landmanagementprojekt gestartet. Wir verhandeln auch mit Dutzenden von Unternehmen der Fortune 500 und der Europäischen Union über die Implementierung unseres Systems in ihre Geschäftsprozesse.

    Der Kern Exonum ist in Rust geschrieben. Die Wahl ist durch die Tatsache gerechtfertigt, dass dieser PL auf Sicherheit und Geschwindigkeit ausgerichtet ist - bei einigen Aufgaben funktioniert er schneller als Java, Go, C und C ++. Gleichzeitig garantiert Rust die Gedächtnissicherheit und verhindert Rennen.wenn zwei Threads versuchen, auf eine Daten zuzugreifen.

    Der Rust-Compiler ist darauf ausgelegt, die Anzahl der durch menschliche Faktoren verursachten Fehler zu minimieren . So werden beispielsweise mehrere Fehlerklassen auf Kosten des Lebens- und Eigentumsbegriffs eliminiert.

    Alle Werte in Rust haben eine "Domain of Ownership". Wenn ein Name diesen Bereich verlässt, wird die zugehörige Ressource freigegeben. Hier ist ein Beispiel für den Code, der in der offiziellen Rust-Dokumentation enthalten ist:

    fnuse_vec() {
        let vec = make_vec();  // завладеть вектором
        print_vec(vec);        // передать его print_vecfor i in vec.iter() {  // продолжить использовать vecprintln!("{}", i * 2)
        }
    }
    

    Wenn Sie es dem Compiler übergeben, wird ein Fehler generiert:

    
    error: use of moved value: `vec`
    for i in vec.iter() {
             ^~~
    

    Dies legt nahe, dass vec nicht verfügbar ist, da sich seine Domäne geändert hat. Daher ist es viel schwieriger, sich während des Entwicklungsprozesses ein Bein zu erschießen.

    Warum wir uns entschieden haben, verbindlich zu sein


    "Laut" -Syntax

    Die Sprache Rust bietet eine komfortable und breite Palette von Datentypen, die miteinander kombiniert werden können. Dadurch ist es möglich, die Wertesätze im Code zu organisieren, den Zugriff auf Daten einzuschränken und sie vor unberechtigtem Zugriff zu schützen.

    Diese Funktionen sind sehr wichtig, wenn Sie in Exonum mit intelligenten Verträgen arbeiten. Dank ihnen haben die intelligenten Verträge unseres Frameworks eine höhere Leistung und Sicherheit beim Zugriff auf den Speicher als beispielsweise die Lösungen von Ethereum.

    Im Allgemeinen ähnelt Rust anderen imperativen Sprachen (insbesondere der Syntax von Rust ähnelt C / C ++), es repräsentiert jedoch eine Vielzahl innovativer Konzepte. Es hat Zyklen, Bedingungen, Funktionen, aber gleichzeitig gibt es Eigentumsbereiche und Typen. Daher ist es für diejenigen, die noch nie mit diesem PL gearbeitet haben, schwierig, Programme darauf zu lesen.

    Zunächst scheinen sie "fremd" zu sein . "Pain" fügt eine ungewöhnliche Speicherverwaltung hinzu (im Vergleich zu anderen Sprachen), was Rust so sicher macht. Im vergangenen Herbst veröffentlichten die Macher von Rust die Ergebnisse einer Umfrage unter 5.000 Mitgliedern der Gemeinschaft. Fast ein Viertel der Befragten stellte fest, dass es schwierig ist, mit Rust zusammenzuarbeiten.

    Zu "anspruchsvoller" Compiler

    Wie bereits erwähnt, besteht die Aufgabe des Rust-Compilers darin, die Anzahl der Fehler im Code zu reduzieren. Der Compiler hält sich strikt an den Programmtext, zeigt aber gleichzeitig Optionen zur Fehlerbeseitigung an. Gleichzeitig zeigt der Compiler sogar Warnungen an, die sich auf den Programmierstil beziehen.

    Auf diese Weise können Sie zuverlässigen Code schreiben (was bei der Arbeit mit Blockketten im Allgemeinen wichtig ist), er hat jedoch auch die gegenüberliegende Seite der Münze. Manchmal müssen Sie Programme auf Rust schreiben, damit der Compiler "versteht", dass Sie keine verbotenen Speicheroperationen ausführen. Und da die Sprache noch jung ist und sich ständig weiterentwickelt, gibt es möglicherweise keine etablierten Praktiken. Denn, so der Entwickler Exonum Ilya Bogdanov, viele Muster haben zu finden , eine fundierte Wette.

    Kleine Gemeinschaft

    Der dritte Grund für das Binging war die kleine Rust-Community. Obwohl die Community dieses PL recht freundlich ist und ihre Mitglieder immer bereit sind, Fragen zu beantworten, leidet die Sprache unter einer geringen Menge an Literatur und Bibliotheken. Es sei jedoch darauf hingewiesen, dass dieses Problem nach und nach gelöst wird.

    In den letzten Jahren hat Rust aktiv Mozilla und Samsung gefördert , was sich positiv auf die Anzahl der in Entwicklung befindlichen Bibliotheken und neuen „Wrapper“ für vorhandene Lösungen aus der Welt von C / C ++ auswirkt. Nach und nach erscheinen auch Sprachbücher. Von den bereits existierenden, Ivo Balbaerts Grundlagen von Rust , einem Online-Leitfadenauf der offiziellen Website und dem aktuellen Buch eines der Entwickler des Rust-Projekts, Steve Klabnik, „ Rust Programming Language “.

    Warum Java wählen?


    Einer der Hauptgründe für die Entscheidung war die größte Gemeinde dieser PL. Laut einer Studie, die letztes Jahr auf der Stack Overflow-Site durchgeführt wurde, steht Java an dritter Stelle (es wurde nur von JavaScript und SQL umgangen). Von den 64.000 befragten Entwicklern schreiben fast 40% in Java.

    Aufgrund der Größe der Community hat dieser PL ein umfangreiches Instrumentarium erworben. Dazu gehören IDE, analytische Lösungen, Benchmark - Frameworks und andere. Sie sind so viele , dass einige Unternehmen benötigen Entwickler nur bestimmte IDE und Frameworks zu verwenden , um „Splitting“ der Arbeitsumgebung zu vermeiden.

    Darüber hinaus verfügt Java über eine einfache Syntax und Java Native Interface (JNI), die funktionieren könnenmit C Application Binary Interface (ABI). Darüber hinaus können Sie mit Java andere Sprachen auf dem JVM-Stack verwenden: Scala, Kotlin, Clojure.

    Und schließlich ist die Java-Maschine plattformübergreifend: Java-Code wird in Byte-Code ausgeführt, der auf Windows-, MacOS- und Linux-Plattformen interpretiert und ausgeführt wird. In diesem Fall ist die Java-Sprache stärker an Open Source gebunden (verglichen mit beispielsweise C #). Java-Entwicklertools sind größtenteils kostenlos: Dies ist das JDK und die darauf basierenden integrierten Entwicklungsumgebungen - JDeveloper, NetBeans, Eclipse usw. Gleichzeitig finden Sie eine Vielzahl von Open-Source-Projekten (z. B. auf GitHub ) zu speziellen Ressourcen . Es gibt auch viele Handbücher zum Arbeiten mit Open Source-Technologien.

    Die wichtigsten Herausforderungen bei der Entwicklung von Java Binding


    Die Entwicklung von Java Binding war lang und kompliziert (und es ist noch im Gange). Wir mussten alle Funktionen berücksichtigen, die die Sprachen Rust und Java so unterschiedlich machen.

    Eine der Schwierigkeiten war beispielsweise die Organisation des Ressourcenmanagements. Tatsache ist, dass es in Java einen Garbage Collector gibt, in Rust aber nicht. Es wurde entfernt , in einer der früheren Versionen, wie die Entwickler zu dem Schluss gekommen, dass sie das gleiche Maß an Zuverlässigkeit bieten können den Typ System.

    Java GC bietet zwar einen erhöhten Ressourcenverbrauch (es zwingt alle Funktionen, ihm nicht verwendete Objekte zu geben, um potenzielle Speicherverluste zu vermeiden), ist jedoch recht bequem. Daher mussten wir einen Mechanismus zur Ressourcenbereinigung implementieren, den Java-Entwickler wünschen.

    Eine weitere Komplikation wurde mit spezifischen Datenstrukturen in Exonum präsentierten assoziiert - Bäume Merkle (Merkle Bäume). Exonum verwendet sie, um Blockchain-Zustände in einem einzigen Hash zu kombinieren. Dadurch ist es möglich, die Authentizität von Transaktionen zu belegen, ohne mit mehreren vollständigen Netzwerkknoten kommunizieren zu müssen. Diese Funktionalität ist für die Arbeit unserer Light Clients wichtig, da sie auch in Java interpretiert werden musste.

    Die Java-API wiederholt die Rust-API fast vollständig. Dies dient dazu, uns die Anpassung der Dokumentation zu erleichtern und die Arbeit der Benutzer zu vereinfachen. Wir haben ein separates Tutorial zum Einrichten und Ausführen des Exonum-Knotens mit der Java Binding App erstellt.

    Zu schaffen DiensteIn Java können Sie das Vorlagengeneratorprojekt verwenden. Sie müssen Maven 3 installieren und den Befehl ausführen:

    $ mvn archetype:generate \
        -DinteractiveMode=false \
        -DarchetypeGroupId=com.exonum.binding \
        -DarchetypeArtifactId=exonum-java-binding-service-archetype \
        -DgroupId=com.example.myservice \
        -DartifactId=my-service \
        -Dversion=1.0
    

    Sie können den interaktiven Modus verwenden:

    $ mvn archetype:generate \
        -DarchetypeGroupId=com.exonum.binding \
        -DarchetypeArtifactId=exonum-java-binding-service-archetype
    

    Eine vollständige Anleitung mit Beispielen zum Einrichten eines Java-Services finden Sie in der Dokumentation auf der offiziellen Website des Exonum-Projekts. Empfehlungen zum Ausführen des Exonum-Knotens finden Sie im Repository auf GitHub .


    / Exonum

    Pläne für die Zukunft


    Während Java Binding in Alpha ist. Wir planen, es in naher Zukunft als vollständiges und fertiges Feature zu veröffentlichen. Jetzt sammeln wir Feedback von Benutzern, um mögliche Probleme in der Bibliothek zu verfolgen und Korrekturen vorzunehmen.

    Wir arbeiten auch an Dokumentation, schreiben Beispielprojekte und SDKs, um die Integration mit der Anwendung in der Blockchain zu vereinfachen und die gesamte UX zu verbessern. Die vollständige Projekt-Roadmap finden Sie im Repository auf GitHub .

    Dort können Sie auch alle Quellen nutzen , um Java Binding auszuprobieren und Ihren Java-Service für Exonum zu schreiben. Bei Fragen wenden Sie sich an unser Gitter-Entwicklungsteam . Erzähle und helfe so viel wie möglich.

    Jetzt auch beliebt: