Fabric Chaincode in Javascript programmieren

Gemeinsam Positives bewirken

Fabric Chaincode in Javascript programmieren

Mit dem Erscheinen von Fabric 1.1 kann man nun Chaincode in Javascript schreiben. Lass uns mal schauen, wie das geht.

  1. Setup
  2. Chaincode programmieren
  3. Chaincode deployen
  4. Chaincode ausführen
  5. Chaincode aktualisieren

Voraussetzungen

  • cURL
  • Docker & Docker Compose
  • git

Setup

Richte dir ein Fabric Netzwerk ein, bspw. unsere minimale Fabric Entwicklungsumgebung.

Chaincode programmieren

Fabric chaincode besteht immer mindestens aus den folgenden beiden Methoden:

  • Init(): Wird aufgerufen, wenn der Chaincode im Blockchain netzwerk instantiert wird
  • Invoke(): Invoke behandelt alle Zugriffe auf deine Applikation

Version 0.0.1 – Grundlegendes Beispiel

Diese Klasse enthält die Basismethoden init und invoke sowie einfache Methoden um die Daten zu initalizieren und abzufragen. Hier den Quellcode herunterladen.

let Example = class {

async Init(stub) {
.....
}

async Invoke(stub) {
....
}

async initLedger(stub, args) {
.....
}

async queryAll(stub, args) {
.....
}
};

shim.start(new Example());

Chaincode deployen

Wenn Du unsere minimale Entwicklungsumgebung nutzt, dann führst Du die Befehle direkt auf dem einen Knoten aus. Wenn Du mehrere Knoten nutzt, führe die Befehle bitte im cli-container aus, damit es auf allen Knoten entsprechend funktioniert. (Hier kannst Du den Quellcode herunterladen)

1. Installation deines Chaincodes im Netzwerk

docker exec peer0.org1.fabric.basic.network.com peer chaincode install -n example -v 0.0.1 -l node -p /chaincode/node/examples/0.0.1

Erwartete Ausgabe:

DEBU 00d Installed remotely response:<status:200 payload:"OK" >

2. Instanzieren deines Chaincodes

docker exec peer0.org1.fabric.basic.network.com peer chaincode instantiate -l node -n example -v 0.0.1 -C fabricchannel -c '{"Args":["init"]}'

«Instantiate» generiert eine Laufzeitumgebung in Form eines Docker Containers. Folgendes sollte im Log dieses Laufzeitcontainer stehen:

=========== Instantiated example chaincode ===========

Chaincode ausführen

Beispiel: Daten initalisieren

docker exec peer0.org1.fabric.basic.network.com peer chaincode invoke -C fabricchannel -n example -c '{"function":"initLedger","Args":[""]}'

Erwartete Ausgabe im Terminal:

Chaincode invoke successful. result: status:200

Erwartete Ausgabe im Laufzeitcontainer (schau in den Logs nach oder nutze bspw. Kitemagic):

============= START : Initialize Ledger ===========
Added <-->  { name: 'Example 0', value: '101', docType: 'example' }
Added <-->  { name: 'Example 1', value: '202', docType: 'example' }
Added <-->  { name: 'Example 2', value: '303', docType: 'example' }
============= END : Initialize Ledger ===========

Beispiel: Daten abfragen

docker exec peer0.org1.fabric.basic.network.com peer chaincode query -C fabricchannel -n example -c '{"function":"queryAll","Args":[""]}'

Erwartete Ausgabe im Laufzeitcontainer (schau in den Logs nach):

[ { Key: 'EXAMPLE0',
    Record: { name: 'Example 0', value: '101', docType: 'example' } },
  { Key: 'EXAMPLE1',
    Record: { name: 'Example 1', value: '202', docType: 'example' } },
  { Key: 'EXAMPLE2',
    Record: { name: 'Example 2', value: '303', docType: 'example' } } ]

Chaincode aktualisieren

Version 0.0.2 – Erweitertes Beispiel

Wir erweitern unser Beispiel um eine Methode um einzelne Datensätze abzufragen. Hier den Quelltext herunterladen.

async queryExample(stub, args) {
....
}

Chaincode aktualisieren

1.Installieren den neuen Version

docker exec peer0.org1.fabric.basic.network.com peer chaincode install -n example -v 0.0.2 -l node -p /chaincode/node/examples/0.0.2

2. Aktualisieren auf die neue Version

docker exec peer0.org1.fabric.basic.network.com peer chaincode upgrade -n example -v 0.0.2 -C fabricchannel -l node -c '{"Args":[""]}'

Aktualisiereten Chaincode ausführen

docker exec peer0.org1.fabric.basic.network.com peer chaincode query -C fabricchannel -n example -c '{"function":"queryExample","Args":["EXAMPLE1"]}'

Erwartete Ausgabe im Laufzeitcontainer (schau in den Logs nach):

{ fcn: 'queryExample', params: [ 'EXAMPLE1' ] }
Example {}
queryExample
{"name":"Example 1","value":"202","docType":"example"}

Dieses Beispiel basiert auf den Hyperledger fabric-samples

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert