【发布时间】:2020-12-29 04:23:32
【问题描述】:
在我的 corda 项目中,状态可能会随着时间而变化。我已经创建了 LinearState 类型的状态。现在我想检索一个 Corda 状态的历史,这意味着它是如何随着时间演变的。如何在 Corda 中查看特定状态的演变历史?
特别是,我想访问一个状态的完整交易链。
【问题讨论】:
标签: blockchain corda
在我的 corda 项目中,状态可能会随着时间而变化。我已经创建了 LinearState 类型的状态。现在我想检索一个 Corda 状态的历史,这意味着它是如何随着时间演变的。如何在 Corda 中查看特定状态的演变历史?
特别是,我想访问一个状态的完整交易链。
【问题讨论】:
标签: blockchain corda
当然,如果无法访问您的代码,这个答案会有所不同,但这里有两个文档需要注意。
您想要执行的基本上是一个保险库查询(取决于您要获取的信息)。
来自LinearState 上的文档:
每当一个节点记录一个新交易时,它也会决定是否应该将每个交易的输出状态存储在它的保险库中。默认的 Vault 实现根据以下规则做出决定。
来源:https://docs.corda.net/docs/corda-os/4.6/api-states.html#the-vault
话虽如此,要执行保管库查询,您可以像执行其他州一样执行此操作。这是关于 Vault 查询 API 的文档:https://docs.corda.net/docs/corda-os/4.6/api-vault-query.html
如果您有线性 ID,您可以从节点外壳或使用 H2 并查看 VAULT_LINEAR_STATES 表等位置。
如果您想要在代码中查询的示例,请查看将 linearID 作为流参数的义务 cordapp。
// 1. Retrieve the IOU State from the vault using LinearStateQueryCriteria
List<UUID> listOfLinearIds = Arrays.asList(stateLinearId.getId());
QueryCriteria queryCriteria = new QueryCriteria.LinearStateQueryCriteria(null, listOfLinearIds);
Vault.Page results = getServiceHub().getVaultService().queryBy(IOUState.class, queryCriteria);
StateAndRef inputStateAndRefToSettle = (StateAndRef) results.getStates().get(0);
IOUState inputStateToSettle = (IOUState) ((StateAndRef) results.getStates().get(0)).getState().getData();
【讨论】: