最近在学习hyperledger fabric,遇到了好多坑。其中在链码中使用putState去保存一头猪的数据时,始终无法成功,但在初始化链码时却可以正常保存数据。
chaincode中保存猪的信息的函数:
//记录一头猪的信息
async recordPig(stub, args) {
var pig={
breed:"大白猪", //猪的品种
birthday: "2020-4-15", //猪的出生日期
feed: "s", //猪饲料的品种
drug: "a", //养殖用药
feederId: "但是", //养殖工id
farmId: "第三方", //养殖场id
weight:"sdf", //猪的出厂体重
health: "sdfs", //猪的健康状态
holder:"dsdf",
state:"sdfs"//状态
};
await stub.putState('PIG'+3, Buffer.from(JSON.stringify(pig)));
console.info('Added <--> ', pig);
}
server.js中的部分代码:
var query=async(fcn,args)=>{
try{
var state_store=await Fabric_Client.newDefaultKeyValueStore({path:store_path});
fabric_client.setStateStore(state_store);
var crypto_suite=Fabric_Client.newCryptoSuite();
var crypto_store=Fabric_Client.newCryptoKeyStore({path:store_path});
crypto_suite.setCryptoKeyStore(crypto_store);
fabric_client.setCryptoSuite(crypto_suite);
var user_from_store=await fabric_client.getUserContext('user1',true);
if(user_from_store&&user_from_store.isEnrolled()){
console.log('Successfully loaded user1 from persistence');
member_user=user_from_store;
}else{
throw new Error('Failed to get user1... run registerUser.js');
}
const request={
chaincodeId:'psctscc',
fcn:fcn, //修改为要调用的chaincode中的方法
args:args
};
var query_responses=await channel.queryByChaincode(request);
console.log("Query has completed, checking results");
console.log(query_responses);
console.log(query_responses.length);
if(query_responses&&query_responses.length==1){
if(query_responses[0] instanceof Error){
console.error("error from query = ",query_responses[0]);
}else{
console.log("Response is ",query_responses[0].toString());
return query_responses[0].toString();
}
}else{
console.log("No payloads were returned from query");
}
}catch(err){
console.error('Failed to query successfully ::'+err);
}
};
运行结果: