Corda 4 - 通过特定的 transactionid 查询保险库
Corda 4 - Querying vault by specific transactionid
我们正在使用 Corda 4 和 Springboot 网络服务器构建 POC。
我们目前正在使用以下代码通过 RPC 从保险库中检索所有状态 -
val vaultStatesAndRefs = services.proxy.vaultQueryBy<State>().states
val vaultStates = vaultStatesAndRefs.map { it.state.data }
我们想要 - 使用 transactionId 通过 RPC 从保险库中检索状态。
请指导实现这一点。
请注意,Corda 不保证通过任何方法检索的交易集在未来的 Corda 版本中保持一致。这是因为 Corda 的未来版本将使用 SGX 加密格式在节点之间交换交易链。因此,交易只能在安全的新交所飞地中解密。
话虽如此,但没有直接公开的 API 可用于通过 RPC 基于 transactionId 获取状态。您可以使用的那个 (internalFindVerifiedTransaction
) 已被弃用,并且可能会在 Corda 的未来版本中被删除。
我想这样做的方法是使用流。您可以根据 transactionId
.
检索输出状态
SignedTransaction tx = getServiceHub().getValidatedTransactions().getTransaction(
SecureHash.parse(txId));
tx.toLedgerTransaction(getServiceHub()).getOutputStates();
然后您可以使用 RPC 从客户端触发流程并从返回的 FlowHandle
对象中获取结果。
FlowHandle<List<ContractState>> flowHandle =
proxy.startFlowDynamic(GetStateFlow.class, txId);
List<ContractState> list = flowHandle.getReturnValue().get();
我们正在使用 Corda 4 和 Springboot 网络服务器构建 POC。
我们目前正在使用以下代码通过 RPC 从保险库中检索所有状态 -
val vaultStatesAndRefs = services.proxy.vaultQueryBy<State>().states
val vaultStates = vaultStatesAndRefs.map { it.state.data }
我们想要 - 使用 transactionId 通过 RPC 从保险库中检索状态。
请指导实现这一点。
请注意,Corda 不保证通过任何方法检索的交易集在未来的 Corda 版本中保持一致。这是因为 Corda 的未来版本将使用 SGX 加密格式在节点之间交换交易链。因此,交易只能在安全的新交所飞地中解密。
话虽如此,但没有直接公开的 API 可用于通过 RPC 基于 transactionId 获取状态。您可以使用的那个 (internalFindVerifiedTransaction
) 已被弃用,并且可能会在 Corda 的未来版本中被删除。
我想这样做的方法是使用流。您可以根据 transactionId
.
SignedTransaction tx = getServiceHub().getValidatedTransactions().getTransaction(
SecureHash.parse(txId));
tx.toLedgerTransaction(getServiceHub()).getOutputStates();
然后您可以使用 RPC 从客户端触发流程并从返回的 FlowHandle
对象中获取结果。
FlowHandle<List<ContractState>> flowHandle =
proxy.startFlowDynamic(GetStateFlow.class, txId);
List<ContractState> list = flowHandle.getReturnValue().get();