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.
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).
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.
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
Beantragen Sie als Nächstes Sandbox auf der folgenden Seite.
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.
Wenn Sie die heruntergeladene Datei entpacken, werden die folgenden Dateien extrahiert.
{Benutzername}
ist der GitHub-Benutzername.$ 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}/* ./
Registrieren Sie als Nächstes das zuvor kopierte Zertifikat, um dem Scalar DL-Netzwerk beizutreten.
$ client/bin/register-cert -properties client.properties
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.
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.
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