Utiliser les SDK Hyperledger Fabric pour développer des applications

Les applications utilisent un kit SDK pour accéder aux API qui permettent les requêtes et les mises à jour du registre.Vous pouvez installer et utiliser les SDK Hyperledger Fabric afin de 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 visualiser le statut d'une transaction. Reportez-vous à API REST pour Oracle Blockchain Platform.

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

Versions de kit SDK

Plusieurs versions des SDK Hyperledger Fabric sont disponibles. Utilisez la version du SDK qui correspond à la version d'Hyperledger Fabric sur laquelle votre instance est basée.

Installation du SDK Hyperledger Fabric pour Node.js

Des informations sur l'utilisation du kit SDK Fabric pour Node.js sont disponibles ici : Hyperledger Fabric SDK for Node.js documentation

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

Installation du SDK Hyperledger Fabric pour Java

Des informations sur l'utilisation du SDK Fabric pour Java sont disponibles ici : Documentation du 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.

Structure de votre application

Votre application Java doit être structurée comme suit :

/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

Votre application Node.js doit être structurée de la manière suivante :

/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écution de l'application

Vous êtes maintenant prêt à exécuter et tester l'application. Outre les messages de statut renvoyés par votre application, vous pouvez vérifier le registre dans la console Oracle Blockchain Platform pour voir vos modifications :

  1. Accédez à l'onglet Channels (Canaux) de la console et localisez et cliquez sur le nom du canal exécutant la chaîne de blocs.
  2. Dans le panneau Livre du canal, consultez le récapitulatif du registre du code chaîne.

Mettez à jour les kits SDK Hyperledger Fabric v2.x pour qu'ils fonctionnent avec Oracle Blockchain Platform

Il existe une incompatibilité entre un composant d'infrastructure OCI et le kit SDK Java fourni avec Hyperledger Fabric v2.x. Pour corriger ce problème, procédez comme suit dans cette rubrique.

Méthodes de mise à jour du SDK Hyperledger Fabric

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

  • Téléchargez le package modifié à partir de 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 cette rubrique.

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.

Conception manuelle du package

Pour le projet fabric-sdk-java, procédez comme suit pour recréer 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. Installer les dépendances du 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 grpc utilisée par fabric-sdk-java et extrayez le code.
    Dans le répertoire grpc-java, extrayez la version de grpc utilisée par fabric-sdk-java :
    cd grpc-java && git checkout v1.38.0
  4. Modifiez le code pour éviter une erreur alpn du 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 gradle pour créer le projet grpc-java-shaded :

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

    Une fois la compilation terminée, le package .jar auquel le patch a été appliqué est disponible à l'adresse grpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.jar.

  7. Ajoutez le package auquel des patches ont été appliqués dans le 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 la cible groupid, artifactid et version identiques au package à remplacer.
    • Remplacez manuellement votre package. Accédez au référentiel Maven local, recherchez le répertoire dans lequel se trouve le package cible et remplacez le package par le package auquel des patches ont été appliqués.

  8. Exécutez le projet.

Mettez à jour les kits SDK Hyperledger Fabric v1.4.7 pour qu'ils fonctionnent avec Oracle Blockchain Platform

Il existe une incompatibilité entre un composant d'infrastructure OCI et les kits SDK Node.js et Java fournis avec Hyperledger Fabric v1.4.7. Pour corriger ce problème, procédez comme suit dans cette rubrique.

Méthodes de mise à jour des SDK Hyperledger Fabric

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

  • Utilisation de scripts Oracle pour télécharger et installer le kit SDK Node.js ou le kit SDK Java qui appliquera des patches au code lors de l'installation.
  • Manuellement, comme décrit dans cette rubrique.

Pour utiliser les scripts, dans l'onglet Outils de développement de la console, sélectionnez le panneau Développement d'applications. Les liens permettant de télécharger à la fois le kit SDK Node.js et le kit SDK Java comportent des mises à jour intégrées qui appliqueront des patches au code lors de son installation.

  • Kit SDK Java Fabric : nous avons créé un fichier grpc-netty-1.23.0.jar mis à jour, qui est le module référencé par le kit SDK Java qui nécessite des modifications.
  • SDK Fabric Node.js : nous avons créé le script npm_bcs_client.sh pour remplacer les opérations Fabric npm install standard que les utilisateurs effectueraient pour télécharger et installer le package client Fabric Node.js. Le script exécute la même commande npm, mais il a également appliqué les patches au composant requis et le reconstruit.

