[JAVA] Ich habe versucht, die Asset-Management-Anwendung mit dem Emulator des verteilten Hauptbuchs Scalar DLT zu berühren

Dieses Mal werde ich versuchen, den Scalar DLT-Emulator mithilfe der erläuterten Asset-Management-Anwendung zu verwenden. Die Ausführungsumgebung funktioniert weiterhin unter macOS 10.14.4.

Holen Sie sich den Emulator und führen Sie ihn aus

Holen Sie sich zuerst den Emulator. Holen Sie es sich mit dem folgenden Befehl.

$ git clone https://github.com/scalar-labs/scalardl-tools

Erstellen Sie es nach dem Klonen.

$ cd scalardl-tools/emulator
$ ./gradlew installDist

Lassen Sie es uns sofort nach dem Bau ausführen.

$ ./build/install/emulator/bin/emulator
Scalar DL Emulator
Type 'help' for more information
scalar>

Wenn Sie auf eine Eingabe warten, ist der Startvorgang abgeschlossen. Es wird schnell starten!

Beziehen einer Asset Management-Anwendung

Als nächstes erhalten wir die Asset-Management-Anwendung. Der Speicherort der Quelle wurde beim letzten Mal eingegeben. Klonen Sie sie also sofort.

$ git clone https://github.com/indetail-blockchain/getting-started-with-scalardl.git

Da zwei Projekte verwendet werden, ist die Verzeichnisstruktur wie folgt.

git/  ├ scalardl-tools/  └ getting-started-with-scalardl/

Erstellen Sie eine Asset Management-Anwendung

Im vorherigen Artikel habe ich vorgestellt, dass 6 intelligente Verträge verfügbar sind. Die Quelle befindet sich tatsächlich an folgendem Ort.

$ ls -l getting-started-with-scalardl/src/main/java/com/scalar/am/contract
AddAssetContract.java
AddTypeContract.java
AssetHistoryContract.java
ListContract.java
ListTypeContract.java
StatusChangeContract.java

Lassen Sie uns das bauen. Sie können es erstellen, indem Sie die Quelle unter "src / main / java" des Emulators platzieren.

$ cp -r getting-started-with-scalardl/src/main/java/com scalardl-tools/emulator/src/main/java/
$ rm -rf scalardl-tools/emulator/src/main/java/com/scalar/am/command
$ rm -f scalardl-tools/emulator/src/main/java/com/scalar/am/AssetManager.java
$ cd scalardl-tools/emulator/
$ ./gradlew build

Schauen Sie sich das Build-Verzeichnis an, sobald es erfolgreich erstellt wurde.

$ ls -l build/classes/java/main/com/scalar/am/contract
AddAssetContract.class
AddTypeContract.class
AssetHistoryContract.class
ListContract.class
ListTypeContract.class
StatusChangeContract.class

Sie haben eine Klassendatei.

Registrieren Sie intelligente Verträge und führen Sie sie aus

Lassen Sie uns nun den Smart-Vertrag ausführen. Lassen Sie uns zuerst den Emulator starten.

$ cd scalardl-tools/emulator
$ ./build/install/emulator/bin/emulator
Scalar DL Emulator
Type 'help' for more information
scalar>

Registrieren Sie zunächst den Vertrag. Registrieren Sie insgesamt 6.

scalar> register add-type com.scalar.am.contract.AddTypeContract ../../getting-started-with-scalardl/build/com/scalar/am/contract/AddTypeContract.class {"holderId": "Admin"}
Contract 'add-type' successfully registered

scalar> register add-asset com.scalar.am.contract.AddAssetContract ../../getting-started-with-scalardl/build/com/scalar/am/contract/AddAssetContract.class {"holderId": "Admin"}
Contract 'add-asset' successfully registered

scalar> register list-type com.scalar.am.contract.ListTypeContract ../../getting-started-with-scalardl/build/com/scalar/am/contract/ListTypeContract.class {"holderId": "Admin"}
Contract 'list-type' successfully registered

scalar> register list-asset com.scalar.am.contract.ListContract ../../getting-started-with-scalardl/build/com/scalar/am/contract/ListContract.class {"holderId": "Admin"}
Contract 'list-asset' successfully registered

scalar> register status-change com.scalar.am.contract.StatusChangeContract ../../getting-started-with-scalardl/build/com/scalar/am/contract/StatusChangeContract.class {"holderId": "Admin"}
Contract 'status-change' successfully registered

scalar> register asset-history com.scalar.am.contract.AssetHistoryContract ../../getting-started-with-scalardl/build/com/scalar/am/contract/AssetHistoryContract.class {"holderId": "Admin"}
Contract 'asset-history' successfully registered

Die Spezifikationen des Befehls "register" für die Registrierung lauten wie folgt.

