serviceHub.vaultQueryService.queryBy returns 默认所有相关状态?

serviceHub.vaultQueryService.queryBy returns all related states by default?

当我尝试使用以下代码通过 linearId 检索状态时,我得到了 2 条记录 returned,一条是已消费的,另一条是未消费的。最初的linearId是从web api.

传入的
val linearId: UniqueIdentifier = UniqueIdentifier(null, UUID.fromString(legalContractState.legalContract.linearId))
val linearIds = listOf(linearId)
val linearStateCriteria = QueryCriteria.LinearStateQueryCriteria(linearId = listOf(linearIds.first(), linearIds.last()))
val states = serviceHub.vaultQueryService.queryBy(LegalContractState::class.java, linearStateCriteria).states
val inputState: StateAndRef<LegalContractState> = serviceHub.vaultQueryService.queryBy(LegalContractState::class.java, linearStateCriteria).states.single()

但是从vault api page上的示例代码来看,它说这将return一个基于linearId的未消费状态,我也检查了H2数据库中的数据VAULT_STATES table,有2条记录,一条有CONSUMED_TIMESTAMP,其STATE_STATUS为1,但另一条CONSUMED_TIMESTAMP为null,STATE_STATUS为0。这是一条未共享状态,这意味着只存储在我的数据库中,我为它执行了一次更新,所以理想情况下在数据库中有一个消耗状态和一个新输出状态。所以现在我不确定这里出了什么问题。

查询给定线性 ID 的未使用线性状态:

val linearIds = issuedStates.states.map { it.state.data.linearId }.toList()
val criteria = LinearStateQueryCriteria(linearId = listOf(linearIds.first(), linearIds.last()))
val results = vaultQuerySvc.queryBy<LinearState>(criteria)

这是一个将在 M14 版本中修复的错误。参见 https://github.com/corda/corda/issues/949