Mise à jour manuelle du kit SDK Fabric Node.js

Effectuez les opérations suivantes pour reconstruire le module grpc-node afin de connecter les homologues et les donneurs d'ordres avec le client grpcs (via TLS).
  1. Installez fabric-client sans exécuter le script de build du module grpc :
    npm install --ignore-scripts fabric-client
  2. Sous Windows, vous devez désactiver explicitement ALPN

    • Mettez à jour node_modules/grpc/binding.gyp en modifiant :
      '_WIN32_WINNT=0x0600'
      to
      '_WIN32_WINNT=0x0600','TSI_OPENSSL_ALPN_SUPPORT=0'
    • En raison du problème décrit dans https://github.com/nodejs/node/issues/4932, pour créer grpc-node sous Windows, vous devez d'abord enlever <node_root_dir>/include/node/openssl/. Exécutez la commande suivante pour rechercher <node_root_dir> :
      node-gyp configure
  3. Recréer grpc

    npm rebuild --unsafe-perm --build-from-source
Vous pouvez maintenant installer les autres modules dont vous avez besoin et exécuter le projet.

Mise à jour manuelle du kit SDK Java Fabric

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

  1. Installer les dépendances du 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 grpc utilisée par votre instance fabric-sdk-java et extrayez le code.

    Différentes versions de fabric-sdk-java peuvent utiliser une version différente de grpc. Consultez pom.xml pour connaître la version de grpc utilisée par fabric-sdk-java. Par exemple, fabric-sdk-java 1.4.11 utilise grpc-java 1.23.0 comme indiqué dans son fichier pom.xml : https://github.com/hyperledger/fabric-sdk-java/blob/v1.4.11/pom.xml.

    Dans le répertoire grpc-java, extrayez la version de grpc utilisée par fabric-sdk-java :
    git checkout -b v1.23.0
  4. Modifiez le code pour éviter une erreur alpn du côté serveur.
    • Modifiez le code cible de grpc-java_root/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java.
    • Dans la fonction userEventTriggered0, modifiez :
      if (NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
      to
      if (handler.applicationProtocol() == null || NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
      Le code ressemblera à ce qui suit :
          @Override
          protected void userEventTriggered0(ChannelHandlerContext ctx, Object evt) throws Exception {
            ...
                if (handler.applicationProtocol() == null || NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
                  // Successfully negotiated the protocol.
                  logSslEngineDetails(Level.FINER, ctx, "TLS negotiation succeeded.", null);
            ...
          }
  5. Créez le projet pour générer le package cible auquel des patches ont été appliqués. Utilisez gradle pour créer le projet grpc-java. Ou vous pouvez simplement reconstruire le sous-projet grpc-netty dans le répertoire netty grpc gradle build.

    Une fois la compilation terminée, vous pouvez obtenir le package JAR auquel des patches ont été appliqués à la cible dans le répertoire grpc-java\netty\build\libs\grpc-netty-1.23.0.jar.

  6. Ajoutez le package auquel des patches ont été appliqués dans le référentiel local Maven.

    Remplacez le package jar officiel grpc-netty par le package auquel le patch a été appliqué de l'une des deux manières suivantes :
    • Utilisez Maven pour installer le package par fichier local :
      mvn install:install-file -Dfile=local_patched_grpc_netty_package_root/grpc-netty-1.23.0.jar -DgroupId=io.grpc -DartifactId=grpc-netty -Dversion=1.23.0 -Dpackaging=jar
      Vous devez conserver la cible groupid, artifactid et version identiques au package à remplacer.
    • Remplacez manuellement votre package. Accédez au référentiel Maven local, recherchez le répertoire dans lequel se trouve le package cible et remplacez le package par le package auquel des patches ont été appliqués.

  7. Exécutez le projet.