在Corda中,验证事务时的事务解决异常
在Corda流程中,我接收并验证如下事务:在Corda中,验证事务时的事务解决异常,corda,Corda,在Corda流程中,我接收并验证如下事务: @InitiatedBy(Initiator::class) class Responder(val counterpartySession: FlowSession) : FlowLogic<Unit>() { @Suspendable override fun call() { val stx = counterpartySession.receive<SignedTransaction>()
@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
传递签名事务是不正确的。
最好使用flowsSendTransactionFlow
和ReceiveTransactionFlow
下载这些输入引用的状态
如果无法按照上述流程要求发送SignedTransaction
(例如,因为您正在发送FilteredTransaction
),则可以使用FlowSession.send()
方法发送,但输入的所有者以SendStateAndReflow
流程响应,请求者可以接收它receivestate和fflow
,在原始事务中添加输入
这将允许在所有节点中具有输入的引用状态,从而允许您验证事务