以相同的方法多次更新相同的列表 - Hyperledger Fabric Chaincode node js
Updating same list, multiple times in the same method - Hyperledger Fabric Chaincode node js
所以我试图在 js 中构建一个简单的忠诚度链代码。
我从这个 repo 开始: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;
有人知道我该如何解决这个问题吗?
非常感谢!
问题是您无法在链代码中读取自己的写入,如 Read-Write set semantics documentation 中所述。基本上,如果您有一个当前在世界状态(即已提交)中包含文本 current stuff
的密钥,并且您执行以下操作
await ctx.stub.putState(key, Buffer.from('new data'));
const readvalue = ctx.stub.getState(key).toString();
那么 readvalue 将包含 current stuff
的原始值(即账本上的当前值),它不会包含您刚刚写入的值。
所以我试图在 js 中构建一个简单的忠诚度链代码。
我从这个 repo 开始: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;
有人知道我该如何解决这个问题吗?
非常感谢!
问题是您无法在链代码中读取自己的写入,如 Read-Write set semantics documentation 中所述。基本上,如果您有一个当前在世界状态(即已提交)中包含文本 current stuff
的密钥,并且您执行以下操作
await ctx.stub.putState(key, Buffer.from('new data'));
const readvalue = ctx.stub.getState(key).toString();
那么 readvalue 将包含 current stuff
的原始值(即账本上的当前值),它不会包含您刚刚写入的值。