查询已在事务中使用的输入状态

时间:2018-07-19 09:56:28

标签: corda

比方说,我已经定义了两个状态StateAStateB,并执行了以下操作。

  • 创建无任何输入的StateA。 (NoInput-> StateA-sa1
  • 更改StateA上的参数之一。 (StateA-sa1-> StateA-sa2
  • 使用未消耗的StateB作为输入来创建StateA。 (StateA-sa2-> StateB-sb1

是否可以构造一个查询以获取当前未消耗的StateBStateB-sb1)和进入创建该状态的输入(StateA-sa2)?

1 个答案:

答案 0 :(得分:3)

从Corda 3.1开始,没有。单个查询是不可能实现的。您实际上需要执行三个步骤:

  1. 在保管库中查询当前未使用的StateB

    val stateBStateAndRef = serviceHub.vaultService.queryBy<StateB>().states.single()
    
  2. 使用获取状态的StateRef加载相应的交易

    val stateBTransaction = serviceHub.validatedTransactions.getTransaction(stateBStateAndRef.ref.txhash)!!
    
  3. 加载与已加载事务的输入相对应的状态

    val consumedInputs = stateBTransaction.inputs.map { stateRef -> serviceHub.loadState(stateRef) }