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のバージョンを使用します。
Hyperledger Fabric SDK for Node.jsのインストール
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コンソールでレジャーをチェックして変更を確認できます:
- コンソールでチャネル・タブに移動し、ブロックチェーンを実行しているチャネル名を探してクリックします。
- チャネルのレジャーペインで、チェーンコードのレジャー・サマリーを確認します。
Oracle Blockchain Platformと連携するようにHyperledger Fabric v2.x SDKを更新します
OCIインフラストラクチャ・コンポーネントと、Hyperledger Fabric v2.xで提供されるJava SDKには互換性がありません。この問題を解決するには、次のステップを実行します。
Hyperledger Fabric SDKの更新方法
SDKの更新には2つの方法があります:
- 変更したパッケージをコンソールからダウンロードします。更新された
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
プロジェクトを構築するにはgradleを使用します。cd netty/shaded gradle build -PskipAndroid=true -PskipCodegen=true
ビルドの完了後、ターゲットにパッチ適用された
.jar
パッケージはgrpc-java/netty/build/libs/grpc-netty-shaded-1.38.0.jar
で入手できます。 -
パッチ済パッケージをMavenローカル・リポジトリに追加します。
次の2つの方法のいずれかで、元の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の更新には2つの方法があります:
- Oracleスクリプトを使用して、インストール時にコードにパッチを適用するNode.js SDKまたはJava SDKをダウンロードしてインストールします。
- この項の説明に従って手動で実行します。
スクリプトを使用するには、コンソールの開発者ツール・タブで、アプリケーション開発ペインを選択します。Node.js SDKとJava SDKの両方をダウンロードするリンクには、インストール時にコードにパッチを適用する更新が組み込まれています。
- Fabric Java SDK: Java SDKが参照するモジュールで、変更が必要な
grpc-netty-1.23.0.jar
ファイルが作成され、更新されています。 - Fabric Node.js SDK: ユーザーがNode.js Fabricクライアント・パッケージをダウンロードしてインストールするために実行する標準Fabric
npm install
操作を置換するnpm_bcs_client.sh
スクリプトが作成されています。スクリプトは同じnpmコマンドを実行しますが、必要なコンポーネントにパッチを適用して再ビルドします。
Fabric Node.js SDKの手動更新
grpc-node
モジュールを再ビルドして、ピアおよびオーダラを(TLS経由で) grpcsクライアントに接続するには、次の手順を実行します。
-
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
パッケージを再ビルドし、ピアおよびオーダラを(tls経由で)grpcsクライアントに接続します。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
は、そのpom.xml
: https://github.com/hyperledger/fabric-sdk-java/blob/v1.4.11/pom.xmlにあるgrpc-java 1.23.0
を使用します。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
プロジェクトを構築するにはgradleを使用します。または、grpc nettyディレクトリgradle build
でgrpc-netty
サブプロジェクトのみ再ビルドすることもできます。ビルドの完了後、ディレクトリ
grpc-java\netty\build\libs\grpc-netty-1.23.0.jar
でターゲットにパッチ適用されたjarパッケージを取得できます。 -
パッチ済パッケージをMavenローカル・リポジトリに追加します。
次の2つの方法のいずれかで、公式な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リポジトリに移動し、ターゲット・パッケージがあるディレクトリを探し、パッケージをパッチ適用済パッケージに置き換えます。
-
-
プロジェクトを実行します。