【发布时间】:2017-07-17 21:27:38
【问题描述】:
当我尝试使用以下代码通过 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 为 null 且 STATE_STATUS 为 0。这是一种非共享状态,这意味着仅存储在我的数据库中,并且我为它执行了一次更新,因此理想情况下在 db 中有一个消耗状态和一个新输出状态。所以现在我不确定这里出了什么问题。
查询给定线性 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)
【问题讨论】:
标签: corda