在cordapp api / flow中通过唯一ID查找状态

时间:2018-05-02 12:59:39

标签: corda

我可以找到带有txhash的州吗?我想要这样的东西:val state = rpcOps.findStateFromTXhash(txhash)

我发现有一种名为linearState的状态具有linearId属性。还有一个哈希属性,但我不知道它是否是我搜索的内容。

2 个答案:

答案 0 :(得分:1)

在你的流程中,你可以在这里执行getServiceHub()。loadState(),你可以传入securehash来获取你的状态。不确定我们是否可以直接从CordaRpcConnection对象执行类似的操作。

如果它是一种线性状态,你的状态将有一个linearId。您可以轻松地使用linearId搜索您的州。 阅读here。 我建议你阅读更多关于各州的信息,看看哪种最符合你的要求。 Link

答案 1 :(得分:0)

在给定事务ID的情况下,没有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
    }
}