Corda 我们应该如何升级一个由一个DL参与者拥有但其参与者列表包含多个参与者的国家?

Corda 我们应该如何升级一个由一个DL参与者拥有但其参与者列表包含多个参与者的国家?,corda,Corda,我正在寻找正确的合同升级流程。考虑下面的例子: SimpleContract : Contract { data class State(override val owner: AbstractParty, val relevantParticipant: AbstractParty) : OwnableState { override val participants: List<AbstractParty> = listOf(own

我正在寻找正确的合同升级流程。考虑下面的例子:

    SimpleContract : Contract {
        data class State(override val owner: AbstractParty, val relevantParticipant: AbstractParty) : OwnableState {
            override val participants: List<AbstractParty> = listOf(owner, relevantParticipant)
            override fun withNewOwner(newOwner: AbstractParty): CommandAndState
            = CommandAndState(Commands.Move(), copy(owner = newOwner))
        }
    }
SimpleContract:合同{
数据类状态(覆盖val所有者:AbstractParty,val相关参与者:AbstractParty):OwnableState{
覆盖val参与者:列表=列表(所有者、相关参与者)
用newOwner覆盖乐趣(newOwner:AbstractParty):commandState
=commandState(Commands.Move(),copy(owner=newOwner))
}
}

据我所知,此状态仅存储在所有者的vault中,但相关参与者还拥有(在其事务存储中)SimpleContact.state是输出之一的事务。如果所有者(授权并)启动升级,则流程将失败,因为相关参与者没有授权的合同升级。这里的正确方法是什么?

一种解决方案是所有者将
StateRef
发送给
相关参与者。
相关参与者可以使用
ServiceHub.loadState
检索
状态和ref
,并选择使用
ContractUpgradeFlow.authorize
授权合同升级

这比直接发送
状态和ref
要好,因为
相关参与者可以验证发送的状态没有被篡改(因为他们从存储中检索实际状态,而不是对方的)