【问题标题】:serviceHub.vaultQueryService.queryBy returns all related states by default?serviceHub.vaultQueryService.queryBy 默认返回所有相关状态?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 2022-01-24
      • 1970-01-01
      • 2021-11-29
      • 2011-03-16
      相关资源
      最近更新 更多