package Ġnet . cord a . flows Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġnet . cord a . core . contracts . Amount Ċ import Ġnet . cord a . core . contracts . Ins ufficient Balance Exception Ċ import Ġnet . cord a . core . contracts . Transaction Type Ċ import Ġnet . cord a . core . flows . Start able By RPC Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord a . core . transactions . Signed Transaction Ċ import Ġnet . cord a . core . transactions . Transaction Builder Ċ import Ġnet . cord a . core . utilities . Progress Tracker Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠInit i ates Ġa Ġflow Ġthat Ġsends Ġcash Ġto Ġa Ġrecipient . Ċ Ġ* Ċ Ġ* Ġ@ param Ġamount Ġthe Ġamount Ġof Ġa Ġcurrency Ġto Ġpay Ġto Ġthe Ġrecipient . Ċ Ġ* Ġ@ param Ġrecipient Ġthe Ġparty Ġto Ġpay Ġthe Ġcurrency Ġto . Ċ Ġ* Ġ@ param Ġissuer Constraint Ġif Ġspecified , Ġthe Ġpayment Ġwill Ġbe Ġmade Ġusing Ġonly Ġcash Ġissued Ġby Ġthe Ġgiven Ġparties . Ċ Ġ*/ Ċ @ Start able By RPC Ċ open Ġclass ĠCash Payment Flow ( ĊĠĠĠĠĠĠĠ Ġval Ġamount : ĠAmount < Currency >, ĊĠĠĠĠĠĠĠ Ġval Ġrecipient : ĠParty , ĊĠĠĠĠĠĠĠ Ġprogress Tracker : ĠProgress Tracker , ĊĠĠĠĠĠĠĠ Ġval Ġissuer Constraint : ĠSet < Party >? Ġ= Ġnull ) Ġ: ĠAbstract Cash Flow ( progress Tracker ) Ġ{ ĊĠĠĠ Ġ/** ĠA Ġstraightforward Ġconstructor Ġthat Ġconstructs Ġsp ends Ġusing Ġcash Ġstates Ġof Ġany Ġissuer . Ġ*/ ĊĠĠĠ Ġconstructor ( amount : ĠAmount < Currency >, Ġrecipient : ĠParty ) Ġ: Ġthis ( amount , Ġrecipient , Ġtracker ()) ĊĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall (): ĠSigned Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠGENER ATING _ TX ĊĠĠĠĠĠĠĠ Ġval Ġbuilder : ĠTransaction Builder Ġ= ĠTransaction Type . General . Builder ( null Ġas ĠParty ?) ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠHave Ġsome Ġway Ġof Ġrestrict ing Ġthis Ġto Ġstates Ġthe Ġcaller Ġcontrols ĊĠĠĠĠĠĠĠ Ġval Ġ( sp end TX , Ġkeys For Signing ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Hub . vault Service . generate S pend ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠGet Ġa Ġtransaction Ġkey , Ġdon 't Ġjust Ġre - use Ġthe Ġow ning Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissuer Constraint ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIns ufficient Balance Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCash Exception (" Ins ufficient Ġcash Ġfor Ġspend : Ġ${ e . message }", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠSIGN ING _ TX ĊĠĠĠĠĠĠĠ Ġval Ġtx Ġ= Ġservice Hub . sign Initial Transaction ( sp end TX , Ġkeys For Signing ) ĊĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠFIN AL ISING _ TX ĊĠĠĠĠĠĠĠ Ġfinal ise Tx ( set Of ( recipient ), Ġtx , Ġ" Unable Ġto Ġnot ar ise Ġspend ") ĊĠĠĠĠĠĠĠ Ġreturn Ġtx ĊĠĠĠ Ġ} Ċ }