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
要好,因为相关参与者可以验证发送的状态没有被篡改(因为他们从存储中检索实际状态,而不是对方的)