Corda是否可以在同一流程中发布和使用状态

时间:2018-10-16 06:04:31

标签: corda

我正在尝试使用简单状态从一个帐户向另一帐户进行简单的资金转移。 2已创建一个用于发出转账请求的流程,其中包含现金转账,而创建的流程仅用于消耗该交易。我的问题是,是否可以在一个流中转移和消耗状态?

根据我的观点,交易必须在转移后使用,但也要在UI上显示。

Corda RPCQuery仅允许携带未使用状态的信息,如果我在上述事务中进行消耗,是否有办法显示已消耗事务的最后状态?

2 个答案:

答案 0 :(得分:1)

CordaRPCOps允许您查询未消耗状态,已消耗状态或两者。这是查询所有状态的简单方法:

val criteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.ALL)
val results = proxy.vaultQueryBy<ContractState>(criteria)

要显示最后一个消耗状态,可以按消耗量降序检索所有消耗状态并抓取第一个状态,如下所示:

val criteria = QueryCriteria.VaultQueryCriteria(Vault.StateStatus.UNCONSUMED)
val sortColumn = Sort.SortColumn(SortAttribute.Standard(Sort.VaultStateAttribute.CONSUMED_TIME), Sort.Direction.DESC)
val sorting = Sort(listOf(sortColumn))
val results = proxy.vaultQueryBy<Obligation>(criteria, sorting = sorting)
val lastConsumedState = results.states[0]

答案 1 :(得分:0)

  • 从任何流程中,您都需要调用 FinalityFlow 以便进行公证 并将交易记录在各方的保险库中。所以我认为 发行(或转让)后,您需要致电 FinalityFlow 第一。只有这样,您才能将发布状态用作新的输入 交易。
  • 公证人负责避免双花 在任何事务中的输入状态。所以你不能新使用 签发状态(作为新交易的输入),直到公证人知道为止
  • 因此,我认为在您的情况下,您需要两次调用 FinalityFlow ,每次交易(即发行和消费)后都要调用一次。