为什么在verifyProposal过程中,合同升级会对交易方抛出铸造错误?

问题描述 投票:0回答:1

我在成功授权后想进行合同升级,我尝试启动升级流程,但交易方却出现了异常。所以我想知道为什么会发生这种情况。

在springboot API

val states = queryUnconsumed<ObligationV1>

// Initiate upgrade contract flow.
states.forEach {

    val flowInitiate = services.startFlow({ stateAndRef, upgrade -> ContractUpgradeFlow.Initiate(stateAndRef, upgrade) }, it , ObligationContractV2::class.java)

    val resultInitiate = flowInitiate.returnValue.getOrThrow()
 }

ContractUpgradeHandler

// Wouldn't this tx always be of type upgrade tx?
val oldStateAndRef = ourSTX!!.tx.outRef<ContractState>(proposal.stateRef.index)

但在 SignedTransaction.kt

** Returns the contained [WireTransaction], or throws if this is a notary change or contract upgrade transaction. */
val tx: WireTransaction get() = coreTransaction as WireTransaction
[WARN ] 2018-08-20T10:25:03,573Z [节点线程-1] flow.[fe5bf9ea-fafc-40b6-9b51-31caaa4ee513].run - 因意外异常而终止 {}java.lang.ClassCastException: net.corda.core.transactions.ContractUpgradeWireTransaction cannot be cast to net.corda.core.transactions.getTx(SignedTransaction.kt:62) ~[corda-core-corda-3.0.jar: ? WireTransaction at net.corda.core.transaction.SignedTransaction.getTx(SignedTransaction.kt:62) ~[corda-core-corda-3.0 jar:?] at net.corda.node.services.ContractUpgradeHandler.verifyProposal(CoreFlowHandlers.kt:57) ~[corda-node-corda-3.0 jar:? AbstractStateReplacementFlow$Acceptor.call(AbstractStateReplacementFlow.kt:149) ~[corda-core-corda-3.0 jar:?] 在net.corda.core.flow. AbstractStateReplacementFlow$Acceptor.call(AbstractStateReplacementFlow.kt:129) ~[corda-core-corda-3.0.jar:?] 在net.corda.node.services.statemachine.FlowStateMachineImpl.call(AbstractStateReplacementFlow.kt:129) ~[corda-core-corda-3.0.jar:? 在net.corda.node.services.statemachine.FlowStateMachineImpl.run(FlowStateMachineImpl.kt:96) ~[corda-node-corda-3.0.jar:?] run(FlowStateMachineImpl.kt:44) [corda-node-corda-3.0.jar:?] at co.paralleluniverse.fibers.Fiber.run1(Fiber.java:1092) [quasar-core-0. 7.9-jdk8.jar:0.7.9] 在co.paralleluniverse.fiber.Fiber.exec(Fiber.java:788) [quasar-core-0.7.9-jdk8.jar:0.7.9] 在co.paralleluniverse.Fiber.Fiber.RunnableFiber.run1(Fiber.java:788)[quasar-core-0.7.9-jdk8.jar:0.7.9]。 fibers.RunnableFiberTask.doExec(RunnableFiberTask.java:100) [quasar-core-0.7.9-jdk8.jar:0.7.9] at co.paralleluniverse.fiber.FiberTask.doExec(RunnableFiberTask.java:100) [quasar-core-0.7.9-jdk8.jar:0.7.9] at co.paralleluniverse.fiber.Fiber.FiberTask.doExec(RunnableFiberTask.java:100) [quasar-core-0.7.9-jdk8.jar:0.7.9]。 RunnableFiberTask.run(RunnableFiberTask.java:91) [quasar-core-0.7.9-jdk8.jar:0.7.9] at java.util.concurrent.Executors$RunnableAdapter. Call(Executors.java:511) [?:1.8.0_181] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [? ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_181] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [? runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [? 8.0_181] 在net.corda.node.utilities.AffinityExecutor$ServiceAffinityExecutor$1$thread$1.run(AffinityExecutor.kt:62) [corda-node-corda-3.0.jar:?]
corda
1个回答
0
投票

错误信息是很直接的,看来你是想投一个 ContractUpgradeWireTransactionWireTransaction 的某个地方。

下面是我们最近关于如何在Corda上实现合同升级的教程。https:/medium.comcordacontract-upgrades and -constraints -in -corda -425055a9a47f而这里是视频教程。https:/www.youtube.comwatch?v=rWyJRaoWNhc

© www.soinside.com 2019 - 2024. All rights reserved.