【问题标题】:ReceiveStateAndRefFlow does not receive StatesToRecord parameterReceiveStateAndRefFlow 不接收 StatesToRecord 参数
【发布时间】:2019-08-14 09:06:11
【问题描述】:

在 Corda 中,有一个流程提供了将 SignedTransaction 发送给另一方的功能。

open class SendTransactionFlow(otherSide: FlowSession, stx: SignedTransaction) : DataVendingFlow(otherSide, stx)

还有另一个流,它将 StatesAndRefs 发送给另一方:

open class SendStateAndRefFlow(otherSideSession: FlowSession, stateAndRefs: List<StateAndRef<*>>) : DataVendingFlow(otherSideSession, stateAndRefs)

在接受者侧应该调用相应的接收者流:

open class ReceiveTransactionFlow @JvmOverloads constructor(private val otherSideSession: FlowSession,
                                                            private val checkSufficientSignatures: Boolean = true,
                                                            private val statesToRecord: StatesToRecord = StatesToRecord.NONE) : FlowLogic<SignedTransaction>()

class ReceiveStateAndRefFlow<out T : ContractState>(private val otherSideSession: FlowSession) : FlowLogic<@JvmSuppressWildcards List<StateAndRef<T>>>() // which invokes **ReceiveTransactionFlow** with **StatesToRecord.NONE**

这两个接受者流程之间的主要区别在于,ReceiveStateAndRefFlow 将在接受者一方解析 SignedTransaction,但不会将状态记录到交易对手的保险库中。另一方面:ReceiveTransactionFlow 接受 StatesToRecord 属性并将状态存储到交易对手的保险库中。

问题ReceiveStateAndRefFlow 不接受StatesToRecord 属性的原因是什么?

【问题讨论】:

    标签: corda


    【解决方案1】:

    事实证明,StatesToRecord 无法设置并没有特别的原因,但有一些棘手的边缘情况需要处理,最终可能会导致 CorDapp 开发人员弄乱他们的保险库!

    例如:当您强制在保险库中存储单个状态时,将不会存储同一事务中的相应输出,从而导致您在保险库中具有实际已消费的未消费状态。

    通常,这不会太重要,因为无论如何您都不能花费它。但是,这会导致保险库查询行为混乱。

    【讨论】:

      猜你喜欢
      • 2021-12-19
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多