我从技术上知道Fabric
存储键-值对,其中键是字符串,值是字节数组。
我如何仅在交易代码中使用Number
数据类型进行比较?我猜测实际上所有内容都存储在字符串中吗?
我想检查新的num
值是否大于已写入总帐的x
值,parseInt
似乎不起作用。
async transaction(ctx, id, num){
const x = await ctx.stub.getState(id);
if(parseInt(x, 10) > parseInt(num, 10)) {
// then something
}
}
编辑:已解决,事实证明,当我使用fabric-network
API从客户端应用程序调用我的事务时,比较正常,但是使用@worldsibu/hurley
的CLI时错误仍然存在。
正如您正确提到的那样,HLF中的值存储为字节数组,您只是在比较之前错过了将byteArray转换为字符串的步骤。试试这个:
const xAsString = x.toString();
if(parseInt(xAsString, 10) > parseInt(num, 10)) {
// then something
}
我还考虑您仅在状态中存储了一个数字,如果不是,则从字符串中提取该数字,然后进行所需的比较。