我们正在使用Corda 4和Springboot web服务器构建POC。
POC在我们的本地网络中以DEV模式运行。
为POC开发的CorDapp有四个节点-
- 提供程序节点
- 消费者1节点
- 消费者2节点
- 公证节点
三个节点之间发生的每一笔交易都有三个流。以下是三种流程和状态:
- 流1:提供程序节点-->消费者1节点
- 流程2:消费者1节点-->使用者2节点和提供者节点
- 流程3:消费者2节点-->使用者1节点和提供者节点
我在2021年7月7日执行了前两个流程-
- 来自";提供者节点";至";消费者1节点";以及
- 流程2来自";消费者1节点";至";消费者2节点";以及提供者节点">
两个流程都是成功的
我在Flow 2之后停止了节点。
第二天,也就是2021年7月8日,我重新启动了节点。
我从";消费者2节点";至";消费者1节点和提供者节点";。
失败
抛出错误:"CollectSignaturesFlow的发起方必须传入对事务进行签名所需的会话">
然后;提供者节点";至";消费者1节点";
它也失败了
抛出错误:"不知道OU=Bank,O=MyBank,L=Houston,C=U">
问题:
- 发生上述情况的原因是什么
- 我是否应该在每次节点停止后重新部署这些节点
由于您使用的是PostgrecSQL数据库,因此在执行clean部署时,clean命令不会清理postgres数据库,这与h2数据库不同。
理想情况下,在生产系统中,预计您将部署一次cordapp,稍后当然可以在需要时升级您的合同、状态和流,但您永远不会完全清除数据库。
因此,现在发生的情况是,当您第一次部署cordapp时,证书是由引导程序工具生成的(您可以在build/notes/PartyA/certificates文件夹中找到这些证书(,它们也保存在DB中。NodeInfos也保存在此处build/notes/PartyA/
当您执行干净的生成时,生成文件夹会被清理,但数据库不会被清理,并且会被包含新条目的新条目损坏,节点会与要使用的条目混淆。
因此,解决方案是在节点上进行干净部署时,也删除并重新创建数据库中的模式。
- 您的流在尝试完成事务时,事务所需的签名者和状态中所需的参与者之间似乎不匹配
- 不确定"重新部署"节点是什么意思,但不必每次都重新启动它们。理想情况下,您根本不应该重新部署或重新启动它们
谢谢,祝你好运!
我发现,通过在重新启动节点之前再次生成节点infos,即使在停止和启动节点之后,我也能够执行所有流。
用于重新生成节点信息的命令:
java -jar corda.jar clear-network-cache
java -jar corda.jar generate-node-info
这些命令是从"/构建/节点/";每个节点的文件夹。