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

Les applications utilisent un kit de développement logiciel (SDK) pour accéder aux API qui permettent des interrogations et des mises à jour du livre.Vous pouvez installer et utiliser les trousses 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 interrogation ou voir le statut d'une transaction. Voir API REST pour Oracle Blockchain Platform.

Toutefois, cela signifie que vous voudrez probablement encapsuler les points d'extrémité d'API existants 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 trousse SDK

Plusieurs versions des trousses SDK Hyperledger Fabric sont disponibles. Utilisez la version de la trousse SDK qui correspond à la version de Hyperledger Fabric sur laquelle repose votre instance.

Installation de la trousse SDK Hyperledger Fabric pour Node.js

Pour plus d'informations sur l'utilisation de la trousse SDK Fabric pour Node.js, consultez la documentation sur la trousse SDK Hyperledger Fabric pour Node.js

Dans l'onglet Outils pour développeurs, ouvrez le volet Développement d'applications.

Installation de la trousse SDK Hyperledger Fabric pour Java

Vous trouverez des informations sur l'utilisation de la trousse SDK Fabric pour Java ici : Documentation sur la trousse SDK Hyperledger Fabric pour Java

Dans l'onglet Outils pour développeurs, ouvrez le volet Développement d'applications.

Installez un outil de compilation tel qu'Apache Maven.

Structuration de votre application

Votre application Java doit être structurée de la façon 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
  /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. En plus des messages de statut retournés par votre application, vous pouvez vérifier le livre dans la console Oracle Blockchain Platform pour voir vos modifications :

  1. Allez à l'onglet Canaux dans la console et localisez et cliquez sur le nom du canal exécutant la chaîne de blocs.
  2. Dans le volet Livre du canal, consultez le sommaire du livre du code de chaîne.

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

Il existe une incompatibilité entre un composant d'infrastructure OCI et la trousse SDK Java fournie avec Hyperledger Fabric v2.x. Suivez les étapes de cette rubrique pour corriger ce problème.

Méthodes de mise à jour de la trousse SDK Hyperledger Fabric

Il existe deux façons de mettre à jour la trousse 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 la trousse SDK Java qui nécessite des modifications.
  • Créez l'ensemble 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 pour développeurs de la console, puis sélectionnez le volet Développement d'applications.

Création manuelle de l'ensemble

Pour le projet fabric-sdk-java, effectuez les étapes suivantes pour recréer l'ensemble grpc-netty-shaded afin de connecter les pairs et les responsables des commandes au client grpcs (au moyen de TLS). L'ensemble grpc-netty-shaded est un sous-projet de grpc-java.

  1. Installer 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 que votre fabric-sdk-java utilise et extrayez le code.
    Dans le répertoire grpc-java, extrayez la version de grpc que fabric-sdk-java utilise :
    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 correctif 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. Appliquer le correctif :

    git apply grpc-java.patch
  6. Créez le projet pour générer l'ensemble de correctifs cible. Utilisez le gradle pour créer le projet grpc-java-shaded :

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

    Une fois la compilation terminée, l'ensemble .jar corrigé cible est disponible à l'adresse grpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.jar.

  7. Ajoutez l'ensemble corrigé dans votre référentiel local Maven.

    Remplacez l'ensemble grpc-netty-shaded .jar initial par l'ensemble corrigé de l'une des deux façons suivantes :
    • Utilisez Maven pour installer l'ensemble 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 garder la cible groupid, artifactid et version identiques à l'ensemble que vous voulez remplacer.
    • Remplacez manuellement votre colis. Accédez au référentiel Maven local, recherchez le répertoire où se trouve le package cible et remplacez le package par le package patché.

  8. Exécutez le projet.

Mettre à jour les trousses SDK Hyperledger Fabric v1.4.7 pour qu'elles fonctionnent avec Oracle Blockchain Platform

Il existe une incompatibilité entre un composant d'infrastructure OCI et les trousses SDK Node.js et Java fournies avec Hyperledger Fabric v1.4.7. Suivez les étapes de cette rubrique pour corriger ce problème.

Méthodes de mise à jour des trousses SDK Hyperledger Fabric

Il existe deux façons de mettre à jour la trousse SDK :

  • Utilisation de scripts Oracle pour télécharger et installer la trousse SDK Node.js ou Java qui appliquera des correctifs au code lors de son installation.
  • Manuellement comme décrit dans cette rubrique.

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

  • Trousse SDK Java Fabric : Nous avons créé un fichier grpc-netty-1.23.0.jar mis à jour, qui est le module référencé par la trousse SDK Java qui nécessite des modifications.
  • Trousse 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 l'ensemble client Fabric Node.js. Le script exécute la même commande npm, mais il a également corrigé le composant nécessaire et le reconstruit.

Mise à jour manuelle de la trousse SDK Fabric Node.js

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

    • Mettez à jour node_modules/grpc/binding.gyp en modifiant :
      '_WIN32_WINNT=0x0600'
      jusqu'à
      '_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 supprimer <node_root_dir>/include/node/openssl/. Exécutez ce qui suit pour trouver votre <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 de la trousse SDK Java Fabric

Pour fabric-sdk-java, effectuez les étapes suivantes pour reconstruire l'ensemble grpc-netty afin de connecter les pairs et les responsables des commandes avec le client grpcs (via tls). grpc-netty est un sous-projet de grpc-java.

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

    git clone https://github.com/grpc/grpc-java.git
  3. Recherchez la version de grpc que votre fabric-sdk-java utilise et extrayez le code.

    Les différentes versions de fabric-sdk-java peuvent utiliser des versions différentes de grpc. Consultez pom.xml pour savoir quelle version de grpc votre fabric-sdk-java utilise. Par exemple, fabric-sdk-java 1.4.11 utilise grpc-java 1.23.0 comme indiqué dans 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 que fabric-sdk-java utilise :
    git checkout -b v1.23.0
  4. Modifiez le code pour éviter une erreur alpn du côté serveur.
    • Modifier 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())) {
      jusqu'à
      if (handler.applicationProtocol() == null || NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
      Le code se présente comme 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 l'ensemble de correctifs cible. Utilisez le gradle pour créer le projet grpc-java. Ou vous pouvez simplement reconstruire le sous-projet grpc-netty dans le répertoire grpc nety gradle build.

    Une fois la compilation terminée, vous pouvez obtenir l'ensemble JAR corrigé cible dans le répertoire grpc-java\netty\build\libs\grpc-netty-1.23.0.jar.

  6. Ajoutez l'ensemble corrigé dans votre référentiel local Maven.

    Remplacez le paquetage JAR officiel grpc-netty par le paquetage patché de l'une des deux façons suivantes :
    • Utilisez Maven pour installer l'ensemble 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 garder la cible groupid, artifactid et version identiques à l'ensemble que vous voulez remplacer.
    • Remplacez manuellement votre colis. Accédez au référentiel Maven local, recherchez le répertoire où se trouve le package cible et remplacez le package par le package patché.

  7. Exécutez le projet.