corda - 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:未为以下事务参与者提供流会话:
解决方案
(此处为开发者关系@R3)
在 Corda 4 中,您需要向 FinalityFlow 传递一个包含所有事务参与者的会话列表,以便可以相应地分发事务。
仅仅因为某人在此参与者列表中,并不会使他们成为必需的签名者。所需的签名者由交易命令中列出的公钥确定。
推荐阅读
- pandas - 为什么在 reset_index 之前使用 to_frame?
- apache-kafka - 当控制器成为第二个节点(id 2)时,zookeeper 和 Kafka 不工作
- django - 布尔字段的 Django 迁移问题
- r - 将单列转换为类似形式的相关矩阵
- azure-log-analytics - Azure 日志分析 > 固定在仪表板上时查询相同但结果不同
- python - Tensorflow 未安装,软件包与哈希文件不匹配
- javascript - 在 hideURLbar 上编写代码的正确方法或正确的“事件”是什么
- docker - 如何在 docker 上绑定已安装的持久卷?我正在尝试在 docker 上运行 Sonarqube
- python - 在 Python 中过滤具有特定要求的数据框
- android - 为什么我无法从 Firestore DocumentSnapshot 中获取 Int 类型?