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

时间:2018-05-09 14:12:26

标签: corda

我正在寻找正确的合同升级流程。请考虑以下示例:

    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.State是其中一个输出的事务。如果所有者要(授权并)启动升级,则流程将失败,因为相关参与者没有授权合同升级。这里有什么正确的方法?

1 个答案:

答案 0 :(得分:1)

一个解决方案是让所有者将StateRef发送到relevantParticipant。然后,relevantParticipant可以使用StateAndRef检索ServiceHub.loadState,并选择使用ContractUpgradeFlow.Authorise授权合同升级。

这比直接发送StateAndRef更好,因为relevantParticipant可以验证发送的状态是否未被篡改(因为它们从存储中检索实际状态,而不是对手方的)。