Как я могу получить историю LinearState - PullRequest
0 голосов
/ 16 октября 2019

Выходом одного из моих потоков является LinearState, который со временем был «изменен» различными потоками.

Существует ли API для получения предыдущих версий этого состояния в том порядке, в котором они были созданы/ updated?

Я могу запросить хранилище следующим образом:

    val linearIdCriteria = QueryCriteria.LinearStateQueryCriteria(linearId = listOf(outputState.linearId), status = ALL)
    val states = myNode.services.vaultService.queryBy<MyState>(linearIdCriteria).states

Однако SQL, сгенерированный hibernate, не имеет предложения Order By, поэтому порядок состояний вlist не может быть гарантировано .

В возвращенных состояниях нет метки времени, поэтому я не вижу, как упорядочить список.

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Время сохранения состояния доступно в качестве опции сортировки (Sort.VaultStateAttribute.RECORDED_TIME), которая должна гарантировать порядок запроса хранилища.

//Get all versions of the State by its LinearId
val linearIdCriteria = QueryCriteria.LinearStateQueryCriteria(linearId = listOf(outputState.linearId), status = ALL)

//Add sorting by recorded date
val sortByRecordedDate = SortColumn(SortAttribute.Standard(Sort.VaultStateAttribute.RECORDED_TIME), Sort.Direction.ASC)
val sorting = Sort(listOf(sortByRecordedDate))

val states = myNode.services.vaultService.queryBy<MyState>(linearIdCriteria, sorting).states
0 голосов
/ 17 октября 2019

Неиспользованные и потребленные состояния могут быть отсортированы в возрастающем / убывающем алфавитном порядке, используя следующий код -

Vault.StateStatus status = Vault.StateStatus.CONSUMED;
@SuppressWarnings("unchecked")
Set<Class<LinearState>> contractStateTypes = new HashSet(singletonList(LinearState.class));

QueryCriteria vaultCriteria = new VaultQueryCriteria(status, contractStateTypes);

List<UniqueIdentifier> linearIds = singletonList(ids.getSecond());
QueryCriteria linearCriteriaAll = new LinearStateQueryCriteria(null, linearIds, Vault.StateStatus.UNCONSUMED, null);
QueryCriteria dealCriteriaAll = new LinearStateQueryCriteria(null, null, dealIds);

QueryCriteria compositeCriteria1 = dealCriteriaAll.or(linearCriteriaAll);
QueryCriteria compositeCriteria2 = compositeCriteria1.and(vaultCriteria);

PageSpecification pageSpec = new PageSpecification(DEFAULT_PAGE_NUM, MAX_PAGE_SIZE);
Sort.SortColumn sortByUid = new Sort.SortColumn(new SortAttribute.Standard(Sort.LinearStateAttribute.UUID), Sort.Direction.DESC);
Sort sorting = new Sort(ImmutableSet.of(sortByUid));
Vault.Page<LinearState> results = vaultService.queryBy(LinearState.class, compositeCriteria2, pageSpec, sorting);

ИЛИ

   val sortAttribute = SortAttribute.Custom(CustomerSchema.CustomerEntity.class,
 "changeDate")
     val sorter = Sort(setOf(Sort.SortColumn(sortAttribute, Sort.Direction.DESC)))
     val constraintResults = vaultService.queryBy<LinearState>(constraintTypeCriteria, sorter)

Ниже приведены URL-адреса для справки:

URL1: https://docs.corda.net/api-vault-query.html

URL2: https://github.com/corda/corda/issues/5060

URL3: https://github.com/manosbatsis/vaultaire

URL4: https://r3 -cev.atlassian.net/ просмотр / CORDA-2247

...