package Ġcom . example . flow Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġcom . example . contract . Record Contract . Companion . RECORD _ CONTRACT _ ID Ċ import Ġcom . example . state . Record State Ċ import Ġcom . example . contract . Record Contract . Record Commands .* Ċ import Ġnet . cord a . core . flows .* Ċ import Ġnet . cord a . conf idential . Swap Id entities Flow Ċ import Ġnet . cord a . core . crypto . Secure Hash Ċ 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 Ġnet . cord a . core . utilities . hours Ċ import Ġnet . cord a . core . utilities . unwrap Ċ import Ġjava . security . PublicKey Ċ import Ġjava . time . LocalDateTime Ċ Ċ object ĠGo ssip Record Flow Ġ{ ĊĠĠĠ Ġ@ Initi ating Flow ĊĠĠĠ Ġ@ Start able By RPC ĊĠĠĠ Ġclass ĠInit iator ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġreceiver : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġevent Value Hash : ĠSecure Hash ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ: ĠRecord Base Flow () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġprogress Tracker : ĠProgress Tracker Ġ= Ġtracker () ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠInitial ising Ġ: ĠProgress Tracker . Step (" Perform ing Ġinitial Ġsteps .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠBuilding Ġ: ĠProgress Tracker . Step (" Building Ġand Ġverify ing Ġtransaction .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠSign ing Ġ: ĠProgress Tracker . Step (" Signing Ġtransaction .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠCollect ing Ġ: ĠProgress Tracker . Step (" Collect ing Ġresponder 's Ġsignature .") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSubject ĠTeam ĠLeader ĠCreate Ġa Ġcourse , Ġresponder Ġte achers Ġsign ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġchild Progress Tracker () Ġ= ĠCollect Signatures Flow . tracker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠFinal ising Ġ: ĠProgress Tracker . Step (" Final ising Ġtransaction .") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġchild Progress Tracker () Ġ= ĠFinal ity Flow . tracker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtracker () Ġ= ĠProgress Tracker ( Initial ising , ĠBuilding , ĠSign ing , ĠCollect ing , ĠFinal ising ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcall (): ĠSigned Transaction Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStep Ġ 1 Ġ- ĠInitial Ġa Ġrecord . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠInitial ising ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceiver Flow Session Ġ= Ġinitiate Flow ( receiver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanonymous Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Flow Session . send ( anonymous ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanonymous State Ġ= Ġcreate Anonymous Record ( receiver Flow Session ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissuer Key Ġ= Ġanonymous State . issuer . own ing Key ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStep Ġ 2 Ġ- ĠBuilding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsigner List : ĠList < PublicKey > Ġ= Ġanonymous State . participants . map Ġ{ Ġit . own ing Key Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠBuilding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Builder Ġ= ĠTransaction Builder ( rand Not ary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Output State ( anonymous State , ĠREC ORD _ CONTRACT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Command ( Go ssip (), Ġsigner List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTime Window ( service Hub . clock . instant (), Ġ 2 4 . hours ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStep Ġ 3 Ġ- ĠSign Ġthe Ġtransaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠSign ing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsigned Tx Ġ= Ġservice Hub . sign Initial Transaction ( tx Builder , Ġissuer Key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStep Ġ 4 Ġ- ĠGet Ġcounter - part ies ' Ġsignatures ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠCollect ing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġctx Ġ= Ġsub Flow ( Collect Signatures Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsigned Tx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( receiver Flow Session ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( issuer Key ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollect ing . child Progress Tracker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStep Ġ 5 Ġ- ĠFinal ise Ġtransaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠFinal ising ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsub Flow ( Final ity Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( receiver Flow Session ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFinal ising . child Progress Tracker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Anonymous Record ( receiver Session : ĠFlow Session ): ĠRecord State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanonymous Id entities Result Ġ= Ġsub Flow ( Swap Id entities Flow ( receiver Session )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRecord State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanonymous Id entities Result [ our Identity ] !! , Ġanonymous Id entities Result [ receiver Session . counter party ] !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGo ssip (), Ġ" Anonymous ĠGo ssip ", Ġevent Value Hash . toString (), Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime . now (), Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Initi ated By ( Init iator :: class ) ĊĠĠĠ Ġclass ĠRes pon der ( private Ġval Ġother Flow : ĠFlow Session ) Ġ: ĠFlow Logic < Signed Transaction >() Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcall (): ĠSigned Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanonymous Ġ= Ġother Flow . receive < Boolean >(). unwrap Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anonymous ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Flow ( Swap Id entities Flow ( other Flow )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġst x Ġ= Ġsub Flow ( Sign Tx Flow No Checking ( other Flow )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsub Flow ( Receive Final ity Flow ( other Flow , Ġst x . id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊĊĊ