[JAVA] J'ai essayé de toucher l'application de gestion d'actifs en utilisant l'émulateur du grand livre distribué Scalar DLT

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.

Obtenez et exécutez l'émulateur

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!

Obtenir une application de gestion d'actifs

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/

Créer une application de gestion d'actifs

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.

Enregistrez et exécutez des contrats intelligents

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. auth.jpg É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.

Résumé

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.

Recommended Posts

J'ai essayé de toucher l'application de gestion d'actifs en utilisant l'émulateur du grand livre distribué Scalar DLT
J'ai essayé d'utiliser la fonction de cache d'Application Container Cloud Service
J'ai essayé de savoir comment rédiger un contrat intelligent pour le grand livre distribué Scalar DLT.
J'ai essayé d'utiliser le profileur d'IntelliJ IDEA
J'ai enquêté sur le registre distribué Scalar DLT (Smart Contract Execution) récemment discuté
J'ai essayé d'utiliser la fonction Server Push de Servlet 4.0
J'ai essayé de réduire la capacité de Spring Boot
J'ai essayé d'utiliser la boîte à outils de migration pour les fichiers binaires d'application
J'ai essayé d'étudier le mécanisme d'Emscripten en l'utilisant avec un solveur allemand
J'ai essayé de résumer les bases de kotlin et java
J'ai essayé de convertir l'exemple d'application en microservice selon l'idée du livre "Microservice Architecture".
J'ai brièvement résumé la grammaire de base de Ruby
J'ai essayé de construire l'environnement petit à petit en utilisant docker
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode
J'ai essayé de développer la fonction de cache d'Application Container Cloud Service dans l'environnement local
Après avoir appris Progate, j'ai essayé de créer une application SNS en utilisant Rails dans l'environnement local
[Metal] J'ai essayé de comprendre le flux jusqu'au rendu avec Metal
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
J'ai essayé de créer une application simple en utilisant Dockder + Rails Scaffold
J'ai essayé de vérifier le fonctionnement du serveur gRPC avec grpcurl
J'ai essayé de résumer les méthodes de Java String et StringBuilder
J'ai essayé d'afficher le calendrier sur la console Eclipse en utilisant Java.
J'ai essayé de résoudre le problème de Google Tech Dev Guide
J'ai essayé d'expliquer la méthode
[Rails] J'ai essayé de supprimer l'application
J'ai essayé d'utiliser Google HttpClient de Java
J'ai essayé de créer un exemple de programme en utilisant le problème du spécialiste des bases de données dans la conception pilotée par domaine
J'ai essayé de résumer les points clés de la conception et du développement de gRPC
J'ai essayé d'utiliser pleinement le cœur du processeur avec Ruby
J'ai essayé de visualiser l'accès de Lambda → Athena avec AWS X-Ray
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
J'ai essayé de mesurer et de comparer la vitesse de Graal VM avec JMH
J'ai essayé de publier l'application de mesure réflexe sur le Google Play Store
J'ai essayé de résumer les méthodes utilisées
J'ai essayé d'utiliser Scalar DL avec Docker
J'ai essayé d'implémenter le modèle Iterator
J'ai essayé de résumer l'API Stream
J'ai essayé de toucher JavaScript Part.2 orienté objet
J'ai essayé de comparer la technologie d'infrastructure des ingénieurs ces jours-ci avec la cuisine.
J'ai essayé de cloner une application Web pleine de bugs avec Spring Boot
[JDBC ③] J'ai essayé d'entrer à partir de la méthode principale en utilisant des espaces réservés et des arguments.
[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
J'ai essayé d'organiser la session en Rails
J'ai essayé de développer un outil de gestion des effectifs
C # (base de l'encapsulation)
Je veux var_dump le contenu de l'intention
[API] J'ai essayé d'utiliser l'API de recherche par code postal
J'ai essayé de configurer tomcat pour exécuter le servlet.
J'ai essayé de développer une application en 2 langues
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé de vérifier le fonctionnement de la requête http (Put) avec Talented API Tester