首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >net.corda.core.flows.UnexpectedFlowEndException - C=GB,L=London,O=NodeA上的交易对手流有一个内部错误,并且已经终止。

net.corda.core.flows.UnexpectedFlowEndException - C=GB,L=London,O=NodeA上的交易对手流有一个内部错误,并且已经终止。
EN

Stack Overflow用户
提问于 2018-11-30 16:19:22
回答 2查看 1K关注 0票数 0

我使用的是Corda的版本-v1。

我的应用程序有三个节点- A、B和C。下面是应用程序中定义的流-

流程1: A向B和C发送贸易请求

流程2: B批准交易请求,自行签署,从A处获得签名并关闭交易.

流程1运行良好。在执行工作流2时,我会得到net.corda.core.flows.UnexpectedFlowEndException错误。

节点A的日志显示以下行,

代码语言:javascript
复制
net.corda.core.flows.UnexpectedFlowEndException: Counterparty flow on C=GB,L=London,O=NodeA had an internal error and has terminated
    at       net.corda.node.services.statemachine.FlowStateMachineImpl.erroredEnd(FlowStateMachineImpl.kt:446)
    at     net.corda.node.services.statemachine.FlowStateMachineImpl.confirmReceiveType(FlowStateMachineImpl.kt:429)

我参考了WorkflowTransactionBuildTutorial.kt的流- (https://github.com/corda/corda/blob/release-V1/docs/source/example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt)

1.我正在为工作流1执行以下代码

代码语言:javascript
复制
val tradeProposal = IOUContract.State(OU( IouId, IouCurrency, IouAmount), serviceHub.myInfo.legalIdentities.first(), nodeB, nodeC).contract.IOUContract"

val IOU_CONTRACT_ID = "net.corda.bgc.contract.IOUContract"

val tx = TransactionBuilder(notary).withItems(
              StateAndContract(tradeProposal, IOU_CONTRACT_ID),                     
Command(IOUContract.Commands.Issue(),listOf(tradeProposal.sender.owningKey)))
              .addAttachment(secHash)

tx.setTimeWindow(serviceHub.clock.instant(), 180.seconds)

val signedTx = serviceHub.signInitialTransaction(tx)
subFlow(FinalityFlow(signedTx, setOf(serviceHub.myInfo.legalIdentities.first(), nodeB, nodeC)))

return signedTx.tx.outRef<IOUContract.State>(0)

这段代码工作得很好。节点B和C都接收状态为“NEW”的nodeA的IOU请求。

2.我正在执行工作流2的以下代码

将签名交易发送给发件人并等待的代码。

他们的签名确认

代码语言:javascript
复制
val tx = TransactionBuilder(notary).
            withItems(
                  latestRecord,
                  StateAndContract(newState, IOU_CONTRACT_ID),
                  Command(IOUContract.Commands.Completed(),                              listOf(serviceHub.myInfo.legalIdentities.first().owningKey, latestRecord.state.data.nodeA.owningKey)))

tx.setTimeWindow(serviceHub.clock.instant(), 600.seconds)

val selfSignedTx = serviceHub.signInitialTransaction(tx)

val session = initiateFlow(newState.nodeA)

val allPartySignedTx = session.sendAndReceive<TransactionSignature>(selfSignedTx).unwrap {
val agreedTx = selfSignedTx + it
agreedTx.verifySignaturesExcept(notary.owningKey)
agreedTx.tx.toLedgerTransaction(serviceHub).verify()
agreedTx
}

subFlow(FinalityFlow(allPartySignedTx, setOf(newState.nodeA, newState.nodeB, newState.nodeC)))

return allPartySignedTx.tx.outRef(0)

收到关于建议的最后决定

代码语言:javascript
复制
val completeTx = receive<SignedTransaction>(source).unwrap {
it.verifySignaturesExcept(ourIdentity.owningKey, it.tx.notary!!.owningKey)
val ltx = it.toLedgerTransaction(serviceHub, false)
ltx.verify()
val state = ltx.outRef<IOUContract.State>(0)
}
it

val ourSignature = serviceHub.createSignature(completeTx)
send(ourSignature)

但是,上面的代码失败了,并引发了错误net.corda.core.flows.UnexpectedFlowEndException。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-06 14:08:46

谢谢。

在审批流程中,将“发送和接收”功能替换为“收件信号流”功能。现在,启动程序流和批准流都在工作。

引用链接- https://github.com/corda/cordapp-example/blob/release-V3/kotlin-source/src/main/kotlin/com/example/flow/ExampleFlow.kt

票数 0
EN

Stack Overflow用户

发布于 2018-12-05 09:49:54

当您得到表单的例外情况时:

代码语言:javascript
复制
net.corda.core.flows.UnexpectedFlowEndException: 
    Counterparty flow on C=GB,L=London,O=NodeA had an internal error and has terminated

这意味着对手节点(本例中为NodeA)遇到了异常。您应该检查对手节点的日志。每个节点在/logs文件夹中都有日志。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53561251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档