Uso de los SDK de Hyperledger Fabric para desarrollar aplicaciones

Las aplicaciones utilizan un kit de desarrollo de software (SDK) para acceder a las API que permiten consultas y actualizaciones en el libro mayor.Puede instalar y utilizar los SDK de Hyperledger Fabric para desarrollar aplicaciones para Oracle Blockchain Platform.

Las API de REST proporcionadas por Oracle Blockchain Platform se han creado teniendo en cuenta la máxima flexibilidad; puede llamar a una transacción, llamar a una consulta o ver el estado de una transacción. Consulte API de REST para Oracle Blockchain Platform.

Sin embargo, esto significa que es probable que desee ajustar los puntos finales de API existentes en una aplicación para proporcionar control a nivel de objeto. Las aplicaciones pueden contener operaciones mucho más detalladas.

Versiones de SDK

Hay disponibles varias versiones de los SDK de Hyperledger Fabric. Utilice la versión del SDK que coincida con la versión de Hyperledger Fabric en la que se basa su instancia.

Instalación del SDK de Hyperledger Fabric para Node.js

Puede encontrar información sobre cómo utilizar el SDK de Fabric para Node.js aquí: Documentación del SDK de Hyperledger Fabric para Node.js

En el separador Herramientas de desarrollador, abra el panel Desarrollo de aplicaciones.

Instalación del SDK de Hyperledger Fabric para Java

Puede encontrar información sobre cómo utilizar el SDK de Fabric para Java aquí: Documentación de SDK de Hyperledger Fabric para Java

En el separador Herramientas de desarrollador, abra el panel Desarrollo de aplicaciones.

Instale una herramienta de creación como Apache Maven.

Estructura de la aplicación

La aplicación Java debe estar estructurada de forma similar a la siguiente:

/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

La aplicación Node.js debe estar estructurada de forma similar a la siguiente:

/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

Ejecución de la aplicación

Ya está listo para ejecutar y probar la aplicación. Además de los mensajes de estado devueltos por la aplicación, puede comprobar el libro mayor en la consola de Oracle Blockchain Platform para ver los cambios:

  1. Vaya al separador Channels de la consola, localice y haga clic en el nombre del canal que ejecuta la cadena de bloques.
  2. En el panel Libro mayor del canal, consulte el resumen del libro mayor del código de cadenas.

Actualización de los SDK de Hyperledger Fabric v2.x para trabajar con Oracle Blockchain Platform

Hay una incompatibilidad entre un componente de infraestructura de OCI y el SDK de Java proporcionado con Hyperledger Fabric v2.x. Siga los pasos de este tema para corregir este problema.

Métodos de actualización del SDK de Hyperledger Fabric

Hay dos formas de actualizar el SDK:

  • Descargue el paquete modificado desde la consola. Hemos creado un archivo grpc-netty-shaded-1.38.0.jar actualizado, que es el módulo al que hace referencia el SDK de Java que necesita modificaciones.
  • Cree el paquete manualmente, como se describe en este tema.

Para descargar el archivo grpc-netty-shaded-1.38.0.jar, haga clic en el separador Herramientas de desarrollador de la consola y, a continuación, seleccione el panel Desarrollo de aplicaciones.

Creación manual del paquete

Para el proyecto fabric-sdk-java, realice los siguientes pasos para reconstruir el paquete grpc-netty-shaded para conectar los peers y los solicitantes con el cliente grpcs (mediante TLS). El paquete grpc-netty-shaded es un subproyecto de grpc-java.

  1. Instalar dependencias de proyecto:
    mvn install
  2. Descargue el código fuente grpc-java:

    git clone https://github.com/grpc/grpc-java.git
  3. Busque la versión grpc que utiliza fabric-sdk-java y desproteja el código.
    En el directorio grpc-java, desproteja la versión de grpc que utiliza fabric-sdk-java:
    cd grpc-java && git checkout v1.38.0
  4. Cambie el código para evitar un error alpn del servidor. Cree un archivo de parche grpc-java-patch con el siguiente contenido:
    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. Aplique el parche:

    git apply grpc-java.patch
  6. Cree el proyecto para generar el paquete con parches de destino. Utilice gradle para crear el proyecto grpc-java-shaded:

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

    Una vez finalizada la creación, el paquete .jar con parches de destino está disponible en grpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.jar.

  7. Agregue el paquete con parches al repositorio local de Maven.

    Sustituya el paquete grpc-netty-shaded .jar original por el paquete con parches de una de las dos maneras siguientes:
    • Utilice Maven para instalar el paquete por archivo 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
      Debe mantener el destino groupid, artifactid y version igual que el paquete que desea sustituir.
    • Sustituya manualmente el paquete. Vaya al repositorio de Maven local, busque el directorio donde se encuentra el paquete de destino y sustituya el paquete por el paquete con parches.

  8. Ejecute el proyecto.

