2017-12-04 11 views
0

ネットワーク内の参加者が現金を現金化することができるcorda's inbuilt CashIssueFlowをテストしています。私の質問は、ノードの他の参加者が自発的にキャッシュすることができないように、特定の当事者が現金を自己発行できるようにするために、これを契約レベルでどのように強制することができますか?CashIssueFlow特定のパーティのみをselfIssueCashに有効にする

答えて

0

理論的には、あなたは現金の発行から、誰が、特定の政党を防ぐために、独自のCash契約を書くことができ:

override fun verify(tx: LedgerTransaction) { 
    requireThat { 
     val allStates = tx.outputsOfType<Cash.State>() + tx.inputsOfType<Cash.State>() 
     "Only DUMMY CASH ISSUER can issue cash" using (allStates.all { it.amount.token.issuer == DUMMY_CASH_ISSUER }) 
    } 
} 

しかし、それは別のノードが異なる発行者から現金を受け入れたくなる可能性が高いです。 1つのノードでは銀行A、B、Cからの現金のみ受け取りたい場合がありますが、別のノードでは銀行X、Y、Zから現金を受け取りたい場合があります。

これは、特定の信頼できる銀行から発行されていない現金を含む取引が拒否されるようにノードを設定します。

@InitiatedBy(Initiator::class) 
class Acceptor(val otherPartyFlow: FlowSession) : FlowLogic<SignedTransaction>() { 
    @Suspendable 
    override fun call(): SignedTransaction { 
     val signedTx = otherPartyFlow.receive<SignedTransaction>().unwrap { tx -> 
      // TODO: Checking of received transaction. 
      tx 
     } 

     val ledgerTx = signedTx.toLedgerTransaction(serviceHub, false) 
     val states = ledgerTx.inputsOfType<Cash.State>() + ledgerTx.outputsOfType<Cash.State>() 

     if (!states.all { it.amount.token.issuer == DUMMY_CASH_ISSUER }) { 
      throw FlowException("Cash not issued by trusted party.") 
     } 

     ... 
    } 
} 
+0

ありがとうございましたので、フローレベルで実行する必要があります:) – Rickky13

関連する問題