使用 Hyperledger Fabric SDK 開發應用程式

應用程式使用軟體開發套件 (SDK) 來存取允許對分類帳進行查詢和更新的 API。您可以安裝並使用 Hyperledger Fabric SDK 來開發適用於 Oracle Blockchain Platform 的應用程式。

Oracle Blockchain Platform 所提供的 REST API 已建立最大彈性;您可以呼叫交易、呼叫查詢或檢視交易的狀態。請參閱 Oracle Blockchain Platform 的 REST API

不過,這表示您可能會想要包裝應用程式中現有的 API 端點,以提供物件層次控制。應用程式可以包含更多微點作業。

SDK 版本

有多個版本的 Hyperledger Fabric SDK 可供使用。使用符合您執行處理所依據之 Hyperledger Fabric 版本的 SDK 版本。

在 Node.js 安裝 Hyperledger Fabric SDK

如需如何使用 Fabric SDK for Node.js 的資訊,請參閱:Hyperledger Fabric SDK for Node.js 文件

開發人員工具頁籤中,開啟應用程式開發窗格。

安裝 Hyperledger Fabric SDK for Java

有關如何使用 Fabric SDK for Java 的資訊,請參閱:Hyperledger Fabric SDK for Java 文件

開發人員工具頁籤中,開啟應用程式開發窗格。

安裝組建工具,例如 Apache Maven。

建立應用程式結構

您的 Java 應用程式結構應與下列類似:

/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

您的 Node.js 應用程式結構應與下列類似:

/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

執行應用程式

您現在可以執行並測試應用程式。除了應用程式傳回的任何狀態訊息之外,您可以在 Oracle Blockchain Platform 主控台中查看分類帳,以查看您的變更:

  1. 移至主控台的「通道」頁籤,然後找出並按一下執行區塊鏈的通道名稱。
  2. 在管道的分類帳窗格中,檢視鏈碼的分類帳摘要。

更新 Hyperledger Fabric v2.x SDK 以與 Oracle Blockchain Platform 搭配運作

OCI 基礎架構元件與 Hyperledger Fabric v2.x 隨附的 Java SDK 之間不相容。請依照本主題中的步驟來更正此問題。

更新 Hyperledger Fabric SDK 的方法

更新 SDK 的方法有兩種:

  • 從主控台下載修改過的套裝軟體。我們已建立更新的 grpc-netty-shaded-1.38.0.jar 檔案,這是 Java SDK 所參考的模組,需要修改。
  • 手動建置套裝軟體,如本主題所述。

若要下載 grpc-netty-shaded-1.38.0.jar 檔案,請按一下主控台的開發人員工具頁籤,然後選取應用程式開發窗格。

手動建置套裝程式

對於 fabric-sdk-java 專案,請完成下列步驟以重新建立 grpc-netty-shaded 套裝軟體,以將對等和排序器與 grpcs 用戶端 (透過 TLS) 連線。grpc-netty-shaded 套裝軟體是 grpc-java 的子專案。

  1. 安裝專案相依項 :
    mvn install
  2. 下載 grpc-java 原始碼:

    git clone https://github.com/grpc/grpc-java.git
  3. 尋找您的 fabric-sdk-java 所使用的 grpc 版本,然後查看程式碼。
    grpc-java 目錄中,查看 fabric-sdk-java 使用的 grpc 版本:
    cd grpc-java && git checkout v1.38.0
  4. 變更程式碼以避免伺服器端發生 alpn 錯誤。建立含有下列內容的 grpc-java-patch 修補程式檔案:
    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. 套用修正程式:

    git apply grpc-java.patch
  6. 建置專案以產生目標修正的套裝程式。使用漸層建立 grpc-java-shaded 專案:

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

    組建完成後,目標修正的 .jar 套裝程式可從 grpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.jar 取得。

  7. 將已修正的套裝程式新增至您的 Maven 本機儲存區域。

    以下列兩種方式之一,將原始的 grpc-netty-shaded .jar 套裝軟體換成已修補的套裝軟體:
    • 使用 Maven 以本機檔案安裝套裝程式:
      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
      您必須將目標 groupidartifactidversion 與您要取代的套裝軟體保持相同。
    • 手動取代您的套裝軟體。移至本機 Maven 儲存區域,尋找目標套裝程式所在的目錄,然後以已修正的套裝程式取代套裝程式。

  8. 執行專案。

更新 Hyperledger Fabric v1.4.7 SDK 以搭配 Oracle Blockchain Platform 使用

