【问题标题】:Where to check contract constraints在哪里检查合同约束
【发布时间】:2017-12-17 08:56:43
【问题描述】:

从 Corda 的 release-M13 开始,在 CordApp-Tutorial 示例中,在流程本身(ExampleFlow.Acceptor)中进行了一些约束检查。我的问题是,我可以检查流程中的哪些约束,以及合同中的哪些约束?还是只是组织问题?

【问题讨论】:

    标签: constraints corda


    【解决方案1】:

    这是一个很好的问题。我相信你指的是:

        @InitiatedBy(Initiator::class)
        class Acceptor(val otherParty: Party) : FlowLogic<SignedTransaction>() {
            @Suspendable
            override fun call(): SignedTransaction {
                val signTransactionFlow = object : SignTransactionFlow(otherParty) {
                    override fun checkTransaction(stx: SignedTransaction) = requireThat {
                        val output = stx.tx.outputs.single().data
                        "This must be an IOU transaction." using (output is IOUState)
                        val iou = output as IOUState
                        "The IOU's value can't be too high." using (iou.iou.value < 100)
                    }
                }
    
                return subFlow(signTransactionFlow)
            }
        }
    

    CollectSignaturesFlow 及其对应的SignTransactionFlow 自动收集任何类型交易的签名。这种自动化非常有用,因为开发人员不再需要手动编写签名收集流程!但是,开发人员必须注意,给定任何有效交易 - 根据交易中引用的合约代码 - 交易对手将始终签名!这是因为交易是独立验证的,而不是相对于某些预期的外部价值。

    让我举两个例子:

    • 如果我可以访问您之前交易中未使用的现金状态之一,那么也许我可以创建一个现金支出交易(从您到我)并要求您通过CollectSignaturesFlow 签署它。如果交易有效,则无需任何额外检查,您将签署它,这将导致您将现金寄给我。显然你不想要这个!
    • 合约代码只能用于验证交易的一部分。如果您想检查交易是否代表您想要达成的交易,例如价格 SignTransactionFlow 的一部分通过覆盖signTransaction 来完成

    在生产型 CorDapp 中,人们可能希望在是否签署交易和达成交易时听从人的判断。或者,可以通过 HTTP API 或 MQ 联系一些外部参考数据系统来自动执行此过程,以确定该交易是否应该达成。

    在上面的代码示例中,我们添加了两个简单的约束:

    • 防止借款人创建过大(大于 100)的 IOU 状态
    • 确保交易确实包含 IOU 状态而不是我们不期望的其他状态

    请注意,这两个约束不能放在合约代码中。合同代码更适合定义管理资产或协议应如何随时间演变的约束。例如,关于借条:

    请记住,Corda 旨在让可能相互不信任的各方就共同事实达成共识。因此,节点不能隐含地信任他们通过网络从对方收到的内容,因此我们总是必须检查我们收到的内容是我们期望收到的内容。

    希望这是有道理的!

    【讨论】:

      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 2015-08-30
      • 2011-01-28
      • 2017-09-23
      • 2023-03-13
      相关资源
      最近更新 更多