【问题标题】:Restarting Corda Node results with More than one node found with legal name重新启动 Corda 节点结果发现多个具有合法名称的节点
【发布时间】:2018-10-11 17:15:24
【问题描述】:

我们正在运行一个 3.1 corda 网络,其中包含一个公证人、3 个参与方节点和一个网络地图服务。每个节点都有一个持久的 postgresql 数据库。当我们重新启动一个节点时,我们会得到以下堆栈跟踪:

[ERROR] 2018-05-31T13:53:37,386Z [main] internal.Node.run - Exception during node startup {}
java.lang.IllegalArgumentException: More than one node found with legal name O=*****, L=*****, C=**
        at net.corda.node.services.network.PersistentNetworkMapCache.getNodeByLegalName(PersistentNetworkMapCache.kt:161) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.services.network.NetworkMapCacheImpl.getNodeByLegalName(PersistentNetworkMapCache.kt) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.internal.AbstractNode.updateNodeInfo(AbstractNode.kt:324) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.internal.AbstractNode.access$updateNodeInfo(AbstractNode.kt:107) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.internal.AbstractNode$start$4.invoke(AbstractNode.kt:210) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.internal.AbstractNode$start$4.invoke(AbstractNode.kt:107) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.internal.AbstractNode$initialiseDatabasePersistence$2.invoke(AbstractNode.kt:673) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.internal.AbstractNode$initialiseDatabasePersistence$2.invoke(AbstractNode.kt:107) ~[corda-node-3.1-corda.jar:?]
        at net.corda.nodeapi.internal.persistence.CordaPersistence.inTopLevelTransaction(CordaPersistence.kt:148) ~[corda-node-api-3.1-corda.jar:?]
        at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:134) ~[corda-node-api-3.1-corda.jar:?]
        at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:120) ~[corda-node-api-3.1-corda.jar:?]
        at net.corda.nodeapi.internal.persistence.CordaPersistence.transaction(CordaPersistence.kt:127) ~[corda-node-api-3.1-corda.jar:?]
        at net.corda.node.internal.AbstractNode.initialiseDatabasePersistence(AbstractNode.kt:672) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.internal.Node.initialiseDatabasePersistence(Node.kt:337) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.internal.AbstractNode.start(AbstractNode.kt:208) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.internal.Node.start(Node.kt:351) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.internal.NodeStartup.startNode(NodeStartup.kt:140) ~[corda-node-3.1-corda.jar:?]
        at net.corda.node.internal.NodeStartup.run(NodeStartup.kt:114) [corda-node-3.1-corda.jar:?]
        at net.corda.node.Corda.main(Corda.kt:13) [corda-node-3.1-corda.jar:?]

这是否表明我们的网络地图服务如何注册节点或其他问题?

【问题讨论】:

  • 在 Corda 3 中,网络地图节点已被移除。您是否仍将其包含在您的网络中?
  • 感谢您的回复@Joel!我们正在运行基于 Stefano 示例的网络地图服务(spring boot):github.com/roastario/spring-boot-network-map。我们没有使用网络引导工具,但仍在通过 AWS 上的 CFT 部署的“开发模式”运行我们的节点。我们正尝试一步一步来更好地了解生产网络。也许我们需要更进一步,移除“开发模式”并建立我们自己的证书?
  • 嘿,我刚放假回来 - 我会看看这个!

标签: corda


【解决方案1】:

所以,经过一番调查,我相信它归结为

  1. Node X 在 devMode 下启动,生成一个密钥对并将其 nodeInfo 发布到 NetworkMap

  2. Corda 下载现有网络并使用节点公钥作为去重密钥在内部对 nodeInfos 进行去重

  3. 节点 X 已关闭

  4. 节点 X 已重置其本地存储

  5. 节点 X 启动并生成新的密钥对,发布其 nodeInfo

  6. 密钥对已更改,意味着去重不起作用

  7. Corda 抛出异常,因为看起来有两个节点试图冒充 CN=xxxx, O=xx ...

所以,我们将在这里讨论,节点更改密钥对是否现实场景,如果是……我们是否应该在找到两个具有相同 X500 但公钥不同的节点时抛出异常。

目前,我建议至少拥有持久性证书文件夹。这将防止节点在重新启动/重建时重新生成密钥对。

我还将向网络地图添加一个端点,这将允许您清除给定 X500 的 DB。

【讨论】:

    【解决方案2】:

    只是为了调查,你能不能停止节点,然后运行

    DELETE
    FROM NODE_LINK_NODEINFO_PARTY 
    DELETE
    FROM NODE_INFO_HOSTS
    DELETE
    FROM NODE_INFOS
    DELETE
    FROM NODE_INFO_PARTY_CERT
    

    在节点连接到的数据库上,然后启动节点。

    如果可行 - 它指向节点启动时的竞争条件。

    【讨论】:

    • 感谢您的回复@Stefano,希望您假期愉快!我们已经尝试过 - 结果是节点成功启动,我们确实在网络地图服务中看到该节点的重复条目。一旦我们尝试与节点进行交易,我们就会收到与未找到节点相关的错误。 (我们可以再次重现以获取确切的错误消息)您可以在 slack 上讨论它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多