我尝试在本地测试中使用新版本的cordapp的一个问题

时间:2018-09-11 22:51:29

标签: corda

我正在尝试进行一项cordapp升级过程,我所做的步骤是: 我使用WhitelistedByZoneAttachmentConstraint作为合同约束

  1. 使用deploynodes生成cordapps的第一个版本(在项目的build / nodes下),然后将其复制到另一个文件夹(例如c:/ nodes)中,以避免它被清理,也可以放置新的那里的cordapp版本

  2. 我在此版本的cordapp中生成了一些交易和状态

  3. 我什么都没做,只是再次运行deploynodes以拥有一个新的cordapp,然后将新生成的cordapp.jar和cordapp-contracts-states.jar以及网络参数放到c:/下的每个节点上节点
  4. 当我尝试更新以前创建的状态时,发生以下错误,尽管公证人名称仍然完全相同,并且在H2数据库中,没有添加新的公证人密钥/身份,但仅存储了一个公证人身份在H2数据库中。
  

[WARN] 2018-09-11T22:39:04,171Z [Node thread-1]流。[9a483272-0a1e-   43d1-938f-9d123db38eee] .run-被意外的异常{}终止       java.lang.IllegalArgumentException:输入状态需要公证人“ O =公证人,L =伦敦,C = GB”,这与交易公证人不匹配   “ O =公证人,L =伦敦,C = GB”。         在net.corda.core.transactions.TransactionBuilder.addInputState(TransactionBuilder.kt:148)   〜[corda-core-3.2-corda.jar :?]         在com.legal.flows.contract.LegalContractFlow $ Initiator.call(LegalContractFlow.kt:124)   〜[cordapp-0.1.jar :?]         在com.legal.flows.contract.LegalContractFlow $ Initiator.call(LegalContractFlow.kt:47)   〜[cordapp-0.1.jar :?]         在net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:96)   [corda-node-3.2-corda.jar :?]         在net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:44)   [corda-node-3.2-corda.jar :?]         在co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092)[quasar-core-0.7.9-jdk8.jar:0.7.9]         在co.paralleluniverse.fibers.Fiber.exec(Fiber.java:788)[quasar-core-0.7.9-jdk8.jar:0.7.9]         在co.paralleluniverse.fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100)   [quasar-core-0.7.9-jdk8.jar:0.7.9]         在co.paralleluniverse.fibers.RunnableFiberTask.run(RunnableFiberTask.java:91)   [quasar-core-0.7.9-jdk8.jar:0.7.9]         在java.util.concurrent.Executors $ RunnableAdapter.call(未知来源)[?: 1.8.0_181]         在java.util.concurrent.FutureTask.run(未知来源)[?: 1.8.0_181]         在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201(未知   来源)[?:1.8.0_181]         在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(未知   来源)[?:1.8.0_181]         在java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)[?: 1.8.0_181]         在java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源)[?: 1.8.0_181]         在net.corda.node.utilities.AffinityExecutor $ ServiceAffinityExecutor $ 1 $ thread $ 1.run(AffinityExecutor.kt:62)   [corda-node-3.2-corda.jar:?]

我检查了Corda的TransactionBuilder.kt中第148行附近的函数,但是我不确定为什么这两个公证人被标识为不同的公证人,即使它们的名称和身份也相同。有人可以帮忙吗?

open fun addInputState(stateAndRef: StateAndRef<*>): TransactionBuilder {
    val notary = stateAndRef.state.notary
    require(notary == this.notary) { "Input state requires notary \"$notary\" which does not match the transaction notary \"${this.notary}\"." }
    inputs.add(stateAndRef.ref)
    inputsWithTransactionState.add(stateAndRef.state)
    return this
}

0 个答案:

没有答案