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 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!
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/
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.
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. 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.
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