2017-10-18 2 views
0

Dans le didacticiel, il est mentionné qu'un nœud peut demander à l'autre partie d'interroger son emplacement de stockage et d'obtenir les résultats requis. Y a-t-il une API qui peut être utilisée pour intégrer cette logique dans le flux? Aussi, est-il possible de demander à nos contreparties de recueillir des contributions de leurs contreparties et de retourner les résultats cumulatifs. Veuillez partager l'exemple de code, le cas échéant. Merci.Corda: collecte des entrées provenant d'autres correspondants du réseau

Répondre

1

Il n'y a pas d'API spécialisée. Vous utilisez simplement les appels FlowSession.send/FlowSession.receive/FlowSession.sendAndReceive standard.

Cependant, lors de la réception des données de la contrepartie (généralement soit un SignedTransaction ou un StateAndRef), assurez-vous de résoudre sa chaîne de dépendance à l'aide ResolveTransactionsFlow afin que vous puissiez vérifier qu'il a été créé par une séquence valide des transactions.

Il existe également une paire SendTransactionFlow/ReceiveTransactionFlow intégrée qui automatise le processus de réception d'une transaction, de déballage et de résolution de ses dépendances.

Voici un exemple d'un noeud recevant un StateAndRef<ContractState> envoyé par une contrepartie:

@InitiatingFlow 
@StartableByRPC 
class Initiator(private val counterparty: Party) : 
FlowLogic<StateAndRef<ContractState>>() { 
    @Suspendable 
    override fun call(): StateAndRef<ContractState> { 
     val counterpartySession = initiateFlow(counterparty) 
     // Our flow will suspend and wait for a StateAndRef from the counterparty. 
     val untrustedData = counterpartySession.receive<StateAndRef<ContractState>>() 
     // Data received off the wire is considered untrustworthy, and must be unwrapped. 
     val stateAndRef = untrustedData.unwrap { stateAndRef -> 
      // We resolve the chain of transactions that generated this StateAndRef. 
      subFlow(ResolveTransactionsFlow(setOf(stateAndRef.ref.txhash), counterpartySession)) 
      // TODO: More checking of what we've received. 
      stateAndRef 
     } 
     return stateAndRef 
    } 
} 

@InitiatedBy(Initiator::class) 
class Responder(val counterpartySession: FlowSession) : FlowLogic<Unit>() { 
    @Suspendable 
    override fun call() { 
     // We extract the first StateAndRef in our vault... 
     val stateAndRef = serviceHub.vaultService.queryBy(ContractState::class.java).states.first() 
     // ...and send it to our counterparty. 
     counterpartySession.send(stateAndRef) 
    } 
}