Using Attachments页面状态:
附件是通过哈希从交易中引用的ZIP / JAR文件, 但不包含在交易本身中。
但是,API: Contract Constraints page指出:
包含状态和合同类的JAR,以及可选的 依赖项,都与交易相关。
有一个代码片段显示了如何添加合同约束:
transaction.addOutputState(state, constraint = HashAttachmentConstraint(serviceHub.cordappProvider.getContractAttachmentID(CONTRACT_ID)!!))
但是,在签出 HashAttachment 代码时,我看不到它包含Contract Jar文件的内部内容。
我的假设是我们不会随交易转移合约罐。发生的情况可以描述:
verifyConstraints(contractAttachmentsByContract)
,并针对Node在其本地存储中具有的附件验证这些约束(例如HashAttachmentConstraint)。问题:
答案 0 :(得分:4)
您是正确的,附件不会在事务内转移。事务仅包含对附件的哈希引用,以用于数据引用。这也意味着,由于附件在自己的数据库表中脱链维护,因此可以在许多事务中重复使用附件。
当节点收到包含附件的交易时,Corda会自动从交易对手获取附件之前未曾见过它:https://docs.corda.net/tutorial-attachments.html#protocol
通常,交易附件通过
ReceiveTransactionFlow
自动获取。
只要附件的大小小于网络参数https://docs.corda.net/network-map.html#network-parameters
的maxTransactionSize,就可以进行这种传输而无需任何开发工作maxTransactionSize:事务的最大允许大小(以字节为单位)。这是事务对象及其附件的大小。
此时,合同附件通常由Cordapp开发人员预先分发和签名,并由Corda节点的所有者部署。目前,通常还没有以编程方式安装Cordapps。