问题描述
我正在尝试编写一个函数,其中两个用户可以在他们之间更改点。这意味着我必须更新成员列表上的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,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
的原始值(即分类帐上的当前值),而不包含您刚刚编写的值。