我对跟踪各州的保管库更新感兴趣。每当特定合约状态类型的状态(例如 Token
)在交易中产生或消费时,我都希望收到更新。我使用以下查询条件
val queryCriteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.ALL)
.and(
QueryCriteria.VaultQueryCriteria(
timeCondition = QueryCriteria.TimeCondition(
QueryCriteria.TimeInstantType.RECORDED,
ColumnPredicate.BinaryComparison(
BinaryComparisonOperator.GREATER_THAN_OR_EQUAL,
offset
)
)
)
)
一起
ops.vaultTrackByWithSorting(
TokenState::class.java,
queryCriteria,
Sort(
setOf(
Sort.SortColumn(
SortAttribute.Standard(Sort.VaultStateAttribute.RECORDED_TIME),
Sort.Direction.ASC
),
Sort.SortColumn(
SortAttribute.Standard(Sort.CommonStateAttribute.STATE_REF_INDEX),
Sort.Direction.ASC
)
)
)
)
有趣的是,我确实看到了产生 Token
的更新,但是当 Token
被消耗时我没有看到任何更新。我使用的是 Corda 4.6。
我知道 _trackBy
对查询条件的限制,但是,根据 Corda 的 vault api 文档,据我所知,上面的代码应该同时收听生成的 ({{1} }) 和消费 (UNCONSUMED
) 状态更新。这是一个已知的错误,还是我做错了什么?
答案 0 :(得分:0)
VaultQueryCriteria()
默认设置 Vault.StateStatus.UNCONSUMED
,如果你没有指定它。因此,在您的情况下,您正在执行符合逻辑的查询
(ALL).and(UNCONSUMED) = UNCONSUMED
结果是您看不到 CONSUMED
。
您还需要在 StateStatus.ALL
的第二个查询中指定 and()
。
我同意文档中没有明确说明这一点。