我正在使用 hyperleger fabric V1.4.4,我正在尝试在升级时强制执行包括 2 个组织的背书策略,但是当我这样做时,发现服务开始失败并且策略丢失。
我验证了加入频道时已经定义了锚点,所以这似乎不是问题。
这就是我正在做的事情:
最初这是我实例化/升级我的链码的方式:
const gateway = new Gateway();
await gateway.connect(ccp, { wallet, identity: userId, discovery: { enabled: true, asLocalhost: false } });
const client = gateway.getClient();
const network = await gateway.getNetwork(channelName);
const channel = network.getChannel();
const peers = client.getPeersForOrg(orgName);
const txId = client.newTransactionID(true);
const deployId = txId.getTransactionID();
var request = {
targets : peers,
chaincodeId: ccName,
chaincodeType: ccType,
chaincodeVersion: ccVersion,
fcn: ccFunc,
args: ccArgs,
txId: txId
};
let upgradeResponse = await channel.sendUpgradeProposal(request, 300000);
这样合同就可以工作,发现服务也可以工作,但是我没有我需要的背书政策,所以我以这种方式更改了代码:
var policy = {
identities: [
{ role: { name: "member", mspId: "org1" }},
{ role: { name: "member", mspId: "org2" }},
],
policy: {
"2-of": [{ "signed-by": 0 }, { "signed-by": 1 }]
}
}
var request = {
targets : peers,
chaincodeId: ccName,
chaincodeType: ccType,
chaincodeVersion: ccVersion,
fcn: ccFunc,
args: ccArgs,
txId: tx_id,
'endorsement-policy': policy
};
但随后发现服务开始失败并出现以下错误:
error: [Channel.js]: Channel:mychannel received discovery error:failed constructing descriptor for chaincodes:<name:"mycontract" >
我开始查看使用的发现结果await channel.getDiscoveryResults()
,我可以看到在添加背书策略后背书丢失了。
此外,我可以从发现结果中看到,我只能看到从我的组织 ccp 传递的对等点,我看不到网络中的所有对等点,但我可以看到所有订购者。
我认为问题在于进行升级发现没有看到所有组织的对等点,但我不明白为什么。
我已经尝试从请求中删除对等方,但这似乎并没有改变结果。我还尝试在请求中设置两个对等方,但出现下一个错误:
Error: Peer with name "peer.xxxxxx.eastus.aksapp.io" not assigned to this channel
我已经为这个问题迷失了一段时间,有没有办法让我确认锚节点工作正常?是我使用 ccp 以某种方式阻止发现过程进行连接的方式吗?我可以做些什么来诊断我的问题?
这就是我的 ccp 的样子:
{
"certificateAuthorities": {
"org1CA": {
"caName": "ca.org1",
"tlsCACerts": {},
"url": "https://ca.xxxxxxxx.eastus.aksapp.io:443"
}
},
"client": {
"connection": {
"timeout": {
"orderer": "300",
"peer": {
"endorser": "300"
}
}
},
"organization": "org1"
},
"name": "org1",
"organizations": {
"org1": {
"certificateAuthorities": [
"org1CA"
],
"mspid": "org1",
"peers": [
"peer1.org1"
]
}
},
"peers": {
"peer1.org1": {
"grpcOptions": {
"hostnameOverride": "peer1.xxxxxxxxxx.eastus.aksapp.io",
"ssl-target-name-override": "peer1.xxxxxxxxxx.eastus.aksapp.io"
},
"tlsCACerts": {},
"url": "grpcs://peer1.xxxxxxxxxx.eastus.aksapp.io:443"
}
},
"version": "1.0.0",
"wallet": "org1"
}
非常感谢