#node.js #list #hyperledger-fabric #hyperledger-chaincode
#node.js #Список #hyperledger-fabric #hyperledger-цепной код
Вопрос:
Итак, я пытался создать простой цепной код лояльности в js.
Я начал с этого репозитория: https://github.com/IBM/customer-loyalty-program-hyperledger-fabric-VSCode/blob/master/contract/lib/customerloyalty.js
И я пытался написать функцию, в которой два пользователя могли бы менять точки между ними. Это означает, что мне пришлось обновить member1 в списке участников и member2 в списке участников.
Проблема в том, что я не могу обновить оба элемента. Только последний (member2) зарегистрирован в списке участника со значением точек обновления.
Это функция для добавления элементов в список и перевода его в состояние цепочки блоков:
async function addElementToList(ctx, listKey, elementJSON){
let currentList = await ctx.stub.getState(listKey);
currentList = JSON.parse(currentList);
currentList.push(elementJSON);
await ctx.stub.putState(listKey, Buffer.from(JSON.stringify(currentList)));
}
И это то, что я пытаюсь сделать в своей функции точек обмена:
//update member's points
member2.points = exchangePoints.points;
member1.points -= exchangePoints.points;
let member1_Stringify = JSON.stringify(member1);
let member2_Stringify = JSON.stringify(member2);
let exchangePointsStringify = JSON.stringify(exchangePoints);
await utils.addElementToList(ctx, allMembersKey, member1_Stringify); //update member1 in member's list
await utils.addElementToList(ctx, exchangePointsKey, exchangePointsStringify); //add to earn points list
await utils.addElementToList(ctx, allMembersKey, member2_Stringify); //update member2 in member's list
return exchangePointsStringify;
Кто-нибудь знает, как я могу это исправить?
Большое спасибо!
Ответ №1:
Проблема в том, что вы не можете прочитать свои собственные записи в chaincode, как описано в документации по семантике набора чтения-записи. В принципе, если у вас есть ключ, который в настоящее время содержит текст current stuff
в мировом состоянии (т.Е. Был зафиксирован), и Вы делаете следующее
await ctx.stub.putState(key, Buffer.from('new data'));
const readvalue = ctx.stub.getState(key).toString();
тогда значение readvalue будет содержать исходное значение current stuff
(т. Е. Текущее значение в книге), Оно не будет содержать значение, которое вы только что записали.
Комментарии:
1. Хорошо, я этого не знал. Как я могу это исправить? Большое спасибо за ваш ответ 🙂
2. Не уверен, что вы под
fix
этим подразумеваете. Так оно и работает, вы не можете изменить поведение, вам нужно изменить свое приложение, чтобы приспособиться к этому.