使用 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 Node.js SDK。
- (Hyperledger Fabric v1.4.7) 如果您先前已安裝,則必須依照更新 Hyperledger Fabric v1.4.7 SDK 以使用 Oracle Blockchain Platform 中的指示,將它修改為與 Oracle Blockchain Platform 搭配使用。
安裝 Hyperledger Fabric SDK for Java
有關如何使用 Fabric SDK for Java 的資訊,請參閱:Hyperledger Fabric SDK for Java 文件
- 您可以使用此頁籤上的連結來安裝 Hyperledger Fabric Java SDK。
- (Hyperledger Fabric v2.x) 如果您先前已安裝,則必須依照更新 Hyperledger Fabric v2.x SDK 以使用 Oracle Blockchain Platform 中的指示,將它修改為與 Oracle Blockchain Platform 搭配使用。
- (Hyperledger Fabric v1.4.7) 如果您先前已安裝,則必須依照更新 Hyperledger Fabric v1.4.7 SDK 以使用 Oracle Blockchain Platform 中的指示,將它修改為與 Oracle Blockchain Platform 搭配使用。
安裝組建工具,例如 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 主控台中查看分類帳,以查看您的變更:
- 移至主控台的「通道」頁籤,然後找出並按一下執行區塊鏈的通道名稱。
- 在管道的分類帳窗格中,檢視鏈碼的分類帳摘要。
更新 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
的子專案。
-
安裝專案相依項 :
mvn install
-
下載
grpc-java
原始碼:git clone https://github.com/grpc/grpc-java.git
- 尋找您的
fabric-sdk-java
所使用的grpc
版本,然後查看程式碼。在grpc-java
目錄中,查看fabric-sdk-java
使用的grpc
版本:cd grpc-java && git checkout v1.38.0
-
變更程式碼以避免伺服器端發生
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);
-
套用修正程式:
git apply grpc-java.patch
-
建置專案以產生目標修正的套裝程式。使用漸層建立
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
取得。 -
將已修正的套裝程式新增至您的 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
groupid
、artifactid
和version
與您要取代的套裝軟體保持相同。 -
手動取代您的套裝軟體。移至本機 Maven 儲存區域,尋找目標套裝程式所在的目錄,然後以已修正的套裝程式取代套裝程式。
-
-
執行專案。
更新 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 用戶端套件時所執行的標準 Fabricnpm install
作業。此命令檔會執行相同的 npm 命令,但也會修正所需的元件並加以重建。
手動更新 Fabric Node.js SDK
grpc-node
模組,將同儕和排序器與 grpcs 用戶端 (透過 TLS) 連接。
-
在不執行 grpc 模組的組建命令檔的情況下安裝
fabric-client
:npm install --ignore-scripts fabric-client
-
在 Windows 上,您必須明確停用 ALPN
- 變更以更新
node_modules/grpc/binding.gyp
:
to'_WIN32_WINNT=0x0600'
'_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
- 變更以更新
-
重建
grpc
npm rebuild --unsafe-perm --build-from-source
手動更新 Fabric Java SDK
若為 fabric-sdk-java
,請執行下列步驟來重建 grpc-netty
套裝軟體,以 grpcs 用戶端 (透過 tls) 連接對等和訂購者。grpc-netty
是 grpc-java
的子專案。
-
安裝專案相依項 :
mvn install
-
下載 grpc-java 原始程式碼:
git clone https://github.com/grpc/grpc-java.git
- 尋找您的
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
-
變更程式碼以避免伺服器端發生
alpn
錯誤。- 變更
grpc-java_root/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
的目標代碼 - 在函數
userEventTriggered0
中變更:
toif (NEXT_PROTOCOL_VERSIONS.contains(handler.applicationProtocol())) {
程式碼看起來類似於: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); ... }
- 變更
-
建置專案以產生目標修正的套裝程式。使用漸層建立
grpc-java
專案。或者,您也可以在 grpc netty 目錄gradle build
中重新建立grpc-netty
子專案。組建完成後,您可以在
grpc-java\netty\build\libs\grpc-netty-1.23.0.jar
目錄中取得目標修正的 jar 套裝程式。 -
將已修正的套裝程式新增至您的 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
groupid
、artifactid
和version
與您要取代的套裝軟體保持相同。 -
手動取代您的套裝軟體。移至本機 Maven 儲存區域,尋找目標套裝程式所在的目錄,然後以已修正的套裝程式取代套裝程式。
-
-
執行專案。