У меня возникает странная ситуация, когда я создаю новое состояние. Я адаптировал смарт-контракт на коммерческую бумагу и использую абстракции 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
Это имеет смысл, поскольку фактически в нескольких местах есть нулевые символы. Почему?