@ file : Suppress (" unused ", Ġ" Member Visibility Can Be Private ") Ċ Ċ package Ġnet . cord a . docs . kotlin . vault Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġnet . cord a . core . contracts . Amount Ċ import Ġnet . cord a . core . flows .* Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord a . core . node . App Service Hub Ċ import Ġnet . cord a . core . node . services . C ord a Service Ċ import Ġnet . cord a . core . serialization . C ord a Serializable Ċ import Ġnet . cord a . core . serialization . Singleton Serialize As Token Ċ import Ġnet . cord a . core . transactions . Signed Transaction Ċ import Ġnet . cord a . core . utilities .* Ċ import Ġnet . cord a . finance . flows . Abstract Cash Flow Ċ import Ġnet . cord a . finance . flows . Cash Exception Ċ import Ġnet . cord a . finance . flows . Cash Issue Flow Ċ import Ġnet . cord a . finance . flows . Cash Payment Flow Ċ import Ġjava . util .* Ċ Ċ // ĠDOC START ĠCustom Vault Query Ċ object ĠCustom Vault Query Ġ{ ĊĊĠĠĠ Ġ@ C ord a Service ĊĠĠĠ Ġclass ĠService ( val Ġservices : ĠApp Service Hub ) Ġ: ĠSingleton Serialize As Token () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= Ġcontext Logger () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġre balance Currency Reser ves (): ĠList < Amount < Currency >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnative Query Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcash schema . cc y _ code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum ( cash schema . pen n ies ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvault _ states Ġvault schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontract _ cash _ states Ġcash schema ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvault schema . output _ index = cash schema . output _ index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġvault schema . transaction _ id = cash schema . transaction _ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġvault schema . state _ status = 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġby ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcash schema . cc y _ code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorder Ġby ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum ( cash schema . pen n ies ) Ġdesc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info (" SQL Ġto Ġexecute : Ġ$ native Query ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġservices . jdbc Session () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsession . prepareStatement ( native Query ). use Ġ{ Ġprep Statement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprep Statement . executeQuery (). use Ġ{ Ġrs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Up Limits : ĠMutable List < Amount < Currency >> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( rs . next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrency Str Ġ= Ġrs . getString ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġrs . getLong ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . info ("$ currency Str Ġ: Ġ$ amount ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Up Limits . add ( Amount ( amount , ĠCurrency . getInstance ( currency Str ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Up Limits ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ // ĠDOC END ĠCustom Vault Query Ċ Ċ /** Ċ Ġ* Ġ ĠThis Ġis Ġa Ġslightly Ġmodified Ġversion Ġof Ġthe ĠIss uer Flow , Ġwhich Ġuses Ġa Ġ 3 rd Ġparty Ġcustom Ġquery Ġto Ċ Ġ* Ġ Ġretrieve Ġa Ġlist Ġof Ġc urrencies Ġand Ġtop Ġup Ġamounts Ġto Ġbe Ġused Ġin Ġthe Ġiss u ance . Ċ Ġ*/ Ċ object ĠTop up Issuer Flow Ġ{ ĊĠĠĠ Ġ@ C ord a Serializable ĊĠĠĠ Ġdata Ġclass ĠTop up Request ( val Ġissue To Party : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissuer Party Ref : ĠO pa que Bytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnot ary Party : ĠParty ) ĊĊĠĠĠ Ġ@ Initi ating Flow ĊĠĠĠ Ġ@ Start able By RPC ĊĠĠĠ Ġclass ĠTop up Iss u ance Request er ( val Ġissue To Party : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissue To Party Ref : ĠO pa que Bytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissuer Bank Party : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnot ary Party : ĠParty ) Ġ: ĠFlow Logic < List < Abstract Cash Flow . Result >>() Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġ@ Throws ( Cash Exception :: class ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcall (): ĠList < Abstract Cash Flow . Result > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop up Request Ġ= ĠTop up Request ( issue To Party , Ġissue To Party Ref , Ġnot ary Party ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinitiate Flow ( issuer Bank Party ). send And Receive < List < Abstract Cash Flow . Result >>( top up Request ). unwrap Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Initi ated By ( Top up Iss u ance Request er :: class ) ĊĠĠĠ Ġclass ĠTop up Issuer ( val Ġother Party Session : ĠFlow Session ) Ġ: ĠFlow Logic < List < Signed Transaction >>() Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠA WAIT ING _ REQUEST Ġ: ĠProgress Tracker . Step (" Await ing Ġiss u ance Ġrequest ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠISS U ING Ġ: ĠProgress Tracker . Step (" Iss uing Ġasset ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠTRAN SF ERR ING Ġ: ĠProgress Tracker . Step (" Trans f erring Ġasset Ġto Ġiss u ance Ġrequest er ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠS ENDING _ TOP _ UP _ ISSUE _ REQUEST Ġ: ĠProgress Tracker . Step (" Request ing Ġasset Ġissue Ġtop Ġup ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtracker () Ġ= ĠProgress Tracker ( AW A IT ING _ REQUEST , ĠISS U ING , ĠTRAN SF ERR ING , ĠS ENDING _ TOP _ UP _ ISSUE _ REQUEST ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġprogress Tracker : ĠProgress Tracker Ġ= Ġtracker () ĊĊĠĠĠĠĠĠĠ Ġ// ĠDOC START ĠTop up Issuer ĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġ@ Throws ( Cash Exception :: class ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcall (): ĠList < Signed Transaction > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠA WAIT ING _ REQUEST ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop up Request Ġ= Ġother Party Session . receive < Top up Request >(). unwrap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Vault Query Service Ġ= Ġservice Hub . cord a Service ( Custom Vault Query . Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreserve Limits Ġ= Ġcustom Vault Query Service . re balance Currency Reser ves () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx ns : ĠList < Signed Transaction > Ġ= Ġreserve Limits . map Ġ{ Ġamount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequest Ġasset Ġissue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Request ing Ġcurrency Ġissue Ġ$ amount ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtxn Ġ= Ġissue Cash To ( amount , Ġtop up Request . issue To Party , Ġtop up Request . issuer Party Ref , Ġtop up Request . not ary Party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠS ENDING _ TOP _ UP _ ISSUE _ REQUEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġtxn . st x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġother Party Session . send ( tx ns ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtx ns ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠDOC END ĠTop up Issuer ĊĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġissue Cash To ( amount : ĠAmount < Currency >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue To : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissuer Party Ref : ĠO pa que Bytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot ary Party : ĠParty ): ĠAbstract Cash Flow . Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinvoke ĠCash Ġsub flow Ġto Ġissue ĠAsset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠISS U ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissue Cash Flow Ġ= ĠCash Issue Flow ( amount , Ġissuer Party Ref , Ġnot ary Party ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissue Tx Ġ= Ġsub Flow ( issue Cash Flow ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNOTE : Ġissue Cash Flow Ġperforms Ġa ĠBroadcast Ġ( which Ġstores Ġa Ġlocal Ġcopy Ġof Ġthe Ġtxn Ġto Ġthe Ġledger ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshort - circuit Ġwhen Ġiss uing Ġto Ġself ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( service Hub . my Info . is Legal Identity ( issue To )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġissue Tx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnow Ġinvoke ĠCash Ġsub flow Ġto ĠMove Ġissued Ġasset Type Ġto Ġissue Ġrequest er ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠTRAN SF ERR ING ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Cash Flow Ġ= ĠCash Payment Flow ( amount , Ġissue To , Ġanonymous Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNOTE : ĠCash Flow ĠPay Cash Ġcalls ĠFinal ity Flow Ġwhich Ġperforms Ġa ĠBroadcast Ġ( which Ġstores Ġa Ġlocal Ġcopy Ġof Ġthe Ġtxn Ġto Ġthe Ġledger ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsub Flow ( move Cash Flow ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