Verwenden Sie die Hyperledger Fabric-SDKs, um Anwendungen zu entwickeln

Die Hyperledger Fabric-SDKs sind jetzt veraltet. Sie können jedoch die Hyperledger Fabric-SDKs installieren und verwenden, um Anwendungen für Oracle Blockchain Platform zu entwickeln.

Die von Oracle Blockchain Platform bereitgestellten REST-APIs wurden unter Berücksichtigung maximaler Flexibilität erstellt. Sie können eine Transaktion aufrufen, eine Abfrage aufrufen oder den Status einer Transaktion anzeigen. Siehe REST-API für Oracle Blockchain Platform.

Diese Flexibilität bedeutet jedoch, dass Sie die vorhandenen API-Endpunkte wahrscheinlich in eine Anwendung wrappen möchten, um die Kontrolle auf Objektebene bereitzustellen. Anwendungen können wesentlich fein granuliertere Vorgänge enthalten.

SDK-Versionen

Mehrere Versionen der Hyperledger Fabric-SDKs sind verfügbar. Verwenden Sie die Version des SDK, die der Version von Hyperledger Fabric entspricht, auf der Ihre Instanz basiert.

Installieren des Hyperledger Fabric SDK für Node.js

Informationen zur Verwendung des Fabric-SDK für Node.js finden Sie hier: Dokumentation zum Hyperledger Fabric SDK für Node.js

Öffnen Sie auf der Registerkarte Entwicklungstools den Bereich Anwendungsentwicklung. Sie können das Hyperledger Fabric Node.js-SDK über den Link auf dieser Registerkarte installieren.

Hyperledger Fabric-SDK für Java installieren

Informationen zur Verwendung des Fabric-SDK für Java finden Sie hier: Dokumentation zum Hyperledger Fabric SDK für Java

Öffnen Sie auf der Registerkarte Entwicklungstools den Bereich Anwendungsentwicklung.

Build-Tool wie Apache Maven installieren

Strukturierung Ihrer Bewerbung

Strukturieren Sie die Java-Anwendung wie im folgenden Beispiel:

/Application
  /artifacts
    /cypto
      /orderer
        Contains the certificates required for the application to act on the orderer node
        In participant instances only contains TLS certificates
      /peer
        Contains the certificates required for the application to act on the peer node
    /src
      chaincode.go if installing and deploying chaincode to the blockchain
  /java
    pom.xml or other build configuration files
    /resources
      Any resources used by the Java code, including artifacts such as the endorsement policy yaml file and blockchain configuration properties
    /src
      Java source files

Strukturieren Sie die Anwendung Node.js wie im folgenden Beispiel:

/Application
  /artifacts
    /cypto
      /orderer
        Contains the certificates required for the application to act on the orderer node
        In participant instances only contains TLS certificates
      /peer
        Contains the certificates required for the application to act on the peer node
    /src
      chaincode.go if installing and deploying chaincode to the blockchain
  /node
    package.json file
    application.js
    /app
      Any javascript files called by the application
      /tools

Anwendung ausführen

Jetzt können Sie die Anwendung ausführen und testen. Zusätzlich zu allen Statusmeldungen, die von Ihrer Anwendung zurückgegeben werden, können Sie das Ledger in der Oracle Blockchain Platform-Konsole prüfen, um Ihre Änderungen anzuzeigen:

  1. Gehen Sie zur Registerkarte Kanäle in der Konsole, suchen und klicken Sie auf den Namen des Kanals, auf dem der Chaincode ausgeführt wird.
  2. Zeigen Sie im Bereich Buch des Kanals die Buchübersicht des Chaincodes an.

Aktualisieren Sie das Hyperledger Fabric Go-SDK für die Arbeit mit Oracle Blockchain Platform

