在重新部署的Corda Enterprise App上发布更新状态

时间:2018-07-19 07:17:43

标签: corda

在更改某些分类帐代码并尝试更新由旧部署创建的状态后,重新部署Corda Enterprise应用程序时遇到问题。最初,我遇到由以下TransactionBuilder约束引起的公证问题:

    require(notary == this.notary) { "Input state requires notary \"$notary\" which does not match the transaction notary \"${this.notary}\"."

这通过使用NotaryChangeFlow解决。我的用法示例如下:

        val inputNotary = inputState.state.notary
        if(inputNotary != newNotary) {
            subFlow(NotaryChangeFlow(inputState, newNotary))
        }

但是,我现在收到错误消息:

java.lang.IllegalArgumentException: Don't know about O=Party, L=Sydney, C=AU
at net.corda.node.services.statemachine.FlowMessagingImpl.sendSessionMessage(FlowMessaging.kt:65) ~[corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.ActionExecutorImpl.executeSendInitial(ActionExecutorImpl.kt:177) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.ActionExecutorImpl.executeAction(ActionExecutorImpl.kt:75) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.interceptors.MetricActionInterceptor.executeAction(MetricInterceptor.kt:31) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.TransitionExecutorImpl.executeTransition(TransitionExecutorImpl.kt:51) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.interceptors.HospitalisingInterceptor.executeTransition(HospitalisingInterceptor.kt:54) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.interceptors.DumpHistoryOnErrorInterceptor.executeTransition(DumpHistoryOnErrorInterceptor.kt:46) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.interceptors.MetricInterceptor.executeTransition(MetricInterceptor.kt:23) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.interceptors.FiberDeserializationCheckingInterceptor.executeTransition(FiberDeserializationCheckingInterceptor.kt:50) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.processEvent(FlowStateMachineImpl.kt:133) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.processEventsUntilFlowIsResumed(FlowStateMachineImpl.kt:162) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.suspend(FlowStateMachineImpl.kt:396) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.FlowSessionImpl.sendAndReceive(FlowSessionImpl.kt:64) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.FlowSessionImpl.sendAndReceive(FlowSessionImpl.kt:71) [corda-node-3.1.jar:?]
at net.corda.core.flows.DataVendingFlow.sendPayloadAndReceiveDataRequest(SendTransactionFlow.kt:81) [corda-core-3.1.jar:?]
at net.corda.core.flows.DataVendingFlow.call(SendTransactionFlow.kt:59) [corda-core-3.1.jar:?]
at net.corda.core.flows.DataVendingFlow.call(SendTransactionFlow.kt:42) [corda-core-3.1.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.subFlow(FlowStateMachineImpl.kt:281) [corda-node-3.1.jar:?]
at net.corda.core.flows.FlowLogic.subFlow(FlowLogic.kt:312) [corda-core-3.1.jar:?]
at net.corda.core.flows.AbstractStateReplacementFlow$Instigator.getParticipantSignature(AbstractStateReplacementFlow.kt:118) [corda-core-3.1.jar:?]
at net.corda.core.flows.AbstractStateReplacementFlow$Instigator.collectSignatures(AbstractStateReplacementFlow.kt:102) [corda-core-3.1.jar:?]
at net.corda.core.flows.AbstractStateReplacementFlow$Instigator.call(AbstractStateReplacementFlow.kt:78) [corda-core-3.1.jar:?]
at net.corda.core.flows.AbstractStateReplacementFlow$Instigator.call(AbstractStateReplacementFlow.kt:60) [corda-core-3.1.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.subFlow(FlowStateMachineImpl.kt:281) [corda-node-3.1.jar:?]
at net.corda.core.flows.FlowLogic.subFlow(FlowLogic.kt:312) [corda-core-3.1.jar:?]
at com.administration.ledger.flow.MemberUpdateFlow$Initiator.call(MemberFlow.kt:104) [administration-ledger-0.1.jar:0.1]
at com.administration.ledger.flow.MemberUpdateFlow$Initiator.call(MemberFlow.kt:80) [administration-ledger-0.1.jar:0.1]
at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:225) [corda-node-3.1.jar:?]
at net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:51) [corda-node-3.1.jar:?]
at co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) [quasar-core-0.7.10-jdk8.jar:0.7.10]
at co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788) [quasar-core-0.7.10-jdk8.jar:0.7.10]
at co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) [quasar-core-0.7.10-jdk8.jar:0.7.10]
at co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91) [quasar-core-0.7.10-jdk8.jar:0.7.10]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_131]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.22.Final.jar:4.1.22.Final]

我想知道是否有人在/知道是什么原因之前见过此错误。似乎与引用原始O = Party,L = Sydney,C = AU Party的交易有关,该原始参与者是初始状态创建的参与者。此Flow在Corda OS中工作正常,但在迁移到Enterprise后引起问题。

1 个答案:

答案 0 :(得分:1)

您在上面的评论中说:

  

只需确认./gradlew deployNodes命令是正确的命令   进行更改后重新部署节点

这是不正确的。重新运行deployNodes将创建具有一组新证书的一组新节点。这就是为什么您会收到java.lang.IllegalArgumentException: Don't know about O=Party, L=Sydney, C=AU形式的异常的原因。

您应该使用以下过程来更新CorDapp:

  • 按照说明here
  • 将节点置于排水模式下
  • 排水完成后,关闭节点
  • 按照说明here
  • 构建新的CorDapp JAR。
  • 按照说明here
  • 安装新的CorDapp JAR。
  • 重新启动节点