通过 Nodejs SDK 提交交易时面临问题“DiscoveryService:基本错误:无法为链码构建描述符”

问题描述

我在 docker swarm 上运行 Fabric 网络。我能够通过 CLI 执行事务和查询,但在从 NodeJS SDK 调用事务时面临这个问题。我正在使用结构示例中提供的测试网络,并对其进行了一些添加。我正在使用默认的背书政策

{
"message": "DiscoveryService: basic error: failed constructing descriptor for chaincodes:<name:\"basic\" > ","stack": "Error: DiscoveryService: basic error: failed constructing descriptor for chaincodes:<name:\"basic\" > \n    at DiscoveryService.send (/usr/src/app/node_modules/fabric-common/lib/DiscoveryService.js:363:11)\n    at async ContractImpl.getDiscoveryHandler (/usr/src/app/node_modules/fabric-network/lib/contract.js:231:13)\n    at async Transaction.submit (/usr/src/app/node_modules/fabric-network/lib/transaction.js:190:43)\n    at async tx (/usr/src/app/tx.js:21:16)\n    at async /usr/src/app/app.js:34:18"}

和对等日志是

2021-01-08 16:46:44.687 UTC [comm.grpc.server] 1 -> INFO 0a0 unary call completed grpc.service=discovery.Discovery grpc.method=Discover grpc.peer_address=10.0.1.211:40120 grpc.peer_subject="CN=fabric-common" grpc.code=OK grpc.call_duration=549.379µs
2021-01-08 16:46:44.731 UTC [discovery] chaincodeQuery -> ERRO 0a1 Failed constructing descriptor for chaincode chaincodes:<name:"basic" >,: no peer combination can satisfy the endorsement policy

这是我的连接配置文件:

{
"name": "test-network-org1","version": "1.0.0","client": {
    "organization": "Org1","connection": {
        "timeout": {
            "peer": {
                "endorser": "300"
            }
        }
    }
},"organizations": {
    "Org1MSP": {
        "mspid": "Org1MSP","peers": [
            "peer0.org1.example.com"
        ],"certificateAuthorities": [
            "ca.org1.example.com"
        ]
    }
},"peers": {
    "peer0.org1.example.com": {
        "url": "grpcs://peer0.org1.example.com:7051","tlsCACerts": {
            "pem": "-----BEGIN CERTIFICATE-----\nMIICJjCCAc2gAwIBAgIUTVUhB44O0shRtEQRrWwSONwBVLswCgYIKoZIzj0EAwIw\ncDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH\nEwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjEwMTA4MTAyNzAwWhcNMzYwMTA1MTAyNzAw\nWjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV\nBAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT\nY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBfr\nnYwHd4KPh6A5VC7rEy/PBxGX/yb/MQe6S7JXCL1ceLRUa7JOsEaFRnqoVP0hGjWv\nnfRpu60xHEb5ypkRtGOjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG\nAQH/AgEBMB0GA1UdDgQWBBQuKfHt6oR9p2LQzzjPZE673W+FmDAKBggqhkjOPQQD\nAgNHADBEAiBMhPVZCDZ1oeGf5XFKBngc80Tt+MsPYIUzc7gzcttq2AIgQZsHm8dP\n2cWNHIeoLdNcJ3yZB6eem80QQj08GFzepjA=\n-----END CERTIFICATE-----\n"
        },"grpcOptions": {
            "ssl-target-name-override": "peer0.org1.example.com","hostnameOverride": "peer0.org1.example.com"
        }
    }
},"certificateAuthorities": {
    "ca.org1.example.com": {
        "url": "https://ca.org1.example.com:7054","caName": "ca-org1","tlsCACerts": {
            "pem": [
                "-----BEGIN CERTIFICATE-----\nMIICJjCCAc2gAwIBAgIUTVUhB44O0shRtEQRrWwSONwBVLswCgYIKoZIzj0EAwIw\ncDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMQ8wDQYDVQQH\nEwZEdXJoYW0xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjEwMTA4MTAyNzAwWhcNMzYwMTA1MTAyNzAw\nWjBwMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGggQ2Fyb2xpbmExDzANBgNV\nBAcTBkR1cmhhbTEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMT\nY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBfr\nnYwHd4KPh6A5VC7rEy/PBxGX/yb/MQe6S7JXCL1ceLRUa7JOsEaFRnqoVP0hGjWv\nnfRpu60xHEb5ypkRtGOjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAG\nAQH/AgEBMB0GA1UdDgQWBBQuKfHt6oR9p2LQzzjPZE673W+FmDAKBggqhkjOPQQD\nAgNHADBEAiBMhPVZCDZ1oeGf5XFKBngc80Tt+MsPYIUzc7gzcttq2AIgQZsHm8dP\n2cWNHIeoLdNcJ3yZB6eem80QQj08GFzepjA=\n-----END CERTIFICATE-----\n"
            ]
        },"httpOptions": {
            "verify": false
        }
    }
}

}

我的 docker-compose 文件

enter image description here

这是 Nodejs 代码

const ccp = buildCCPOrg1();

const wallet = await buildWallet(Wallets,walletPath);
const gateway = new Gateway();

await gateway.connect(ccp,{
    wallet,identity: request.org1UserId,discovery: { enabled: true,asLocalhost: false },});
console.log(gateway);
const network = await gateway.getNetwork(request.channelName);

const contract = network.getContract(request.chaincodeName);

var result = await contract.submitTransaction(
    "CreateAsset",Date.now().toString(),"yellow","5","Tom","1300"
);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)