【问题标题】:How to restrict observer node from doing any transaction如何限制观察者节点进行任何交易
【发布时间】:2019-04-04 22:46:21
【问题描述】:

需要实现corda节点,它是纯粹的观察者手段,可以保持状态但不会与其他节点参与任何事务。

为了实现它,我做了以下事情:

制作3个节点如下:

PartyA - 节点包含 cordApp jar,包括事务流、观察者流和合同和状态

PartyB - 节点包含 cordApp jar,包括事务流、观察者流和合同和状态

Observer - 节点仅包含合约和状态以及观察者流。

在观察者节点上有意删除所有事务节点,以便观察者无法与其他节点进行交易。

节点启动后,通过保持 Observer 节点作为观察者来执行从 PartyA 到 PartyB 的事务。效果很好。

现在我尝试了从 PartyA 到观察者的相同操作,并将 PartyB 保留为观察者。我预计事务会失败,但即使观察者节点没有事务流,事务也会在观察者节点上提交。

当我尝试执行从观察者到 PartyA 的事务时,它会给出错误,因为没有找到预期的流。

我使用的示例具有可拥有状态并使用简单的启动流程。

我的问题是一个定向交易如何与观察者一起工作,尽管观察者没有流量。

如何防止观察者不与其他节点进行任何交易,只是充当纯粹的观察者。

【问题讨论】:

    标签: corda


    【解决方案1】:

    从 Corda 3 开始,节点实际上会在启动时为以下四个流安装默认流响应器:

    1. FinalityFlow
    2. NotaryChangeFlow
    3. ContractUpgradeFlow.Initiate
    4. SwapIdentitiesFlow

    这是在AbstractNode.installCoreFlows:

    private fun installCoreFlows() {
        installCoreFlow(FinalityFlow::class, ::FinalityHandler)
        installCoreFlow(NotaryChangeFlow::class, ::NotaryChangeHandler)
        installCoreFlow(ContractUpgradeFlow.Initiate::class, ::ContractUpgradeHandler)
        installCoreFlow(SwapIdentitiesFlow::class, ::SwapIdentitiesHandler)
    }
    

    因此,观察者节点仍然能够在调用FinalityFlow时接收和记录交易。

    在 Corda 的未来版本中,这个默认的 FinalityFlow 处理程序将被删除。节点必须显式创建一个接收和存储事务的流,以便您实现上述行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多