问题:
我已经开发了Hyperledger架构网络,然后在其中安装了链代码。这是我的Initialize分类帐方法。
async initLedger(stub, args) {
console.info("============= START : Initialize Ledger ===========");
let drivers = [];
drivers.push({
nic: "123",
firstName: "Saman",
lastName: "Frenando",
status: "Not verified",
licenceNo: "1234"
});
drivers.push({
nic: "124",
firstName: "Janith",
lastName: "Bentharaarachchi",
status: "Not verified",
licenceNo: "1235"
});
for (let i = 0; i < drivers.length; i++) {
drivers[i].docType = "driver";
console.log(drivers[i].nic);
await stub.putState(
drivers[i].nic,
Buffer.from(JSON.stringify(drivers[i]))
);
console.info("Added <--> ", drivers[i]);
}
console.info("============= END : Initialize Ledger ===========");
}
这就是我检索这些数据的方式。
async selectNthDriver(stub, args) {
if (args.length != 1) {
throw new Error(
"Incorrect number of arguments. Expecting NIC ex: 123"
);
}
let nic = args[0];
console.log(`nic: ${nic}`);
let driverAsBytes = await stub.getState(nic);
console.log("hi"+driverAsBytes);
if (!driverAsBytes || driverAsBytes.toString().length <= 0) {
throw new Error("Driver with NIC" + nic + " does not exist");
}
console.log(driverAsBytes.toString());
return driverAsBytes;
}
当我在同级上发出此命令时,它会成功初始化分类帐。
peer chaincode invoke -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C myc -n mycc -c '{"Args":["initLedger"]}'
当我尝试检索驱动程序时通过发出以下命令,这样会给我一个错误。
错误:调用期间认可失败。响应:状态:500消息:“事务返回失败:错误:NIC123驱动程序不存在”
peer chaincode invoke -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C myc -n mycc -c '{"Args":["selectNthDriver","123"]}
这是链码日志。
2019-05-09T05:18:51.184Z信息[lib / handler.js]
信息:[myc-09f261c4]调用链码Init()成功。 将完成的消息发送回同位体 {“ timestamp”:“” 2019-05-09T05:18:51.184Z“} {fcn:'initLedger',参数: []} =============开始:初始化分类帐=========== 123已添加<-> {nic:'123',firstName:'Saman',lastName:' Fernando',状态: “未验证”,许可证编号:“ 1234”,docType:“驱动程序”} 124已添加 <-> {nic:'124',firstName:'Janith',lastName: 'Bentharaarachchi',状态:'未验证',许可证编号:'1235',
docType:“驱动程序”} =============结束:初始化分类帐=========== {fcn:'selectNthDriver',params:['123']} nic:123 hi 错误:NIC123驱动程序不存在 在selectNthDriver(/usr/local/src/mycc.js:494:13) 在 在process._tickCallback(内部/进程/next_tick.js:188:7)2019-05-09T05:43:42.430Z错误[lib / handler.js]
错误:[myc-e7aef847]返回调用链码Invoke() 错误响应[错误:NIC123驱动程序不存在]。 将错误消息发送回同位体 {“ timestamp”:“ 2019-05-09T05:43:42.430Z”}
当我通过浏览器进入CouchDB时,它没有显示我初始化的数据。它仅显示此数据。
{
"_id": "mycc",
"_rev": "1-5c5ecfec35f65ec74cbe52a52be96048",
"~version": "\u0000CgMBBwA=",
"_attachments": {
"valueBytes": {
"content_type": "application/octet-stream",
"revpos": 1,
"digest": "md5-SkPMcpW++nrvo5v00rCdRQ==",
"length": 424,
"stub": true
}
}
}
有人可以帮助我找出我在哪里做错了吗?谢谢。
答案 0 :(得分:0)
您应该使用“ query ”命令使用对等二进制文件从分类账中查询状态,您使用的invoke命令用于生成事务,而查询操作不需要
您应该尝试用查询替换invoke,它看起来应该像这样:
peer chaincode query -o orderer.example.com:7050 -C myc -n mycc -c '{"Args":["selectNthDriver","123"]}
编辑:另外,请在selectNthDriver方法的if语句中检查以下条件:
if (!driverAsBytes.toString())
还请在代码中此if语句之前的行中为同一(driverAsBytes.toString())进行控制台。