Cette fois, précédent je vais essayer d'utiliser l'émulateur Scalar DLT en utilisant l'application de gestion d'actifs expliquée. L'environnement d'exécution continuera à fonctionner sous macOS 10.14.4.
Tout d'abord, récupérez l'émulateur. Obtenez-le avec la commande suivante.
$ git clone https://github.com/scalar-labs/scalardl-tools
Après le clonage, créez-le.
$ cd scalardl-tools/emulator
$ ./gradlew installDist
Exécutons-le immédiatement après la construction.
$ ./build/install/emulator/bin/emulator
Scalar DL Emulator
Type 'help' for more information
scalar>
Si vous attendez l'entrée, le démarrage est terminé. Cela va démarrer rapidement!
Ensuite, passons à l'application de gestion d'actifs. L'emplacement de la source a été introduit la dernière fois, donc clonons-le immédiatement.
$ git clone https://github.com/indetail-blockchain/getting-started-with-scalardl.git
Étant donné que deux projets sont utilisés, la structure des répertoires est la suivante.
git/ ├ scalardl-tools/ └ getting-started-with-scalardl/
Dans l'article précédent, j'ai présenté qu'il existe 6 contrats intelligents disponibles. La source se trouve en fait à l'emplacement suivant.
$ 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
Construisons ça.
Vous pouvez le construire en plaçant la source sous src / main / java
de l'émulateur.
$ 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
Une fois la construction terminée, jetez un œil au répertoire de construction.
$ ls -l build/classes/java/main/com/scalar/am/contract
AddAssetContract.class
AddTypeContract.class
AssetHistoryContract.class
ListContract.class
ListTypeContract.class
StatusChangeContract.class
Vous avez un fichier de classe.
Maintenant, exécutons le contrat intelligent. Commençons par démarrer l'émulateur.
$ cd scalardl-tools/emulator
$ ./build/install/emulator/bin/emulator
Scalar DL Emulator
Type 'help' for more information
scalar>
Commencez par enregistrer le contrat. Enregistrez 6 au total.
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
Les spécifications de la commande register
pour l'enregistrement sont les suivantes.
register [Nom à utiliser lors de l'exécution] [Nom de la classe Java] [Chemin du fichier de classe] [Paramètres initiaux]
Les paramètres initiaux peuvent être passés lors de l'enregistrement d'un contrat intelligent, mais cette application de gestion d'actifs nécessite la spécification de holderId
.
Ce holderId
n'est passé qu'au moment de l'enregistrement et a une valeur qui ne change pas.
En utilisant et en vérifiant cela dans le contrat intelligent, il est possible ** d'empêcher d'autres personnes de mettre à jour les informations sur les actifs que vous avez enregistrées **.
Ce qui suit est une image simple.
Étant donné que Scalar DLT ne contrôle pas l'autorité de référence / réécriture pour les actifs, il est possible d'éviter les mises à jour inattendues des données de cette manière.
Faisons-le enfin. Utilisez ʻexecute` pour l'exécution.
execute [Nom enregistré du contrat intelligent] [Paramètres]
Tout d'abord, enregistrez le type d'actif.
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."
}
Ajout de types appelés Tablette et SmartPhone. Ensuite, vérifions s'il est vraiment enregistré.
scalar> execute list-type {}
{
"result": "success",
"message": "get list completed.",
"types": [
{
"type": "SmartPhone",
"age": 1
},
{
"type": "Tablet",
"age": 0
}
]
}
Il est enregistré correctement.
La mise en garde ici est que s'il n'y a pas d'arguments, vous passez un tableau vide {}
.
Veuillez noter que si vous omettez ceci, une erreur se produira.
Ensuite, enregistrons l'actif.
scalar>
scalar> execute add-asset {"type": "Tablet", "asset": "iPad", "timestamp": 20190701120000, "id": "1001"}
{
"result": "success",
"message": "asset iPad put completed."
}
Vous avez enregistré un iPad avec un ID de 1001 qui est classé comme tablette. J'enregistre un horodatage UNIX pour l'horodatage, mais j'ai spécifié une valeur temporaire pour faciliter la compréhension. Je vérifierai également si les données sont enregistrées.
scalar> execute list-asset {"type": "Tablet"}
{
"result": "success",
"message": "get list completed.",
"Tablet": [
{
"id": "1001",
"name": "iPad",
"timestamp": 20190701120000,
"status": "in-stock"
}
]
}
Certes, l'iPad est enregistré. Puisque le statut est en stock, empruntons-le immédiatement.
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"
}
]
}
J'ai pu l'emprunter en toute sécurité. L'horodatage a également été mis à jour et le statut est passé en prêt. Ensuite, retournons-le.
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"
}
]
}
Cela a également été un succès. Enfin, vérifions l'historique des locations.
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
}
]
}
L'enregistrement, le prêt, le retour et l'histoire demeurent.
C'est pourquoi j'ai essayé d'exécuter une application de gestion d'actifs à l'aide d'un émulateur. L'émulateur démarre rapidement et fonctionne rapidement, donc le travail progresse. Depuis que j'ai utilisé l'émulateur cette fois, le contrat et les données seront perdus si je quitte. Alors ensuite, je voudrais suivre l'inscription réelle à l'environnement Sandbox et son appel.