OCI 基礎架構元件與 Hyperledger Fabric v1.4.7 隨附的 Node.js 和 Java SDK 之間不相容。請依照本主題中的步驟來更正此問題。

更新 Hyperledger Fabric SDK 的方法

更新 SDK 的方法有兩種:

  • 使用 Oracle 命令檔下載並安裝 Node.js SDK 或 Java SDK,這會在安裝程式碼時修正程式碼。
  • 手動,如本主題所述。

若要使用命令檔,請在主控台的開發人員工具頁籤上,選取應用程式開發窗格。下載 Node.js SDK 和 Java SDK 的連結都有內建的更新,會在安裝時修正程式碼。

  • Fabric Java SDK:我們建立了更新的 grpc-netty-1.23.0.jar 檔案,這是 Java SDK 所參考的模組,需要修改。
  • Fabric Node.js SDK:我們已建立 npm_bcs_client.sh 指令碼來取代使用者下載並安裝 Node.js Fabric 用戶端套件時所執行的標準 Fabric npm install 作業。此命令檔會執行相同的 npm 命令,但也會修正所需的元件並加以重建。

手動更新 Fabric Node.js SDK

執行下列動作以重建 grpc-node 模組,將同儕和排序器與 grpcs 用戶端 (透過 TLS) 連接。
  1. 在不執行 grpc 模組的組建命令檔的情況下安裝 fabric-client
    npm install --ignore-scripts fabric-client
  2. 在 Windows 上,您必須明確停用 ALPN

    • 變更以更新 node_modules/grpc/binding.gyp
      '_WIN32_WINNT=0x0600'
      to
      '_WIN32_WINNT=0x0600','TSI_OPENSSL_ALPN_SUPPORT=0'
    • 由於 https://github.com/nodejs/node/issues/4932 中所述的問題,若要在 Windows 上建置 grpc-node,您必須先移除 <node_root_dir>/include/node/openssl/。請執行下列動作以尋找您的 <node_root_dir>
      node-gyp configure
  3. 重建 grpc

    npm rebuild --unsafe-perm --build-from-source
您現在可以安裝任何其他您需要的模組並執行專案。

手動更新 Fabric Java SDK

若為 fabric-sdk-java,請執行下列步驟來重建 grpc-netty 套裝軟體,以 grpcs 用戶端 (透過 tls) 連接對等和訂購者。grpc-nettygrpc-java 的子專案。

  1. 安裝專案相依項 :
    mvn install
  2. 下載 grpc-java 原始程式碼:

    git clone https://github.com/grpc/grpc-java.git
  3. 尋找您的 fabric-sdk-java 所使用的 grpc 版本,然後取出程式碼。

    不同版本的 fabric-sdk-java 可能使用不同版本的 grpc。請查看 pom.xml 以瞭解您 fabric-sdk-java 所使用的 grpc 版本。例如,fabric-sdk-java 1.4.11 會使用 grpc-java 1.23.0,如 pom.xml 中所示:https://github.com/hyperledger/fabric-sdk-java/blob/v1.4.11/pom.xml

    grpc-java 目錄中,取出 fabric-sdk-java 所使用的 grpc 版本:
    git checkout -b v1.23.0
  4. 變更程式碼以避免伺服器端發生 alpn 錯誤。
    • 變更 grpc-java_root/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java 的目標代碼
    • 在函數 userEventTriggered0 中變更:
      if (NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
      to
      if (handler.applicationProtocol() == null || NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
      程式碼看起來類似於:
          @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. 建置專案以產生目標修正的套裝程式。使用漸層建立 grpc-java 專案。或者,您也可以在 grpc netty 目錄 gradle build 中重新建立 grpc-netty 子專案。

    組建完成後,您可以在 grpc-java\netty\build\libs\grpc-netty-1.23.0.jar 目錄中取得目標修正的 jar 套裝程式。

  6. 將已修正的套裝程式新增至您的 Maven 本機儲存區域。

    以下列其中一種方式,將官方 grpc-netty jar 套件取代為已修補的套件:
    • 使用 Maven 以本機檔案安裝套裝程式:
      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
      您必須將目標 groupidartifactidversion 與您要取代的套裝軟體保持相同。
    • 手動取代您的套裝軟體。移至本機 Maven 儲存區域,尋找目標套裝程式所在的目錄,然後以已修正的套裝程式取代套裝程式。

  7. 執行專案。