Hyperledger fabric Hyperledger Fabric 2.0添加空字符\u0000
当我创建一个新的状态时,我遇到了一个奇怪的情况。我已经修改了,我正在使用状态和状态列表抽象 我有简单的链码来创建名为log的资产:Hyperledger fabric Hyperledger Fabric 2.0添加空字符\u0000,hyperledger-fabric,blockchain,Hyperledger Fabric,Blockchain,当我创建一个新的状态时,我遇到了一个奇怪的情况。我已经修改了,我正在使用状态和状态列表抽象 我有简单的链码来创建名为log的资产: async createLog(ctx, loggerName, logId, ...) { //Check if client is a Logger let log = Log.createInstance(loggerName, logId, logOriginalTimestamp, idAudit, typeAuditID, au
async createLog(ctx, loggerName, logId, ...) {
//Check if client is a Logger
let log = Log.createInstance(loggerName, logId, logOriginalTimestamp, idAudit, typeAuditID, auditText, auditUtilUPN, auditHostIP, processo, CuditMCcCdress);
// Add the log to the list of all similar commercial papers in the ledger world state
await ctx.LogList.addLog(log);
...
}
我创建了一个带有loggerName和logId的复合键
class Log extends State {
constructor(obj) {
super(Log.getClass(), [obj.loggerName, obj.logId]);
Object.assign(this, obj);
}
我使用以下命令添加日志:
peer chaincode invoke -o orderer.example.com:7050 --channelID mychannel --name logs -c '{"function":"org.Log:createLog", "Args":["1","1"]}' --waitForEvent
但是很明显,Fabric在密钥的开头添加了一个空字符,我可以在CouchDB上检查:
{
"id": "\u0000org.loglist\u0000\"1\"\u0000\"1\"\u0000",
"key": "\u0000org.loglist\u0000\"1\"\u0000\"1\"\u0000",
"value": {
"rev": "1-c153101fc7cb0d5c363f893857ac221a"
},
"doc": {
"_id": "\u0000org.loglist\u0000\"1\"\u0000\"1\"\u0000",
"_rev": "1-c153101fc7cb0d5c363f893857ac221a",
...
"key": "\"1\":\"1\"",
"logId": "1",
...
"~version": "CgMBAwA="
}
}
当我查询对象时,我得到一个错误:
Error: first character of the key [org.Log"1""1"] contains a null character which is not allowed
这是有道理的,因为实际上在几个地方都有空字符。为什么?我相信这些是复合键组件分隔符,所以将键拆分为复合键组件。那么,我必须使用查询方法从复合键获取状态@david_kt这是一种方法,我相信可以直接查询Coach并处理返回的信息,它只是通过chaincode查询API为您完成。