单组织双Peer场景下Hyperledger Fabric状态数据库篡改行为测试求助
Hyperledger Fabric 2.3 单组织双Peer节点世界状态篡改测试方案
你当前的单组织2个Peer节点场景无需新增组织,也无需强制把两个Peer都设为背书节点,按以下步骤即可完成测试:
- 第一步:完成链码部署,链码背书策略可直接设置为默认的
AND('Org1MSP.member'),无需调整背书节点配置。先正常调用链码写入测试数据,示例:执行链码invoke操作写入testKey=testValue123,待区块同步完成后分别查询两个Peer节点的testKey,确认两个节点返回值一致,完成基准数据校验。 - 第二步:模拟篡改操作。停掉其中一个Peer节点,直接修改该节点对应状态数据库的存储值:
- 若使用CouchDB作为状态数据库,直接登录对应Peer绑定的CouchDB实例,找到链码对应的数据库,修改
testKey的value为自定义的篡改值,例如tamperedValue456 - 若使用LevelDB作为状态数据库,可使用LevelDB官方读写工具,找到Peer节点存储状态数据的
stateleveldb目录,修改对应testKey的存储值
- 若使用CouchDB作为状态数据库,直接登录对应Peer绑定的CouchDB实例,找到链码对应的数据库,修改
- 第三步:重启被篡改的Peer节点,分别查询两个Peer的
testKey,可以观测到被篡改的节点返回篡改后的值,未被篡改的节点返回原始正常值,此时Fabric无主动告警,因为Fabric仅在交易背书、区块提交两个环节校验状态合法性,无后台主动扫描校验机制。 - 第四步:触发交易验证篡改行为,可观测到两类典型结果:
- 仅使用被篡改的节点作为背书节点发起交易:背书节点读取篡改后的状态生成读写集,交易提交后,正常节点在区块提交阶段校验读写集读版本与本地状态版本不匹配,直接拒绝交易,抛出
MVCC_READ_CONFLICT错误 - 仅使用正常节点作为背书节点发起交易:交易提交到被篡改的节点时,该节点校验读写集读版本与本地篡改后的状态版本不匹配,同样会拒绝交易并标记为无效
- 仅使用被篡改的节点作为背书节点发起交易:背书节点读取篡改后的状态生成读写集,交易提交后,正常节点在区块提交阶段校验读写集读版本与本地状态版本不匹配,直接拒绝交易,抛出
内容的提问来源于stack exchange,提问作者Rajat Bhatt
相关产品推荐
相关产品推荐

