在 Corda 中验证流

Verifying flows in Corda

notary/node 如何在收到交易时验证特定流程是否已被调用?

这是否意味着 Corda 可以保证流程与相应的 Cordapp 中声明的内容没有被修改?

详细:

  1. 这是一种 DLT(分布式账本技术);所以从某种意义上说,你不能真正相信任何人。
  2. 公证人不接收流量,它接收交易并确保没有双花(即已消耗的输入不会再次被消耗)。
  3. 即使你给了一个节点你的 CorDapp,它也可以覆盖响应流。请参阅下面的链接。
  4. 关于响应者流的错误假设:https://www.corda.net/blog/corda-flow-responder-wrong-assumptions/
  5. 配置响应程序流:https://docs.corda.net/flow-overriding.html
  6. 覆盖来自外部 CorDapps 的流程:https://dzone.com/articles/extending-and-overriding-flows-from-external-corda
  7. 当您在发起者与其响应者之间发送和接收数据时;接收到的数据(两端)被认为是不可信的;你必须打开它并验证它:https://docs.corda.net/api-flows.html#receive

简而言之:

  1. 您的发起者必须验证从响应者收到的任何数据。
  2. 您的响应者必须验证从发起者接收到的任何数据;另外,如果您希望发起者是某个实体,则必须验证对方(向您发送流会话的人)是您期望的人(例如 flowSession.counterParty == "O=Good Org, L=London, C=UK") .

Adel 的回答涵盖了从应用程序流程级别不信任您的交易对手的正确方法,但也有可以使用的操作保护。强大的合约可以帮助防止错误形成的交易,因为 Corda 不允许在设置良好的网络中使用未知合约。

网络参数定义了哪些智能合约 cordapp jar 可以接受验证。最常见的合同约束形式是签名约束,这意味着可以接受由同一开发人员密钥签署的任何合同 jar。这可以防止恶意交易对手强迫您 运行 弱验证:https://docs.corda.net/api-contract-constraints.html#signature-constraints

从 Corda 4 开始,任何无法识别的合约 cordapp jar 都不会被信任,除非节点运营商明确告诉 Corda 信任该 jar。 https://docs.corda.net/cordapp-build-systems.html#cordapp-contract-attachments 一旦签名被信任,那么未来由该签名签名的任何 jar 都将被隐式信任。