register [Name, der zur Laufzeit verwendet werden soll] [Java-Klassenname] [Klassendateipfad] [Anfangsparameter]

Anfängliche Parameter können bei der Registrierung eines Smart-Vertrags übergeben werden. Für diese Asset-Management-Anwendung muss jedoch die Inhaber-ID angegeben werden. Diese "Inhaber-ID" wird nur zum Zeitpunkt der Registrierung übergeben und hat einen Wert, der sich nicht ändert. Indem Sie dies im Smart-Vertrag verwenden und überprüfen, können Sie ** verhindern, dass andere die von Ihnen registrierten Asset-Informationen aktualisieren **. Das Folgende ist ein einfaches Bild. auth.jpg Da Scalar DLT die Referenz- / Umschreibberechtigung für Assets nicht steuert, können auf diese Weise unerwartete Datenaktualisierungen verhindert werden.

Lass es uns endlich tun. Verwenden Sie zur Ausführung execute.

execute [Registrierter Name des Smart Contract] [Parameter]

Registrieren Sie zunächst den Asset-Typ.

scalar> execute add-type {"name": "Tablet"}

{
   "result": "success",
   "message": "type Tablet put completed."
}
scalar> execute add-type {"name": "SmartPhone"}

{
   "result": "success",
   "message": "type SmartPhone put completed."
}

Typen namens Tablet und SmartPhone hinzugefügt. Als nächstes überprüfen wir, ob es wirklich registriert ist.

scalar> execute list-type {}

{
   "result": "success",
   "message": "get list completed.",
   "types": [
       {
           "type": "SmartPhone",
           "age": 1
       },
       {
           "type": "Tablet",
           "age": 0
       }
   ]
}

Es wird richtig gespeichert. Die Einschränkung hier ist, dass Sie, wenn keine Argumente vorhanden sind, ein leeres Array {} übergeben. Bitte beachten Sie, dass ein Fehler auftritt, wenn Sie dies weglassen.

Als nächstes registrieren wir das Asset.

scalar>

scalar> execute add-asset {"type": "Tablet", "asset": "iPad", "timestamp": 20190701120000, "id": "1001"}

{
   "result": "success",
   "message": "asset iPad put completed."
}

Sie haben ein iPad mit der ID 1001 registriert, das als Tablet klassifiziert ist. Ich registriere einen UNIX-Zeitstempel für den Zeitstempel, habe jedoch zum besseren Verständnis einen temporären Wert angegeben. Ich werde auch prüfen, ob die Daten registriert sind.

scalar> execute list-asset {"type": "Tablet"}

{
   "result": "success",
   "message": "get list completed.",
   "Tablet": [
       {
           "id": "1001",
           "name": "iPad",
           "timestamp": 20190701120000,
           "status": "in-stock"
       }
   ]
}

Sicher ist das iPad registriert. Da der Status auf Lager ist, können wir ihn sofort ausleihen.

scalar> execute status-change {"asset_id": "1001", "status": "on-loan", "timestamp": 20190701130000}

{
   "result": "success",
   "message": "Borrowed"
}

scalar> execute list-asset {"type": "Tablet"}

{
   "result": "success",
   "message": "get list completed.",
   "Tablet": [
       {
           "id": "1001",
           "name": "iPad",
           "timestamp": 20190701130000,
           "status": "on-loan",
           "holderId": "Admin"
       }
   ]
}

Ich konnte es sicher ausleihen. Der Zeitstempel wurde ebenfalls aktualisiert und der Status in "Leihgabe" geändert. Als nächstes geben wir es zurück.

scalar> execute status-change {"asset_id": "1001", "status": "in-stock", "timestamp": 20190701140000}

{
   "result": "success",
   "message": "Returned"
}

scalar> execute list-asset {"type": "Tablet"}

{
   "result": "success",
   "message": "get list completed.",
   "Tablet": [
       {
           "id": "1001",
           "name": "iPad",
           "timestamp": 20190701140000,
           "status": "in-stock"
       }
   ]
}

Dies war auch erfolgreich. Lassen Sie uns abschließend die Miethistorie überprüfen.

scalar> execute asset-history {"id": "1001"}

{
   "result": "success",
   "message": "get history complete.",
   "history": [
       {
           "timestamp": 20190701140000,
           "status": "in-stock",
           "age": 2
       },
       {
           "timestamp": 20190701130000,
           "status": "on-loan",
           "age": 1,
           "holderId": "Admin"
       },
       {
           "timestamp": 20190701120000,
           "status": "in-stock",
           "age": 0
       }
   ]
}

Registrierung, Ausleihe, Rückgabe und Geschichte bleiben erhalten.

Zusammenfassung

