Corda技术理解之交易追溯过程记录

Corda技术关于交易数据的描述
  1. 我对交易数据写入Corda数据库中的理解
    对于存入Corda数据库中的交易数据,后续可以对此交易数据进行“修改”,这里的修改不是真正意义上的修改,而是把原来的数据在数据库中进行标记。在区块链技术中,我们称之为消费,然后再把新数据create到数据库中。这样就会形成这条数据的历史记录,不过只有当前的记录是未消费的,被标记了的则是消费了的,被标记只是一个字段的状态值,在Corda中表vault_status中state_status字段1.

  1. 这里展示一个例子来说明
描述idnameagecompanyhobby
第一次走Corda数据库123456Karan22GoogleEnglish
第二次走Corda数据库123456Ted22S-labsIT
第三次走Corda数据库123456Sara21AliIT
第四次走Corda数据库123456Sanding26S-labsJava

注意:这上链的三条数据的唯一标识id都是123456

在Corda节点中的数据库中的状态就是,Karan和Ted和Sara这三条数据是被标记为消费了的,而Sanding这条数据是有效的。


  1. 需求:要追溯 id = 123456 的数据
    需求理解:因为Corda的查询机制是,默认查询出来的记录是有效的,就是未被消费的数据。

  1. 在追溯此数据的过程中,问题记录

常规写法
Corda访问数据库的查询方式
Vault.StateStatus.ALL代表查询出被消费了和未被消费的。然后拼接一个唯一标识Id条件。

注意:上图中是用QueryCriteria.VaultQueryCriteria

结果
利用上面Corda数据库中的四条数据来描述,查询出来的还是未被消费的,根本就没有达到追溯的结果,查询出来是第四条,是不是很不能理解?


执行过程中内存快照
在这里插入图片描述
经过多次实验,内存快照图说明如下几点:
1. var criteria: QueryCriteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.UNCONSUMED)
默认就是UNCONSUMED可以不用写。
2. 如果写上criteria.and{ }来进行拼接,如果不加入条件的话,Corda对于拼接的每一个条件默认都添加了一个未被消费的状态。
3.如上图所示,一个条件我设置为消费了的,拼接的第二条件,默认给的未被消费的,查询出来是未被消费的(也就是例子中的第三条)。
4.当你拼接多个条件时,Corda中的criteria的格式永远是,a , b两个。假如这个criteria拼接了三个条件,那么a下面有两个,a 和 b;而b下面是最后一个拼接条件。


猜测并实验

  1. 既然每个拼接的条件的status的默认值是UNCONSUMED,而第一个条件我的写法是
    var criteria: QueryCriteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.CONSUMED)
    而第二个拼接条件默认是UNCONSUMED,且无法修改。查询出来的结果就是UNCONSUMED,也就是第二覆盖了第一个。那我就交换位置,先拼接id这个条件,反正Corda会给个默认的status值,我最后一个条件设置为已经被消费的,就可以了。实验结果就是,查询出被消费的所有记录。

  2. 那我可以criteria.or() 我第一个条件是消费了的,第二条件我用or()方法去拼接,因为第二个条件默认值是未被消费的。 实验结果就是,只能查询出未被消费的记录。

  3. 既然最后的条件是覆盖前面的,那最后的条件拼接如下:
    var criteria: QueryCriteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.ALL)
    这样查询出来是根据前面拼接的条件决定的,比如是消费了,则查询出来是消费了的。他们取交集。


解决问题的写法
在这里插入图片描述
如上图中的写法就可以实现查询到未被消费了的和消费了的,根据唯一标识id。


结论

  1. Corda中的查询所有的条件都是UNCONSUMED.
  2. 无论多少个条件,Corda的查询的格式都是a 和 b , 如果大于2个,在a下面有a , b, c …
  3. 最后一个条件可以覆盖前面的条件,但是当最后的一个条件是ALL的时候,却无法覆盖前面的条件。
  4. 无论是拼接and 还是or 采用 QueryCriteria. VaultQueryCriteria的方式都无法完成追溯的需求。
  5. 如果就是要QueryCriteria. VaultQueryCriteria来完成追溯需求呢?
    利用程序分步骤查询,然后拼接结果,响应给前台。
    但是,像这样的数据,一般前端是分页展示,第一页有未被消费的记录,而第二页以后都没有,完成功能需要,肯定是可以的,但是特麻烦。

小结

  1. 首先,我谈了下我对Corda数据库中的交易数据的一个理解。
  2. 其次,使用表格的方式,构建了一个非常简单的例子。然后记录探索过程的心路历程。
  3. 最后,我通过猜测并实验,获得了一个追溯此数据的正确写法。最后得出关于Corda技术的总结知识。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值