プライベートデータコレクションを使用して、3つのピアと3つの組織でカスタムHyperledger Fabricv1.2ブロックチェーンネットワークをセットアップしています。サイドデータベースはCouchDBです。私はfabric-node-sdkを使用してブロックチェーンに接続します。チェーンコードはエラーなしでインスタンス化されますが、データをコレクションに入れるチェーンコードメソッドを呼び出すことはできません。
次のエラーは、チェーンコードをインスタンス化したピアのDockerログに表示されます。これは、トランザクションの承認ピアでもあります。
> 2018-09-21 13:32:52.163 UTC [gossip/privdata] func1 -> ERRO 036 Failed disseminating private RWSet for TxID e2f0a03885bd31232042a19ff8a7eb36cef92f8a6ed24fcb0e3eed2f52b5c037 , namespace contract collection collection0 : Requested to send to at least 3 peers, but know only of 0 suitable peers.
>2018-09-21 13:32:52.163 UTC [gossip/service] DistributePrivateData -> ERRO 037 Failed to distributed private collection, txID e2f0a03885bd31232042a19ff8a7eb36cef92f8a6ed24fcb0e3eed2f52b5c037 channel coachannel due to Failed disseminating 1 out of 1 private RWSets
コレクションに必要なピア数は3であることに注意してください。各ピアに独自のcouchdbコンテナーがある場合でも、データは承認ピア自体のサイドデータベースに保存されないことは明らかです。
couchdbコンテナーは、次のようなエラーをログに記録します。それとは別に、それらは適切に機能しているようです。
>[notice] 2018-09-21T16:26:38.406978Z nonode@nohost <0.318.0> -------- chttpd_auth_cache changes listener died database_does_not_exist at mem3_shards:load_shards_from_db/6(line:403) <= mem3_shards:load_shards_from_disk/1(line:378) <= mem3_shards:load_shards_from_disk/2(line:407) <= mem3_shards:for_docid/3(line:91) <= fabric_doc_open:go/3(line:38) <= chttpd_auth_cache:ensure_auth_ddoc_exists/2(line:187) <= chttpd_auth_cache:listen_for_changes/1(line:134)
[error] 2018-09-21T16:26:38.407028Z nonode@nohost emulator -------- Error in process <0.319.0> with exit value:
{database_does_not_exist,[{mem3_shards,load_shards_from_db,"_users",[{file,"src/mem3_shards.erl"},{line,403}]},{mem3_shards,load_shards_from_disk,1,[{file,"src/mem3_shards.erl"},{line,378}]},{mem3_shards,load_shards_from_disk,2,[{file,"src/mem3_shards.erl"},{line,407}]},{mem3_shards,for_docid,3,[{file,"src/mem3_shards.erl"},{line,91}]},{fabric_doc_open,go,3,[{file,"src/fabric_doc_open.erl"},{line,38}]},{chttpd_auth_cache,ensure_auth_ddoc_exists,2,[{file,"src/chttpd_auth_cache.erl"},{line,187}]},{chttpd_auth_cache,listen_for_changes,1,[{file,"src/chttpd_auth_cache.erl"},{line,134}]}]}
サイドデータベースにプライベートデータが保存されないのはなぜですか?また、配布が失敗するのはなぜですか?
前もって感謝します。
プライベートデータ収集が機能するためには、組織間のゴシップを設定する必要があります。つまり、各組織のアンカーピアをチャネル構成に追加する必要があります。必要なすべての情報はドキュメントにありますが、高レベルでは、各組織のconfigtx.yamlファイルにアンカーピアを追加する必要があります。注文サービスが実行され、チャネルが作成された後、各組織はチャネル更新を実行してアンカーピアを追加します。https://hyperledger-fabric.readthedocs.io/en/release-1.2/build_network.htmlで、これらの手順を説明します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加