首页 > 解决方案 > 合约如何强制规定只有某些参与方才能使用线性状态?

问题描述

假设有 3 方的线性状态。合约如何强制只有借款人才能将线性状态从一个生命周期转移到另一个生命周期?

到目前为止,我正在使用的方法是在响应方我正在做的require(obligation.borrower == otherFlow.counterparty)不确定如何在合同中执行,因为合同无权访问谁发起了交易。

signers == allParticipantsKeys只是强制每个人都签名,而不是谁应该/不应该花费国家?

通过某种方式获得状态/历史交易的非参与者能否以某种方式花费它?

Lender : Party
Borrower : Party
Bank : Party
participants = listOf(Lender, Borrower, Bank)

标签: corda

解决方案


您无法强制执行有关谁提出交易的规则。

但是,您可以通过在合同中写下这样的内容来强制借款人是必需的签名者:

requireThat {
    val linearState = tx.inputsOfType<MyLinearState>().single()
    val allRequiredSigners = tx.commands.flatMap { it.signers }

    "The borrower is a required signer." using 
        allRequiredSigners.contains(linearState.borrower)
}

然后你只需要编写流程,如果借款人不是交易的提议者,他们将拒绝签名。


推荐阅读