通过Linearid corda 3.1版获取状态
我正试图通过获取空列表通过LineId获取状态: 我的代码: 当我获得所有状态时,状态存在:通过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
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();