Anwendungen mit den Hyperledger Fabric-SDKs 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 wahrscheinlich die vorhandenen API-Endpunkte in einer Anwendung umschließen möchten, um die Kontrolle auf Objektebene bereitzustellen. Anwendungen können viel feiner granulierte Vorgänge enthalten.
SDK-Versionen
Es sind mehrere Versionen der Hyperledger Fabric-SDKs verfügbar. Verwenden Sie die Version des SDK, die mit der Version von Hyperledger Fabric übereinstimmt, auf der Ihre Instanz basiert.
Hyperledger Fabric-SDK für Node.js installieren
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 zu Hyperledger Fabric SDK für Java
- Sie können das Hyperledger Fabric Java SDK über den Link auf dieser Registerkarte installieren.
- (Hyperledger Fabric v2.x) Sie müssen das SDK für die Arbeit mit Oracle Blockchain Platform ändern. Befolgen Sie dazu die Anweisungen unter Update the Hyperledger Fabric Java SDK to Work with Oracle Blockchain Platform.
Installieren Sie ein Build-Tool wie Apache Maven.
Anwendungen strukturieren
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 filesStrukturieren Sie die Node.js-Anwendung ähnlich dem 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
Führen Sie die Anwendung aus
Jetzt können Sie die Anwendung ausführen und testen. Zusätzlich zu den von Ihrer Anwendung zurückgegebenen Statusmeldungen können Sie das Buch in der Oracle Blockchain Platform-Konsole prüfen, um Ihre Änderungen anzuzeigen:
- Gehen Sie in der Konsole zur Registerkarte Kanäle, suchen und klicken Sie dann auf den Namen des Kanals, auf dem der Chaincode ausgeführt wird.
- 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.
- Öffnen Sie die Datei
client.goim Hyperledger Fabric Go-SDK zur Bearbeitung:vendor/github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/lib/client.go - Aktualisieren Sie die Funktion
NormalizeURLwie im folgenden Code gezeigt.FunktionNormalizeURLvor 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" } . . .FunktionNormalizeURLnach 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 = "" } . . . - 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 zum Aktualisieren 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. Dies ist das vom Java-SDK referenzierte Modul, 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 dann den Bereich Anwendungsentwicklung aus.
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 Orderers mit dem grpcs-Client (über TLS) zu verbinden. Das Package grpc-netty-shaded ist ein Unterprojekt von grpc-java.
-
Installieren Sie die Projektabhängigkeiten:
mvn install -
Laden Sie den
grpc-java-Quellcode herunter:git clone https://github.com/grpc/grpc-java.git - Suchen Sie die
grpc-Version, die Ihrfabric-sdk-java-Projekt verwendet, und checken Sie den Code aus.Prüfen Sie im Verzeichnisgrpc-javadie Version vongrpc, die das Projektfabric-sdk-javaverwendet:cd grpc-java && git checkout v1.38.0 -
Ändern Sie den Code, um einen
alpn-Fehler von der Serverseite zu vermeiden. Erstellen Sie einegrpc-java-patch-Patchdatei mit dem folgenden 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); -
Spielen Sie den Patch ein:
git apply grpc-java.patch -
Erstellen Sie das Projekt, um das gepatchte Zielpackage zu generieren. Verwenden Sie gradle, um das Projekt
grpc-java-shadedzu erstellen:cd netty/shaded gradle build -PskipAndroid=true -PskipCodegen=trueNach Abschluss des Builds ist das gepatchte
.jar-Package des Ziels untergrpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.jarverfügbar. -
Fügen Sie das gepatchte Package in das lokale Maven-Repository ein.
Ersetzen Sie das ursprüngliche Packagegrpc-netty-shaded.jarauf eine der beiden folgenden Arten durch das gepatchte Package:-
Installieren Sie das Package mit Maven über die lokale Datei:
Sie müssen das Zielmvn 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=jargroupid,artifactidundversionmit dem zu ersetzenden Package identisch halten. -
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.
-
-
Führen Sie das Projekt aus.