2017-10-18 10 views
0

このチュートリアルでは、ノードが他の当事者にボールトを照会し、必要な結果を与えるように要求することができることが記載されています。このロジックをフローに統合するために使用できるAPIはありますか?また、カウンターパーティーにカウンターパーティーからの入力を収集し、累積結果を返すよう依頼することも可能です。もしあれば、サンプルコードを共有してください。ありがとう。Corda:ネットワーク内の他の当事者からの入力を収集する

答えて

1

特殊なAPIはありません。標準FlowSession.send/FlowSession.receive/FlowSession.sendAndReceiveの呼び出しを使用するだけです。

ただし、相手方(通常はSignedTransactionまたはStateAndRefのいずれか)からのデータを受信すると、あなたはそれはトランザクションの有効なシーケンスを介して作成されたことを確認できるように、ResolveTransactionsFlowを使用して、その依存関係のチェーンを解決することを確認してください。

SendTransactionFlow/ReceiveTransactionFlowペアがあり、トランザクションの受信、アンラッピング、および依存関係の解決プロセスを自動化します。ここ

は相手方によって送信されたStateAndRef<ContractState>を受信するノードの一例は次のとおり

@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) 
    } 
} 
関連する問題