比方说,我已经定义了两个状态StateA
和StateB
,并执行了以下操作。
StateA
。 (NoInput-> StateA-sa1
)StateA
上的参数之一。 (StateA-sa1
-> StateA-sa2
)StateB
作为输入来创建StateA
。 (StateA-sa2
-> StateB-sb1
)是否可以构造一个查询以获取当前未消耗的StateB
(StateB-sb1
)和进入创建该状态的输入(StateA-sa2
)?
答案 0 :(得分:3)
从Corda 3.1开始,没有。单个查询是不可能实现的。您实际上需要执行三个步骤:
在保管库中查询当前未使用的StateB
val stateBStateAndRef = serviceHub.vaultService.queryBy<StateB>().states.single()
使用获取状态的StateRef
加载相应的交易
val stateBTransaction = serviceHub.validatedTransactions.getTransaction(stateBStateAndRef.ref.txhash)!!
加载与已加载事务的输入相对应的状态
val consumedInputs = stateBTransaction.inputs.map { stateRef -> serviceHub.loadState(stateRef) }