corda 4:以前相互通信的节点在重新启动后不会识别彼此,即使流没有被修改



我们正在使用Corda 4和Springboot web服务器构建POC。

POC在我们的本地网络中以DEV模式运行。

为POC开发的CorDapp有四个节点-

  1. 提供程序节点
  2. 消费者1节点
  3. 消费者2节点
  4. 公证节点

三个节点之间发生的每一笔交易都有三个流。以下是三种流程和状态:

  1. 流1:提供程序节点-->消费者1节点
  2. 流程2:消费者1节点-->使用者2节点和提供者节点
  3. 流程3:消费者2节点-->使用者1节点和提供者节点

我在2021年7月7日执行了前两个流程-

  1. 来自";提供者节点";至";消费者1节点";以及
  2. 流程2来自";消费者1节点";至";消费者2节点";以及提供者节点">

两个流程都是成功的

我在Flow 2之后停止了节点。

第二天,也就是2021年7月8日,我重新启动了节点。

我从";消费者2节点";至";消费者1节点和提供者节点";。

失败

抛出错误:"CollectSignaturesFlow的发起方必须传入对事务进行签名所需的会话">

然后;提供者节点";至";消费者1节点";

它也失败了

抛出错误:"不知道OU=Bank,O=MyBank,L=Houston,C=U">

问题:

  1. 发生上述情况的原因是什么
  2. 我是否应该在每次节点停止后重新部署这些节点

由于您使用的是PostgrecSQL数据库,因此在执行clean部署时,clean命令不会清理postgres数据库,这与h2数据库不同。

理想情况下,在生产系统中,预计您将部署一次cordapp,稍后当然可以在需要时升级您的合同、状态和流,但您永远不会完全清除数据库。

因此,现在发生的情况是,当您第一次部署cordapp时,证书是由引导程序工具生成的(您可以在build/notes/PartyA/certificates文件夹中找到这些证书(,它们也保存在DB中。NodeInfos也保存在此处build/notes/PartyA/

当您执行干净的生成时,生成文件夹会被清理,但数据库不会被清理,并且会被包含新条目的新条目损坏,节点会与要使用的条目混淆。

因此,解决方案是在节点上进行干净部署时,也删除并重新创建数据库中的模式。

  1. 您的流在尝试完成事务时,事务所需的签名者和状态中所需的参与者之间似乎不匹配
  2. 不确定"重新部署"节点是什么意思,但不必每次都重新启动它们。理想情况下,您根本不应该重新部署或重新启动它们

谢谢,祝你好运!

我发现,通过在重新启动节点之前再次生成节点infos,即使在停止和启动节点之后,我也能够执行所有流。

用于重新生成节点信息的命令:

java -jar corda.jar clear-network-cache
java -jar corda.jar generate-node-info

这些命令是从"/构建/节点/";每个节点的文件夹。

相关内容

  • 没有找到相关文章

最新更新