Как получить время транзакции Corda? - PullRequest
0 голосов
/ 20 февраля 2020

Я использую следующее для получения метки времени транзакции:

    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

Проблема в том, что время транзакции не всегда возвращается, иногда возвращается ноль для метки времени.

Почему это происходит, и как я могу гарантировать, что отметка времени всегда возвращается?

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Я бы добавил вашу собственную временную метку в состояние и записал бы ее в поток.

Или вы можете добавить временное окно к транзакции (https://docs.corda.net/api-transactions.html#time - windows). Я считаю, что это также гарантирует, что statesMetadata.recordedTime не будет нулевым.

0 голосов
/ 02 марта 2020

results равен Vault.Page<ContractState>, который содержит следующие переменные:

    /**
     * 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).
     */

Как видно из вашего кода, если страница результатов содержит несколько StateAndRef, код метода singleOrNull()? фактически вернет null.

Это мое предположение, основанное на доступных кодах, пожалуйста, поделитесь дополнительной информацией, если это не является причиной проблемы.

...