package Ġcom . cord asn am . flow čĊč Ċ import Ġco . parallel universe . fib ers . Suspend able č Ċ import Ġcom . cord asn am . contract . Transaction Contract č Ċ import Ġcom . cord asn am . contract . Transaction Contract . Companion . TRANSACTION _ CONTRACT _ ID č Ċ import Ġcom . cord asn am . state . Proposal State č Ċ import Ġcom . cord asn am . state . Transaction State č Ċ import Ġnet . cord a . core . contracts .* č Ċ 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 . util .* č Ċ import Ġnet . cord a . core . node . services . Vault č Ċ import Ġnet . cord a . core . node . services . query By č Ċ import Ġnet . cord a . core . node . services . vault .* č Ċ import Ġpo jo . Transaction Po jo čĊčĊč Ċ 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 ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuy er , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsell er , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn am , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . data , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . energ ia , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . price Per Unit , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . energ ia Ġ* Ġproperties . price Per Unit , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties . id Proposal , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnique Identifier ( properties . external Id , ĠUUID . randomUUID ())) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Command Ġ= ĠCommand ( Transaction 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 , Ġset Of ( first Flow !! , Ġsecond Flow !! ), Ġ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 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Id Ġ= Ġsub Flow ( sign Transaction Flow ). id čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsub Flow ( Receive Final ity Flow ( other Party Flow , Ġexpected Tx Id Ġ= Ġtx Id )) čĊčĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ@ Initi ating Flow čĊĠĠĠ Ġ@ Start able By RPC čĊĠĠĠ Ġclass ĠIss uer ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal Id : ĠString čĊĠĠĠ Ġ) Ġ: Ġ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 . čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcriteria Ġ: ĠQuery Criteria Ġ= ĠQuery Criteria . Vault Query Criteria ( Vault . State Status . UN CON SU MED ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Criteria Ġ= ĠQuery Criteria . Linear State Query Criteria ( Ġuuid Ġ= ĠlistOf ( UUID . fromString ( proposal Id ))) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcriteria Ġ= Ġcriteria . and ( custom Criteria ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal States Ġ= Ġservice Hub . vault Service . query By < Proposal State >( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcriteria , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPage Specification ( 1 , ĠMAX _ PAGE _ SIZE ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSort ( set Of ( Sort . Sort Column ( Sort Attribute . Standard ( Sort . Vault State Attribute . REC OR DED _ TIME ), ĠSort . Direction . DESC ))) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). states čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( proposal States . size Ġ> Ġ 1 Ġ|| Ġproposal States . isEmpty ()) Ġthrow ĠFlow Exception (" no Ġproposal Ġstate Ġwith ĠUUID Ġ"+ UUID . fromString ( proposal Id )+" Ġfound ") čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ref Ġ= Ġproposal States [ 0 ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= Ġproposal State Ref . state . data čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( proposal State . type Ġ== Ġ' A '){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! Proposal Flow . check Balance ( service Hub . my Info . legal Id entities . first (). name . organisation , Ġproposal State . energ ia )){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFlow Exception (" not Ġenough ĠM WH Ġbalance ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbuy er : ĠParty ? Ġ= Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsell er : ĠParty ? Ġ= Ġnull čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( proposal State . type Ġ== Ġ' A ') Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuy er Ġ= Ġproposal State . issuer čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsell er Ġ= Ġproposal State . counter part čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġif ( proposal State . type Ġ== Ġ' V ') Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuy er Ġ= Ġproposal State . counter part čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsell er Ġ= Ġproposal State . issuer čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Proposal Ġ= Ġproposal State . linear Id . id . toString () čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction State Ġ= ĠTransaction State ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuy er !! , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsell er !! , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal State . sn am , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal State . data , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal State . energ ia , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal State . price Per Unit , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal State . energ ia Ġ* Ġproposal State . price Per Unit , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Proposal , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnique Identifier ( id Ġ= ĠUUID . randomUUID ())) čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal Command Ġ= ĠCommand ( Transaction Contract . Commands . Issue (), Ġtransaction State . participants . map Ġ{ Ġit . own ing Key Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal Builder Ġ= ĠTransaction Builder ( not ary ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Input State ( proposal State Ref ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Output State ( transaction State , ĠTRAN SACTION _ CONTRACT _ ID ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Command ( proposal Command ) čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStage Ġ 2 . čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠVERIFY ING _ TRANSACTION čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthat Ġthe Ġtransaction Ġis Ġvalid . čĊĠĠĠĠĠĠĠĠĠĠĠ Ġproposal 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 ( proposal 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 ()){ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproposal State . counter part Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Flow Ġ= Ġinitiate Flow ( proposal State . issuer ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Flow Ġ= Ġinitiate Flow ( proposal State . sn am ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠFlow Exception (" node Ġ"+ service Hub . my Info . legal Id entities . first ()+" Ġcannot Ġstart Ġthe Ġflow ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ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 . čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( proposal State . type Ġ== Ġ' A '){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProposal Flow . update Balance ( service Hub . my Info . legal Id entities . first (). name . organisation , Ġ- proposal State . energ ia ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProposal Flow . update Balance ( proposal State . issuer . name . organisation , Ġproposal State . energ ia ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( proposal State . type Ġ== Ġ' V '){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProposal Flow . update Balance ( service Hub . my Info . legal Id entities . first (). name . organisation , Ġproposal State . energ ia ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsub Flow ( Final ity Flow ( fully Signed Tx , Ġset Of ( first Flow !! , Ġsecond Flow !! ), ĠFIN AL ISING _ TRANSACTION . child Progress Tracker ())) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Initi ated By ( Issuer :: class ) čĊĠĠĠ Ġclass ĠIss uer Accept or ( 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 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Id Ġ= Ġsub Flow ( sign Transaction Flow ). id čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsub Flow ( Receive Final ity Flow ( other Party Flow , Ġexpected Tx Id Ġ= Ġtx Id )) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ } čĊ