gpt4 book ai didi

node.js - 使用 Nodejs 查询链码仅在大约 3/5 的情况下成功

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:58 25 4
gpt4 key购买 nike

我在我的链上成功安装并实例化了链代码。我可以通过 nodejs 注册管理员并注册用户。如果我查询链码,它只会返回大约五分之三的正确响应。其余的会抛出找不到链码的错误。

安装的链码是结构样本的基本示例。我的 js 文件用于查询链代码(基于 fabcar 示例):

/*
* SPDX-License-Identifier: Apache-2.0
*/

'use strict';

const { FileSystemWallet, Gateway } = require('fabric-network');
const path = require('path');

const ccpPath = path.resolve(__dirname, 'connection-org1.json');

async function main() {
try {

// Create a new file system based wallet for managing identities.
const walletPath = path.join(process.cwd(), 'wallet');
const wallet = new FileSystemWallet(walletPath);
console.log(`Wallet path: ${walletPath}`);

// Check to see if we've already enrolled the user.
const userExists = await wallet.exists('user1');
if (!userExists) {
console.log('An identity for the user "user1" does not exist in the wallet');
console.log('Run the registerUser.js application before retrying');
return;
}

// Create a new gateway for connecting to our peer node.
const gateway = new Gateway();
await gateway.connect(ccpPath, { wallet, identity: 'user1', discovery: { enabled: true, asLocalhost: true } });

// Get the network (channel) our contract is deployed to.
const network = await gateway.getNetwork('mychannel');

// Get the contract from the network.
const contract = network.getContract('mycc');

const result = await contract.evaluateTransaction('query', 'a');
console.log(`Transaction has been evaluated, result is: ${result}`);

} catch (error) {
console.error(`Failed to evaluate transaction: ${error}`);
process.exit(1);
}
}

main();

成功的查询但有错误,这些执行之间没有任何变化,并且它们之间的调用间隔大约为 5 秒。

root@devserver ~/fabric-samples/bla/first-network # node index.js 
Transaction has been evaluated, resultb is: 210

root@devserver ~/fabric-samples/bla/first-network # node index.js
Transaction has been evaluated, resultb is: 210

root@devserver ~/fabric-samples/bla/first-network # node index.js
Transaction has been evaluated, resultb is: 210

root@devserver ~/fabric-samples/bla/first-network # node index.js
Transaction has been evaluated, resultb is: 210

root@devserver ~/fabric-samples/bla/first-network # node index.js
2019-09-09T18:53:24.646Z - warn: [Query]: evaluate: Query ID "[object Object]" of peer "peer1.PharmaProducer.bigpharma.com:8051" failed: message=cannot retrieve package for chaincode mycc/1.0, error open /var/hyperledger/production/chaincodes/mycc.1.0: no such file or directory, stack=Error: cannot retrieve package for chaincode mycc/1.0, error open /var/hyperledger/production/chaincodes/mycc.1.0: no such file or directory
at self._endorserClient.processProposal (/root/fabric-samples/bla/first-network/node_modules/fabric-network/node_modules/fabric-client/lib/Peer.js:140:36)
at Object.onReceiveStatus (/root/fabric-samples/bla/first-network/node_modules/grpc/src/client_interceptors.js:1207:9)
at InterceptingListener._callNext (/root/fabric-samples/bla/first-network/node_modules/grpc/src/client_interceptors.js:568:42)
at InterceptingListener.onReceiveStatus (/root/fabric-samples/bla/first-network/node_modules/grpc/src/client_interceptors.js:618:8)
at callback (/root/fabric-samples/bla/first-network/node_modules/grpc/src/client_interceptors.js:845:24), status=500, , url=grpcs://localhost:8051, name=peer1.PharmaProducer.bigpharma.com:8051, grpc.max_receive_message_length=-1, grpc.max_send_message_length=-1, grpc.keepalive_time_ms=120000, grpc.http2.min_time_between_pings_ms=120000, grpc.keepalive_timeout_ms=20000, grpc.http2.max_pings_without_data=0, grpc.keepalive_permit_without_calls=1, name=peer1.PharmaProducer.bigpharma.com:8051, grpc.ssl_target_name_override=peer1.PharmaProducer.bigpharma.com, grpc.default_authority=peer1.PharmaProducer.bigpharma.com, isProposalResponse=true
Failed to evaluate transaction: Error: cannot retrieve package for chaincode mycc/1.0, error open /var/hyperledger/production/chaincodes/mycc.1.0: no such file or directory

我希望代码每次都能成功返回正确的结果,而不是随机显示代码不存在的错误。

任何关于如何发生这种情况的见解都值得赞赏。

最佳答案

查看日志,我可以明白为什么有时您会得到peer0,偶尔会得到peer1,那是因为发现结果和处理结果导致无法以任何特定顺序获取对等点列表,因此对于2个对等点在您的组织中,事实上这不是一个长时间运行的应用程序,而是一个短暂运行的调用,有时peer0将位于对等点列表中的第一个,有时peer1将位于对等点列表中的第一个。由于您仅在peer0上安装了链码,因此peer1无法满足评估请求并返回错误。

node-sdk应该检测到这一点,然后尝试peer0,但是要么您使用的是旧版本的node-sdk,它肯定有一个问题,它没有尝试不同的对等点,要么node-sdk认为这是(错误地,但可能无法区分)链码响应并将其传递回调用者。避免该错误的解决方案是在所有 Node 上安装链代码。

关于node.js - 使用 Nodejs 查询链码仅在大约 3/5 的情况下成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57859872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com