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
,则方法codesingleOrNull()?
将实际返回null
这是我基于可用代码的猜测,如果这不是问题的原因,请分享更多信息 我会将您自己的时间戳添加到状态并记录在流中 或者,您可以将时间窗口添加到事务()。我相信这也确保statesMetadata.recordedTime不会为空