当前位置: 首页 > 知识库问答 >
问题:

CORDA:交易中合同附件是如何转移的?

古凌
2023-03-14

“使用附件”页面声明:

附件是通过哈希从事务中引用的zip/jar文件,但不包含在事务本身中。

但是,API:Contract Constraints页面声明:

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

但是,在签出HashAttachment代码时,我没有看到它包含了契约Jar文件的内部内容。

我的假设是,我们不是在与交易一起转让合同罐子。所发生的情况可以描述如下:

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

问题:

  1. 交易记录是否包括合同附件?
  2. 合同附件是通过网络传输还是使用本地附件存储中的附件进行验证?
  3. 在我的假设中,我错过了什么?

共有1个答案

田马鲁
2023-03-14

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

当一个节点接收到一个包含它以前没有看到的附件的事务时,Corda会自动从对方获取附件:https://docs.Corda.net/tutorial-attachments.html#protocol

通常,事务上的附件是通过ReceiveTransactionFlow自动提取的。

只要附件小于网络参数的maxTransactionSize:https://docs.corda.net/network-map.html#network-parameters

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

 类似资料:
  • 如果我说一个事务B只有在它对以前的事务a有一些引用时才是有效的,那么我可以在事务B的附件中包含事务a的状态属性/合同代码吗?如何引用此附件,从何处检索?交易B的参与节点是否可以查看交易A的内容进行验证?

  • 我尝试使用uploadAttachemnt方法上传zip文件,得到了一个secureHash作为输出。我试图下载相同的附件,使用hash作为openAttachmnet方法的输入,得到了一个InputStream。当我试图使用BuffeReader读取inputStream的内容时,它被加密了。我意识到我必须解压缩文件并读取它,所以我得到了这个包“import java.util.zip.ZipE

  • 在corda文件中说,即使交易在合同上是有效的,在签署之前也应该检查交易的内容。然而,流似乎自动化了事务签名过程。< br >如何以及何时检查交易内容。

  • 无论我找到什么链接,他们都在谈论更改web.xml或添加AppCong,我不确定在Corda示例项目中如何做到这一点。 小队请帮忙。

  • 我在客户端有PayPal express签出,在使用支付ID启动回调后,我想在NodeJS端检查该ID。我使用JS SDK调用RESTfull API: https://developer.paypal.com/docs/api/payments/v1/#payment_get 我在下面看到这样的物体。 状态已批准,但==挂起 那么,我应该如何检查交易是否完成,资金是否转移给卖家以激活他/她支付的

  • 这是我能够产生问题的代码。