Corda 如何获取特定节点参与者的“PartyAndCertificate”?

Corda 如何获取特定节点参与者的“PartyAndCertificate”?,corda,Corda,在我的流中,我想调用预定义的子流 fun generateSpend(services: ServiceHub, tx: TransactionBuilder, amount: Amount<Currency>, ourIdentity: PartyAndCertificate, to: AbstractPar

在我的流中,我想调用预定义的子流

    fun generateSpend(services: ServiceHub,
                     tx: TransactionBuilder,
                     amount: Amount<Currency>,
                     ourIdentity: PartyAndCertificate,
                     to: AbstractParty,
                     onlyFromParties: Set<AbstractParty> = emptySet()): Pair<TransactionBuilder, List<PublicKey>> {
       return generateSpend(services, tx, listOf(PartyAndAmount(to, amount)), ourIdentity, onlyFromParties)
   } 


我的问题是如何在我的流程中获得特定节点参与者的PartyAndCertificate,这是ourIdentity所要求的?

有几种方法:

您可以使用FlowLogic.ourIdentityAndCert方法获取自己节点的PartyAndCertificate

您可以使用以下方式获取网络上所有节点的PartyAndCertificates:

serviceHub.networkMapCache.allNodes.flatMap { it.legalIdentitiesAndCerts }
serviceHub.networkMapCache.getNodeByLegalName(CordaX500Name("ANodeOrg", "", "GB"))
    ?.legalIdentitiesAndCerts
    ?: throw FlowException("Party not found on network.")
您可以通过以下方式获取网络上特定节点的PartyAndCertificates:

serviceHub.networkMapCache.allNodes.flatMap { it.legalIdentitiesAndCerts }
serviceHub.networkMapCache.getNodeByLegalName(CordaX500Name("ANodeOrg", "", "GB"))
    ?.legalIdentitiesAndCerts
    ?: throw FlowException("Party not found on network.")
请注意,从Corda 3.1开始,网络上的每个节点只有一个合法身份,即合法身份和证书列表将仅包含每个节点一个项目