corda - 如何限制观察者节点进行任何交易
问题描述
需要实现corda节点,它是纯粹的观察者手段,它持久化状态但不会与其他节点参与任何事务。
为了实现它,我做了以下事情:
制作了3个节点如下:
PartyA - 节点包含 cordApp jar,包括事务流、观察者流和合同和状态
PartyB - 节点包含 cordApp jar,包括事务流、观察者流和合同和状态
观察者 - 节点仅包含合同和状态以及观察者流。
在观察者节点上,所有事务节点都被有意删除,以便观察者无法与其他节点进行交易。
节点启动后,通过保持 Observer 节点作为观察者来执行从 PartyA 到 PartyB 的事务。它完美地工作。
现在我尝试了从 PartyA 到观察者的相同操作,并将 PartyB 保留为观察者。我预计事务会失败,但即使观察者节点没有事务流,事务也会在观察者节点上提交。
当我尝试执行从观察者到 PartyA 的事务时,它会给出错误,因为没有找到预期的流。
我正在使用的示例具有可拥有状态并使用简单的启动流程。
我的问题是一个定向事务如何与观察者一起工作,尽管观察者没有流量。
我如何防止观察者不与其他节点进行任何交易,只是充当纯粹的观察者。
解决方案
从 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
处理程序将被删除。节点必须显式创建一个接收和存储事务的流,从而允许您实现上述行为。
推荐阅读
- c# - TwitchLib.Client.Services.MessageThrottler 用法
- testing - CasperJS如何触发模糊事件
- php - Apache File Permissions only in /tmp
- r - R Shiny如何让ggplot通过dplyr过滤器做颜色/形状
- sas - 如何在 sas 获得下周五
- javascript - d3.js 中的简单图形布局?
- r - 使用具有模式检测的另一列替换字符列的值
- ionic3 - 使用 Shopify Storefront API 获取集合图片
- android - How to check if I am connected to a certain wifi network?
- spring - Spring控制器向任何请求添加属性