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

时间:2017-07-17 12:51:48

标签: corda

当我尝试使用下面的代码通过linearId检索状态时,我返回了2条记录,一条是消耗的记录,另一条是未消耗的记录。最初的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上的示例代码中,它表示这将返回基于linearId的未消耗状态,我还检查了H2数据库VAULT_STATES表中的数据,有2条记录,一条有CONSUMED_TIMESTAMP,它的STATE_STATUS为1,但另一个CONSUMED_TIMESTAMP为空且STATE_STATUS为0.这是一个非共享状态,这意味着只存储在我的数据库中,并且我为它执行了一次更新,因此理想情况下有一个消耗状态和一个新输出状态D b。所以现在我不确定这里有什么问题。

查询给定线性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)

1 个答案:

答案 0 :(得分:1)

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

相关问题