【问题标题】:Query for state attributes查询状态属性
【发布时间】:2020-02-20 21:28:17
【问题描述】:

如果我有一个带有属性的状态,例如:

class Test(val timestamp: Double, val linearId = UniqueIdentifier()): LinearState

我可以使用LinearStateQueryCriteria 执行基于linearId 的保险库查询。有没有办法为州的属性定义查询条件?例如,获取时间戳属性等于x 或什至介于yz 之间的每个状态?

【问题讨论】:

    标签: corda


    【解决方案1】:

    如果您的 State 是 QueryableState,这将起作用。您可以使用VaultCustomQueryCriteria 来获得所需的结果,如下所示:

    QueryCriteria generalCriteria = new VaultQueryCriteria(Vault.StateStatus.ALL);
    
    FieldInfo attributeCurrency = getField("currency", CashSchemaV1.PersistentCashState.class);
    FieldInfo attributeQuantity = getField("pennies", CashSchemaV1.PersistentCashState.class);
    
    CriteriaExpression currencyIndex = Builder.equal(attributeCurrency, "USD");
    CriteriaExpression quantityIndex = Builder.greaterThanOrEqual(attributeQuantity, 10L);
    
    QueryCriteria customCriteria2 = new VaultCustomQueryCriteria(quantityIndex);
    QueryCriteria customCriteria1 = new VaultCustomQueryCriteria(currencyIndex);
    
    
    QueryCriteria criteria = generalCriteria.and(customCriteria1).and(customCriteria2);
    Vault.Page<ContractState> results = vaultService.queryBy(Cash.State.class, criteria);
    

    请参阅此处了解更多详情:https://docs.corda.net/api-vault-query.html

    如果您想了解 QueryableState,请参阅此处: https://medium.com/corda/persisting-corda-states-in-custom-database-tables-using-queryablestate-dedaa18b7050

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      相关资源
      最近更新 更多