【发布时间】:2020-04-24 01:29:21
【问题描述】:
我遇到了一些奇怪的行为。当我使用合作伙伴 ID 列表(其他节点)更新状态并随后读取状态时,似乎通过 rpcOps.vaultQueryBy 我可以看到更新的或未使用的状态以及更新的合作伙伴列表,但如果我这样做通过serviceHub.vaultService.queryBy查询,该州的合作伙伴列表似乎根本没有改变。
如果我获得了流程中的所有状态 - 也包括消费状态 - 看起来没有任何变化,但通过 API,所有对合作伙伴列表的更新都是可见的。这是我遇到的某种错误还是我只是不理解某些东西?
我们正在使用 Corda 4.0。
通过 API
var servicestates = rpcOps.vaultQueryBy<ServiceState>().states.map { it.state.data }
var services = getServices().filter {
it.linearId == UniqueIdentifier.fromString(serviceId)
}.single()
内流
val serviceStateAndRef = serviceHub.vaultService.queryBy<ServiceState>(
QueryCriteria.LinearStateQueryCriteria(linearId = listOf(serviceLinearId))
).states.single()
【问题讨论】:
-
您能检查一下您的
serviceLinearId是否正确传递了吗?您是从节点外壳调用流程吗?还是通过 API? -
是的,linearId 是正确的。这是最令人担忧的事情。除了缺少的合作伙伴列表之外,其他一切看起来都完全正确。通过 API 调用流。
-
似乎在流程中我只得到消耗状态。如果我将条件设置为未消费,我会得到最后消费的 - 而不是未消费的状态。
-
我检查了 H2 数据库,状态被消费和创建,就像想象的那样。但由于某种原因,linearQuery 将无法获取未使用的。
-
您能否尝试打印创建的条件并查看推断的 stateStatus 是什么。我认为默认情况下它应该只被未使用。我很惊讶如何被消耗。
标签: blockchain corda