Hyperledger fabric hyperledger fabric java sdk客户端中多个组织的背书
使用Fabric和JavaSDK 我有一个要求,交易必须由两个组织背书,然后才能添加到分类账中 没有将多个客户端(org.peers)与Hyperledger fabric hyperledger fabric java sdk客户端中多个组织的背书,hyperledger-fabric,Hyperledger Fabric,使用Fabric和JavaSDK 我有一个要求,交易必须由两个组织背书,然后才能添加到分类账中 没有将多个客户端(org.peers)与频道相关联的工具-它来自client.newChannel,并具有对构造函数中单个HFClient实例的瞬时引用 单个组织背书要求我构建一个TransactionProposalRequest,并将其放入我已经创建的渠道 然后解析返回的ProposalResponse集合(每个对等方返回一个),并将其发送给订购方 我不知道如何将更多的组织加入频道 我是否需要实例
频道
相关联的工具-它来自client.newChannel
,并具有对构造函数中单个HFClient
实例的瞬时引用
单个组织背书要求我构建一个TransactionProposalRequest
,并将其放入我已经创建的渠道
然后解析返回的ProposalResponse
集合(每个对等方返回一个),并将其发送给订购方
我不知道如何将更多的组织加入频道
我是否需要实例化更多的HFClient
s并拥有多个频道的副本,每个组织一个,然后逐个调用不同的频道/客户端组合并聚合响应
这(imo)意味着您需要了解链码的所有背书人,并一次只给他们打电话。对于一个由多个组织管理的联盟来说,这肯定是不正确的
我是否遗漏了什么,有没有更干净的方法
文档中的发送流似乎暗示您连接到一个客户机,并且交易被传播到所有对等方,以获得该客户机的认可 我自己正在处理这个问题,还不完全清楚
在实例化链码时设置背书策略(在1个通道上)。
CLI示例:-P“或('Org1MSP.member','Org2MSP.member')”
(两个组织的对等方都必须加入频道并安装cc)
因此,cc知道需要哪些对等方签署交易。我认为这主要应该由客户来处理。(我使用的是NodeSDK,但它们大致相同)
但您仍然需要来自其他组织的端点和ca证书。我在一些IBM文档中找到了这个李>
'例如,如果您希望以网络中的其他对等方为目标,需要获得不属于您组织的对等方的认可,则需要获得这些对等方的正确API端点信息。您还需要为其他组织存储CA证书,以验证返回到您的应用程序的响应。此信息不会在您的服务凭据中公开,因此您必须联系Bluemix组织的相应管理员,并在带外操作中获取此信息。订购服务URL在网络中是通用的;订购服务不需要任何特定于会员的信息。”
在节点中,我们使用一个网络配置JSON,其条目类似于(不完美)
及
及
希望这能对你有所帮助,我期待着更好的答案。嗯,这比一开始看起来更糟
如果您为该组织创建另一个客户机,并与该组织的对等方实例化另一个渠道副本,则可以从另一个对等方(集合)获得认可,但这似乎是一个可笑的复杂过程。你需要证书,但在我的情况下,我所有的组织都有证书,所以这不是问题
因此,您有一组来自多个客户机(ORG)的响应。它们都还可以,你会认为提交给订购方就足够了,不是吗
那不行
order。原因:不成功。禁止-403,其他信息:未能达到1个子策略的隐式阈值,需要1剩余:权限被拒绝
看起来您无法向订购方提交由不同组织签署的交易,而不是您的客户所代表的组织
这让我很难受。submit to orderer(或者我喜欢的想法是-commit)不是可以分布在多个客户机上的东西。这似乎是一个原子操作
我开始怀疑是否有人真的这样做了…当与另一个组织的对等方联系时,您首先需要向该组织的CA注册,以便使用对等方可以验证的凭据正确签署提案,对吗?您需要每个组织的ID/注册密码。
"channels": {
"peers": {
"org1peer": {
"endorsingPeer": true,
"chaincodeQuery": true,
"ledgerQuery": true,
"eventSource": true
},
"org2peer": {
"endorsingPeer": true,
"chaincodeQuery": true,
"ledgerQuery": true,
"eventSource": true
}
}
"peers": {
"org1peer": {
"url": "grpc://org1peer.org1.com:7051",
"eventUrl": "grpc://org1peer.org1.com:7053"
},
"org2peer": {
"url": "grpc://org2peer.org2.com:7051",
"eventUrl": "grpc://org2peer.org2.com:7053"
}
"organizations": {
"Org1MSP": {
"mspid": "Org1MSP",
"peers": [
"org1peer"
],
"certificateAuthorities": [
"fabric-ca1"
],
"adminPrivateKey": {
"path": "./crypto/org1/bpn/admin/msp/keystore/a4941a637013e_sk"
},
"signedCert": {
"path": "./crypto/org1/bpn/org1peer/msp/signcerts/cert.pem"
}
},
"Org2MSP": {
"mspid": "Org2MSP",
"peers": [
"org2peer"
],
"certificateAuthorities": [
"fabric-ca2"
],
"adminPrivateKey": {
"path": "./crypto/org2/bpn/admin/msp/keystore/04c5a4992d5_sk"
},
"signedCert": {
"path": "./crypto/org2/bpn/org2peer/msp/signcerts/cert.pem"
}
}
},