La dernière fois, j'ai examiné Scalar DLT, un logiciel de grand livre distribué développé par Scalar Co., Ltd..
Article précédent: Récemment parlé du grand livre distribué Scalar DLT (édition de base)
Cette fois, je vais toucher au contrat intelligent.
Comme je l'ai présenté la dernière fois, Scalar DLT a un logiciel appelé Scalar DL et Scalar DB. Il est possible d'utiliser Scalar DB seul, mais si vous avez beaucoup de problèmes, essayez Scalar DL, qui peut utiliser des contrats intelligents. Actuellement, Sandbox est fourni, nous allons donc l'utiliser.
Sandbox
Certaines personnes ont déjà écrit sur Sandbox, je vais donc me référer à ce qui suit.
J'ai essayé l'environnement Sandbox du logiciel de grand livre distribué Scalar DL
De plus, bien que l'article contienne la description suivante, je peux maintenant télécharger les fichiers nécessaires dès que je me connecte avec mon compte GitHub.
Demandez l'accès pour utiliser sandbox à partir de l'URL ci-dessus. Peu de temps après la demande, vous recevrez un e-mail de fin d'inscription, et vous recevrez la paire de clés, le certificat, le fichier de paramétrage, etc. nécessaires à l'utilisation (je l'ai reçu en quelques dizaines de minutes).
Maintenant, exécutons l'exemple de contrat. Cette fois, nous travaillerons dans l'environnement de macOS 10.14.4. En gros, vous pouvez le faire en suivant la page ci-dessus, mais je vais vous expliquer chaque commande étape par étape.
Tout d'abord, JAVA est requis pour exécuter scalardl-client-sdk. Alors installons JAVA.
Installation Homebrew
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
homebrew-cask-Présentation des versions
$ brew tap homebrew/cask-versions
Installation de Java 8
$ brew cask install adoptopenjdk8
Ensuite, postulez pour Sandbox à partir de la page suivante.
Veuillez visiter cette page et vous connecter avec votre compte GitHub. Ensuite, la page suivante s'affichera Cliquez sur le bouton "Télécharger" pour télécharger les fichiers nécessaires.
Lorsque vous décompressez le fichier téléchargé, les fichiers suivants seront extraits.
{Username}
est le nom d'utilisateur GitHub.$ unzip ~/Downloads/scalar-sandbox-client-{username}.zip
$ ls ~/Downloads/scalar-sandbox-client-{username}
client.properties {username}-key.pem {username}.pem
Une brève description du fichier est la suivante.
Ensuite, nous clonerons le référentiel.
$ git clone https://github.com/scalar-labs/scalardl-client-sdk.git
$ cd scalardl-client-sdk
Après avoir cloné le référentiel, copions les fichiers téléchargés précédemment.
$ cp -r ~/Downloads/scalar-sandbox-client-{username}/* ./
Ensuite, enregistrez le certificat que vous avez copié précédemment pour rejoindre le réseau Scalar DL.
$ client/bin/register-cert -properties client.properties
Nous allons enfin enregistrer le contrat. La source du contrat existe dans le référentiel cloné, mais pour l'enregistrer, vous devez le compiler avec la commande suivante.
$ ./gradlew assemble
Maintenant, enregistrons le contrat. Cette fois, nous utiliserons StateUpdater pour mettre à jour l'état et StateReader pour vérifier l'état.
$ client/bin/register-contract -properties client.properties -contract-id {username}-StateUpdater -contract-binary-name com.org1.contract.StateUpdater -contract-class-file build/classes/java/main/com/org1/contract/StateUpdater.class
$ client/bin/register-contract -properties client.properties -contract-id {username}-StateReader -contract-binary-name com.org1.contract.Reader -contract-class-file build/classes/java/main/com/org1/contract/StateReader.class
L'exécution est simple, mais les options sont expliquées ci-dessous.
Une fois que vous êtes ici, il ne vous reste plus qu'à l'exécuter. Utilisons StateUpdater pour définir une valeur pour un actif spécifique.
$ client/bin/execute-contract -properties client.properties -contract-id {username}-StateUpdater -contract-argument '{"asset_id": "{username}-myasset", "state": 3}'
status: 200
C'est également très simple.
Si status: 200
est renvoyé, l'exécution est réussie.
Il n'y a qu'une seule option différente de la précédente.
Maintenant que nous avons frappé Updater, vérifions la valeur avec Reader.
client/bin/execute-contract -properties client.properties -contract-id {username}-StateReader -contract-argument '{"asset_id": "{username}-myasset"}'
status: 200
{"age":0,"input":{},"output":{"state":3},"contract_id":"{username}-StateUpdater","argument":{"asset_id":"{username}-myasset","state":3,"nonce":"b3a59ed7-e69a-49ea-83c4-7237296bf119"},"signature":"MEUCIBqkUbPI3l5TGx+MqjNFsUmv8UWJ0DYyjzeYgOauoB83AiEAuMwofkeQEJnTn/6W8sjilfawYcryPt3wZIgPfEprjTo=","hash":"fkXewkXuiof/PO87DKb6vfxdAMAisJ9WzXOvIyzXQoY=","prev_hash":""}
C'est difficile à voir, je vais donc formater la sortie.
{
"age": 0,
"input": {},
"output": {
"state": 3
},
"contract_id": "{username}-StateUpdater",
"argument": {
"asset_id": "{username}-myasset",
"state": 3,
"nonce": "b3a59ed7-e69a-49ea-83c4-7237296bf119"
},
"signature": "MEUCIBqkUbPI3l5TGx+MqjNFsUmv8UWJ0DYyjzeYgOauoB83AiEAuMwofkeQEJnTn/6W8sjilfawYcryPt3wZIgPfEprjTo=",
"hash": "fkXewkXuiof/PO87DKb6vfxdAMAisJ9WzXOvIyzXQoY=",
"prev_hash": ""
}
Si vous faites attention à la sortie, pouvez-vous voir que la valeur «3» définie précédemment est enregistrée? Et comme cet actif est le premier enregistrement, input et prev_hash sont vides.
Enfin, définissons différentes valeurs pour le même actif.
$ client/bin/execute-contract -properties client.properties -contract-id {username}-StateUpdater -contract-argument '{"asset_id": "{username}-myasset", "state": 100}'
status: 200
Vérifions la valeur avec StateReader de la même manière qu'avant.
client/bin/execute-contract -properties client.properties -contract-id {username}-StateReader -contract-argument '{"asset_id": "{username}-myasset"}'
{
"age": 1,
"input": {
"{username}-myasset": {
"age": 0,
"data": {
"state": 3
}
}
},
"output": {
"state": 100
},
"contract_id": "{username}-StateUpdater",
"argument": {
"asset_id": "{username}-myasset",
"state": 100,
"nonce": "31f3c3d5-d7ab-4fd5-acae-fe0d0b95038c"},
"signature": "MEUCIQC+pcBXSsAwmzsfX0xjXLEoANU47ONCA1e1xrQYsa+5pgIgToOUMKvv37nvZzAAFDR/EDKXe7fZzmfDWubM8TEMuTM=",
"hash": "McnMW2rvOvLjeC4g6zc0yRd/ajX1Z3aIqeI9bQAc+ko=",
"prev_hash": "fkXewkXuiof/PO87DKb6vfxdAMAisJ9WzXOvIyzXQoY="
}
La valeur d'état de la sortie a été mise à jour, mais la différence par rapport à la valeur de retour du premier StateReader est que input et prev_hash sont visibles. L'entrée contient l'état de l'actif précédent et prev_hash contient l'ID de hachage de l'actif précédent. Les chaînes de hachage sont formées de cette manière.
C'est donc facile, mais j'ai essayé d'exécuter un exemple de contrat. Il est facile d'utiliser que le contrat peut être écrit en Java pur. Étant donné qu'Ethereum a son propre langage, Solidity (bien que similaire à JavaScript), et Hyperledger Fabric a le langage Go comme courant dominant, n'est-il pas facile à introduire?
Actuellement, Hyperledger Fabric peut être écrit en Node.js et Java en plus du langage Go, je voudrais donc comparer comment écrire et déployer du code à partir de la prochaine fois.
Recommended Posts