【问题标题】:Can a non participant party update the state in corda?非参与方可以更新corda中的状态吗?
【发布时间】:2018-05-22 17:22:37
【问题描述】:

非参与方可以更新corda中的状态吗?在我的用例中,我需要由非参与者更新状态。那可能吗?或者我可以在一个状态中声明一个可以为空的参与者吗?

【问题讨论】:

    标签: corda


    【解决方案1】:

    participants 字段或owner 字段未定义谁可以更新状态:

    • 任何人都可以提议更新状态的交易
    • 要成为分类帐的一部分,它必须由所有必需的签名者签名
    • 所需签署人由州合同确定

    participants 和所需的签名者之间不需要有任何对应关系。它们可以完全不同。

    【讨论】:

    • 您建议如何在合同中强制执行只有参与者才能发起更新?
    【解决方案2】:

    LinearState 中的任何participantsOwnableState 中的owner 都只能更新账本上存在的状态。

    可以为空的参与者:

    您可以在 State 类中定义可空的 Party? 字段,然后如果它具有非空值,那么您可以添加它 participants Corda 状态列表。

    data class DummyTestState(val partyA: Party,
                              val partyB: Party?,
                              val messageNote: String,
                              override val linearId: UniqueIdentifier = UniqueIdentifier(),
                              override val participants: List<AbstractParty> = listOf(partyA)
    ) : LinearState
    

    【讨论】:

    • 那么我可以将PartyB 加入到参与者列表中吗?
    • 如何在参与者列表中添加可空方?获得价值后?在这种情况下,如何在获得 B 方的价值后将 B 方(最初可以为空)添加到参与者中?。
    • 您不能将可以为空的一方添加到参与者列表中。将来只要partyB 具有非空值,则只有它可能。您可以编写一个流来更新现有状态以设置partyB 的值并将其添加到participants 列表中。
    • 例如newState = state.copy(partyB=partyB,participants=listOf(partyA, partyB!!))
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2019-04-17
    • 2019-03-09
    相关资源
    最近更新 更多