corda - 合约如何强制规定只有某些参与方才能使用线性状态?
问题描述
假设有 3 方的线性状态。合约如何强制只有借款人才能将线性状态从一个生命周期转移到另一个生命周期?
到目前为止,我正在使用的方法是在响应方我正在做的require(obligation.borrower == otherFlow.counterparty)
不确定如何在合同中执行,因为合同无权访问谁发起了交易。
signers == allParticipantsKeys
只是强制每个人都签名,而不是谁应该/不应该花费国家?
通过某种方式获得状态/历史交易的非参与者能否以某种方式花费它?
Lender : Party
Borrower : Party
Bank : Party
participants = listOf(Lender, Borrower, Bank)
解决方案
您无法强制执行有关谁提出交易的规则。
但是,您可以通过在合同中写下这样的内容来强制借款人是必需的签名者:
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)
}
然后你只需要编写流程,如果借款人不是交易的提议者,他们将拒绝签名。
推荐阅读
- c++ - 获取 SFML 窗口的 HWND 和 HInstance?
- excel - 用字母数字字符计算
- vue.js - Change vue router route without changing the URL
- flutter - 如何在 ListTitle 的前导参数中添加自定义图标
- python - Converting list items to string, question on syntax?
- python - 如何根据 Pandas 中第一个数据帧中的某些列值从第二个数据帧添加列值
- php - Laravel/ PHP- 404 路由返回不存在的页面
- python - IndexError: list index out of range coursera assignment
- javascript - 如何在不超时的情况下从javascript中的字符串中删除元音?
- c++ - 使用 C++ 和 i2c-tools 从虚拟 i2c 写入和读取