从Corda Vault中获取特定记录的最佳方法,不需要Schema?

问题描述 投票:-1回答:1

我正在开发一个CorDapp,但是还没有实现schema,因为这不是一个好的做法。

但我要在不使用schema的情况下获取一条特定记录的代码是先获取所有状态,然后再获取一条特定的记录,这非常耗时,因为它要遍历每个状态对象。

DataFeed,Vault.Update> dataFeed = proxy.vaultTrack(IOUState.class)。

    //this gives a snapshot of IOUState as of now. so if there are 11 IOUState as of now, this will return 11 IOUState objects
    Vault.Page<IOUState> snapshot = dataFeed.getSnapshot();
    for (StateAndRef<IOUState> state : snapshot.getStates()) {
        if (state.getState().getData().getAssetId().equals(value)) {
            cs =  state.getState().getData();
        }
    }

你能不能建议一个更好的方法来从corda vault中获取一个特定的记录,而不需要使用schema和遍历每个状态对象。

corda
1个回答
0
投票

不知道你是如何得出使用schema不是一个好的做法的结论。你有什么数据点来证明这一点吗?或者这些信息的来源对我们理解实现schema的问题会有帮助。

如果没有schema,是不可能根据一个状态的属性来获取它的。但是,如果你特别想根据一个ID来获取一个状态(也考虑到你的状态是线性的非可变的性质),你可以使用线性状态。一个线性状态可以直接从库中获取,使用一个 LinearStateQueryCriteria.

val criteria = LinearStateQueryCriteria(linearId = listOf(linearId));
val results = vaultService.queryBy<LinearState>(criteria);

0
投票
  • 谁说实现一个模式不是一个好的做法?请贴出你在哪里读到的链接。
  • 如果没有自定义模式,你就无法从金库中获取某条记录(即使用某个属性的查询)。
© www.soinside.com 2019 - 2024. All rights reserved.