2017-07-17 49 views
2

当我尝试使用下面的代码来检索linearId的状态时,我得到了2条返回的记录,一条是消耗的,另一条是未消耗的。最初的linearId是从web api传入的。serviceHub.vaultQueryService.queryBy默认返回所有相关的状态?

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。所以现在我不确定这里有什么问题。

查询为未消耗的线性状态对于给定的线性IDS:

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) 

回答