这是读写集语义的文档http://hyperledger-fabric.readthedocs.io/en/latest/readwrite.html,这意味着如果多个事务在同一个块中写入键的值,则只有第一个事务将通过验证并且有效。< / p>
我已经使用java sdk做了一些测试,我使用的链代码是github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02,我将链代码初始化为: instantiateProposalRequest.setArgs(new String [] {“a”,“300”,“b”,“200”)}); 然后我通过使用for循环发送3个事务(每个事务将从a到b移动10个)连续并使它们在同一个块中。在块被持有者持久化后,我查询b的值是210而不是230,我检查了这三个事务的ValidationCode,只有第一个是0表示成功,其他都是11。这个结果与doc完全匹配。
但是在一个块中多次更改同一个键的值是非常正常的情况。例如,有一个慈善机构的申请,所有人都会将钱转移到慈善组织的单一账户,而且tps非常高,这将是一个问题。
在文档的最后,它提到了尚未支持具有多个读写集的事务。谁可以更详细地解释它?它可以解决这个问题吗?
答案 0 :(得分:2)
关于多个读写集应该是什么,我只有未经验证的假设,所以我要保持开放。
另一方面,我认为问题在于example02并没有强调Hyperledger不是分布式数据库 - 它是一个分布式分类帐。如果您想使用Hyperledger实现加密货币,为什么不遵循例如比特币建立的UTXO模型?在这种情况下,您可以直接跟踪“帐户拥有的未使用的交易”,而不是当前的帐户余额。仍然可以计算当前帐户余额,例如在查询操作中作为“分类帐状态视图”,如果你愿意的话。
顺便提一下,我的印象是,Hyperledger能够发挥作用的绝大多数用例都不会像“加密货币一样”。 (而是资产管理,“真正的”合同,政府,......)
如果我可以提出建议:这样的概念性问题可能会在织物邮件列表和RocketChat上的各种渠道上有更好的位置。