Как мы должны обновить состояние, которое принадлежит одному участнику DL, но имеет список участников, который включает более одного участника? - PullRequest
0 голосов
/ 09 мая 2018

Я ищу правильный процесс обновления контракта. Рассмотрим следующий пример:

    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 голосов
/ 05 июня 2018

Одно из решений для владельца - отправить StateRef на relevantParticipant. relevantParticipant может затем извлечь StateAndRef с помощью ServiceHub.loadState и разрешить обновление контракта с помощью ContractUpgradeFlow.Authorise.

Это лучше, чем отправка StateAndRef напрямую, поскольку relevantParticipant может затем проверить, что отправляемое состояние не было подделано (так как они получают фактическое состояние из своего хранилища, а не из контрагента).

...