在讨论v1.0示例时,我遇到了困惑。
据我了解,查询不会更改分类帐,因为它是在本地执行的(例如,没有订购,提交,认可)。
但这是来自来电者的观点。在链代码中,它只是在给定所有CA和信息有效的情况下执行客户端调用的任何内容。
例如,如果我打电话
peer chaincode query -C mychannel -n chaincode -c '{"Args":["query", "a"]}'
这没关系。它只是查询一个。
但如果我打电话
peer chaincode query -C mychannel -n chaincode -c '{"Args":["**invoke**", "a"]}'
如果调用涉及在分类帐上书写,那么行为会是什么?
另一方面,如果我在查询方法上调用invoke
(e.g. peer chaincode invoke ~~~ {"Args":["query", "a"]})
会有什么行为?
据我了解,实际的链码无法区分是查询还是调用。它只是执行链码方法。
我远吗?
答案 0 :(得分:1)
确实这有点令人困惑,特别是考虑到使用cli
工具时不太明显的事情。这是事情,当你使用peer cli命令调用时,流程如下:
- 您将交易提案发送给支持同行
- 支持同伴执行交易模拟并签署结果
- 客户收到结果并将其发送至订购服务
- 订购服务削减了块
- 阻止交付给同行
- 同行验证交易
- 最终阻止附加到区块链
醇>
现在有不同之处,当您使用query
参数键运行peer cli时,它只会执行:
- 您将交易提案发送给支持同行
- 支持同伴执行交易模拟并签署结果
醇>
因此,由于结果不会发送到订购服务,因此对最终的对等状态没有影响,因为即使您的链代码进行了任何更改,它也不会被提交。