package Ġcom . sn am . flow Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġcom . sn am . PO JO . Transaction Po jo Ċ import Ġcom . sn am . contract . Transactions Contract Ċ import Ġcom . sn am . contract . Transactions Contract . Companion . TRANSACTION _ CONTRACT _ ID Ċ import Ġcom . sn am . state . Transaction State Ċ import Ġnet . cord a . core . contracts . Command Ċ import Ġnet . cord a . core . contracts . Unique Identifier Ċ import Ġnet . cord a . core . contracts . require That Ċ import Ġnet . cord a . core . flows .* Ċ import Ġnet . cord a . core . identity . C ord a X 5 0 0 Name Ċ 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 .* ĊĊ Ċ object ĠTransaction Flow Ġ{ ĊĠĠĠ Ġ@ Initi ating Flow ĊĠĠĠ Ġ@ Start able By RPC ĊĠĠĠ Ġclass ĠSt arter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuy er : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsell er : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn am : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperties : ĠTransaction Po jo ) Ġ: ĠFlow Logic < Signed Transaction >() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġprogress Ġtracker Ġcheck points Ġeach Ġstage Ġof Ġthe Ġflow Ġand Ġoutputs Ġthe Ġspecified Ġmessages Ġwhen Ġeach ĊĠĠĠĠĠĠĠĠ Ġ* Ġcheckpoint Ġis Ġreached Ġin Ġthe Ġcode . ĠSee Ġthe Ġ' progress Tracker . current Step ' Ġexpressions Ġwithin Ġthe Ġcall () Ġfunction . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠGENER ATING _ TRANSACTION Ġ: ĠProgress Tracker . Step (" Generating Ġtransaction Ġbased Ġon Ġnew ĠIO U .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠVERIFY ING _ TRANSACTION Ġ: ĠProgress Tracker . Step (" Verify ing Ġcontract Ġconstraints .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠSIGN ING _ TRANSACTION Ġ: ĠProgress Tracker . Step (" Signing Ġtransaction Ġwith Ġour Ġprivate Ġkey .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠG ATHER ING _ SIG S Ġ: ĠProgress Tracker . Step (" Gather ing Ġthe Ġcounter party 's Ġsignature .") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġchild Progress Tracker () Ġ= ĠCollect Signatures Flow . tracker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠFIN AL ISING _ TRANSACTION Ġ: ĠProgress Tracker . Step (" Ob t aining Ġnot ary Ġsignature Ġand Ġrecording Ġtransaction .") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġchild Progress Tracker () Ġ= ĠFinal ity Flow . tracker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtracker () Ġ= ĠProgress Tracker ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGENER ATING _ TRANSACTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVERIFY ING _ TRANSACTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSIGN ING _ TRANSACTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG ATHER ING _ SIG S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFIN AL ISING _ TRANSACTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġprogress Tracker Ġ= Ġtracker () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġflow Ġlogic Ġis Ġencaps ulated Ġwithin Ġthe Ġcall () Ġmethod . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcall (): ĠSigned Transaction Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠObtain Ġa Ġreference Ġto Ġthe Ġnot ary Ġwe Ġwant Ġto Ġuse . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnot ary Ġ= Ġservice Hub . network Map Cache . not ary Id entities [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStage Ġ 1 . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠGENER ATING _ TRANSACTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGenerate Ġan Ġunsigned Ġtransaction . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction State Ġ= ĠTransaction State ( buyer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsell er , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn am , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . cod Buyer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . cod S eller , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . energ ia , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . price Per Unit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . id V end ita , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . id Ac qu isto , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnique Identifier ( properties . external Id , ĠUUID . randomUUID ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Command Ġ= ĠCommand ( Transactions Contract . Commands . Create (), Ġtransaction State . participants . map Ġ{ Ġit . own ing Key Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Builder Ġ= ĠTransaction Builder ( not ary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Output State ( transaction State , ĠTRAN SACTION _ CONTRACT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Command ( tx Command ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStage Ġ 2 . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠVERIFY ING _ TRANSACTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe Ġtransaction Ġis Ġvalid . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx Builder . verify ( service Hub ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStage Ġ 3 . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠSIGN ING _ TRANSACTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSign Ġthe Ġtransaction . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpart Signed Tx Ġ= Ġservice Hub . sign Initial Transaction ( tx Builder ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStage Ġ 4 . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠG ATHER ING _ SIG S ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfirst Flow Ġ: ĠFlow Session ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsecond Flow Ġ: ĠFlow Session ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSend Ġthe Ġstate Ġto Ġthe Ġcounter party , Ġand Ġreceive Ġit Ġback Ġwith Ġtheir Ġsignature . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( service Hub . my Info . legal Id entities . first ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsell er Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Flow Ġ= Ġinitiate Flow ( sn am ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Flow Ġ= Ġinitiate Flow ( buyer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuy er Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Flow Ġ= Ġinitiate Flow ( sn am ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Flow Ġ= Ġinitiate Flow ( seller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn am Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Flow Ġ= Ġinitiate Flow ( seller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Flow Ġ= Ġinitiate Flow ( buyer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠFlow Exception (" node Ġ"+ service Hub . my Info . legal Id entities . first ()+" Ġnot Ġpart ec ip ating Ġto Ġthe Ġtransaction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfully Signed Tx Ġ= Ġsub Flow ( Collect Signatures Flow ( part Signed Tx , Ġset Of ( first Flow !! , Ġsecond Flow !! ), ĠG ATHER ING _ SIG S . child Progress Tracker ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStage Ġ 5 . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠFIN AL ISING _ TRANSACTION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNot ar ise Ġand Ġrecord Ġthe Ġtransaction Ġin Ġboth Ġparties ' Ġvault s . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsub Flow ( Final ity Flow ( fully Signed Tx , ĠFIN AL ISING _ TRANSACTION . child Progress Tracker ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Initi ated By ( Starter :: class ) ĊĠĠĠ Ġclass ĠAc ceptor ( val Ġother Party Flow : ĠFlow Session ) Ġ: ĠFlow Logic < Signed Transaction >() Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcall (): ĠSigned Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsign Transaction Flow Ġ= Ġobject Ġ: ĠSign Transaction Flow ( other Party Flow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Transaction ( st x : ĠSigned Transaction ) Ġ= Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġst x . tx . outputs . single (). data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" This Ġmust Ġbe Ġa Ġtransaction ." Ġusing Ġ( output Ġis ĠTransaction State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsub Flow ( sign Transaction Flow ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