Hyperledger fabric Hyperledger结构中的链码实例化失败
问题: 我已经为我的网络创建了Hyperledger结构网络和自定义链码。运行网络后,我在网络上安装链码。这对所有同行来说都是成功的。但是,当我尝试实例化链码时,它在cli上给了我这个错误 错误:无法组装事务,错误建议响应不正确 成功,错误代码500,消息链码注册失败: 容器以1退出 但所有其他链码,包括fabcar和我编写的一个链码,都被成功实例化了。但只有这个链码失败了 这是该链码的package.jsonHyperledger fabric Hyperledger结构中的链码实例化失败,hyperledger-fabric,hyperledger,Hyperledger Fabric,Hyperledger,问题: 我已经为我的网络创建了Hyperledger结构网络和自定义链码。运行网络后,我在网络上安装链码。这对所有同行来说都是成功的。但是,当我尝试实例化链码时,它在cli上给了我这个错误 错误:无法组装事务,错误建议响应不正确 成功,错误代码500,消息链码注册失败: 容器以1退出 但所有其他链码,包括fabcar和我编写的一个链码,都被成功实例化了。但只有这个链码失败了 这是该链码的package.json { "name": "helthcare", "version": "1.3
{
"name": "helthcare",
"version": "1.3.0",
"description": "Chain code for HRM",
"engines": {
"node": ">=8.4.0",
"npm": ">=6.4.0"
},
"scripts": {
"start": "node helthcare.js"
},
"engine-strict": true,
"author": "Janith Shanilka",
"license": "Apache-2.0",
"dependencies": {
"fabric-shim": "~1.4.0"
}
}
"use strict";
const shim = require("fabric-shim");
const util = require("util");
let Chaincode = class {
async Init(stub) {
//this method is to Initialized the chincode on the channel
console.info("=========== Instantiated HRM chaincode ===========");
return shim.success();
}
async Invoke(stub) {
let ret = stub.getFunctionAndParameters();
console.info(ret);
let method = this[ret.fcn];
if (!method) {
console.error("no function of name:" + ret.fcn + " found");
throw new Error("Received unknown function " + ret.fcn + " invocation");
}
try {
let payload = await method(stub, ret.params);
return shim.success(payload);
} catch (err) {
console.log(err);
return shim.error(err);
}
}
async patientRegistration(stub, args) {
console.info("============= START : Registering a Patient ===========");
if (args.length != 22) {
throw new Error(
`Incorrect number of arguments. Expecting 22 got ${args.length}`
);
}
let patientAsBytes = await stub.getState(args[0]); //get the particular patient from the ledger
//console.log("hiiiii" + driverAsBytes.toString());
if (patientAsBytes.toString()) {
//check weather he is already registered or not
console.log(patientAsBytes.toString());
throw new Error("patient with ID" + args[0] + " Already registered");
}
var patient = {
docType: "patient",
title: args[0],
firstName: args[1],
middlename: args[2],
surname: args[3],
dob: args[4],
sex: args[5],
bloodtype: args[6],
height: [7],
weight: [8],
allergy: [9],
addressline1: args[10],
addressline2: args[11],
city: args[12],
postalcode: args[13],
email: args[14],
contactno: args[15],
etitle: args[16],
efirstName: args[17],
esurname: args[18],
contactno1: args[19],
contactno2: args[20],
erelationship: args[21]
};
await stub.putState(patient.email, Buffer.from(JSON.stringify(patient))); //add new patient to ledger
console.info("============= END : Registering a patient ===========");
}
async addDoctor(stub, args) {
console.info("============= START : Registering a doctor ===========");
if (args.length != 12) {
throw new Error(
`Incorrect number of arguments. Expecting 12 got ${args.length}`
);
}
let doctorAsBytes = await stub.getState(args[0]); //get the particular doctor from ledger
if (doctorAsBytes.toString()) {
console.log(doctorAsBytes.toString());
//check weather he is already registered or not
throw new Error("doctor with RegNo" + args[0] + " Already registered");
}
var doctor = {
docType: "doctor",
title: args[0],
firstName: args[1],
surname: args[2],
medicalregno: args[3],
dob: args[4],
sex: args[5],
speciality: args[6],
addressline1: args[7],
addressline2: args[8],
city: args[8],
postalcode: args[9],
email: args[10],
contactno: args[11],
};
await stub.putState(doctor.email, Buffer.from(JSON.stringify(doctor))); //add new doctor to the ledger
console.info("============= END : Registering a doctor ===========");
}
async makeDiagnosis(stub, args) {
console.info("============ START : Make a Diagnosis ==========");
if (args.length != 6) {
throw new Error(
`Incorrect number of arguments. Expecting 6 got ${args.length}`
);
}
var diagnosis = {
docType: "diagnosis",
id: args[0],
patientid : args[1],
doctorid : args[2],
sysdate : args[3],
systime : args[4],
diagnosis: args[5]
};
await stub.putState(diagnosis.id, Buffer.from(JSON.stringify(diagnosis))); //put the new fine into leadger
console.info("============ END: Make a Diagnosis ==========");
}
async selectNthDoctor(stub, args) {
console.info("============= START : Selecting a doctor ===========");
if (args.length != 1) {
throw new Error(
"Incorrect number of arguments. Expecting regNo ex: doctorhrm@gmail.com"
);
}
let email = args[0];
let doctorAsBytes = await stub.getState(email); //get the officer from state
if (!doctorAsBytes.toString() || doctorAsBytes.toString().length <= 0) {
throw new Error("Officer with Email" + email + " does not exist");
}
console.log(doctorAsBytes.toString());
console.info("============= END : Selecting a doctor ===========");
return doctorAsBytes;
}
async selectNthPatient(stub, args) {
console.info("============= START : Selecting a patient ===========");
if (args.length != 1) {
throw new Error(
"Incorrect number of arguments. Expecting patient Id ex: patienthrm@gmail.com"
);
}
let email = args[0];
let patientAsBytes = await stub.getState(email); //get the offence from ledger
if (!patientAsBytes.toString() || patientAsBytes.toString().length <= 0) {
throw new Error("Offence with Email" + email + " does not exist");
}
console.log(patientAsBytes.toString());
console.info("============= END : Selecting a doctor ===========");
return patientAsBytes;
}
async selectNthDiagnosis(stub, args) {
console.info("============= START : Selecting a diagnosis ===========");
if (args.length != 1) {
throw new Error("Incorrect number of arguments. Expecting ID ex: D001");
}
let dId = args[0];
let diagnosisAsBytes = await stub.getState(dId); //select payment from ledger
if (!diagnosisAsBytes.toString() || diagnosisAsBytes.toString().length <= 0) {
throw new Error("Payment with dId" + dId + " does not exist");
}
console.log(diagnosisAsBytes.toString());
console.info("============= END : Selecting a diagnosis ===========");
return diagnosisAsBytes;
}
async nthDocotorDiagnosis(stub, args) {
console.info("============= START : Mango Query Slecting all diagonsis of Doctors ===========");
if (args.length != 1) {
throw new Error(
"Incorrect number of arguments. Expecting Email ex: doctorhrm@gmail.com"
);
}
let email = args[0];
let query = {
"selector": {
"docType": "diagnosis",
"doctorid": email
}
};
let diagnosisAsBytes = await stub.getQueryResult(JSON.stringify(query));
console.log(diagnosisAsBytes.toString());
console.info("============= END : Mango Query Slecting all diagonsis of Doctors ===========");
return diagnosisAsBytes;
}
async nthPatientDiagnosis(stub, args) {
console.info("============= START : Mango Query Slecting all diagonsis of Patient ===========");
if (args.length != 1) {
throw new Error(
"Incorrect number of arguments. Expecting email ex: patienthrm@gmail.com"
);
}
let email = args[0];
let diagnosisAsBytes = await stub.getQueryResult({
selector: {
docType: "diagnosis",
patientid: email
}
});
console.log(diagnosisAsBytes.toString());
console.info("============= END : Mango Query Slecting all diagonsis of Doctors ===========");
return diagnosisAsBytes;
}
async getAllDoctors(stub, args) {
let queryString = {};
queryString.selector = {};
queryString.selector.docType = "doctor";
let resultsIterator = await stub.getQueryResult(
JSON.stringify(queryString)
);
let allResults = [];
while (true) {
let res = await resultsIterator.next();
if (res.value && res.value.value.toString()) {
let jsonRes = {};
console.log(res.value.value.toString("utf8"));
jsonRes.Key = res.value.key;
try {
jsonRes.Record = JSON.parse(res.value.value.toString("utf8"));
} catch (err) {
console.log(err);
jsonRes.Record = res.value.value.toString("utf8");
}
allResults.push(jsonRes);
}
if (res.done) {
await resultsIterator.close();
let queryResults = Buffer.from(JSON.stringify(allResults));
console.log(queryResults.toString());
return queryResults;
}
}
}
async getAllPatient(stub, args) {
let queryString = {};
queryString.selector = {};
queryString.selector.docType = "patient";
let resultsIterator = await stub.getQueryResult(
JSON.stringify(queryString)
);
let allResults = [];
while (true) {
let res = await resultsIterator.next();
if (res.value && res.value.value.toString()) {
let jsonRes = {};
console.log(res.value.value.toString("utf8"));
jsonRes.Key = res.value.key;
try {
jsonRes.Record = JSON.parse(res.value.value.toString("utf8"));
} catch (err) {
console.log(err);
jsonRes.Record = res.value.value.toString("utf8");
}
allResults.push(jsonRes);
}
if (res.done) {
await resultsIterator.close();
let queryResults = Buffer.from(JSON.stringify(allResults));
console.log(queryResults.toString());
return queryResults;
}
}
}
async getAllDiagnosis(stub, args) {
let queryString = {};
queryString.selector = {};
queryString.selector.docType = "diagnosis";
let resultsIterator = await stub.getQueryResult(
JSON.stringify(queryString)
);
let allResults = [];
while (true) {
let res = await resultsIterator.next();
if (res.value && res.value.value.toString()) {
let jsonRes = {};
console.log(res.value.value.toString("utf8"));
jsonRes.Key = res.value.key;
try {
jsonRes.Record = JSON.parse(res.value.value.toString("utf8"));
} catch (err) {
console.log(err);
jsonRes.Record = res.value.value.toString("utf8");
}
allResults.push(jsonRes);
}
if (res.done) {
await resultsIterator.close();
let queryResults = Buffer.from(JSON.stringify(allResults));
console.log(queryResults.toString());
return queryResults;
}
}
}
};
shim.start(new Chaincode());
这是我的密码
{
"name": "helthcare",
"version": "1.3.0",
"description": "Chain code for HRM",
"engines": {
"node": ">=8.4.0",
"npm": ">=6.4.0"
},
"scripts": {
"start": "node helthcare.js"
},
"engine-strict": true,
"author": "Janith Shanilka",
"license": "Apache-2.0",
"dependencies": {
"fabric-shim": "~1.4.0"
}
}
"use strict";
const shim = require("fabric-shim");
const util = require("util");
let Chaincode = class {
async Init(stub) {
//this method is to Initialized the chincode on the channel
console.info("=========== Instantiated HRM chaincode ===========");
return shim.success();
}
async Invoke(stub) {
let ret = stub.getFunctionAndParameters();
console.info(ret);
let method = this[ret.fcn];
if (!method) {
console.error("no function of name:" + ret.fcn + " found");
throw new Error("Received unknown function " + ret.fcn + " invocation");
}
try {
let payload = await method(stub, ret.params);
return shim.success(payload);
} catch (err) {
console.log(err);
return shim.error(err);
}
}
async patientRegistration(stub, args) {
console.info("============= START : Registering a Patient ===========");
if (args.length != 22) {
throw new Error(
`Incorrect number of arguments. Expecting 22 got ${args.length}`
);
}
let patientAsBytes = await stub.getState(args[0]); //get the particular patient from the ledger
//console.log("hiiiii" + driverAsBytes.toString());
if (patientAsBytes.toString()) {
//check weather he is already registered or not
console.log(patientAsBytes.toString());
throw new Error("patient with ID" + args[0] + " Already registered");
}
var patient = {
docType: "patient",
title: args[0],
firstName: args[1],
middlename: args[2],
surname: args[3],
dob: args[4],
sex: args[5],
bloodtype: args[6],
height: [7],
weight: [8],
allergy: [9],
addressline1: args[10],
addressline2: args[11],
city: args[12],
postalcode: args[13],
email: args[14],
contactno: args[15],
etitle: args[16],
efirstName: args[17],
esurname: args[18],
contactno1: args[19],
contactno2: args[20],
erelationship: args[21]
};
await stub.putState(patient.email, Buffer.from(JSON.stringify(patient))); //add new patient to ledger
console.info("============= END : Registering a patient ===========");
}
async addDoctor(stub, args) {
console.info("============= START : Registering a doctor ===========");
if (args.length != 12) {
throw new Error(
`Incorrect number of arguments. Expecting 12 got ${args.length}`
);
}
let doctorAsBytes = await stub.getState(args[0]); //get the particular doctor from ledger
if (doctorAsBytes.toString()) {
console.log(doctorAsBytes.toString());
//check weather he is already registered or not
throw new Error("doctor with RegNo" + args[0] + " Already registered");
}
var doctor = {
docType: "doctor",
title: args[0],
firstName: args[1],
surname: args[2],
medicalregno: args[3],
dob: args[4],
sex: args[5],
speciality: args[6],
addressline1: args[7],
addressline2: args[8],
city: args[8],
postalcode: args[9],
email: args[10],
contactno: args[11],
};
await stub.putState(doctor.email, Buffer.from(JSON.stringify(doctor))); //add new doctor to the ledger
console.info("============= END : Registering a doctor ===========");
}
async makeDiagnosis(stub, args) {
console.info("============ START : Make a Diagnosis ==========");
if (args.length != 6) {
throw new Error(
`Incorrect number of arguments. Expecting 6 got ${args.length}`
);
}
var diagnosis = {
docType: "diagnosis",
id: args[0],
patientid : args[1],
doctorid : args[2],
sysdate : args[3],
systime : args[4],
diagnosis: args[5]
};
await stub.putState(diagnosis.id, Buffer.from(JSON.stringify(diagnosis))); //put the new fine into leadger
console.info("============ END: Make a Diagnosis ==========");
}
async selectNthDoctor(stub, args) {
console.info("============= START : Selecting a doctor ===========");
if (args.length != 1) {
throw new Error(
"Incorrect number of arguments. Expecting regNo ex: doctorhrm@gmail.com"
);
}
let email = args[0];
let doctorAsBytes = await stub.getState(email); //get the officer from state
if (!doctorAsBytes.toString() || doctorAsBytes.toString().length <= 0) {
throw new Error("Officer with Email" + email + " does not exist");
}
console.log(doctorAsBytes.toString());
console.info("============= END : Selecting a doctor ===========");
return doctorAsBytes;
}
async selectNthPatient(stub, args) {
console.info("============= START : Selecting a patient ===========");
if (args.length != 1) {
throw new Error(
"Incorrect number of arguments. Expecting patient Id ex: patienthrm@gmail.com"
);
}
let email = args[0];
let patientAsBytes = await stub.getState(email); //get the offence from ledger
if (!patientAsBytes.toString() || patientAsBytes.toString().length <= 0) {
throw new Error("Offence with Email" + email + " does not exist");
}
console.log(patientAsBytes.toString());
console.info("============= END : Selecting a doctor ===========");
return patientAsBytes;
}
async selectNthDiagnosis(stub, args) {
console.info("============= START : Selecting a diagnosis ===========");
if (args.length != 1) {
throw new Error("Incorrect number of arguments. Expecting ID ex: D001");
}
let dId = args[0];
let diagnosisAsBytes = await stub.getState(dId); //select payment from ledger
if (!diagnosisAsBytes.toString() || diagnosisAsBytes.toString().length <= 0) {
throw new Error("Payment with dId" + dId + " does not exist");
}
console.log(diagnosisAsBytes.toString());
console.info("============= END : Selecting a diagnosis ===========");
return diagnosisAsBytes;
}
async nthDocotorDiagnosis(stub, args) {
console.info("============= START : Mango Query Slecting all diagonsis of Doctors ===========");
if (args.length != 1) {
throw new Error(
"Incorrect number of arguments. Expecting Email ex: doctorhrm@gmail.com"
);
}
let email = args[0];
let query = {
"selector": {
"docType": "diagnosis",
"doctorid": email
}
};
let diagnosisAsBytes = await stub.getQueryResult(JSON.stringify(query));
console.log(diagnosisAsBytes.toString());
console.info("============= END : Mango Query Slecting all diagonsis of Doctors ===========");
return diagnosisAsBytes;
}
async nthPatientDiagnosis(stub, args) {
console.info("============= START : Mango Query Slecting all diagonsis of Patient ===========");
if (args.length != 1) {
throw new Error(
"Incorrect number of arguments. Expecting email ex: patienthrm@gmail.com"
);
}
let email = args[0];
let diagnosisAsBytes = await stub.getQueryResult({
selector: {
docType: "diagnosis",
patientid: email
}
});
console.log(diagnosisAsBytes.toString());
console.info("============= END : Mango Query Slecting all diagonsis of Doctors ===========");
return diagnosisAsBytes;
}
async getAllDoctors(stub, args) {
let queryString = {};
queryString.selector = {};
queryString.selector.docType = "doctor";
let resultsIterator = await stub.getQueryResult(
JSON.stringify(queryString)
);
let allResults = [];
while (true) {
let res = await resultsIterator.next();
if (res.value && res.value.value.toString()) {
let jsonRes = {};
console.log(res.value.value.toString("utf8"));
jsonRes.Key = res.value.key;
try {
jsonRes.Record = JSON.parse(res.value.value.toString("utf8"));
} catch (err) {
console.log(err);
jsonRes.Record = res.value.value.toString("utf8");
}
allResults.push(jsonRes);
}
if (res.done) {
await resultsIterator.close();
let queryResults = Buffer.from(JSON.stringify(allResults));
console.log(queryResults.toString());
return queryResults;
}
}
}
async getAllPatient(stub, args) {
let queryString = {};
queryString.selector = {};
queryString.selector.docType = "patient";
let resultsIterator = await stub.getQueryResult(
JSON.stringify(queryString)
);
let allResults = [];
while (true) {
let res = await resultsIterator.next();
if (res.value && res.value.value.toString()) {
let jsonRes = {};
console.log(res.value.value.toString("utf8"));
jsonRes.Key = res.value.key;
try {
jsonRes.Record = JSON.parse(res.value.value.toString("utf8"));
} catch (err) {
console.log(err);
jsonRes.Record = res.value.value.toString("utf8");
}
allResults.push(jsonRes);
}
if (res.done) {
await resultsIterator.close();
let queryResults = Buffer.from(JSON.stringify(allResults));
console.log(queryResults.toString());
return queryResults;
}
}
}
async getAllDiagnosis(stub, args) {
let queryString = {};
queryString.selector = {};
queryString.selector.docType = "diagnosis";
let resultsIterator = await stub.getQueryResult(
JSON.stringify(queryString)
);
let allResults = [];
while (true) {
let res = await resultsIterator.next();
if (res.value && res.value.value.toString()) {
let jsonRes = {};
console.log(res.value.value.toString("utf8"));
jsonRes.Key = res.value.key;
try {
jsonRes.Record = JSON.parse(res.value.value.toString("utf8"));
} catch (err) {
console.log(err);
jsonRes.Record = res.value.value.toString("utf8");
}
allResults.push(jsonRes);
}
if (res.done) {
await resultsIterator.close();
let queryResults = Buffer.from(JSON.stringify(allResults));
console.log(queryResults.toString());
return queryResults;
}
}
}
};
shim.start(new Chaincode());
“严格使用”;
常数垫片=需要(“织物垫片”);
const util=require(“util”);
让Chaincode=class{
异步初始化(存根){
//此方法用于初始化通道上的chincode
console.info(“================实例化的HRM链码====================”);
返回shim.success();
}
异步调用(存根){
设ret=stub.getFunctionAndParameters();
控制台信息(ret);
let method=this[ret.fcn];
if(!方法){
console.error(“未找到名称为“+ret.fcn+”的函数”);
抛出新错误(“收到的未知函数”+ret.fcn+“调用”);
}
试一试{
让有效载荷=等待方法(存根,ret.params);
返回垫片成功(有效载荷);
}捕捉(错误){
控制台日志(err);
返回垫片错误(err);
}
}
异步patientRegistration(存根、参数){
console.info(“======================开始:注册患者=================”;
如果(参数长度!=22){
抛出新错误(
`参数数不正确。应为22个参数,但得到${args.length}`
);
}
让patientAsBytes=wait stub.getState(args[0]);//从分类账中获取特定患者
//log(“hiiii”+driverAsBytes.toString());
if(patientAsBytes.toString()){
//检查他是否已经注册
log(patientAsBytes.toString());
抛出新错误(“ID为“+args[0]+”的患者已注册”);
}
var患者={
医生类型:“病人”,
标题:args[0],
名字:args[1],
middlename:args[2],
姓氏:args[3],
dob:args[4],
性别:args[5],,
血型:args[6],
身高:[7],
重量:[8],
过敏:[9],
addressline1:args[10],
addressline2:args[11],
城市:args[12],
postalcode:args[13],
电邮:args[14],,
联系人编号:args[15],
etitle:args[16],
efirstName:args[17],
esurname:args[18],
联系人1:args[19],
联系人2:args[20],
相关性:args[21]
};
wait stub.putState(patient.email,Buffer.from(JSON.stringify(patient));//将新患者添加到分类账
console.info(“=========================结束:注册患者==============”;
}
异步addDoctor(存根,参数){
console.info(“======================开始:注册医生====================”;
如果(参数长度!=12){
抛出新错误(
`参数数量不正确。应为12个参数获得${args.length}`
);
}
让doctorAsBytes=wait stub.getState(args[0]);//从分类账中获取特定的医生
if(doctorAsBytes.toString()){
log(doctorAsBytes.toString());
//检查他是否已经注册
抛出新错误(“带RegNo的医生”+args[0]+“已注册”);
}
var医生={
docType:“医生”,
标题:args[0],
名字:args[1],
姓氏:args[2],
medicalregno:args[3],
dob:args[4],
性别:args[5],,
专业:args[6],
addressline1:args[7],
addressline2:args[8],
城市:args[8],
postalcode:args[9],
电邮:args[10],,
联系人编号:args[11],
};
wait stub.putState(doctor.email,Buffer.from(JSON.stringify(doctor));//将新医生添加到分类账
console.info(“=========================结束:注册医生=================”);
}
异步makeDiagnosis(存根、参数){
console.info(“=========================开始:进行诊断==============”;
如果(参数长度!=6){
抛出新错误(
`参数数量不正确。应为6个参数获得${args.length}`
);
}
var诊断={
docType:“诊断”,
id:args[0],
patientid:args[1],
doctorid:args[2],
sysdate:args[3],
系统时间:args[4],
诊断:args[5]
};
等待stub.putState(diagnosis.id,Buffer.from(JSON.stringify(diagnosis));//将新的罚款放入leadger
console.info(“======================结束:进行诊断==============”;
}
异步selectNthDoctor(存根、参数){
console.info(“=========================开始:选择医生=================”;
如果(args.length!=1){
抛出新错误(
“参数数不正确。应为regNo ex:doctorhrm@gmail.com"
);
}
让email=args[0];
让doctorAsBytes=wait stub.getState(email);//从state获取官员
如果(!doctorAsBytes.toString()| | doctorAsBytes.toString().length检查链码的日志。执行docker ps
,然后执行docker logs dev-peer0-something-xxxx
。这将指出部署中的确切错误。如果没有这些日志,很难找出错误。@VarunAgarwal这不是问题所在。但使用fabcar链码,则会创建dev peer0ok,所以我遇到了此类问题。您必须以正确的方式进行调试。链码容器始终启动。之后,它们要么停止并保留为图像,要么被完全删除。您可以执行docker image ls
,因此检查它是否为图像并获取日志。如果代码中存在问题,通常会发生这种情况。如果容器被删除,则删除您必须在docker ps进行实例化时继续执行docker ps
,并在删除自身之前快速捕获日志。这并不理想,但如果需要,我可以这样调试。可以吗