什么决定了登录Corda所需的密钥?

什么决定了登录Corda所需的密钥?,corda,Corda,我最近在流量测试中遇到了一个错误,它说: java.lang.IllegalArgumentException: A signature was requested for a key that isn't part of the required signing keys for transaction 当我查看我的代码时,我很难找到导致问题的键 输出状态有一个参与者列表 该命令获取一个键列表 将创建一个本地事务,该事务接受密钥: val locallySignedTx = service

我最近在流量测试中遇到了一个错误,它说:

java.lang.IllegalArgumentException: A signature was requested for a key that isn't part of the required signing keys for transaction 
当我查看我的代码时,我很难找到导致问题的键

输出状态有一个
参与者
列表

该命令获取一个键列表

将创建一个本地事务,该事务接受密钥:

val locallySignedTx = serviceHub.signInitialTransaction(txBuilder, keysToSignWith)
我还使用帐户SDK,每个帐户上都有密钥

CollectSignatureFlow
还带有交易对手的密钥


在下面的代码块中,
new Command()
中的第一个参数是Command
Create()
的类型,第二个参数是所需签名者的列表(在这种情况下是贷款人和借款人)。
为了回答您的问题:
命令中的第二个参数定义了所需签名者的列表

final Command<IOUContract.Commands.Create> txCommand = 
new Command<>(new IOUContract.Commands.Create(), 
ImmutableList.of(iouState.getLender().getOwningKey(), iouState.getBorrower().getOwningKey()));
现在让我们回到您的问题上来,我想发生的是您从一方收集了一个签名,而该方不是您命令中所需签名者的一部分。我搜索了Corda的代码,发现您的错误消息来自
CollectSignaturesFlow。CheckMySignaturesRequested()
函数:

private fun checkMySignaturesRequired(stx: SignedTransaction, signingKeys: Iterable<PublicKey>) {
    require(signingKeys.all { it in stx.tx.requiredSigningKeys }) {
        "A signature was requested for a key that isn't part of 
the required signing keys for transaction ${stx.id}"
    }
}
我尽量回答,因为我看不到你的完整代码

private fun checkMySignaturesRequired(stx: SignedTransaction, signingKeys: Iterable<PublicKey>) {
    require(signingKeys.all { it in stx.tx.requiredSigningKeys }) {
        "A signature was requested for a key that isn't part of 
the required signing keys for transaction ${stx.id}"
    }
}
getServiceHub().signInitialTransaction(txBuilder, Arrays.asList(pkOfAcc1, pkOfAcc2, pkOfAcc3);