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

时间:2019-06-04 14:15:21

标签: corda

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

状态类构造函数具有投诉详细信息和三个操作员(Party对象),一个发送者和两个接收者。

用例的第一部分正在执行中,事务/投诉详细信息已以保险柜状态/线性状态记录。

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

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

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

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

// Airtel节点中的Flow类,TAP是TTL节点

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

命令命令=新命令<>(新IOUContract.Create(),requiredSigners);

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

FlowSession otherPartySession1 = initializeFlow(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:没有为以下事务参与者提供流会话:

2 个答案:

答案 0 :(得分:0)

(此处为开发人员关系@ R3)

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

仅由于某人在此参与者列表中,所以并没有使他们成为必需的签名者。必需的签名者由交易命令上列出的公共密钥确定。

答案 1 :(得分:0)

安东尼·基南(Anthony Keenan)也对此进行了研究,并在this page上找到了

The PartyB that is resolved from the transaction has an owning key that is different to the owning key in serviceHub.myInfo.legalIdentities so it thinks it's an 'external participant' and expects a flow session passing in.

所以..可能是您以某种方式重新创建了密钥的情况。