【问题标题】:R3- Corda transaction without notary signatureR3- 没有公证人签名的 Corda 交易
【发布时间】:2020-10-01 20:50:18
【问题描述】:

我是 Corda 的新手,我想详细了解公证人的角色。根据文件所说,例如甲方和乙方之间发生交易,公证人将签署交易,公证人的作用是防止双重支出。我们可以在没有公证人签名的情况下进行交易吗?在 TransactionBuilder 类中,它的说法是 var notary:Party?用于交易的公证人。如果为 null,则表明该交易没有公证人。根据语法,我们可以将其设置为 null,如果我们将其设置为 null,则交易是否有效,以及 Corda 如何防止双花。如果我误解了这个概念,请纠正我。

【问题讨论】:

    标签: corda


    【解决方案1】:

    公证人签名仅在以下情况下需要:

    1. 如果您的交易有输入:证明这些输入没有被消耗,防止双花。
    2. 如果您的交易有参考状态:证明这些参考状态没有被消耗,防止使用“过时”的参考数据。
    3. 如果您的交易有时间窗:证明交易在指定的时间窗内完成。

    您可以在FinalityFlow 中看到here 函数needsNotarySignature(),它证明了以上几点。

    【讨论】:

      【解决方案2】:

      我同意阿德尔关于他提到的案件的公证人签名要求的回答。除此之外,交易需要与公证人相关联,它不应该为空。

      人们可能认为不需要公证人的一种情况是发布状态。实际上,不需要公证人的签名,但是,交易仍然需要公证人,因为需要将状态标记为公证人,以防止在状态被消耗时发生双重花费。

      如果没有附加公证人,则状态可以发送给不同的公证人,这可能导致双花。

      您可以在 TransactionBuilder 的 addOutput 方法中验证这一点:

      fun addOutputState(
          state: ContractState,
          contract: ContractClassName = requireNotNullContractClassName(state),
          constraint: AttachmentConstraint = AutomaticPlaceholderConstraint
      ): TransactionBuilder {
          checkNotNull(notary) { "Need to specify a notary for the state, or set a default one on TransactionBuilder initialisation" }
          addOutputState(state, contract, notary!!, constraint = constraint)
          return this
      }
      

      【讨论】:

      • 我们可以在哪里使用 notary 作为 null api.corda.net/api/corda-os/4.4/html/api/kotlin/corda/… TransactionBuilder 类它的说法 var notary: Party?用于交易的公证人。如果为 null,则表示该交易没有公证人
      • 我猜那是不可能的。据我所知,所有交易都应该有公证人。您可能不需要公证人的一种情况可能是当您的应用程序只需要发布状态并且您不在乎它是否被消耗并且它不需要公证人时。为了使这在技术上可行,尽管您可能必须对 txBuilder 进行子类化。
      • 所以你的意思是说,在TransactionBuilder中,参数值可以为null,以防只需要发出状态。否则在语法级别可以将其设置为非空值对吗?
      • TransactionBuilder 中没有,但您需要继承并更新 addOutput() 方法以允许该行为。正如您在答案中的代码中看到的那样,它不允许空公证人。
      • @AshutoshMeher 那么为什么有一个 TransactionBuilder 构造函数,其中 Notary 可以为空?
      猜你喜欢
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多