Hyperledger Fabri c 2.0 добавляет нулевой символ \ u0000 - PullRequest
0 голосов
/ 30 января 2020

У меня возникает странная ситуация, когда я создаю новое состояние. Я адаптировал смарт-контракт на коммерческую бумагу и использую абстракции State и StateList.

У меня есть простой цепной код для создания ресурса с именем 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

Но, очевидно, Fabri c добавляет нулевой символ в начале ключа, который я могу проверить на 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

Это имеет смысл, поскольку фактически в нескольких местах есть нулевые символы. Почему?

...