Различные результаты при выполнении запроса Corda через API и внутри потока - PullRequest
1 голос
/ 20 апреля 2020

У меня странное поведение. Когда я обновляю состояние со списком идентификаторов партнеров - других узлов - и затем читаю состояние, через rpcOps.vaultQueryBy я вижу обновленное или неиспользованное состояние с обновленным списком партнеров, но если я делаю то же самое запрос через serviceHub.vaultService.queryBy похоже, что список парнеров состояния вообще не изменился.

Если я получу все состояния в потоке - в том числе и использованные - похоже, что изменений не было, но через API все обновления в списке партнеров видны. Это какая-то ошибка, с которой я столкнулся, или я просто чего-то не понимаю?

Мы используем Corda 4.0.

Через API

var servicestates = rpcOps.vaultQueryBy<ServiceState>().states.map { it.state.data }
var services = getServices().filter {
            it.linearId == UniqueIdentifier.fromString(serviceId)
        }.single()

Внутренний поток

val serviceStateAndRef = serviceHub.vaultService.queryBy<ServiceState>(
                    QueryCriteria.LinearStateQueryCriteria(linearId = listOf(serviceLinearId))
                ).states.single()

1 Ответ

0 голосов
/ 23 апреля 2020

@ Ашуто sh Мехер Вы достаточно близко. Проблема была в предыдущем потоке, где при создании нового состояния партнера командный вызов для контракта в списке был только вызывающий абонент.

Таким образом,

Command(ServiceContract.Commands.AddPartner(),listOf(ourIdentity.owningKey))

пришлось отредактировать, чтобы включить необходимые другие стороны.

Command(ServiceContract.Commands.AddPartner(),updatedServiceState.participants.map { it.owningKey })

Это привело к другой узел не видеть изменения. Это было прямо у меня на глазах ...;)

...