【问题标题】:Transaction state - data type - from string to number conversion - using javascript交易状态——数据类型——从字符串到数字的转换——使用javascript
【发布时间】:2020-01-07 02:42:50
【问题描述】:

我知道从技术上讲 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 时错误仍然存​​在。

【问题讨论】:

  • parseInt() 方法可能是有效的,调试时你检查过'x'和'num'的值吗?很可能它们没有被设置或设置为您认为应该的。
  • 附言。我正在使用@worldsibu/hurley npm 包来设置我的网络并从 CLI 测试我的交易逻辑。是的,这些值是作为字符串发送的,因为当我简单地分配它们而不进行解析和比较时,一切正常。
  • 您能否分享在测试时传递给该方法的内容?就像在 if 块行上放置断点时的“x”和“num”的快照
  • 这个运气好吗?

标签: javascript node.js hyperledger-fabric hyperledger


【解决方案1】:

正如您正确提到 HLF 中的值存储为字节数组一样,您只是错过了在比较之前将 byteArray 转换为字符串的步骤。试试这个:

const xAsString = x.toString();
if(parseInt(xAsString, 10) > parseInt(num, 10)) {
     // then something
 }

我也在考虑您只在状态中存储了一个数字,如果不是这样,则从字符串中提取数字然后进行所需的比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多