Sie müssen die Funktion NormalizeURL im Hyperledger Fabric Go-SDK aktualisieren, um sie mit der Kubernetes-basierten Version von Oracle Blockchain Platform zu verwenden.

  1. Öffnen Sie die Datei client.go im Hyperledger Fabric Go-SDK zur Bearbeitung: vendor/github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/lib/client.go
  2. Aktualisieren Sie die Funktion NormalizeURL wie im folgenden Code gezeigt.
    Funktion NormalizeURL vor der Bearbeitung:
    // NormalizeURL normalizes a URL (from cfssl)
    func NormalizeURL(addr string) (*url.URL, error) {
    	addr = strings.TrimSpace(addr)
    	u, err := url.Parse(addr)
    	if err != nil {
    		return nil, err
    	}
    	if u.Opaque != "" {
    		u.Host = net.JoinHostPort(u.Scheme, u.Opaque)
    		u.Opaque = ""
    	} else if u.Path != "" && !strings.Contains(u.Path, ":") {
    		u.Host = net.JoinHostPort(u.Path, "")
    		u.Path = ""
    	} else if u.Scheme == "" {
    		u.Host = u.Path
    		u.Path = ""
    	}
    	if u.Scheme != "https" {
    		u.Scheme = "http"
    	}
    .
    .
    .
    Funktion NormalizeURL nach der Bearbeitung:
    // NormalizeURL normalizes a URL (from cfssl)
    func NormalizeURL(addr string) (*url.URL, error) {
    	addr = strings.TrimSpace(addr)
    	u, err := url.Parse(addr)
    	if err != nil {
    		return nil, err
    	}
    	if u.Opaque != "" {
    		u.Host = net.JoinHostPort(u.Scheme, u.Opaque)
    		u.Opaque = ""
    	} else if u.Host != "" && !strings.Contains(u.Host, ":") {
    		u.Host = net.JoinHostPort(u.Host, "")
    		u.Path = ""
    	} else if u.Scheme == "" {
    		u.Host = u.Path
    		u.Path = ""
    	}
    .
    .
    .
  3. Speichern Sie die Datei client.go.

Aktualisieren Sie das Hyperledger Fabric-Java-SDK für die Arbeit mit Oracle Blockchain Platform

Es besteht eine Inkompatibilität zwischen einer OCI-Infrastrukturkomponente und dem Java-SDK, das mit Hyperledger Fabric v2.x bereitgestellt wird. Sie müssen das SDK aktualisieren, um es mit Oracle Blockchain Platform zu verwenden.

Methoden zur Aktualisierung des Hyperledger Fabric SDK

Es gibt zwei Möglichkeiten, das SDK zu aktualisieren:

  • Laden Sie das geänderte Paket von der Konsole herunter. Wir haben eine aktualisierte grpc-netty-shaded-1.38.0.jar-Datei erstellt, die das vom Java-SDK referenzierte Modul ist, das Änderungen erfordert.
  • Erstellen Sie das Package manuell, wie in den folgenden Schritten beschrieben.

Um die Datei grpc-netty-shaded-1.38.0.jar herunterzuladen, klicken Sie auf die Registerkarte Entwicklungstools der Konsole, und wählen Sie den Bereich Anwendungsentwicklung aus.

Das Paket manuell erstellen

Führen Sie für das Projekt fabric-sdk-java die folgenden Schritte aus, um das Package grpc-netty-shaded neu zu erstellen und die Peers und Orderer mit dem Client grpcs (über TLS) zu verbinden. Das Package grpc-netty-shaded ist ein Teilprojekt von grpc-java.

  1. Projektabhängigkeiten installieren:
    mvn install
  2. Laden Sie den Quelltext von grpc-java herunter:

    git clone https://github.com/grpc/grpc-java.git
  3. Suchen Sie die grpc-Version, die Ihr fabric-sdk-java-Projekt verwendet, und checken Sie den Code aus.
    Prüfen Sie im Verzeichnis grpc-java die Version von grpc, die das Projekt fabric-sdk-java verwendet:
    cd grpc-java && git checkout v1.38.0
  4. Ändern Sie den Code, um einen alpn-Fehler auf Serverseite zu vermeiden. Erstellen Sie eine grpc-java-patch-Patchdatei mit folgendem Inhalt:
    diff --git a/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java b/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
    index 19d3e01b7..ebc4786a3 100644
    — a/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
    +++ b/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
    @@ -611,7 +611,8 @@ final class ProtocolNegotiators {
    SslHandshakeCompletionEvent handshakeEvent = (SslHandshakeCompletionEvent) evt;
    if (handshakeEvent.isSuccess()) {
    SslHandler handler = ctx.pipeline().get(SslHandler.class);
    
        if (sslContext.applicationProtocolNegotiator().protocols()
        + if (handler.applicationProtocol() == null
        + || sslContext.applicationProtocolNegotiator().protocols()
        .contains(handler.applicationProtocol())) {
        // Successfully negotiated the protocol.
        logSslEngineDetails(Level.FINER, ctx, "TLS negotiation succeeded.", null);
  5. Spielen Sie den Patch ein:

    git apply grpc-java.patch
  6. Erstellen Sie das Projekt, um das gepatchte Zielpackage zu generieren. Verwenden Sie gradle, um das Projekt grpc-java-shaded zu erstellen:

    cd netty/shaded
    gradle build -PskipAndroid=true -PskipCodegen=true

    Nach Abschluss des Builds ist das gepatchte .jar-Zielpackage unter grpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.jar verfügbar.

  7. Fügen Sie das gepatchte Package in das lokale Maven-Repository ein.

    Ersetzen Sie das ursprüngliche grpc-netty-shaded .jar-Package auf eine der folgenden zwei Arten durch das gepatchte Package:
    • Verwenden Sie Maven, um das Package per lokaler Datei zu installieren:
      mvn install:install-file -Dfile=grpc-netty-shaded-build/grpc-netty-shaded-1.38.0.jar -DgroupId=io.grpc -DartifactId=grpc-netty-shaded -Dversion=1.38.0 -Dpackaging=jar
      Sie müssen die Ziele groupid, artifactid und version mit dem Package identisch halten, das Sie ersetzen möchten.
    • Ersetzen Sie Ihr Paket manuell. Gehen Sie zum lokalen Maven-Repository, suchen Sie das Verzeichnis, in dem sich das Zielpackage befindet, und ersetzen Sie das Package durch ein gepatchtes Package.

  8. Projekt ausführen.