如何限制观察者节点进行任何交易

时间:2018-10-31 17:22:19

标签: corda

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

为了达到目的,我做了以下事情:

将3个节点如下:

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

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

观察者-节点仅包含协定和状态以及观察者流。

在观察者节点上,所有交易节点都是有意删除的,因此观察者将无法与其他节点进行交易。

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

现在,我尝试了从甲方到观察员的同一件事,并让甲方B作为观察员。我希望事务会失败,但是即使观察者节点没有事务流,事务也会在观察者节点上提交。

当我尝试执行从观察者到PartyA的交易时,由于未找到预期的流程,因此出现错误。

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

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

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

1 个答案:

答案 0 :(得分:0)

从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处理程序。节点将必须显式创建一个接收和存储事务的流,以使您能够实现上述行为。