package Ġcom . template . flows Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġcom . template . FORWARD _ CONTRACT _ ID Ċ import Ġcom . template . Forward Contract Ċ import Ġcom . template . Forward State Ċ import Ġnet . cord a . core . contracts . Command Ċ import Ġnet . cord a . core . contracts . State And Contract Ċ import Ġnet . cord a . core . contracts . require That Ċ import Ġnet . cord a . core . flows .* Ċ 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 . math . BigDecimal Ċ import Ġjava . time . Instant Ċ Ċ @ Initi ating Flow Ċ @ Start able By RPC Ċ class ĠInit iate Flow ( val Ġinit iator : ĠParty , Ġval Ġaccept or : ĠParty , Ġval Ġinstrument : ĠString , Ġval Ġinstrument Quantity : ĠBigDecimal , Ġval Ġdelivery Price : ĠBigDecimal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset tlement Timestamp : ĠInstant , Ġval Ġset tlement Type : ĠString , Ġval Ġposition : ĠString ) Ġ: ĠFlow Logic < Signed Transaction >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠGENER ATING _ TRANSACTION Ġ: ĠProgress Tracker . Step (" Generating ĠForward Ġtransaction Ġ( Init iate Flow )") ĊĠĠĠĠĠĠĠ Ġobject ĠSIGN ING _ TRANSACTION Ġ: ĠProgress Tracker . Step (" Signing Ġtransaction Ġwith Ġour Ġprivate Ġkey Ġ( Init iate Flow )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġchild Progress Tracker () Ġ= ĠCollect Signatures Flow . tracker () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġobject ĠFIN AL ISING _ TRANSACTION Ġ: ĠProgress Tracker . Step (" Final ising Ġtransaction ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġchild Progress Tracker () Ġ= ĠFinal ity Flow . tracker () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtracker () Ġ= ĠProgress Tracker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGENER ATING _ TRANSACTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSIGN ING _ TRANSACTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFIN AL ISING _ TRANSACTION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠThe Ġprogress Ġtracker Ġprovides Ġcheck points Ġindicating Ġthe Ġprogress Ġof Ġthe Ġflow Ġto Ġob servers . Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġprogress Tracker Ġ= Ġtracker () ĊĊĠĠĠ Ġ/** ĠThe Ġflow Ġlogic Ġis Ġencaps ulated Ġwithin Ġthe Ġcall () Ġmethod . Ġ*/ ĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall (): ĠSigned Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġretrieve Ġthe Ġnot ary Ġidentity Ġfrom Ġthe Ġnetwork Ġmap . ĊĠĠĠĠĠĠĠ Ġval Ġnot ary Ġ= Ġservice Hub . network Map Cache . not ary Id entities [ 0 ] ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġcreate Ġthe Ġtransaction Ġcomponents . ĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠGENER ATING _ TRANSACTION ĊĠĠĠĠĠĠĠ Ġval Ġoutput State Ġ= ĠForward State ( init iator , Ġaccept or , Ġinstrument , Ġinstrument Quantity , Ġdelivery Price , Ġset tlement Timestamp , Ġset tlement Type , Ġposition ) ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠCommand ( Forward Contract . Commands . Create (), ĠlistOf ( our Identity . own ing Key , Ġaccept or . own ing Key )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġcreate Ġa Ġtransaction Ġbuilder Ġand Ġadd Ġthe Ġcomponents . ĊĠĠĠĠĠĠĠ Ġval Ġtx Builder Ġ= ĠTransaction Builder ( not ary Ġ= Ġnot ary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Output State ( output State , ĠFOR WARD _ CONTRACT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Command ( command ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify ing Ġthe Ġtransaction . ĊĠĠĠĠĠĠĠ Ġtx Builder . verify ( service Hub ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSign ing Ġthe Ġtransaction . ĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠSIGN ING _ TRANSACTION ĊĠĠĠĠĠĠĠ Ġval Ġsigned Tx Ġ= Ġservice Hub . sign Initial Transaction ( tx Builder ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreating Ġa Ġsession Ġwith Ġthe Ġother Ġparty . ĊĠĠĠĠĠĠĠ Ġval Ġother Party Session Ġ= Ġinitiate Flow ( accept or ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠOb t aining Ġthe Ġcounter party 's Ġsignature . ĊĠĠĠĠĠĠĠ Ġval Ġfully Signed Tx Ġ= Ġsub Flow ( Collect Signatures Flow ( signed Tx , ĠlistOf ( other Party Session ), ĠCollect Signatures Flow . tracker ())) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFinal ising Ġthe Ġtransaction . ĊĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠFIN AL ISING _ TRANSACTION ĊĠĠĠĠĠĠĠ Ġsub Flow ( Final ity Flow ( fully Signed Tx )) ĊĠĠĠĠĠĠĠ Ġreturn Ġfully Signed Tx ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠDefine ĠInit iate Flow Responder : Ċ @ Initi ated By ( Init iate Flow :: class ) Ċ class ĠInit iate Flow Responder ( val Ġother Party Session : ĠFlow Session ) Ġ: ĠFlow Logic < Unit >() Ġ{ ĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsign Transaction Flow Ġ= Ġobject Ġ: ĠSign Transaction Flow ( other Party Session , ĠSign Transaction Flow . tracker ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Transaction ( st x : ĠSigned Transaction ) Ġ= Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġst x . tx . outputs . single (). data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" This Ġmust Ġbe Ġan ĠForward Ġtransaction ." Ġusing Ġ( output Ġis ĠForward State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsub Flow ( sign Transaction Flow ) ĊĠĠĠ Ġ} Ċ }