Actualización de los SDK de Hyperledger Fabric v1.4.7 para trabajar con Oracle Blockchain Platform

Hay una incompatibilidad entre un componente de infraestructura de OCI y los SDK Node.js y Java proporcionados con Hyperledger Fabric v1.4.7. Siga los pasos de este tema para corregir este problema.

Métodos de actualización de los SDK de Hyperledger Fabric

Hay dos formas de actualizar el SDK:

  • Uso de scripts de Oracle para descargar e instalar el SDK de Node.js o el SDK de Java, que aplicará parches al código mientras se instala.
  • Manualmente como se describe en este tema.

Para utilizar los scripts, en el separador Herramientas de desarrollador de la consola, seleccione el panel Desarrollo de aplicaciones. Los enlaces para descargar el SDK de Node.js y el SDK de Java tienen actualizaciones incorporadas que aplicarán parches al código mientras se instala.

  • SDK de Fabric Java: hemos creado un archivo grpc-netty-1.23.0.jar actualizado, que es el módulo al que hace referencia el SDK de Java que requiere modificaciones.
  • SDK de Fabric Node.js: hemos creado la secuencia de comandos npm_bcs_client.sh para sustituir las operaciones estándar de Fabric npm install que los usuarios realizarían para descargar e instalar el paquete de cliente de Fabric Node.js. La secuencia de comandos ejecuta el mismo comando npm, pero también aplica un parche al componente necesario y lo reconstruye.

Actualización manual del SDK de Fabric Node.js

Realice lo siguiente para reconstruir el módulo grpc-node para conectar los iguales y los encargados con el cliente grpcs (mediante TLS).
  1. Instale fabric-client sin ejecutar el script de compilación del módulo grpc:
    npm install --ignore-scripts fabric-client
  2. En Windows, debe desactivar ALPN explícitamente.

    • Actualice node_modules/grpc/binding.gyp cambiando:
      '_WIN32_WINNT=0x0600'
      to
      '_WIN32_WINNT=0x0600','TSI_OPENSSL_ALPN_SUPPORT=0'
    • Debido al problema descrito en https://github.com/nodejs/node/issues/4932, para crear grpc-node en Windows, primero debe eliminar <node_root_dir>/include/node/openssl/. Ejecute lo siguiente para buscar <node_root_dir>:
      node-gyp configure
  3. Reconstruir grpc

    npm rebuild --unsafe-perm --build-from-source
Ahora puede instalar cualquier otro módulo que necesite y ejecutar el proyecto.

Actualización manual del SDK de Java de Fabric

Para fabric-sdk-java, realice los siguientes pasos para reconstruir el paquete grpc-netty para conectar los iguales y los solicitantes con el cliente grpcs (mediante tls). grpc-netty es un subproyecto de grpc-java.

  1. Instalar dependencias de proyecto:
    mvn install
  2. Descarga el código fuente grpc-java:

    git clone https://github.com/grpc/grpc-java.git
  3. Busque la versión grpc que utiliza fabric-sdk-java y desproteja el código.

    Las diferentes versiones de fabric-sdk-java pueden utilizar una versión diferente de grpc. Compruebe pom.xml para averiguar qué versión de grpc utiliza fabric-sdk-java. Por ejemplo, fabric-sdk-java 1.4.11 utiliza grpc-java 1.23.0 como se encuentra en su pom.xml: https://github.com/hyperledger/fabric-sdk-java/blob/v1.4.11/pom.xml.

    En el directorio grpc-java, desproteja la versión de grpc que utiliza fabric-sdk-java:
    git checkout -b v1.23.0
  4. Cambie el código para evitar un error alpn del servidor.
    • Cambie el código de destino de grpc-java_root/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
    • En la función userEventTriggered0, cambie:
      if (NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
      to
      if (handler.applicationProtocol() == null || NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
      El código tendrá un aspecto parecido a:
          @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. Cree el proyecto para generar el paquete con parches de destino. Utilice gradle para crear el proyecto grpc-java. También puede volver a crear el subproyecto grpc-netty en el directorio de red de grpc gradle build.

    Una vez terminada la creación, puede obtener el paquete jar con parches de destino en el directorio grpc-java\netty\build\libs\grpc-netty-1.23.0.jar.

  6. Agregue el paquete con parches al repositorio local de Maven.

    Sustituya el paquete jar grpc-netty oficial por el paquete con parches de una de las dos formas siguientes:
    • Utilice Maven para instalar el paquete por archivo 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
      Debe mantener el destino groupid, artifactid y version igual que el paquete que desea sustituir.
    • Sustituya manualmente el paquete. Vaya al repositorio de Maven local, busque el directorio donde se encuentra el paquete de destino y sustituya el paquete por el paquete con parches.

  7. Ejecute el proyecto.