Corda:合同附件如何在交易中转移?

Corda:合同附件如何在交易中转移?,corda,Corda,该页说明: 附件是通过哈希从事务中引用的ZIP/JAR文件, 但不包括在交易本身中 然而,缔约国指出: 包含state和contract类的JAR,以及可选的 依赖项都附加到事务 还有一个代码片段显示了如何添加合同约束: transaction.addOutputState(state, constraint = HashAttachmentConstraint(serviceHub.cordappProvider.getContractAttachmentID(CONTRACT_ID)!!))

该页说明:

附件是通过哈希从事务中引用的ZIP/JAR文件, 但不包括在交易本身中

然而,缔约国指出:

包含state和contract类的JAR,以及可选的 依赖项都附加到事务

还有一个代码片段显示了如何添加合同约束:

transaction.addOutputState(state, constraint = HashAttachmentConstraint(serviceHub.cordappProvider.getContractAttachmentID(CONTRACT_ID)!!))
然而,在签出代码时,我看不到它包含Contract Jar文件的内部内容

我的假设是,我们没有将合同Jar与事务一起转移。发生的情况可以描述为:

  • 在节点启动期间,Corda扫描所有CorDapps,并将包含合同类的JAR加载到本地附件存储中
  • 事务中的每个输出状态都可以有一个契约约束
  • 在验证阶段,将调用
    验证约束(contractAttachmentsByContract)
    ,并根据节点在其本地存储中的附件验证这些约束(例如HashAttachmentConstraint)
  • 问题:

  • 交易是否包括合同附件
  • 该合同附件将通过网络传输,还是本地附件存储的附件将用于验证
  • 我的假设中遗漏了什么

  • 您认为附件未在事务内部传输是正确的。事务仅包含用于数据引用目的的对附件的哈希引用。这也意味着附件可以在许多事务中重复使用,因为它们是在自己的数据库表中进行链外维护的

    当节点收到包含附件的交易时,Corda将自动从交易对手处获取附件,该交易之前从未见过:

    通常通过
    ReceiveTransactionFlow
    自动获取事务的附件

    只要附件小于网络参数的maxTransactionSize,则无需任何开发工作即可进行此传输:

    maxTransactionSize:事务允许的最大大小(以字节为单位)。这是事务对象及其附件的大小


    此时的合同附件通常由Cordapp开发人员预先分发和签署,并由Corda节点的所有者部署。此时,Cordapps通常不会以编程方式安装。

    您好。这是否意味着自动提取不适用于合同附件?或者甚至自动获取合同附件,并且接收节点不需要预先安装合同jar?@AshishSinha合同附件由接收节点自动获取,如果它们没有合同jar的副本。但是,您必须确保契约jar与接收节点兼容。应该考虑签名约束、最低平台版本和模式兼容性,以确保节点可以运行契约jar。