有没有一种简单的方法可以使用CordaRPCOps接口在终端中查看已消耗的状态?似乎vaultQuery默认返回未消耗的状态,我无法弄清如何使用vaultQueryBy或带条件的任何内容。
我知道应该存在消耗的状态,因为我可以在H2中看到它们。
我知道应该存在消耗的状态,因为我可以在H2中看到它们。
你可以编写一个简短的API来公开状态:
Corda现有示例中有一个/asset样本:
以下是适用于你的场景的代码片段API:
@GET
@Path("asset")
@Produces(MediaType.APPLICATION_JSON)
fun getAssets(): List<StateAndRef<ContractState>> {
val consumedCriteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.CONSUMED)
return services.vaultQueryBy<ContractState>(consumedCriteria).states
}
如Ricky所说,您需要提供一个API或编写客户端通过RPC与您的CorDapp通信(例如https://github.com/corda/cordapp-example/blob/release-V1/kotlin-source/src/main/kotlin/com/example/client/ExampleClientRPC.kt)。
理论上,run vaultQueryByCriteria contractStateType: com.example.state.IOUState, criteria: { Vault.StateStatus.CONSUMED }
可能会起作用。然而,在vaultQueryByCriteria
中,criteria
参数的类型是QueryCriteria
,这是一个抽象类。目前在shell中没有办法指定您希望使用哪个具体的QueryCriteria
子类。
我在这里提出了一个问题:https://github.com/corda/corda/issues/2351。