【问题标题】:getStateByRange() returning empty iterator for in Hyperledger Fabric Java SDKgetStateByRange() 在 Hyperledger Fabric Java SDK 中返回空迭代器
【发布时间】:2020-03-28 17:28:00
【问题描述】:

我正在尝试获取分类帐中的所有条目(Fabric 1.4.4,使用 Java 链码):

QueryResultsIterator<KeyValue> iterator = ctx.getStub().getStateByRange("","");

但我总是得到一个空的迭代器。这是获取所有条目的正确方法吗?

(至少一种获取所有密钥的方法对我有用,因为我可以一个一个地获取状态,但为此我需要所有密钥)

【问题讨论】:

  • 这看起来是正确的方法。看看this 示例,以防万一您在迭代时遗漏了一些东西。正如here 所提到的,您可以采取的另一种可能的方法是,只需使用您放入世界状态的密钥更改事件有效负载。
  • 我会检查这些链接,谢谢。问题是我没有钥匙。 SmartContract 有一个方法需要遍历存储的所有值以执行校验和并返回它,所以我需要获取所有条目(或获取所有键并一个一个地迭代,这样就可以了)
  • 是的,该方法是 getStateByRange,它应该可以工作,但不知何故不起作用,请查看这些链接,如果它们有帮助,请告诉我。
  • 我添加了回复:getStateByRange("A","Z") 对我有用,但可能不适合所有人。我认为 getStateByRange("","") 肯定不起作用,否则我的解决方法也不应该起作用。
  • @EduardoPascualAseff 与我的结果一样。也许 icordoba 对我们有帮助。

标签: java hyperledger-fabric hyperledger-chaincode


【解决方案1】:

我不确定归还整个区块链是个好主意。

无论如何,您可以通过使用获取单个键的历史记录

APIstub.GetHistoryForKey(id)

这将返回该特定 id 所涉及的所有事务

【讨论】:

  • 谢谢,但我确实需要获取所有状态(不是真正的所有区块链,但至少是所有密钥)。 GetHistoryForKey(id) 不起作用,因为我可能不知道要请求的 id。
【解决方案2】:

由于某种原因 getStateByRange("","") 在 Fabric Java SDK 中不起作用,但这会起作用:

getStateByRange("A","Z")

(我所有的 id 都以大写字母开头,所以我得到所有条目)

【讨论】:

  • 似乎 getStateByRange 在这一天没有修复,因为对我也不起作用。这很令人沮丧。
  • getStateByRange 对我不起作用,无论我使用什么字符串!!!!!!
  • 非常感谢您提供的奇怪解决方案,但它确实对我有帮助。
【解决方案3】:

问题是getStateByRange 无法返回使用复合键存储的状态

如果你直接使用:

await ctx.stub.putState('objName', Buffer.from(JSON.stringify(obj)));
    

会有用的

但是如果你使用像这样的复合键

   let key = ctx.stub.createCompositeKey("objName", [obj]);
   await ctx.stub.putState('objName', Buffer.from(JSON.stringify(obj))); 

它将返回一个空响应。

原因是 getStateByRange 使用空分隔符 \u0000 分隔关键部分,然后存储的状态将不会返回(例如 {"Key":"\u0000objName\u0000obj1\u0000","Record":"\u0000"} )。 要在使用复合键时读取状态,您需要使用 getStateByPartialCompositeKey

【讨论】:

  • getStateByPartialCompositeKey 就像一个带有复合键的魅力。我想知道为什么文档没有说明getStateByRange 不能与复合键一起使用这一事实。我也不清楚getStateByRange 不支持ChaincodeStub.createCompositeKey(String key) 作为搜索模式的原因
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
相关资源
最近更新 更多