我正在开展一个小项目,让自己熟悉Hyperledger Fabric。
目前,我有一个小型网络,由docker-compose.yml
中定义的单个peer,orderer和ca节点(加上cli,chaincode和explorer)组成。我已经安装了示例链码,chaincode_example02更具体 分类帐的初始状态为A:100,B:200,由
定义peer chaincode instantiate -n mycc -v 0 -c '{"Args":["init","a","100","b","200"]}' -C myc
当我执行转移时,一切都按预期工作
peer chaincode invoke -n mycc -c '{"Args":["invoke","a","b","10"]}' -C myc
这是10个单位从A转移到B
BUT 当我跑步时,让我们说3笔交易,
for i in {1..3}
do
peer chaincode invoke -n mycc -c '{"Args":["invoke","a","b","10"]}' -C myc
done
因此我在一个区块中有三个交易,但每个交易都相同,并且由于这三个交易我只转移了10个单位,而我预计会有30个单位。
我的问题是:我是否需要诉诸high throughoutput解决方案来进行确定性交易?或者有另一种方法来实现它(例如使用事件)?
答案 0 :(得分:1)
将这三个事务放在同一个块中意味着只有一个事务成功,因为它们中的所有三个都写入相同的密钥。成功的交易是第一个,而剩下的两个将被视为并发,因此无效。
链代码模拟/调用的结果是读写集,其中包含键,值和修改版本。尝试修改具有相同或过期版本的密钥的事务在块提交期间未通过MVCC(多值并发控制)检查。