ホームページ  >  記事  >  バックエンド開発  >  gRPC をハイパーレジャー チェーンコードで使用することは可能ですか? 使用できる場合、テスト ネットワークでの呼び出し中のエラーを回避する方法はありますか?

gRPC をハイパーレジャー チェーンコードで使用することは可能ですか? 使用できる場合、テスト ネットワークでの呼び出し中のエラーを回避する方法はありますか?

PHPz
PHPz転載
2024-02-13 09:12:09584ブラウズ

是否可以在 hyperledger-chaincode 中使用 gRPC,如果可以,如何避免在测试网络上调用期间出现错误?

php エディター Xigua があなたの質問に答えます。はい、gRPC を Hyperledger Chaincode で使用できます。 gRPC は、チェーンコードが他のサービスと通信できるようにする、高性能のオープンソースのリモート プロシージャ コール (RPC) フレームワークです。テスト ネットワークでの通話中のエラーを回避するには、いくつかの手順を実行できます。まず、テスト ネットワークが構成され、正しく実行されていることを確認します。次に、コードと構成ファイルをチェックして、gRPC が正しく使用されていることを確認します。最後に、問題がすぐに発見され解決されるように、適切なエラー処理とログを作成します。これらの手順を実行すると、テスト ネットワークでの通話中のエラーを回避し、gRPC を使用してスムーズに通信できるようになります。

質問内容

ファブリックSDKを使用するのではなく、ファブリックチェーンコードでgrpcを使用してクロスチェーン通信を実現したいと考えています。 しかし、fabric-sample/test-network でチェーンコード関数を呼び出すと、常にエラーが発生します。

リーリー

このエラーの原因を誰か教えていただけますか? チェーンコードにバグがあるのでしょうか、それとも grpc がチェーンコード関数で使用できないのでしょうか?

grpc のチェーンコード:

リーリー

server.go

リーリー

client.go

error: endorsement failure during invoke. response: status:500 message:"error in simulation: failed to execute transaction eb5e480bd4075a767f56ae263741ca0f5f19620ef88952e26b7f1952bdbe83cd: could not launch chaincode chaincode_1.2:d3f97f15a635e73d3de230c8e5899e5fb95a68cf897c03e19f9e4eeca7ca3fd5: chaincode registration failed: container exited with 2"

解決策

このエラーの原因を誰が教えてくれますか?

詳細については、ハイパーレジャー ファブリック v2.x/ログ コントロールを参照してください。エラー 500 (内部サーバー エラー) の原因を知ることができるのは、サーバー ログです

実行方法によって異なります:

リーリー

これは、チェーンコードの問題 (grpc コードのバグなど) が原因である可能性があります。あるいは、チェーンコードが実行されている環境が原因である可能性があります。

コードから、 ではなく チェーンコード (server.main()) で grpc サーバーを開始すると考えることができます。チェーンコードはハイパーレジャー ファブリック ネットワーク内で実行され、スタンドアロン アプリケーションのようにネットワーク通信を処理しません。
代わりに、grpc サーバーを独立して実行される別のサービスにする必要があります。そうすれば、チェーンコードは必要に応じてそのサービスと通信できるようになります。

プラス client.clientfunc()この関数は grpc 接続を確立し、リクエストを送信し、レスポンスを待つようです。これは同期操作であるため、応答の到着に時間がかかると問題が発生する可能性があります。チェーンコードの実行のブロックを避けるために、非同期操作 (つまり、リクエストを送信し、コールバック関数で応答を処理する) を使用することが最善です。
そして... client.send() ;)

からのエラーを無視すべきではありません。

grpc サーバーが安全な接続を必要としないことを確認してください。そうでない場合、grpc.withtransportcredentials(insecure.newcredentials()) (ssl/tls を使用しない安全でない接続) は失敗します。

一般に、外部システムとの通信 (例: grpc 経由) は、チェーンコード自体内ではなく、ファブリック クライアント アプリケーション内で処理することをお勧めします。

ファブリック アプリケーションの代わりにチェーンコードを使用したいだけの場合、異なるチャネル上の組織間で通信する方法はありますか?

データ プライバシーを維持するために チャネル が互いに分離されることがハイパーレジャー ファブリック設計の基本的な側面であるため、異なるチャネル上の組織間の通信は複雑になる可能性があります。

次のことを検討してください:

  • チェーン コード関数 #: 組織は、独自のチャネルでチェーン コード関数を呼び出し、そのチャネルが別のチャネルでチェーン コード関数を呼び出すことができます。これが可能なのは、チェーンコードを複数のチャネルに関連付けることができるためです。
    このアプローチには、2 番目の関数呼び出しが最初の関数呼び出しと同じトランザクションに属さないという制限があるため、最初のトランザクションが失敗した場合はロールバックできないことに注意してください。

  • 二重メンバーシップ: 組織は複数のチャネルに属することができます。したがって、あるチャネルからデータを読み取り、別のチャネルにデータを書き込むことができます。ただし、これは 2 つの別々のトランザクションで実行されるため、アトミック性は保証されません。

  • プライベート データ収集 (pdc): 目的が特定の組織間 (または異なるチャネル間) でプライベート データを共有することである場合、PDC がオプションになる可能性があります。 pdc を使用すると、チャネル上のすべての組織にデータを配布することなく、チャネル上の定義された組織のサブセットがプライベート データを承認、送信、またはクエリできるようになります。

  • 相互運用性ソリューション: インターレジャー プロトコル (ilp) など、ブロックチェーンの相互運用性のためのより高度なソリューションも開発中です。ブロックチェーン間でデータや資産を移動するために使用できます。異なるファブリック ネットワーク (まったく異なるタイプのブロックチェーン ネットワーク間でも)。
    ただし、これらのテクノロジーの大部分はまだ研究開発段階にあり、まだ実稼働環境での使用の準備が整っていない可能性があります。

以上がgRPC をハイパーレジャー チェーンコードで使用することは可能ですか? 使用できる場合、テスト ネットワークでの呼び出し中のエラーを回避する方法はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。