微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决corda 4:即使流没有被修改,之前相互通信的节点在重启后也不会相互识别

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

POC 在本地网络中以 DEV MODE 运行。

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

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

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

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

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

  1. 从“提供者节点”到“消费者 1 节点”的流程 1 和
  2. 从“消费者 1 节点”到“消费者 2 节点”和提供者节点的流程 2。

两个流程都成功

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

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

我启动了从“消费者 2 节点”到“消费者 1 节点和提供者节点”的流程 3。

失败

抛出错误:“CollectSignaturesFlow 的发起方必须准确传递签署交易所需的会话。”

然后我启动了从“提供者节点”到“消费者 1 节点”的流程 1

它也失败了

抛出错误:“不知道 OU=Bank、O=MyBank、L=Houston、C=U”

问题:

  1. 上述情况可能是什么原因?
  2. 每次停止节点后我都应该重新部署节点吗?

解决方法

由于您使用的是 PostgreqSQL 数据库,因此在进行干净部署时,clean 命令不会清除 postgres 数据库,这与 h2 数据库不同。

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

所以现在发生的事情是,当您第一次部署您的cordapp 时,引导程序工具生成证书(您可以在 build/nodes/PartyA/certificates 文件夹中找到这些),它们也保存在数据库中. NodeInfos也保存在这里build/nodes/PartyA/

当您进行干净的构建时,构建文件夹会被清除,但数据库不会被清除,并且会被新条目损坏,而新条目也包含新条目,并且节点会与要使用的条目混淆。

因此,当您在节点上进行全新部署时,解决方案是删除并重新创建数据库中的架构。

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

谢谢,祝你好运!

,

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

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

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

这些命令是从每个节点的“/build/nodes/”文件夹运行的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?