【问题标题】:How to get history of a state in corda?如何获得科尔达州的历史?
【发布时间】:2020-12-29 04:23:32
【问题描述】:

在我的 corda 项目中,状态可能会随着时间而变化。我已经创建了 LinearState 类型的状态。现在我想检索一个 Corda 状态的历史,这意味着它是如何随着时间演变的。如何在 Corda 中查看特定状态的演变历史?

特别是,我想访问一个状态的完整交易链。

【问题讨论】:

    标签: blockchain corda


    【解决方案1】:

    当然,如果无法访问您的代码,这个答案会有所不同,但这里有两个文档需要注意。

    您想要执行的基本上是一个保险库查询(取决于您要获取的信息)。

    来自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();
    

    此处的源代码示例:https://github.com/corda/samples-java/blob/master/Advanced/obligation-cordapp/workflows/src/main/java/net/corda/samples/flows/IOUSettleFlow.java#L56-L61

    【讨论】:

      猜你喜欢
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多