首页 > 解决方案 > java.lang.IllegalArgumentException:未为以下事务参与者提供流会话:

问题描述

我有一个用例,我必须从发件人运营商 (TTL) 向两个运营商(比如 JIO 和 Airtel)发送投诉详细信息(投诉是分类账,即 IOUState.class)

State 类构造函数有投诉详情和三个 Operator(Party 对象),一个发送者和两个接收者。

用户案例的第一部分执行良好,交易/投诉详细信息正在以 Vault 状态/线性状态记录。

交易的第二部分涉及接收方运营商之一向发送方运营商发送投诉解决响应,并且不应向第三运营商发送合规响应。即说投诉与 Airtel 有关,然后 Airtel 将响应 TTL 并且 JIO 需要脱离循环。

我写了一个状态类和两个流类。

但是,当我执行第二个流程(Airtel 到 TTL)时,它会抛出 java.lang.IllegalArgumentException:未为以下事务参与者提供流程会话:[O=PartyJIO, L=MUMBAI, C=IN]

我已经使用 Command 创建了事务,只需要两个 Signers , TTL 和 Airtel 但不知道为什么仍然会收到错误

//Airtel Node中的Flow类,TAP为TTL Node

列出 requiredSigners = Arrays.asList(getOurIdentity().getOwningKey(), TAP.getOwningKey());

命令 command = new Command<>(new IOUContract.Create(), requiredSigners);

  txBuilder = new TransactionBuilder(notary)
            .addInputState(IOUState1.get(0))
            .addOutputState(outputState, IOUContract.ID)
            .addCommand(command);

FlowSession otherPartySession1 = 启动流(TAP);//TAP 是 TTL 方对象 //Otherpartysession1 正在 Airtel 节点执行

    SignedTransaction fullySignedTx = subFlow(new CollectSignaturesFlow(
            signedTx, Arrays.asList(otherPartySession1), CollectSignaturesFlow.tracker()));

java.lang.IllegalArgumentException:未为以下事务参与者提供流会话:

SignedTransaction fullySignedTx = subFlow(new CollectSignaturesFlow(
            signedTx, Arrays.asList(otherPartySession1), CollectSignaturesFlow.tracker()));

java.lang.IllegalArgumentException:未为以下事务参与者提供流会话:

标签: corda

解决方案


(此处为开发者关系@R3)

在 Corda 4 中,您需要向 FinalityFlow 传递一个包含所有事务参与者的会话列表,以便可以相应地分发事务。

仅仅因为某人在此参与者列表中,并不会使他们成为必需的签名者。所需的签名者由交易命令中列出的公钥确定。


推荐阅读