如何查看Hyperledger Fabric中不匹配的Proposal Responses(提案响应)
查看Hyperledger Fabric不匹配提案响应的操作方法
- 方法1:开启peer CLI调试日志直接查看
执行invoke命令前先设置日志级别为debug:
再执行原invoke命令,调试日志会完整输出所有背书节点返回的提案响应详情,包括每个节点的响应payload、读写集(RW Set)、背书信息,直接对比不同节点的返回内容即可定位差异点。export FABRIC_LOGGING_SPEC=debug - 方法2:单独向每个背书节点请求提案响应对比
分别指定不同的peer节点地址,单独发送提案获取单个节点的返回结果:
示例(请求Org1节点响应):
示例(请求Org2节点响应):peer chaincode query -C mychannel -n basic -c '{"function":"openCashDesk","Args":["1"]}' --peerAddresses peer0.org1.example.com:7051
收集所有节点的返回结果后对比内容差异即可。peer chaincode query -C mychannel -n basic -c '{"function":"openCashDesk","Args":["1"]}' --peerAddresses peer0.org2.example.com:9051 - 方法3:解码序列化的payload后对比
如果你拿到的是protobuf序列化后的二进制payload,可以使用configtxlator工具解码为可读JSON格式:- 先将payload内容保存为二进制文件
payload.bin - 执行解码命令:
解码后的JSON文件可以直观看到读写集、返回值、状态版本等字段,直接对比即可找到不匹配项。configtxlator proto_decode --input payload.bin --type common.ProposalResponsePayload --output payload.json - 先将payload内容保存为二进制文件
补充说明:提案响应不匹配绝大多数是链码非确定性逻辑导致,排查时可优先检查链码是否使用了随机数、节点本地时间、未同步的本地变量这类会导致不同节点执行结果不一致的逻辑。
内容的提问来源于stack exchange,提问作者user746461
相关产品推荐
相关产品推荐

