Hyperledger fabric Hyperledger Fabric 2.0添加空字符\u0000

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

当我创建一个新的状态时,我遇到了一个奇怪的情况。我已经修改了,我正在使用状态和状态列表抽象

我有简单的链码来创建名为log的资产:

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为您完成。