我正在使用测试网络。
我发现一旦我执行某些操作并运行以下命令,Hyperledger就会抛出错误
$ peer chaincode invoke -C mychannel -n basic -C '{"function";openCashDesk"; "Args":["1"]}'
错误:cannot assemble transaction: ProposalResponsePayloads不匹配-提案响应:version:1 response:
正如https://hyperledger-fabric.readthedocs.io/en/release/txflow.html所说的"The application…比较提案响应以确定提案响应是否相同,如何查看不匹配的提案响应?
您可以简单地记录您从链码返回的内容并检查日志。
链码中导致提案响应不匹配的典型错误:
- 使用随机数或uid。
- 使用当前时间戳(例如,而不是事务时间戳)
- 以不确定的方式返回序列化为字符串的对象。例如,在返回JSON对象之前将其转换为字符串。对等体1序列化元素"在元素"b"之前,但是peer 2序列化"b"前"a">
- 使用外部服务而不需要oracle。
- 依赖于链码内存状态而不是世界状态,因为如果你在做这样的事情,第一个可能在对等体之间不同。
一般来说,你能想到的任何东西都会导致不同的对等体对相同的链码操作返回不同的响应。智能合约必须是确定性的。