package Ġnet . cord a . docs Ċ Ċ import Ġco . parallel universe . fib ers . Suspend able Ċ import Ġnet . cord a . core . contracts .* Ċ import Ġnet . cord a . core . crypto .* Ċ import Ġnet . cord a . core . flows . Flow Logic Ċ import Ġnet . cord a . core . node . Plugin Service Hub Ċ import Ġnet . cord a . core . node . Service Hub Ċ import Ġnet . cord a . core . node . services . linear Head s OfType Ċ import Ġnet . cord a . core . transactions . Signed Transaction Ċ import Ġnet . cord a . flows . Final ity Flow Ċ import Ġjava . security . PublicKey Ċ import Ġjava . time . Duration Ċ Ċ object ĠWorkflow Transaction Build Tutorial Ġ{ ĊĠĠĠ Ġ// ĠWould Ġnormally Ġbe Ġcalled Ġby Ġcustom Ġservice Ġinit Ġin Ġa ĠCor D app ĊĠĠĠ Ġfun Ġregister Workflow Protocols ( plugin Hub : ĠPlugin Service Hub ) Ġ{ ĊĠĠĠĠĠĠĠ Ġplugin Hub . register Flow Init iator ( Submit Completion Flow :: class , Ġ:: Record Completion Flow ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠDOC START Ġ 1 Ċ Ċ // ĠHelper Ġmethod Ġto Ġlocate Ġthe Ġlatest ĠVault Ġversion Ġof Ġa ĠLinear State Ġfrom Ġa Ġpossibly Ġout Ġof Ġdate ĠState Ref Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠLinear State > ĠService Hub . latest ( ref : ĠState Ref ): ĠState And Ref < T > Ġ{ ĊĠĠĠ Ġval Ġlinear Head s Ġ= Ġvault Service . linear Head s OfType < T >() ĊĠĠĠ Ġval Ġoriginal Ġ= Ġto State And Ref < T >( ref ) ĊĠĠĠ Ġreturn Ġlinear Head s . get ( original . state . data . linear Id ) !! Ċ } Ċ // ĠDOC END Ġ 1 Ċ Ċ // ĠMin imal Ġstate Ġmodel Ġof Ġa Ġmanual Ġapproval Ġprocess Ċ enum Ġclass ĠWorkflow State Ġ{ ĊĠĠĠ ĠNEW , ĊĠĠĠ ĠAP PRO VED , ĊĠĠĠ ĠRE JECT ED Ċ } Ċ Ċ /** Ċ Ġ* ĠMin imal Ġcontract Ġto Ġencode Ġa Ġsimple Ġworkflow Ġwith Ġone Ġinitial Ġstate Ġand Ġtwo Ġpossible Ġevent ual Ġstates . Ċ Ġ* ĠIt Ġis Ġassumed Ġone Ġparty Ġun il ater ally Ġsubmit s Ġand Ġthe Ġother Ġmanually Ġretrieves Ġthe Ġdeal Ġand Ġcompletes Ġit . Ċ Ġ*/ Ċ data Ġclass ĠTrade Approval Contract ( override Ġval Ġlegal Contract Reference : ĠSecure Hash Ġ= ĠSecure Hash . sha 2 5 6 (" Example Ġof Ġworkflow Ġtype Ġtransaction ")) Ġ: ĠContract Ġ{ ĊĊĠĠĠ Ġinterface ĠCommands Ġ: ĠCommand Data Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠIssue Ġ: ĠType Only Command Data (), ĠCommands Ġ Ġ// ĠRecord Ġreceipt Ġof Ġdeal Ġdetails ĊĠĠĠĠĠĠĠ Ġclass ĠCompleted Ġ: ĠType Only Command Data (), ĠCommands Ġ Ġ// ĠRecord Ġmatch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTr uly Ġminimal Ġstate Ġthat Ġjust Ġrecords Ġa Ġtrade Id Ġstring Ġand Ġthe Ġparties Ġinvolved . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠState ( val Ġtrade Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcounter party : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate : ĠWorkflow State Ġ= ĠWorkflow State . NEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġlinear Id : ĠUnique Identifier Ġ= ĠUnique Identifier ( trade Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġcontract : ĠTrade Approval Contract Ġ= ĠTrade Approval Contract ()) Ġ: ĠLinear State Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġparties : ĠList < Party > Ġget () Ġ= ĠlistOf ( source , Ġcounter party ) ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġparticipants : ĠList < Composite Key > Ġget () Ġ= Ġparties . map Ġ{ Ġit . own ing Key Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Re levant ( our Keys : ĠSet < PublicKey >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparticipants . any Ġ{ Ġit . contains Any ( our Keys ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġverify Ġmethod Ġlocks Ġdown Ġthe Ġallowed Ġtransactions Ġto Ġcontain Ġjust Ġa Ġsingle Ġproposal Ġbeing ĊĠĠĠĠ Ġ* Ġcreated / modified Ġand Ġthe Ġonly Ġmodification Ġallowed Ġis Ġto Ġthe Ġstate Ġfield . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġverify ( tx : ĠTransaction For Contract ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġtx . commands . require Single Command < Trade Approval Contract . Commands >() ĊĠĠĠĠĠĠĠ Ġrequire ( tx . timestamp ?. mid point Ġ!= Ġnull ) Ġ{ Ġ" must Ġbe Ġtimestamp ed " Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( command . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Issue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Issue Ġof Ġnew ĠWorkflow Contract Ġmust Ġnot Ġinclude Ġany Ġinputs " Ġby Ġ( tx . inputs . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Issue Ġof Ġnew ĠWorkflow Contract Ġmust Ġbe Ġin Ġa Ġunique Ġtransaction " Ġby Ġ( tx . outputs . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissued Ġ= Ġtx . outputs . get ( 0 ) Ġas ĠTrade Approval Contract . State ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Issue Ġrequires Ġthe Ġsource ĠParty Ġas Ġsigner " Ġby Ġ( command . sign ers . contains ( iss ued . source . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Initial ĠIssue Ġstate Ġmust Ġbe ĠNEW " Ġby Ġ( iss ued . state Ġ== ĠWorkflow State . NEW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Completed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Groups Ġ= Ġtx . group States ( Trade Approval Contract . State :: class . java ) Ġ{ Ġit . linear Id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( state Groups . size Ġ== Ġ 1 ) Ġ{ Ġ" Must Ġbe Ġonly Ġa Ġsingle Ġproposal Ġin Ġtransaction " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( group Ġin Ġstate Groups ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbefore Ġ= Ġgroup . inputs . single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġafter Ġ= Ġgroup . outputs . single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Only Ġa Ġnon - final Ġtrade Ġcan Ġbe Ġmodified " Ġby Ġ( before . state Ġ== ĠWorkflow State . NEW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Output Ġmust Ġbe Ġa Ġfinal Ġstate " Ġby Ġ( after . state Ġin Ġset Of ( Workflow State . APPRO VED , ĠWorkflow State . RE JECT ED )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Completed Ġcommand Ġcan Ġonly Ġchange Ġstate " Ġby Ġ( before Ġ== Ġafter . copy ( state Ġ= Ġbefore . state )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Completed Ġcommand Ġrequires Ġthe Ġsource ĠParty Ġas Ġsigner " Ġby Ġ( command . sign ers . contains ( before . source . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Completed Ġcommand Ġrequires Ġthe Ġcounter party Ġas Ġsigner " Ġby Ġ( command . sign ers . contains ( before . counter party . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Un re cogn ised ĠCommand Ġ$ command ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠSimple Ġflow Ġto Ġcreate Ġa Ġworkflow Ġstate , Ġsign Ġand Ġnot ar ise Ġit . Ċ Ġ* ĠThe Ġprotocol Ġthen Ġsends Ġa Ġcopy Ġto Ġthe Ġother Ġnode . ĠWe Ġdon 't Ġrequire Ġthe Ġother Ġparty Ġto Ġsign Ċ Ġ* Ġas Ġtheir Ġapproval / re jection Ġis Ġto Ġfollow . Ċ Ġ*/ Ċ class ĠSubmit Trade Approval Flow ( val Ġtrade Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcounter party : ĠParty ) Ġ: ĠFlow Logic < State And Ref < Trade Approval Contract . State >>() Ġ{ ĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall (): ĠState And Ref < Trade Approval Contract . State > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMan ufacture Ġan Ġinitial Ġstate ĊĠĠĠĠĠĠĠ Ġval Ġtrade Proposal Ġ= ĠTrade Approval Contract . State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrade Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Hub . my Info . legal Identity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter party ) ĊĠĠĠĠĠĠĠ Ġ// Ġidentify Ġa Ġnot ary . ĠThis Ġmight Ġalso Ġbe Ġdone Ġexternal Ġto Ġthe Ġflow ĊĠĠĠĠĠĠĠ Ġval Ġnot ary Ġ= Ġservice Hub . network Map Cache . get Any Not ary () ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠTransaction Builder Ġand Ġpopulate Ġwith Ġthe Ġnew Ġstate . ĊĠĠĠĠĠĠĠ Ġval Ġtx Ġ= ĠTransaction Type . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGeneral . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuilder ( not ary ). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Items ( trade Proposal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommand ( Trade Approval Contract . Commands . Issue (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( trade Proposal . source . own ing Key ))) ĊĠĠĠĠĠĠĠ Ġtx . setTime ( service Hub . clock . instant (), ĠDuration . of Seconds ( 6 0 )) ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġcan Ġautomatically Ġsign Ġas Ġthere Ġis Ġno Ġun trusted Ġdata . ĊĠĠĠĠĠĠĠ Ġtx . sign With ( service Hub . legal Identity Key ) ĊĠĠĠĠĠĠĠ Ġ// ĠConvert Ġto Ġa ĠSigned Transaction Ġthat Ġwe Ġcan Ġsend Ġto Ġthe Ġnot ary ĊĠĠĠĠĠĠĠ Ġval Ġsigned Tx Ġ= Ġtx . to Signed Transaction ( false ) ĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġthe ĠFinal ity Flow Ġto Ġnot ar ise Ġand Ġdistribute Ġthe ĠSigned Transaction Ġto Ġthe Ġcounter party ĊĠĠĠĠĠĠĠ Ġsub Flow ( Final ity Flow ( signed Tx , Ġset Of ( service Hub . my Info . legal Identity , Ġcounter party ))) ĊĠĠĠĠĠĠĠ Ġ// ĠReturn Ġthe Ġinitial Ġstate ĊĠĠĠĠĠĠĠ Ġreturn Ġsigned Tx . tx . out Ref < Trade Approval Contract . State >( 0 ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠSimple Ġflow Ġto Ġcomplete Ġa Ġproposal Ġsubmitted Ġby Ġanother Ġparty Ġand Ġensure Ġboth Ġnodes Ċ Ġ* Ġend Ġup Ġwith Ġa Ġfully Ġsigned Ġcopy Ġof Ġthe Ġstate Ġeither Ġas ĠAP PRO VED , Ġor ĠRE JECT ED Ċ Ġ*/ Ċ class ĠSubmit Completion Flow ( val Ġref : ĠState Ref , Ġval Ġver dict : ĠWorkflow State ) Ġ: ĠFlow Logic < State And Ref < Trade Approval Contract . State >>() Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( ver dict Ġin Ġset Of ( Workflow State . APPRO VED , ĠWorkflow State . RE JECT ED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ver dict Ġmust Ġbe Ġa Ġfinal Ġstate " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall (): ĠState And Ref < Trade Approval Contract . State > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠPull Ġin Ġthe Ġlatest ĠVault Ġversion Ġof Ġthe ĠState Ref Ġas Ġa Ġfull ĠState And Ref ĊĠĠĠĠĠĠĠ Ġval Ġlatest Record Ġ= Ġservice Hub . latest < Trade Approval Contract . State >( ref ) ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthe Ġprotocol Ġhasn 't Ġalready Ġbeen Ġrun ĊĠĠĠĠĠĠĠ Ġrequire ( latest Record . ref Ġ== Ġref ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Input Ġtrade Ġ$ ref Ġis Ġnot Ġlatest Ġversion Ġ$ latest Record " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠRequire Ġthat Ġthe Ġstate Ġis Ġstill Ġmod ifiable ĊĠĠĠĠĠĠĠ Ġrequire ( latest Record . state . data . state Ġ== ĠWorkflow State . NEW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Input Ġtrade Ġnot Ġmod ifiable Ġ${ latest Record . state . data . state }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġwe Ġare Ġthe Ġcorrect ĠParty Ġto Ġrun Ġthe Ġprotocol . ĠNote Ġthey Ġwill Ġcounter Ġcheck Ġthis Ġtoo . ĊĠĠĠĠĠĠĠ Ġrequire ( latest Record . state . data . counter party Ġ== Ġservice Hub . my Info . legal Identity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġcounter party Ġmust Ġgive Ġthe Ġver dict " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDOC START Ġ 2 ĊĠĠĠĠĠĠĠ Ġ// ĠModify Ġthe Ġstate Ġfield Ġfor Ġnew Ġoutput . ĠWe Ġuse Ġcopy , Ġto Ġensure Ġno Ġother Ġmodifications . ĊĠĠĠĠĠĠĠ Ġ// ĠIt Ġis Ġespecially Ġimportant Ġfor Ġa ĠLinear State Ġthat Ġthe Ġlinear Id Ġis Ġcopied Ġacross , ĊĠĠĠĠĠĠĠ Ġ// Ġnot Ġaccidentally Ġassigned Ġa Ġnew Ġrandom Ġid . ĊĠĠĠĠĠĠĠ Ġval ĠnewState Ġ= Ġlatest Record . state . data . copy ( state Ġ= Ġver dict ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġhave Ġto Ġuse Ġthe Ġoriginal Ġnot ary Ġfor Ġthe Ġnew Ġtransaction ĊĠĠĠĠĠĠĠ Ġval Ġnot ary Ġ= Ġlatest Record . state . not ary ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġand Ġpopulate Ġthe Ġnew ĠTransaction Builder ĊĠĠĠĠĠĠĠ Ġ// ĠTo Ġdestroy Ġthe Ġold Ġproposal Ġstate Ġand Ġreplace Ġwith Ġthe Ġnew Ġcompletion Ġstate . ĊĠĠĠĠĠĠĠ Ġ// ĠAlso Ġadd Ġthe ĠCompleted Ġcommand Ġwith Ġkeys Ġof Ġall Ġparties Ġto Ġsignal Ġthe ĠTx Ġpurpose ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġthe ĠContract Ġverify Ġmethod . ĊĠĠĠĠĠĠĠ Ġval Ġtx Ġ= ĠTransaction Type . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGeneral . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuilder ( not ary ). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest Record , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnewState , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommand ( Trade Approval Contract . Commands . Completed (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( service Hub . my Info . legal Identity . own ing Key , Ġlatest Record . state . data . source . own ing Key ))) ĊĠĠĠĠĠĠĠ Ġtx . setTime ( service Hub . clock . instant (), ĠDuration . of Seconds ( 6 0 )) ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġcan Ġsign Ġthis Ġtransaction Ġimmediately Ġas Ġwe Ġhave Ġalready Ġchecked Ġall Ġthe Ġfields Ġand Ġthe Ġdecision ĊĠĠĠĠĠĠĠ Ġ// Ġis Ġultimately Ġa Ġmanual Ġone Ġfrom Ġthe Ġcaller . ĊĠĠĠĠĠĠĠ Ġtx . sign With ( service Hub . legal Identity Key ) ĊĠĠĠĠĠĠĠ Ġ// ĠConvert Ġto ĠSigned Transaction Ġwe Ġcan Ġpass Ġaround Ġcertain Ġthat Ġit Ġcannot Ġbe Ġmodified . ĊĠĠĠĠĠĠĠ Ġval Ġself Signed Tx Ġ= Ġtx . to Signed Transaction ( false ) ĊĠĠĠĠĠĠĠ Ġ// DOC END Ġ 2 ĊĠĠĠĠĠĠĠ Ġ// ĠSend Ġthe Ġsigned Ġtransaction Ġto Ġthe Ġorigin ator Ġand Ġawait Ġtheir Ġsignature Ġto Ġconfirm ĊĠĠĠĠĠĠĠ Ġval Ġall Party Signed Tx Ġ= Ġsend And Receive < Digital Signature . With Key >( newState . source , Ġself Signed Tx ). unwrap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġtheir Ġsignature Ġto Ġour Ġun modified Ġtransaction . ĠTo Ġcheck Ġthey Ġsigned Ġthe Ġsame Ġtx . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreed Tx Ġ= Ġself Signed Tx Ġ+ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReceive Ġback Ġtheir Ġsignature Ġand Ġconfirm Ġthat Ġit Ġis Ġfor Ġan Ġun modified Ġtransaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAlso Ġthat Ġthe Ġonly Ġmissing Ġsignature Ġis Ġfrom Ġte h ĠNot ary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagreed Tx . verify Signatures ( not ary . own ing Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRe check Ġthe Ġdata Ġof Ġthe Ġtransaction . ĠNote Ġwe Ġrun Ġto Ledger Transaction Ġon Ġthe ĠWire Transaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġas Ġwe Ġdo Ġnot Ġhave Ġall Ġthe Ġsignature . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagreed Tx . tx . to Ledger Transaction ( service Hub ). verify () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreturn Ġthe ĠSigned Transaction Ġto Ġnot ar ise ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagreed Tx ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠDOC START Ġ 4 ĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġthe ĠFinal ity Flow Ġto Ġnot ar ise Ġand Ġdistribute Ġthe Ġcompleted Ġtransaction . ĊĠĠĠĠĠĠĠ Ġsub Flow ( Final ity Flow ( all Party Signed Tx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( latest Record . state . data . source , Ġlatest Record . state . data . counter party ))) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDOC END Ġ 4 ĊĠĠĠĠĠĠĠ Ġ// ĠReturn Ġback Ġthe Ġdetails Ġof Ġthe Ġcompleted Ġstate / transaction . ĊĠĠĠĠĠĠĠ Ġreturn Ġall Party Signed Tx . tx . out Ref < Trade Approval Contract . State >( 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠSimple Ġflow Ġto Ġreceive Ġthe Ġfinal Ġdecision Ġon Ġa Ġproposal . Ċ Ġ* ĠThen Ġafter Ġchecking Ġto Ġsign Ġit Ġand Ġeventually Ġstore Ġthe Ġfully Ġnot ar ised Ċ Ġ* Ġtransaction Ġto Ġthe Ġledger . Ċ Ġ*/ Ċ class ĠRecord Completion Flow ( val Ġsource : ĠParty ) Ġ: ĠFlow Logic < Unit >() Ġ{ ĊĠĠĠ Ġ@ Suspend able ĊĠĠĠ Ġoverride Ġfun Ġcall (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDOC START Ġ 3 ĊĠĠĠĠĠĠĠ Ġ// ĠFirst Ġwe Ġreceive Ġthe Ġver dict Ġtransaction Ġsigned Ġby Ġtheir Ġsingle Ġkey ĊĠĠĠĠĠĠĠ Ġval Ġcomplete Tx Ġ= Ġreceive < Signed Transaction >( source ). unwrap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthe Ġtransaction Ġis Ġsigned Ġapart Ġfrom Ġour Ġown Ġkey Ġand Ġthe Ġnot ary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw tx Ġ= Ġit . verify Signatures ( service Hub . my Info . legal Identity . own ing Key , Ġit . tx . not ary !!. own ing Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthe Ġtransaction Ġdata Ġis Ġcorrectly Ġformed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw tx . to Ledger Transaction ( service Hub ). verify () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġthat Ġthis Ġis Ġthe Ġexpected Ġtype Ġof Ġtransaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( w tx . commands . single (). value Ġis ĠTrade Approval Contract . Commands . Completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Transaction Ġmust Ġrepresent Ġa Ġworkflow Ġcompletion " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthe Ġcontext Ġdependent Ġparts Ġof Ġthe Ġtransaction Ġas Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠContract Ġverify Ġmethod Ġmust Ġnot Ġuse Ġservice Hub Ġqueries . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġw tx . out Ref < Trade Approval Contract . State >( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( state . state . data . source Ġ== Ġservice Hub . my Info . legal Identity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Proposal Ġnot Ġone Ġof Ġour Ġoriginal Ġproposals " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( state . state . data . counter party Ġ== Ġsource ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Proposal Ġnot Ġfor Ġsent Ġfrom Ġcorrect Ġsource " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠDOC END Ġ 3 ĊĠĠĠĠĠĠĠ Ġ// ĠHaving Ġverified Ġthe ĠSigned Transaction Ġpassed Ġto Ġus Ġwe Ġcan Ġsign Ġit Ġtoo ĊĠĠĠĠĠĠĠ Ġval Ġour Signature Ġ= Ġservice Hub . legal Identity Key . sign With ECD SA ( complete Tx . tx . id ) ĊĠĠĠĠĠĠĠ Ġ// ĠSend Ġour Ġsignature Ġto Ġthe Ġother Ġparty . ĊĠĠĠĠĠĠĠ Ġsend ( source , Ġour Signature ) ĊĠĠĠĠĠĠĠ Ġ// ĠN . B . ĠThe ĠFinal ity Protocol Ġwill Ġbe Ġresponsible Ġfor ĠNot ar ising Ġthe ĠSigned Transaction ĊĠĠĠĠĠĠĠ Ġ// Ġand Ġbroadcast ing Ġthe Ġresult Ġto Ġus . ĊĠĠĠ Ġ} Ċ }