またはを使用して、Hyperledger ファブリックでトランザクションを送信した後、特定のピアから裏書を取得する方法はありますcontract.submitTransaction()
かchannel.sendTransaction()
? これまでのところ、承認は常に、組織内の他のピアからではなく、同じピアから返されているようです。以下の私の環境の詳細を参照してください。また、node sdk sendTransactionProposal(request)'s
ChaincodeInvokeRequest の優先リストまたは無視リストを使用して特定のピアをターゲットにしても、違いはないようです。この問題に対処するための特定のドキュメントや代替リソースはありますか?
ChaincodeInvokeRequest{ targets: allPeers または peer2, // または別のピアが優先: peer2, ignore, peer1 }
環境の詳細 現在のセットアップ: 2 つのピアを持つ 1 つの組織
シンプルな承認ポリシー:
{"identities":[{"role":{"name":"member","mspId":"Org1MSP"}}],policy:{"1-of":[{"signed-by":0}]}}
Fabric SDK ライブラリ:
fabric-ca-client - v1.4.1
fabric-client - v1.4.1
fabric-network - v1.4.1
ハイパーレジャー ファブリックのバージョン:v1.4.1
次のアプローチを使用して、sdk 内の特定のピアをターゲットにします。
const request = {
targets: peers or peer[1] or [peer2], -- target specific peer
chaincodeId: chaincodeName,
txId,
fcn: functionName,
args,
transientMap: transientMapData // , // private data,
ignore: list of peer[s] to ignore
preferred: list of peer[s] to prefer
};
const endorsementResults = await channel.sendTransactionProposal(request);
if (channel.verifyProposalResponse(endorsementResults[0][0])) {
const transactionRequest = {
proposalResponses: endorsementResults[0],
proposal: endorsementResults[1]
};
invokeResponse = await channel.sendTransaction(transactionRequest);
}
予想された結果:
transaction1 - クライアントはトランザクションを peer1 に送信し、peer1 から承認を取得します。transaction2 - クライアントはトランザクションを peer2 に送信し、peer2 から承認を取得します。
実績:
transaction1 - クライアントはトランザクションを peer1 に送信し、peer1 から承認を取得します。transaction2 - クライアントはトランザクションを peer2 に送信し、peer1 から承認を取得します。