【问题标题】:Corda: How Contract Attachments are being transferred in Transaction?Corda:如何在交易中传输合同附件?
【发布时间】:2019-06-13 05:40:02
【问题描述】:

Using Attachments 页面声明:

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

但是,API: Contract Constraints page 声明:

包含状态和合同类的 JAR,以及可选的它的 依赖关系,都附加到事务中。

还有一段代码 sn-p 展示了如何添加合约约束:

transaction.addOutputState(state, constraint = HashAttachmentConstraint(serviceHub.cordappProvider.getContractAttachmentID(CONTRACT_ID)!!))

但是,在查看 HashAttachment 代码时,我没有看到它包含 Contract Jar 文件的内部结构。

我的假设是我们不会将 Contract Jar 与交易一起转移。可以描述会发生什么:

  1. 在节点启动期间,Corda 会扫描所有 CorDapp,并将包含 Contract 类的 jar 加载到本地附件存储中。
  2. 事务中的每个输出状态都可以有一个合同约束。
  3. 在验证阶段,verifyConstraints(contractAttachmentsByContract) 将被调用,这些约束(例如 HashAttachmentConstraint)将根据 Node 在其本地存储中的附件进行验证。

问题:

  1. 交易是否包含合同附件?
  2. 该合同附件是通过网络传输还是使用本地附件存储中的附件进行验证?
  3. 我的假设中遗漏了什么?

【问题讨论】:

    标签: corda


    【解决方案1】:

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

    当一个节点收到一个包含它之前没有看到的附件的交易时,Corda 会自动从交易对手那里获取附件:https://docs.corda.net/tutorial-attachments.html#protocol

    交易的附件通常通过ReceiveTransactionFlow自动获取。

    只要附件小于网络参数的 maxTransactionSize,此传输无需任何开发工作即可发生:https://docs.corda.net/network-map.html#network-parameters

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

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

    【讨论】:

    • 嗨。这是否意味着自动提取不适用于合同附件?甚至合约附件是自动获取的,接收节点不需要预装合约jar?
    • @AshishSinha 如果合约附件没有合约 jar 的副本,接收节点会自动获取它们。但是,您必须确保合约 jar 与接收节点兼容。应考虑签名约束、最低平台版本和架构兼容性,以确保节点可以运行合约 jar。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    相关资源
    最近更新 更多