Utiliser les kits SDK Hyperledger Fabric pour développer des applications

Les kits SDK Hyperledger Fabric sont désormais en phase d'abandon. Toutefois, vous pouvez installer et utiliser les kits SDK Hyperledger Fabric pour développer des applications pour Oracle Blockchain Platform.

Les API REST fournies par Oracle Blockchain Platform ont été créées avec une flexibilité maximale à l'esprit. Vous pouvez appeler une transaction, appeler une requête ou afficher le statut d'une transaction. Reportez-vous à API REST pour Oracle Blockchain Platform.

Toutefois, cette flexibilité signifie que vous souhaiterez probablement encapsuler les adresses d'API existantes dans une application afin de fournir un contrôle au niveau de l'objet. Les applications peuvent contenir des opérations beaucoup plus détaillées.

Versions de SDK

Plusieurs versions des kits SDK Hyperledger Fabric sont disponibles. Utilisez la version du kit SDK correspondant à la version d'Hyperledger Fabric sur laquelle repose votre instance.

Installation du kit SDK Hyperledger Fabric pour Node.js

Vous trouverez des informations sur l'utilisation du kit SDK Fabric pour Node.js ici : documentation sur le kit SDK Hyperledger Fabric pour Node.js

Dans l'onglet Outils de développement, ouvrez le panneau Développement d'applications. Vous pouvez installer le kit SDK Hyperledger Fabric Node.js à l'aide du lien de cet onglet.

Installation du kit SDK Hyperledger Fabric pour Java

Vous trouverez des informations sur l'utilisation du kit SDK Fabric pour Java ici : documentation sur le kit SDK Hyperledger Fabric pour Java

Dans l'onglet Outils de développement, ouvrez le panneau Développement d'applications.

Installez un outil de construction tel qu'Apache Maven.

Structurer votre application

Structurez votre application Java comme dans l'exemple suivant :

/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

Structurez votre application Node.js comme dans l'exemple suivant :

/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

Exécuter l'application

Vous êtes maintenant prêt à exécuter et tester l'application. En plus des messages de statut renvoyés par votre application, vous pouvez consulter le registre dans la console Oracle Blockchain Platform pour connaître les modifications :

  1. Accédez à l'onglet Canaux de la console, puis localisez et cliquez sur le nom du canal exécutant le code chaîne.
  2. Dans le panneau Livre du canal, visualisez la synthèse du registre du code chaîne.

Mise à jour du kit SDK Go Hyperledger Fabric pour qu'il fonctionne avec Oracle Blockchain Platform

Vous devez mettre à jour la fonction NormalizeURL dans le kit SDK Go Hyperledger Fabric pour l'utiliser avec la version basée sur Kubernetes d'Oracle Blockchain Platform.

  1. Ouvrez le fichier client.go dans le kit SDK Go Hyperledger Fabric pour le modifier : vendor/github.com/hyperledger/fabric-sdk-go/internal/github.com/hyperledger/fabric-ca/lib/client.go
  2. Mettez à jour la fonction NormalizeURL comme indiqué dans le code suivant.
    Fonction NormalizeURL avant modification :
    // 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"
    	}
    .
    .
    .
    Fonction NormalizeURL après modification :
    // 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. Enregistrez le fichier client.go.

Mise à jour du kit SDK Java Hyperledger Fabric pour qu'il fonctionne avec Oracle Blockchain Platform

Une incompatibilité existe entre un composant d'infrastructure OCI et le kit SDK Java fourni avec Hyperledger Fabric v2.x. Vous devez mettre à jour le kit SDK pour l'utiliser avec Oracle Blockchain Platform.

Méthodes de mise à jour du kit SDK Hyperledger Fabric

Il existe deux façons de mettre à jour le kit SDK :

  • Téléchargez le package modifié depuis la console. Nous avons créé un fichier grpc-netty-shaded-1.38.0.jar mis à jour, qui est le module référencé par le kit SDK Java nécessitant des modifications.
  • Créez le package manuellement, comme décrit dans les étapes suivantes.

Pour télécharger le fichier grpc-netty-shaded-1.38.0.jar, cliquez sur l'onglet Outils de développement de la console, puis sélectionnez le panneau Développement d'applications.

Création manuelle du package

Pour le projet fabric-sdk-java, procédez comme suit pour reconstruire le package grpc-netty-shaded afin de connecter les homologues et les donneurs d'ordres au client grpcs (via TLS). Le package grpc-netty-shaded est un sous-projet de grpc-java.

  1. Installez les dépendances de projet :
    mvn install
  2. Téléchargez le code source grpc-java :

    git clone https://github.com/grpc/grpc-java.git
  3. Recherchez la version de grpc utilisée par votre projet fabric-sdk-java et extrayez le code.
    Dans le répertoire grpc-java, extrayez la version de grpc utilisée par le projet fabric-sdk-java :
    cd grpc-java && git checkout v1.38.0
  4. Modifiez le code pour éviter une erreur alpn côté serveur. Créez un fichier de patch grpc-java-patch avec le contenu suivant :
    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. Appliquez le patch:

    git apply grpc-java.patch
  6. Créez le projet pour générer le package cible auquel des patches ont été appliqués. Utilisez le gradle pour créer le projet grpc-java-shaded :

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

    Une fois le build terminé, le package .jar appliqué à la cible est disponible à l'adresse grpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.jar.

  7. Ajoutez le package patché dans votre référentiel local Maven.

    Remplacez le package grpc-netty-shaded .jar d'origine par le package auquel des patches ont été appliqués de l'une des deux manières suivantes :
    • Utilisez Maven pour installer le package par fichier local :
      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
      Vous devez conserver les cibles groupid, artifactid et version identiques au package à remplacer.
    • Remplacez manuellement votre colis. Accédez au référentiel Maven local, recherchez le répertoire dans lequel se trouve le package cible et remplacez le package par un package patché.

  8. Exécutez le projet.