[JAVA] Ich habe das kürzlich besprochene verteilte Hauptbuch Scalar DLT (Smart Contract Execution) untersucht.

Letztes Mal habe ich Scalar DLT untersucht, eine verteilte Ledger-Software, die von Scalar Co., Ltd. entwickelt wurde.

Vorheriger Artikel: Kürzlich über das verteilte Hauptbuch Scalar DLT (Basisausgabe) gesprochen

Dieses Mal werde ich tatsächlich den intelligenten Vertrag berühren.

Erste Schritte mit Scalar DLT

Wie ich letztes Mal vorgestellt habe, hat Scalar DLT Software namens Scalar DL und Scalar DB. Es ist möglich, Scalar DB allein zu verwenden. Wenn Sie möchten, versuchen Sie es mit Scalar DL, das intelligente Verträge verwenden kann. Derzeit wird Sandbox bereitgestellt, daher werden wir es verwenden.

Sandbox

Einige Leute haben bereits über Sandbox geschrieben, daher werde ich auf Folgendes verweisen.

Ich habe die Sandbox-Umgebung der verteilten Hauptbuchsoftware Scalar DL ausprobiert

Obwohl der Artikel die folgende Beschreibung enthielt, kann ich jetzt die erforderlichen Dateien herunterladen, sobald ich mich mit meinem GitHub-Konto anmelde.

Fordern Sie den Zugriff zur Verwendung der Sandbox über die oben angegebene URL an. Kurz nach der Anfrage erhalten Sie eine E-Mail zum Abschluss der Registrierung und das für die Verwendung erforderliche Schlüsselpaar, Zertifikat, Einstellungsdatei usw. (ich habe es in zehn Minuten erhalten).

Intelligenter Vertrag

Lassen Sie uns nun den Beispielvertrag ausführen. Dieses Mal werden wir in der Umgebung von macOS 10.14.4 arbeiten. Grundsätzlich können Sie dies tun, indem Sie der obigen Seite folgen, aber ich werde jeden Befehl Schritt für Schritt erklären.

Java-Installation

Zunächst muss JAVA scalardl-client-sdk ausführen. Installieren wir also JAVA.

Homebrew-Installation
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

homebrew-cask-Einführung von Versionen
$ brew tap homebrew/cask-versions

Java 8-Installation
$ brew cask install adoptopenjdk8

Anwendung für Sandbox

Beantragen Sie als Nächstes Sandbox auf der folgenden Seite.

Scalar DL Sandbox

Bitte besuchen Sie diese Seite und melden Sie sich mit Ihrem GitHub-Konto an. Anschließend wird die folgende Seite angezeigt. Klicken Sie auf die Schaltfläche "Herunterladen", um die erforderlichen Dateien herunterzuladen. sandbox01.jpg

installieren

Wenn Sie die heruntergeladene Datei entpacken, werden die folgenden Dateien extrahiert.

$ unzip ~/Downloads/scalar-sandbox-client-{username}.zip
$ ls ~/Downloads/scalar-sandbox-client-{username}
client.properties {username}-key.pem {username}.pem

Eine kurze Beschreibung der Datei lautet wie folgt.

Als nächstes werden wir das Repository klonen.

$ git clone https://github.com/scalar-labs/scalardl-client-sdk.git
$ cd scalardl-client-sdk

Kopieren Sie nach dem Klonen des Repositorys die zuvor heruntergeladenen Dateien.

$ cp -r ~/Downloads/scalar-sandbox-client-{username}/* ./

Zertifikatsregistrierung

Registrieren Sie als Nächstes das zuvor kopierte Zertifikat, um dem Scalar DL-Netzwerk beizutreten.

$ client/bin/register-cert -properties client.properties

Vertragsregistrierung

Wir werden den Vertrag endgültig registrieren. Die Quelle des Vertrags befindet sich im geklonten Repository. Um ihn jedoch zu registrieren, müssen Sie ihn mit dem folgenden Befehl kompilieren.

$ ./gradlew assemble

Jetzt registrieren wir den Vertrag. Dieses Mal werden wir StateUpdater verwenden, um den Status zu aktualisieren, und StateReader, um den Status zu überprüfen.

$ 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

Die Ausführung ist einfach, aber die Optionen werden unten erklärt.

Vertragserfüllung

Sobald Sie hier angekommen sind, müssen Sie es nur noch ausführen. Verwenden Sie StateUpdater, um einen Wert für ein bestimmtes Asset festzulegen.

$ client/bin/execute-contract -properties client.properties -contract-id {username}-StateUpdater -contract-argument '{"asset_id": "{username}-myasset", "state": 3}'

status: 200

Das ist auch sehr einfach. Wenn status: 200 zurückgegeben wird, ist die Ausführung erfolgreich. Es gibt nur eine Option, die sich von der vorherigen unterscheidet.

Nachdem wir Updater aktiviert haben, überprüfen wir den Wert mit 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":""}

Es ist schwer zu sehen, deshalb formatiere ich die Ausgabe.

{
  "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": ""
}

Wenn Sie auf die Ausgabe achten, können Sie sehen, dass der zuvor eingestellte Wert "3" registriert ist? Und da dieses Asset die erste Registrierung ist, sind input und prev_hash leer.

Lassen Sie uns abschließend verschiedene Werte für dasselbe Asset festlegen.

$ client/bin/execute-contract -properties client.properties -contract-id {username}-StateUpdater -contract-argument '{"asset_id": "{username}-myasset", "state": 100}'

status: 200

Lassen Sie uns den Wert mit StateReader auf die gleiche Weise wie zuvor überprüfen.

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="
}

Der Statuswert der Ausgabe wurde aktualisiert, aber der Unterschied zum Rückgabewert des ersten StateReader besteht darin, dass Eingabe und prev_hash erkennbar sind. Die Eingabe enthält den Status des vorherigen Assets, und prev_hash enthält die Hash-ID des vorherigen Assets. Auf diese Weise werden Hash-Ketten gebildet.

Zusammenfassung

Es ist also einfach, aber ich habe versucht, einen Mustervertrag abzuschließen. Es ist einfach zu bedienen, dass der Vertrag in reinem Java geschrieben werden kann. Angesichts der Tatsache, dass Ethereum eine eigene Sprache hat, Solidity (wenn auch ähnlich wie JavaScript) und Hyperledger Fabric die Go-Sprache als Mainstream hat, ist es nicht einfach, sie einzuführen?

Derzeit kann Hyperledger Fabric zusätzlich zur Go-Sprache auch in Node.js und Java geschrieben werden. Daher möchte ich vergleichen, wie Code ab dem nächsten Mal geschrieben und bereitgestellt wird.

Recommended Posts

Ich habe das kürzlich besprochene verteilte Hauptbuch Scalar DLT (Smart Contract Execution) untersucht.
Ich habe versucht herauszufinden, wie man einen intelligenten Vertrag für das verteilte Hauptbuch Scalar DLT schreibt.
Ich habe versucht, die Asset-Management-Anwendung mit dem Emulator des verteilten Hauptbuchs Scalar DLT zu berühren