Hyperledger Fabric SDKを使用したアプリケーションの開発
アプリケーションでは、ソフトウェア開発キット(SDK)を使用して、台帳に対する問合せおよび更新を許可するAPIにアクセスします。Hyperledger Fabric SDKをインストールして使用し、Oracle Blockchain Platform用のアプリケーションを開発できます。
Oracle Blockchain Platformに用意されているREST APIは、柔軟性を最大限に考慮して作成されており、トランザクションの呼出し、問合せの呼出し、トランザクションのステータスの表示が可能です。『Oracle Blockchain Platform REST API』を参照してください。
ただし、オブジェクトレベルの制御を実現するために、既存のAPIエンドポイントをアプリケーション内にラップする必要が生じる可能性が高くなります。アプリケーションに、精緻な操作を含めることができます。
- Oracle Blockchain Platformファウンダ・インスタンスが19.2.3または19.3.2を使用して作成されている場合、Hyperledger Fabric SDKのV1.4をサポートしています。
Hyperledger Fabric SDK for Node.jsのインストール
Fabric SDK for Node.jsの使用方法に関する情報は、次の場所にあります: Hyperledger Fabric SDK for Node.jsのドキュメント
- このタブからHyperledger Fabric Node.js SDKをインストールできます。
- 以前にインストールしている場合は、「Oracle Blockchain Platformと連携するためのHyperledger Fabric SDKの更新」の説明に従って、Oracle Blockchain Platformと連携するように変更する必要があります。
Hyperledger Fabric SDK for Javaのインストール
Fabric SDK for Javaの使用方法に関する情報は、次の場所にあります: Hyperledger Fabric SDK for Javaのドキュメント
- このタブからHyperledger Fabric Java SDKをインストールできます。
- 以前にインストールしている場合は、「Oracle Blockchain Platformと連携するためのHyperledger Fabric SDKの更新」の説明に従って、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 SDKの更新
OCIインフラストラクチャ・コンポーネントと、Fabricで提供されるNode.jsとJava SDKとの間には互換性がありません。このトピックのステップに従ってこの問題を修正します。
Fabric SDKの更新方法
SDKの更新には2つの方法があります:
-
Oracleスクリプトを使用してNode.js SDKまたはJava SDKをダウンロードしてインストールし、インストール時にコードにパッチを適用します。
-
この項の説明に従って、手動で行います。
スクリプトを使用するには、コンソールの開発者ツール・タブで、アプリケーション開発ペインを選択します。Node.js SDKとJava SDKの両方をダウンロードするリンクには、インストール時にコードにパッチを適用する更新が組み込まれています。
-
Fabric Java SDK: Java SDKが参照するモジュールで、変更が必要な
grpc-netty-1.15.0.jar
ファイルが更新されています。 -
Fabric Node.js SDK: Node.js Fabricクライアント・パッケージをダウンロードおよびインストールするためにユーザーが実行する標準Fabric
npm install
操作を置き換えるnpm_bcs_client.sh
スクリプトがあります。スクリプトは同じnpmコマンドを実行しますが、必要なコンポーネントにパッチを適用し、再ビルドします。
Go SDKには同様の非互換性の問題がないため、更新する必要はありません。
Fabric Node.js SDKの手動更新
grpc-node
モジュールを再ビルドし、ピアおよびオーダラを(tls経由で)grpcsクライアントに接続します。
-
grpcモジュールのビルド・スクリプトを実行せずに、
fabric-client
をインストールします:npm install --ignore-scripts fabric-client
-
コードを変更して、サーバー側からの
alpn
エラーを回避します。- ターゲット・コードである
node_modules/grpc/deps/grpc/src/core/lib/security/security_connector/security_connector.cc
を変更します - 関数
ssl_check_peer
を次のように変更します:static grpc_error* ssl_check_peer(grpc_security_connector* sc, const char* peer_name, const tsi_peer* peer, grpc_auth_context** auth_context) { /* Check the ALPN. */ const tsi_peer_property* p = tsi_peer_get_property_by_name(peer, TSI_SSL_ALPN_SELECTED_PROTOCOL); if (false) { return GRPC_ERROR_CREATE_FROM_STATIC_STRING( "Cannot check peer: missing selected ALPN property."); } if (p != nullptr && !grpc_chttp2_is_alpn_version_supported(p->value.data, p->value.length)) { return GRPC_ERROR_CREATE_FROM_STATIC_STRING( "Cannot check peer: invalid ALPN value."); } ... }
- ターゲット・コードである
node_modules/grpc/binding.gyp
を変更します。 - 変数
grpc_alpn
をfalseに変更します:'grpc_alpn%': 'false'
- ターゲット・コードである
-
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
-
コードを変更して、サーバー側からの
alpn
エラーを回避します。-
ターゲット・コードである
grpc-java_root/netty/src/main/java/io/grpc/netty/ProtocolNegotiators.java
を変更します -
関数
userEventTriggered
を次のように変更します:private static class BufferUntilTlsNegotiatedHandler extends AbstractBufferingHandler implements ProtocolNegotiator.Handler { ... @Override public void userEventTriggered(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); ... }
-
-
プロジェクトをビルドして、ターゲットにパッチが適用されたパッケージを生成します。Gradleを使用して
grpc-java
プロジェクトをビルドします。あるいは、gradle build
でgrpc nettyディレクトリのgrpc-netty
サブプロジェクトのみ再ビルドすることもできます。ビルドが完了したら、ディレクトリ
grpc-java\netty\build\libs\grpc-netty-1.15.0.jar
にターゲットにパッチが適用されたjarパッケージがあります。 -
パッチが適用されたパッケージをMavenのローカル・リポジトリに追加します。
次の2つの方法のどちらかで、公式にgrpc-netty jarパッケージをパッチが適用されたパッケージに置き換えます:-
Mavenを使用してローカル・ファイルでパッケージをインストールします:
ターゲットのmvn install:install-file -Dfile=local_patched_grpc_netty_package_root/grpc-netty-1.15.0.jar -DgroupId=io.grpc -DartifactId=grpc-netty -Dversion=1.15.0 -Dpackaging=jar
groupid
、artifactid
およびversion
は、置換するパッケージと同じにしておく必要があります。 -
パッケージを手動で置換します。ローカルのMavenリポジトリに移動し、ターゲット・パッケージがあるディレクトリを探し、パッケージをパッチが適用されたパッケージと置き換えます。
-
-
プロジェクトを実行します。