通过Linearid corda 3.1版获取状态

通过Linearid corda 3.1版获取状态,corda,Corda,我正试图通过获取空列表通过LineId获取状态: 我的代码: 当我获得所有状态时,状态存在: val generalCriteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.UNCONSUMED) var pageNumber = DEFAULT_PAGE_NUM val states = mutableListOf<StateAndRef<ContractState>>() do

我正试图通过获取空列表通过LineId获取状态: 我的代码:

当我获得所有状态时,状态存在:

 val generalCriteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.UNCONSUMED)
    var pageNumber = DEFAULT_PAGE_NUM
    val states = mutableListOf<StateAndRef<ContractState>>()
    do {
        val pageSpec = PageSpecification(pageSize = 200, pageNumber = pageNumber)
        val results = services.vaultQueryByWithPagingSpec(CustomerAuditor::class.java,generalCriteria, pageSpec)
        states.addAll(results.states);
        pageNumber++
    } while ((pageSpec.pageSize * pageSpec.pageNumber) <= results.totalStatesAvailable)

    return states;
(我已经移除了参与者和公证人标签,因为他们非常大,我有3名参与者)

我总是使用这个:

inline fun <reified T : LinearState> getLinearStateById(
        linearId: UniqueIdentifier,
        services: ServiceHub
): StateAndRef<T>? {
    val query = QueryCriteria.LinearStateQueryCriteria(linearId = listOf(linearId))
    return services.vaultService.queryBy<T>(query).states.singleOrNull()
}
getLinearStateById(
linearId:唯一标识符,
服务:ServiceHub
):安德鲁?{
val query=QueryCriteria.LinearStateQueryCriteria(linearId=listOf(linearId))
return services.vaultService.queryBy(query).states.singleOrNull()
}

我面对了这个问题。只需检查您尝试访问的未使用状态vault是否存在参与者列表。若不存在,则不会查询该列表,因此列表将始终为空。希望这有帮助:)

在Java中,我是这样做的
@nithesh/@jayant让我知道它是否有效

UniqueIdentifier linearId = UniqueIdentifier.Companion.fromString(linearIdAsString);
QueryCriteria queryCriteria = new QueryCriteria.LinearStateQueryCriteria(
                null,   // List of Parties for the state
                ImmutableList.of(linearId),
                Vault.StateStatus.UNCONSUMED,
                null    // Set of State types
        );

List<StateAndRef<YourState>> stateAndRefs = getServiceHub().getVaultService().queryBy(YourState.class, queryCriteria).getStates();
YourState yourState = stateAndRefs.get(0).getState().getData();
UniqueIdentifier linearId=UniqueIdentifier.Companion.fromString(linearidastring);
QueryCriteria QueryCriteria=新的QueryCriteria.LinearStateQueryCriteria(
null,//状态的参与方列表
不可修改的列表(linearId),
Vault.StateStatus.Unused,
null//状态类型集
);
List stateAndRefs=getServiceHub().getVaultService().queryBy(YourState.class,queryCriteria).getStates();
YourState YourState=stateanderefs.get(0.getState().getData();

使用
listOf(UUID.fromString(linearId.id))
而不是
listOf(linearId.id))
让我知道它是否工作,这与我所做的大致相同,但仍然面临相同的问题。。我正在从同一个节点访问这两个节点
      [
  {
    "state": {
      "data": {
        "linearId": {
          "externalId": null,
      "id": "d7b8331d-6a1a-408a-aff7-5c823e91c6e3"
    }
  },
  "contract": "com.hsbc.contract.PSContract",
  "encumbrance": null,
  "constraint": {}
},
"ref": {
  "txhash": {
    "bytes": "FbMJYu2K1lrqHLK4rkhOogn5r/u7iAa26AobmrtWDRY=",
    "size": 32,
    "offset": 0
  },
  "index": 0
}


}
    ]
inline fun <reified T : LinearState> getLinearStateById(
        linearId: UniqueIdentifier,
        services: ServiceHub
): StateAndRef<T>? {
    val query = QueryCriteria.LinearStateQueryCriteria(linearId = listOf(linearId))
    return services.vaultService.queryBy<T>(query).states.singleOrNull()
}
UniqueIdentifier linearId = UniqueIdentifier.Companion.fromString(linearIdAsString);
QueryCriteria queryCriteria = new QueryCriteria.LinearStateQueryCriteria(
                null,   // List of Parties for the state
                ImmutableList.of(linearId),
                Vault.StateStatus.UNCONSUMED,
                null    // Set of State types
        );

List<StateAndRef<YourState>> stateAndRefs = getServiceHub().getVaultService().queryBy(YourState.class, queryCriteria).getStates();
YourState yourState = stateAndRefs.get(0).getState().getData();