package Ġcom . example . flow Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġcom . example . contract . Record Contract Ċ import Ġcom . example . state . Record State Ċ import Ġnet . cord a . core . contracts . Command Data Ċ import Ġnet . cord a . core . contracts . Unique Identifier Ċ 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 Ġnet . cord a . core . utilities . hours Ċ import Ġjava . time . LocalDateTime Ċ Ċ object ĠModify Record Flow Ġ{ ĊĠĠĠ Ġ@ Initi ating Flow ĊĠĠĠ Ġ@ Start able By RPC ĊĠĠĠ Ġclass ĠInit iator Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġissuer : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġreceiver : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġevent Descriptions : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġevent Value : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġfile Reference : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġ Ġval Ġref Linear Id : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġlinear Id : ĠUnique Identifier ĊĠĠĠ Ġ) Ġ: Ġ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 Ġ- ĠRetrie ving Ġthe Ġinput Ġfrom Ġthe Ġvault . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠInitial ising ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceiver Flow Session Ġ= Ġinitiate Flow ( receiver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput State And Ref Ġ Ġ= Ġget Record State By Linear Id ( linear Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput State Ġ= Ġinput State And Ref . state . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠeventType Ġ= Ġinput State . eventType ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout State Ġ= Ġinput State . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissuer , Ġreceiver , ĠeventType , Ġevent Descriptions , Ġevent Value , Ġfile Reference , ĠLocalDateTime . now (), Ġref Linear Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissuer Key Ġ= Ġout State . issuer . own ing Key ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Check ( input State . issuer . name OrNull (). toString () Ġ== Ġout State . issuer . name OrNull (). toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġiss u ers Ġof Ġinput Ġstate Ġand Ġoutput Ġstate Ġmust Ġbe Ġthe Ġsame Ġperson " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStep Ġ 2 Ġ- ĠBuilding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Tracker . current Step Ġ= ĠBuilding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx Builder Ġ= ĠTransaction Builder ( rand Not ary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Input State ( input State And Ref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Output State ( out State , ĠRecord Contract . RECORD _ CONTRACT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Command ( eventType , Ġout State . participants . map Ġ{ Ġit . own ing Key Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTime Window ( service Hub . clock . instant (), Ġ 1 6 8 . 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 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Initi ated By ( Init iator :: class ) ĊĠĠĠ Ġclass ĠRes pon der ( private Ġval Ġcounter party Session : ĠFlow Session ) Ġ: ĠFlow Logic < Signed Transaction >() Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suspend able ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcall (): ĠSigned Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsign Transaction Flow Ġ= Ġobject Ġ: ĠSign Transaction Flow ( counter party Session ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck Transaction ( st x : ĠSigned Transaction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġledger Tx Ġ= Ġst x . to Ledger Transaction ( service Hub , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissuer Ġ= Ġledger Tx . inputs OfType < Record State >(). single (). issuer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( issuer Ġ!= Ġcounter party Session . counter party ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFlow Exception (" Only Ġthe Ġissuer Ġcan Ġmodify Ġa Ġrecord .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġst x Ġ= Ġsub Flow ( sign Transaction Flow ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsub Flow ( Receive Final ity Flow ( counter party Session , Ġst x . id )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }