在Corda中,验证事务时的事务解决异常

在Corda中,验证事务时的事务解决异常,corda,Corda,在Corda流程中,我接收并验证如下事务: @InitiatedBy(Initiator::class) class Responder(val counterpartySession: FlowSession) : FlowLogic<Unit>() { @Suspendable override fun call() { val stx = counterpartySession.receive<SignedTransaction>()

在Corda流程中,我接收并验证如下事务:

@InitiatedBy(Initiator::class)
class Responder(val counterpartySession: FlowSession) : FlowLogic<Unit>() {
    @Suspendable
    override fun call() {
        val stx = counterpartySession.receive<SignedTransaction>().unwrap { it }
        stx.verify(serviceHub, false)
    }
}
@InitiatedBy(启动器::类)
类响应程序(val countpartysession:FlowSession):FlowLogic(){
@暂停
覆盖有趣的调用(){
val stx=counterpartySession.receive().unwrap{it}
stx.verify(serviceHub,false)
}
}
但是,这会引发以下异常:

net.corda.core.contracts.TransactionResolutionException:交易 解决问题失败 3D90346DD7F739749312EF4DD5A4741F4CA31C2070BC4F8A0588974B1CD1523


事务解析异常的原因是什么?如何修复它?

当节点验证事务时,它不仅仅验证事务本身。它还验证整个事务链。
TransactionResolutionException
表示事务链中的一个或多个事务丢失,无法验证

为了避免这种情况,您应该使用
SendTransactionFlow
发送事务,并使用
ReceiveTransactionFlow
接收事务。此流对执行两项操作:

  • 它发送有问题的事务
  • 它允许接收节点从对方下载他们在接收的交易链中丢失的所有交易

在您正在验证的节点中,您没有传递的输入引用的
事务状态

使用
Send
Send和receive
传递签名事务是不正确的。 最好使用flows
SendTransactionFlow
ReceiveTransactionFlow
下载这些输入引用的状态

如果无法按照上述流程要求发送
SignedTransaction
(例如,因为您正在发送
FilteredTransaction
),则可以使用
FlowSession.send()
方法发送,但输入的所有者以
SendStateAndReflow
流程响应,请求者可以接收它
receivestate和fflow
,在原始事务中添加输入

这将允许在所有节点中具有输入的引用状态,从而允许您验证事务