Corda 如何获得交易时间?

Corda 如何获得交易时间?,corda,Corda,我使用以下方法获取事务时间戳: val outputStateRef = StateRef(ledgerTx.id, 0) val queryCriteria = QueryCriteria.VaultQueryCriteria(stateRefs = listOf(outputStateRef)) val results = serviceHub.vaultService.queryBy<ContractState>(queryCriteria) v

我使用以下方法获取事务时间戳:

    val outputStateRef = StateRef(ledgerTx.id, 0)
    val queryCriteria = QueryCriteria.VaultQueryCriteria(stateRefs = listOf(outputStateRef))
    val results = serviceHub.vaultService.queryBy<ContractState>(queryCriteria)
    val recordedTime = results.statesMetadata.singleOrNull()?.recordedTime
val outputStateRef=StateRef(ledgerTx.id,0)
val queryCriteria=queryCriteria.VaultQueryCriteria(stateRefs=listOf(outputStateRef))
val results=serviceHub.vaultService.queryBy(queryCriteria)
val recordedTime=results.statesMetadata.singleOrNull()?.recordedTime
问题是事务时间并不总是返回,有时时间戳返回null


为什么会发生这种情况?如何确保始终返回时间戳

results
Vault.Page
,其中包含以下变量:

    /**
     * Returned in queries [VaultService.queryBy] and [VaultService.trackBy].
     * A Page contains:
     *  1) a [List] of actual [StateAndRef] requested by the specified [QueryCriteria] to a maximum of [MAX_PAGE_SIZE].
     *  2) a [List] of associated [Vault.StateMetadata], one per [StateAndRef] result.
     *  3) a total number of states that met the given [QueryCriteria] if a [PageSpecification] was provided,
     *     otherwise it defaults to -1.
     *  4) Status types used in this query: [StateStatus.UNCONSUMED], [StateStatus.CONSUMED], [StateStatus.ALL].
     *  5) Other results as a [List] of any type (eg. aggregate function results with/without group by).
     *
     *  Note: currently otherResults are used only for Aggregate Functions (in which case, the states and statesMetadata
     *  results will be empty).
     */
从代码中可以看出,如果结果页包含多个
状态和ref
,则方法code
singleOrNull()?
将实际返回null


这是我基于可用代码的猜测,如果这不是问题的原因,请分享更多信息

我会将您自己的时间戳添加到状态并记录在流中

或者,您可以将时间窗口添加到事务()。我相信这也确保statesMetadata.recordedTime不会为空