Точно запрашиваете хранилище Corda? - PullRequest
0 голосов
/ 27 марта 2019

Я создаю CordApp, используя сервер Cordite Braid, чтобы позволить моему клиенту JavaScript подключиться к узлу.Я не уверен, что мое использование Braid здесь имеет отношение к проблеме, но это контекст.

Вопрос отредактирован , потому что я обнаружил более подробную информацию о том, что работает, а что нет..

При развертывании Braid я включаю службу, которая возвращает определенные наборы состояний, запрошенные из хранилища Corda.Я обнаружил, что могу или фильтр на основе StateStatus (CONSUMED или UNCONSUMED) или на основе VaultCustomQueryCriteria, но не оба вместе.

Вот код:

class TestSearchService(val serviceHub: ServiceHub) {
    fun getResults(consumed: Boolean, workerID: String, businessID: String): List<StateAndRef<ContractState>> {
        val results = builder {
            val generalConsumedCriterion = if (consumed) QueryCriteria.VaultQueryCriteria(Vault.StateStatus.CONSUMED) else QueryCriteria.VaultQueryCriteria(Vault.StateStatus.UNCONSUMED)
            val workerIndex = EventSchemaV1.PersistentEvent::workerID.equal(workerID)
            val workerCriterion = QueryCriteria.VaultCustomQueryCriteria(workerIndex)
            val businessIndex = EventSchemaV1.PersistentEvent::businessID.equal(businessID)
            val businessCriterion = QueryCriteria.VaultCustomQueryCriteria(businessIndex)
            val criteria = generalConsumedCriterion.and(workerCriterion).and(businessCriterion)
            val results = serviceHub.vaultService.queryBy<EventState>(criteria).states
            return results
        }
    }
}

Как написано здесь, служба возвращает только UNCONSUMED состояний (независимо от того, указано ли значение true или false в качестве параметра consumed), отфильтрованных по workerID иbusinessID.Если хотя предпоследняя строка заменена на

            val results = serviceHub.vaultService.queryBy<EventState>(generalConsumedCriteria).states

, то есть она использует только критерии статуса, а не пользовательские, тогда она фильтруется в соответствии с назначением статуса CONSUMED или UNCONSUMED, но (очевидно) недругими настраиваемыми полями.

Это как-то связано с тем, как я комбинирую различные критерии, используя criterion.and (критерий) .and (критерий) ??

...