无论如何,是否可以在Vault中查询状态而不使用模式?

时间:2018-10-26 10:36:33

标签: corda

如果要从Node Vault查询数据,我正在与Corda合作。从根本上讲,我使用了Schema为该查询添加了一些条件。例如:

val quantityIndex = SchemaV1.Persistent::value.greaterThanOrEqual(4)

那么,有没有在不使用Schema的情况下在Vault中查询状态的问题?因为我相信,如果我能够使用State类而不是Schema类,则可以使用更好的条件规则查询State。

1 个答案:

答案 0 :(得分:1)

从Corda 3开始,没有办法做到这一点。这是因为除了作为架构的一部分提取的属性之外,状态仅存储为Java Blob。

您必须提取状态,然后在内存中过滤状态:

List<StateAndRef<ArtState>> artStateAndRefs = getServiceHub().getVaultService().queryBy(ArtState.class).getStates();

StateAndRef<ArtState> inputArtStateAndRef = artStateAndRefs
    .stream().filter(artStateAndRef -> {
        ArtState artState = artStateAndRef.getState().getData();
        return artState.getArtist().equals(artist) && artState.getTitle().equals(title);
    })
    .findAny()
    .orElseThrow(() -> new IllegalArgumentException("The piece of art was not found."));

如果状态很多,则必须分别过滤每个保管库页面,然后整理结果。