Corda 遍历分类账

Corda 遍历分类账,corda,Corda,我设置了一个cordapp,可以在每次交易中上传附件。附件是与tx相关的唯一标识符列表的压缩文件。我试图实现禁止相同唯一标识符在后续事务中再次出现的逻辑。假设我有一个初始tx,附件清单A、B、C、D、E,它通过了。然后我有附件F、G、H的Tx 2a和附件C、F、G、H的Tx 2b。我希望2a被接受,但2b被拒绝 我试图找出存储和查询标识符历史记录的最佳方法。我知道附件将保存到tx历史记录中,但遍历分类账并打开/读取所有附件以确保没有重复的内容在我们扩展时显得非常密集(附件更有可能列出数千个唯一标

我设置了一个cordapp,可以在每次交易中上传附件。附件是与tx相关的唯一标识符列表的压缩文件。我试图实现禁止相同唯一标识符在后续事务中再次出现的逻辑。假设我有一个初始tx,附件清单A、B、C、D、E,它通过了。然后我有附件F、G、H的Tx 2a和附件C、F、G、H的Tx 2b。我希望2a被接受,但2b被拒绝

我试图找出存储和查询标识符历史记录的最佳方法。我知道附件将保存到tx历史记录中,但遍历分类账并打开/读取所有附件以确保没有重复的内容在我们扩展时显得非常密集(附件更有可能列出数千个唯一标识符,而不是5个)

在数据库上创建一个只包含所有已使用ID的表(甚至可能是vault的分类帐外部分)是否可行?负责检查冗余的节点可以读取传入的附件、查询表、检查冗余、签署发送,然后将新ID插入表中?或者我们可以做一些更好的事情,包括实际遍历分类账


谢谢

假设没有数以百万计的标识符,并且如果您不介意所有过去的标识符都在当前版本的状态中,那么您可以在状态中,在
集合中累积它们
设置将确保没有重复。这种方法的好处是,您可以在契约内执行检查逻辑

如果您不关心在合同中执行这些检查,那么您可以执行您建议的方法之一:

  • 正如您正确指出的,“遍历分类账”实际上只是执行一系列低效的数据库查询
  • 你建议的另一种方法似乎是个好主意。保留一个带有标识符的分类帐外数据库表。目前正在开发一项功能,以使这项工作更容易。同时,您可以使用
    ServiceHub.jdbcConnection
    对数据库执行查询
您选择哪一个取决于用例的其他方面

您可以尝试的一件事是在状态对象内维护一个bloom过滤器。通过这种方式,您可以获得节省空间的数据结构和快速设置成员资格检查。每次添加标识符时,都必须更新过滤器。可能是值得一看的东西

干杯