需要实现Corda节点,它是纯粹的观察者手段,可以保持状态,但不会与其他节点参与任何事务。
为了达到目的,我做了以下事情:
将3个节点如下:
PartyA-节点包含cordApp jar,其中包括事务流,观察者流以及合同和状态
PartyB-节点包含cordApp jar,其中包括事务流,观察者流以及合同和状态
观察者-节点仅包含协定和状态以及观察者流。
在观察者节点上,所有交易节点都是有意删除的,因此观察者将无法与其他节点进行交易。
节点启动后,通过保持Observer节点为观察者来执行从PartyA到PartyB的事务。效果很好。
现在,我尝试了从甲方到观察员的同一件事,并让甲方B作为观察员。我希望事务会失败,但是即使观察者节点没有事务流,事务也会在观察者节点上提交。
当我尝试执行从观察者到PartyA的交易时,由于未找到预期的流程,因此出现错误。
我正在使用的示例具有可拥有的状态,并使用了简单的启动流程。
我的问题是,尽管观察者上没有流量,但定向交易如何与观察者一起工作。
如何防止观察者不与其他节点进行任何事务,而只是充当纯粹的观察者。
答案 0 :(得分:0)
从Corda 3开始,该节点在启动以下四个流时实际上会安装默认流响应器:
FinalityFlow
NotaryChangeFlow
ContractUpgradeFlow.Initiate
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
处理程序。节点将必须显式创建一个接收和存储事务的流,以使您能够实现上述行为。