[JAVA] J'ai enquêté sur le registre distribué Scalar DLT (Smart Contract Execution) récemment discuté

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.

Comment démarrer avec Scalar DLT

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).

Contrat intelligent

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.

Installation de Java

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

Demande de bac à sable

Ensuite, postulez pour Sandbox à partir de la page suivante.

Scalar DL Sandbox

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. sandbox01.jpg

installer

Lorsque vous décompressez le fichier téléchargé, les fichiers suivants seront extraits.

$ 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}/* ./

Enregistrement de certificat

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

Enregistrement du contrat

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.

Exécution du contrat

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.

Résumé

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

J'ai enquêté sur le registre distribué Scalar DLT (Smart Contract Execution) récemment discuté
J'ai essayé de savoir comment rédiger un contrat intelligent pour le grand livre distribué Scalar DLT.
J'ai essayé de toucher l'application de gestion d'actifs en utilisant l'émulateur du grand livre distribué Scalar DLT