Aus diesem Grund habe ich versucht, eine Asset Management-Anwendung mit einem Emulator auszuführen. Der Emulator startet schnell und arbeitet schnell, sodass die Arbeit fortschreitet. Da ich diesmal den Emulator verwendet habe, gehen der Vertrag und die Daten verloren, wenn ich ihn verlasse. Als nächstes möchte ich die tatsächliche Registrierung für die Sandbox-Umgebung und deren Aufruf verfolgen.

Recommended Posts

Ich habe versucht, die Asset-Management-Anwendung mit dem Emulator des verteilten Hauptbuchs Scalar DLT zu berühren
Ich habe versucht, die Cache-Funktion des Application Container Cloud Service zu verwenden
Ich habe versucht herauszufinden, wie man einen intelligenten Vertrag für das verteilte Hauptbuch Scalar DLT schreibt.
Ich habe versucht, den Profiler von IntelliJ IDEA zu verwenden
Ich habe das kürzlich besprochene verteilte Hauptbuch Scalar DLT (Smart Contract Execution) untersucht.
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Ich habe versucht, das Migration Toolkit für Anwendungsbinärdateien zu verwenden
Ich habe versucht, den Mechanismus von Emscripten mit einem deutschen Löser zu untersuchen
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich habe versucht, die Beispielanwendung gemäß der Idee des Buches "Micro Service Architecture" in einen Mikrodienst zu verwandeln.
Ich habe die grundlegende Grammatik von Ruby kurz zusammengefasst
Ich habe versucht, die Umgebung nach und nach mit Docker aufzubauen
Ich habe versucht, eine Umgebung mit WSL2 + Docker + VSCode zu erstellen
Ich habe versucht, die Cache-Funktion von Application Container Cloud Service in der lokalen Umgebung zu entwickeln
Nachdem ich Progate gelernt hatte, versuchte ich, eine SNS-Anwendung mit Rails in der lokalen Umgebung zu erstellen
[Metall] Ich habe versucht, den Fluss bis zum Rendern mit Metall herauszufinden
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Ich habe versucht, eine einfache Anwendung mit Dockder + Rails Scaffold zu erstellen
Ich habe versucht, den Betrieb des gRPC-Servers mit grpcurl zu überprüfen
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Ich habe versucht, den Kalender mit Java auf der Eclipse-Konsole anzuzeigen.
Ich habe versucht, das Problem des Google Tech Dev Guide zu lösen
Ich habe versucht, die Methode zu erklären
[Rails] Ich habe versucht, die Anwendung zu löschen
Ich habe versucht, Google HttpClient von Java zu verwenden
Ich habe versucht, ein Beispielprogramm mit dem Problem des Datenbankspezialisten für domänengesteuertes Design zu erstellen
Ich habe versucht, die wichtigsten Punkte des gRPC-Designs und der Entwicklung zusammenzufassen
Ich habe versucht, den CPU-Kern mit Ruby voll auszunutzen
Ich habe versucht, den Zugriff von Lambda → Athena mit AWS X-Ray zu visualisieren
Ich habe versucht, mit AI "A3RT" eine Talk-App in Java zu erstellen.
Ich habe versucht, die Geschwindigkeit von Graal VM mit JMH zu messen und zu vergleichen
Ich habe versucht, die Reflexmessanwendung im Google Play Store zu veröffentlichen
Ich habe versucht, die verwendeten Methoden zusammenzufassen
Ich habe versucht, Scalar DL mit Docker zu verwenden
Ich habe versucht, das Iterator-Muster zu implementieren
Ich habe versucht, die Stream-API zusammenzufassen
Ich habe versucht, JavaScript Part.2 Objektorientiert zu berühren
Ich habe versucht, die Infrastrukturtechnologie der Ingenieure heutzutage mit dem Kochen zu vergleichen.
Ich habe versucht, eine Webanwendung voller Fehler mit Spring Boot zu klonen
[JDBC ③] Ich habe versucht, mithilfe von Platzhaltern und Argumenten Eingaben über die Hauptmethode vorzunehmen.
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich habe versucht, die Sitzung in Rails zu organisieren
Ich habe versucht, ein Personalmanagement-Tool zu entwickeln
C # (Grund der Kapselung)
Ich möchte den Inhalt der Absicht var_dump
[API] Ich habe versucht, die Postleitzahlensuch-API zu verwenden
Ich habe versucht, Tomcat so einzustellen, dass das Servlet ausgeführt wird.
Ich habe versucht, eine Anwendung in 2 Sprachen zu entwickeln
Ich habe versucht, einen Server mit Netty zu implementieren
Ich habe versucht, den Betrieb der http-Anfrage (Put) mit dem Talented API Tester zu überprüfen