Найти состояние по уникальному идентификатору в api / flow-файле - PullRequest
0 голосов
/ 02 мая 2018

Можно ли найти состояние с помощью txhash? Я хочу что-то вроде этого: val state = rpcOps.findStateFromTXhash (txhash)

Я обнаружил, что существует тип состояния с именем linearState, у которого есть свойство linearId. Есть также свойство хеша, но я не знаю, ищу ли это.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Нет операции RPC для загрузки состояний транзакции с учетом идентификатора транзакции.

Однако вы можете написать поток для этого следующим образом, а затем вызвать этот поток через RPC:

@InitiatingFlow
@StartableByRPC
class GetStatesFromTransactionFlow(val transactionID: SecureHash) : FlowLogic<List<ContractState>>() {

    @Suspendable
    override fun call(): List<ContractState> {
        val signedTransaction = serviceHub.validatedTransactions.getTransaction(transactionID)

        if (signedTransaction == null) {
            throw FlowException("Transaction does not exist in node's transaction storage.")
        }

        val ledgerTransaction = signedTransaction.toLedgerTransaction(serviceHub)
        val inputs = ledgerTransaction.inputs.map { it.state.data }
        val outputs = ledgerTransaction.outputs.map { it.data }

        return inputs + outputs
    }
}
0 голосов
/ 02 мая 2018

В своих потоках вы можете использовать getServiceHub (). LoadState (), здесь вы можете передать securehash для получения вашего состояния. не уверен, что мы можем сделать что-то подобное прямо из объекта CordaRpcConnection.

Ваше состояние будет иметь линейный идентификатор, если это тип линейного состояния. Вы можете легко найти свой штат, используя linearId. прочитайте здесь . Я бы порекомендовал вам прочитать больше о штатах, чтобы увидеть, что лучше всего соответствует вашим требованиям. Ссылка

...