交易验证失败。同时使用不同类型的状态作为输入和输出

Transaction Verification failed. while using different types of states as input and output

我在创建 Cordapp 时遇到问题。 我有两种类型的状态 Policy State 和 Claim State 以及它们各自的合同。 现在我正在编写一个索赔流程,其中政策状态将作为输入,索赔状态应该作为输出产生。

但是我在这样做时遇到了这个错误-

java.util.concurrent.ExecutionException: net.corda.core.contracts.TransactionVerificationException$ContractRejection: Contract verification failed: Required com.example.contract.PolicyContract.Commands.Create command, contract: com.example.contract.PolicyContract, transaction: B6F0A0B895B477153530F060B264FE85BAA8F29BA922A546BEC6300A255667C7

我附上我的保单合同、ClaimContract 和 ClaimFlow-

PolicyContract- https://ideone.com/giz7uX

ClaimContract-https://ideone.com/3GM4UF

ClaimFlow-https://ideone.com/BobTsy

问题是requireSingleCommand。当您创建具有输入状态的交易时,输入状态包含在另一个交易中的命令也将在此处加载。要解决此问题,请使用 tx.commandsOfType<YourType>() 或任何语法。这不会抛出异常。

异常是由于 singlerequireSingleCommand 中被调用。