赞
踩
共识失败的出现得最多的原因是,各个节点根据读写集模拟的结果不一致。
智能合约四宗“罪” ,时间戳 ,随机数,外部依赖,分布式
1.
fabric 里面随机数和时间戳这些可能产生变动的东西会导致多节点间共识失败。
但是并不是所有的随机数产生方式和时间戳都会导致多节点间不一致。
例如:math/rand 所产生的随机数能在多个节点间保持一致
通过ChaincodeStubInterface 获取stub.GetTxTimestamp()所产生的时间戳也会在多个节点间保持一致,
如果使用的 time.now().unix()获取的时间戳并不能保证在多节点间一致,可能会导致共识失败。
2.
智能合约版本问题
各个节点间,chaincode的版本不一致导致共识失败
智能合约安装升级后,部分节点还没有完成实例化,这种情况下去调用合约,会导致不一致
可以通过 peer chaincode list --instantiated -C channel_name 可以查看到该节点的已经实例化的合约以及版本
也可以通过 peer chaincode list --installed 查看已安装的chaincode 以及版本,进行对比。
3.
在一个方法内对同一个KEY进行getState和putState在并发量高的情况下, 会出现共识失败的风险,并发访问的问题,fabric并不是很友好。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。