package Ġnet . cord a . core . transactions Ċ Ċ import Ġco . parallel universe . str ands . Str and Ċ import Ġnet . cord a . core . C ord a Internal Ċ import Ġnet . cord a . core . Delete For DJ VM Ċ import Ġnet . cord a . core . contracts .* Ċ import Ġnet . cord a . core . cord app . C ord app Provider Ċ import Ġnet . cord a . core . crypto .* Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord a . core . internal . Flow StateMachine Ċ import Ġnet . cord a . core . internal . ensure Minimum Platform Version Ċ import Ġnet . cord a . core . node . Network Parameters Ċ import Ġnet . cord a . core . node . Service Hub Ċ import Ġnet . cord a . core . node . Services For Resolution Ċ import Ġnet . cord a . core . node . Zone Version Too Low Exception Ċ import Ġnet . cord a . core . node . services . Attachment Id Ċ import Ġnet . cord a . core . node . services . Key Management Service Ċ import Ġnet . cord a . core . serialization . Serialization Context Ċ import Ġnet . cord a . core . serialization . Serialization Factory Ċ import Ġjava . security . PublicKey Ċ import Ġjava . time . Duration Ċ import Ġjava . time . Instant Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ /** Ċ Ġ* ĠA ĠTransaction Builder Ġis Ġa Ġtransaction Ġclass Ġthat 's Ġmutable Ġ( un like Ġthe Ġothers Ġwhich Ġare Ġall Ġimmutable ). ĠIt Ġis Ċ Ġ* Ġintended Ġto Ġbe Ġpassed Ġaround Ġcontracts Ġthat Ġmay Ġedit Ġit Ġby Ġadding Ġnew Ġstates / commands . ĠThen Ġonce Ġthe Ġstates Ċ Ġ* Ġand Ġcommands Ġare Ġright , Ġthis Ġclass Ġcan Ġbe Ġused Ġas Ġa Ġholding Ġbucket Ġto Ġgather Ġsignatures Ġfrom Ġmultiple Ġparties . Ċ Ġ* Ċ Ġ* ĠThe Ġbuilder Ġcan Ġbe Ġcustom ised Ġfor Ġspecific Ġtransaction Ġtypes , Ġe . g . Ġwhere Ġadditional Ġprocessing Ġis Ġneeded Ċ Ġ* Ġbefore Ġadding Ġa Ġstate / command . Ċ Ġ* Ċ Ġ* Ġ@ param Ġnot ary ĠNot ary Ġused Ġfor Ġthe Ġtransaction . ĠIf Ġnull , Ġthis Ġindicates Ġthe Ġtransaction ĠDO ES ĠNOT Ġhave Ġa Ġnot ary . Ċ Ġ* ĠWhen Ġthis Ġis Ġset Ġto Ġa Ġnon - null Ġvalue , Ġan Ġoutput Ġstate Ġcan Ġbe Ġadded Ġby Ġjust Ġpassing Ġin Ġa Ġ[ Contract State ] ĠâĢĵ Ġa Ċ Ġ* Ġ[ Transaction State ] Ġwith Ġthis Ġnot ary Ġspecified Ġwill Ġbe Ġgenerated Ġautomatically . Ċ Ġ*/ Ċ @ Delete For DJ VM Ċ open Ġclass ĠTransaction Builder Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġvar Ġnot ary : ĠParty ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġlock Id : ĠUUID Ġ= Ġ( Str and . current Str and () Ġas ? ĠFlow StateMachine <* >) ?. id ?. uuid Ġ?: ĠUUID . randomUUID (), ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġinputs : ĠMutable List < State Ref > Ġ= Ġarray ListOf (), ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġattachments : ĠMutable List < Secure Hash > Ġ= Ġarray ListOf (), ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġoutputs : ĠMutable List < Transaction State < Contract State >> Ġ= Ġarray ListOf (), ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġcommands : ĠMutable List < Command <* >> Ġ= Ġarray ListOf (), ĊĠĠĠĠĠĠĠ Ġprotected Ġvar Ġwindow : ĠTime Window ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġprotected Ġvar Ġprivacy Salt : ĠPrivacy Salt Ġ= ĠPrivacy Salt (), ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġreferences : ĠMutable List < State Ref > Ġ= Ġarray ListOf () Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġinputs With Transaction State Ġ= Ġarray ListOf < Transaction State < Contract State >>() ĊĠĠĠ Ġprivate Ġval Ġreferences With Transaction State Ġ= Ġarray ListOf < Transaction State < Contract State >>() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcopy Ġof Ġthe Ġbuilder . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcopy (): ĠTransaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= ĠTransaction Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot ary Ġ= Ġnot ary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs Ġ= ĠArrayList ( inputs ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachments Ġ= ĠArrayList ( attachments ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutputs Ġ= ĠArrayList ( outputs ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands Ġ= ĠArrayList ( commands ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Ġ= Ġwindow , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivacy Salt Ġ= Ġprivacy Salt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreferences Ġ= Ġreferences ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġt . inputs With Transaction State . addAll ( this . inputs With Transaction State ) ĊĠĠĠĠĠĠĠ Ġt . references With Transaction State . addAll ( this . references With Transaction State ) ĊĠĠĠĠĠĠĠ Ġreturn Ġt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠDOC START Ġ 1 ĊĠĠĠ Ġ/** ĠA Ġmore Ġconvenient Ġway Ġto Ġadd Ġitems Ġto Ġthis Ġtransaction Ġthat Ġcalls Ġthe Ġadd * Ġmethods Ġfor Ġyou Ġbased Ġon Ġtype Ġ*/ ĊĠĠĠ Ġfun Ġwith Items ( var arg Ġitems : ĠAny ): ĠTransaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( t Ġin Ġitems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( t ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState And Ref < *> Ġ-> Ġadd Input State ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRefer enced State And Ref < *> Ġ-> Ġadd Reference State ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSecure Hash Ġ-> Ġadd Attachment ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTransaction State < *> Ġ-> Ġadd Output State ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠState And Contract Ġ-> Ġadd Output State ( t . state , Ġt . contract ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContract State Ġ-> Ġthrow ĠUnsupportedOperationException (" Removed Ġas Ġof ĠV 1 : Ġplease Ġuse Ġa ĠState And Contract Ġinstead ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommand < *> Ġ-> Ġadd Command ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommand Data Ġ-> Ġthrow ĠIllegalArgumentException (" You Ġpassed Ġan Ġinstance Ġof ĠCommand Data , Ġbut Ġthat Ġlack s Ġthe Ġpub key . ĠYou Ġneed Ġto Ġwrap Ġit Ġin Ġa ĠCommand Ġobject Ġfirst .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTime Window Ġ-> Ġset Time Window ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPrivacy Salt Ġ-> Ġset Privacy Salt ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Wrong Ġargument Ġtype : Ġ${ t . java Class }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠDOC END Ġ 1 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġa Ġ[ Wire Transaction ] Ġfrom Ġthis Ġbuilder Ġand Ġresolves Ġany Ġ[ Automatic Hash Constraint ] Ġon Ġcontracts Ġto ĊĠĠĠĠ Ġ* Ġ[ Hash Attachment Constraint ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ returns ĠA Ġnew Ġ[ Wire Transaction ] Ġthat Ġwill Ġbe Ġun affected Ġby Ġfurther Ġchanges Ġto Ġthis Ġ[ Transaction Builder ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠZone Version Too Low Exception Ġif Ġthere Ġare Ġreference Ġstates Ġand Ġthe Ġzone Ġminimum Ġplatform Ġversion Ġis Ġless Ġthan Ġ 4 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Throws ( Missing Contract Attachments :: class ) ĊĠĠĠ Ġfun Ġto Wire Transaction ( services : ĠServices For Resolution ): ĠWire Transaction Ġ= Ġto Wire Transaction WithContext ( services ) ĊĊĠĠĠ Ġ@ C ord a Internal ĊĠĠĠ Ġinternal Ġfun Ġto Wire Transaction WithContext ( services : ĠServices For Resolution , Ġserialization Context : ĠSerialization Context ? Ġ= Ġnull ): ĠWire Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreference States Ġ= Ġreference States () ĊĠĠĠĠĠĠĠ Ġif Ġ( reference States . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservices . ensure Minimum Platform Version ( 4 , Ġ" Reference Ġstates ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRes olves Ġthe Ġ[ Automatic Hash Constraint ] s Ġto Ġ[ Hash Attachment Constraint ] s , ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Wh itelisted By Zone Attachment Constraint ] s Ġor Ġ[ Signature Attachment Constraint ] s Ġbased Ġon Ġa Ġglobal Ġparameter . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġ[ Automatic Hash Constraint ] Ġallows Ġfor Ġless Ġbo iler Ġplate Ġwhen Ġconstructing Ġtransactions Ġsince Ġfor Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġtypical Ġcase Ġthe Ġnamed Ġcontract Ġwill Ġbe Ġavailable Ġwhen Ġbuilding Ġthe Ġtransaction . ĠIn Ġexception al Ġcases Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Transaction States ] Ġmust Ġbe Ġcreated Ġwith Ġan Ġexplicit Ġ[ Attachment Constraint ] ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġresolved Outputs Ġ= Ġoutputs . map Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . with Constraint ( when Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . constraint Ġ!== ĠAutomatic Hash Constraint Ġ-> Ġstate . constraint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Wh itelisted By Zone Attachment Constraint ( state . contract , Ġservices . network Parameters ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWh itelisted By Zone Attachment Constraint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmake Attachment Constraint ( services , Ġstate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSerialization Factory . default Factory . with Current Context ( serialization Context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWire Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWire Transaction . create Component Groups ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput States (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolved Outputs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommands , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachments Ġ+ Ġmake Contract Attachments ( services . cord app Provider ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot ary , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference States ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivacy Salt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠTransaction State < Contract State >. with Constraint ( new Constraint : ĠAttachment Constraint ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Constraint Ġ== Ġconstraint ) Ġthis Ġelse Ġcopy ( constraint Ġ= Ġnew Constraint ) ĊĊĠĠĠ Ġprivate Ġfun Ġmake Attachment Constraint ( services : ĠServices For Resolution , Ġstate : ĠTransaction State < Contract State >): ĠAttachment Constraint Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġattachment Id Ġ= Ġservices . cord app Provider . get Contract Attachment ID ( state . contract ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠMissing Contract Attachments ( listOf ( state )) ĊĊĠĠĠĠĠĠĠ Ġval Ġattachment Sign ers Ġ= Ġservices . attachments . open Attachment ( attachment Id )?. sign ers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠMissing Contract Attachments ( listOf ( state )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattachment Sign ers . isEmpty () Ġ-> ĠHash Attachment Constraint ( attachment Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmake Signature Attachment Constraint ( attachment Sign ers ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Signature Attachment Constraint ( attachment Sign ers : ĠList < Party >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSignature Attachment Constraint ( Composite Key . Builder (). add Keys ( attachment Sign ers . map Ġ{ Ġit . own ing Key Ġ}). build ()) ĊĊĠĠĠ Ġprivate Ġfun Ġuse Wh itelisted By Zone Attachment Constraint ( contract ClassName : ĠContract ClassName , Ġnetwork Parameters : ĠNetwork Parameters ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontract ClassName Ġin Ġnetwork Parameters . wh itelisted Contract Implement ations . keys ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġattachments Ġadded Ġto Ġthe Ġcurrent Ġtransaction Ġcontain Ġonly Ġthe Ġhashes Ġof Ġthe Ġcurrent Ġc ord apps . ĊĠĠĠĠ Ġ* ĠNOT Ġthe Ġhashes Ġof Ġthe Ġc ord apps Ġthat Ġwere Ġused Ġwhen Ġthe Ġinput Ġstates Ġwere Ġcreated Ġ( Ġin Ġcase Ġthey Ġchanged Ġin Ġthe Ġmeantime ) ĊĠĠĠĠ Ġ* ĠTODO Ġ- Ġreview Ġthis Ġlogic ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmake Contract Attachments ( cord app Provider : ĠC ord app Provider ): ĠList < Attachment Id > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠReference Ġinputs Ġnot Ġincluded Ġas Ġit Ġis Ġnot Ġnecessary Ġto Ġverify Ġthem . ĊĠĠĠĠĠĠĠ Ġreturn Ġ( inputs With Transaction State Ġ+ Ġoutputs ). map Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc ord app Provider . get Contract Attachment ID ( state . contract ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠMissing Contract Attachments ( listOf ( state )) ĊĠĠĠĠĠĠĠ Ġ}. distinct () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Attachment Resolution Exception :: class , ĠTransaction Resolution Exception :: class ) ĊĠĠĠ Ġfun Ġto Ledger Transaction ( services : ĠService Hub ) Ġ= Ġto Wire Transaction ( services ). to Ledger Transaction ( services ) ĊĊĠĠĠ Ġinternal Ġfun Ġto Ledger Transaction WithContext ( services : ĠServices For Resolution , Ġserialization Context : ĠSerialization Context ): ĠLed ger Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġto Wire Transaction WithContext ( services , Ġserialization Context ). to Ledger Transaction ( services ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Attachment Resolution Exception :: class , ĠTransaction Resolution Exception :: class , ĠTransaction Verification Exception :: class ) ĊĠĠĠ Ġfun Ġverify ( services : ĠService Hub ) Ġ{ ĊĠĠĠĠĠĠĠ Ġto Ledger Transaction ( services ). verify () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Not ary ( state And Ref : ĠState And Ref <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnot ary Ġ= Ġstate And Ref . state . not ary ĊĠĠĠĠĠĠĠ Ġrequire ( not ary Ġ== Ġthis . not ary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Input Ġstate Ġrequires Ġnot ary Ġ\"$ not ary \" Ġwhich Ġdoes Ġnot Ġmatch Ġthe Ġtransaction Ġnot ary Ġ\" ${ this . not ary }\" ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠThis Ġcheck Ġis Ġperformed Ġhere Ġas Ġwell Ġas Ġin ĠBase Transaction . ĊĠĠĠ Ġprivate Ġfun Ġcheck For Inputs And References Overlap () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintersection Ġ= Ġinputs Ġintersect Ġreferences ĊĠĠĠĠĠĠĠ Ġrequire ( intersection . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" A ĠState Ref Ġcannot Ġbe Ġboth Ġan Ġinput Ġand Ġa Ġreference Ġinput Ġin Ġthe Ġsame Ġtransaction ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck References Use Same Not ary () Ġ= Ġreferences With Transaction State . map Ġ{ Ġit . not ary Ġ}. toSet (). size Ġ== Ġ 1 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġreference Ġinput Ġ[ State Ref ] Ġto Ġthe Ġtransaction . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote : ĠReference Ġstates Ġare Ġonly Ġsupported Ġon ĠC ord a Ġnetworks Ġrunning Ġa Ġminimum Ġplatform Ġversion Ġof Ġ 4 . ĊĠĠĠĠ Ġ* Ġ[ to Wire Transaction ] Ġwill Ġthrow Ġan Ġ[ IllegalStateException ] Ġif Ġcalled Ġin Ġsuch Ġan Ġenvironment . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġadd Reference State ( referenced State And Ref : ĠRefer enced State And Ref < *> ): ĠTransaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate And Ref Ġ= Ġreferenced State And Ref . state And Ref ĊĠĠĠĠĠĠĠ Ġreferences With Transaction State . add ( state And Ref . state ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIt Ġis Ġlikely Ġthe Ġcase Ġthat Ġusers Ġof Ġreference Ġstates Ġdo Ġnot Ġhave Ġpermission Ġto Ġchange Ġthe Ġnot ary Ġassigned ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġa Ġreference Ġstate . ĠEven Ġif Ġusers Ġ_ did _ Ġhave Ġthis Ġpermission Ġthe Ġresult Ġwould Ġlikely Ġbe Ġa Ġbunch Ġof ĊĠĠĠĠĠĠĠ Ġ// Ġnot ary Ġchange Ġr aces . ĠAs Ġsuch , Ġif Ġa Ġreference Ġstate Ġis Ġadded Ġto Ġa Ġtransaction Ġwhich Ġis Ġassigned Ġto Ġa ĊĠĠĠĠĠĠĠ Ġ// Ġdifferent Ġnot ary Ġto Ġthe Ġinput Ġand Ġoutput Ġstates Ġthen Ġall Ġthose Ġinputs Ġand Ġoutputs Ġmust Ġbe Ġmoved Ġto Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġnot ary Ġwhich Ġthe Ġreference Ġstate Ġuses . ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġtwo Ġor Ġmore Ġreference Ġstates Ġassigned Ġto Ġdifferent Ġnot aries Ġare Ġadded Ġto Ġa Ġtransaction Ġthen Ġit Ġfollows ĊĠĠĠĠĠĠĠ Ġ// Ġthat Ġthis Ġtransaction Ġlikely Ġ_ cannot _ Ġbe Ġcommitted Ġto Ġthe Ġledger Ġas Ġit Ġunlikely Ġthat Ġthe Ġparty Ġusing Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġreference Ġstate Ġcan Ġchange Ġthe Ġassigned Ġnot ary Ġfor Ġone Ġof Ġthe Ġreference Ġstates . ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠAs Ġsuch , Ġif Ġreference Ġstates Ġassigned Ġto Ġmultiple Ġdifferent Ġnot aries Ġare Ġadded Ġto Ġa Ġtransaction Ġbuilder ĊĠĠĠĠĠĠĠ Ġ// Ġthen Ġthe Ġcheck Ġbelow Ġwill Ġfail . ĊĠĠĠĠĠĠĠ Ġcheck ( check References Use Same Not ary ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Transactions Ġwith Ġreference Ġstates Ġusing Ġmultiple Ġdifferent Ġnot aries Ġare Ġcurrently Ġunsupported ." ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Not ary ( state And Ref ) ĊĠĠĠĠĠĠĠ Ġreferences . add ( state And Ref . ref ) ĊĠĠĠĠĠĠĠ Ġcheck For Inputs And References Overlap () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAdds Ġan Ġinput Ġ[ State Ref ] Ġto Ġthe Ġtransaction . Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġadd Input State ( state And Ref : ĠState And Ref < *> ): ĠTransaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Not ary ( state And Ref ) ĊĠĠĠĠĠĠĠ Ġinputs . add ( state And Ref . ref ) ĊĠĠĠĠĠĠĠ Ġinputs With Transaction State . add ( state And Ref . state ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAdds Ġan Ġattachment Ġwith Ġthe Ġspecified Ġhash Ġto Ġthe ĠTransaction Builder . Ġ*/ ĊĠĠĠ Ġfun Ġadd Attachment ( attachment Id : ĠSecure Hash ): ĠTransaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġattachments . add ( attachment Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAdds Ġan Ġoutput Ġstate Ġto Ġthe Ġtransaction . Ġ*/ ĊĠĠĠ Ġfun Ġadd Output State ( state : ĠTransaction State < *> ): ĠTransaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġoutputs . add ( state ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAdds Ġan Ġoutput Ġstate , Ġwith Ġassociated Ġcontract Ġcode Ġ( and Ġconstraints ), Ġand Ġnot ary , Ġto Ġthe Ġtransaction . Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġadd Output State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠContract State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontract : ĠContract ClassName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot ary : ĠParty , Ġenc um br ance : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint : ĠAttachment Constraint Ġ= ĠAutomatic Hash Constraint ĊĠĠĠ Ġ): ĠTransaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadd Output State ( Transaction State ( state , Ġcontract , Ġnot ary , Ġenc um br ance , Ġconstraint )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠA Ġdefault Ġnot ary Ġmust Ġbe Ġspecified Ġduring Ġbuilder Ġconstruction Ġto Ġuse Ġthis Ġmethod Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġadd Output State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠContract State , Ġcontract : ĠContract ClassName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint : ĠAttachment Constraint Ġ= ĠAutomatic Hash Constraint ĊĠĠĠ Ġ): ĠTransaction Builder Ġ{ ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( not ary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Need Ġto Ġspecify Ġa Ġnot ary Ġfor Ġthe Ġstate , Ġor Ġset Ġa Ġdefault Ġone Ġon ĠTransaction Builder Ġinitial isation " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Output State ( state , Ġcontract , Ġnot ary !! , Ġconstraint Ġ= Ġconstraint ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠAdds Ġa Ġ[ Command ] Ġto Ġthe Ġtransaction . Ġ*/ ĊĠĠĠ Ġfun Ġadd Command ( arg : ĠCommand < *> ): ĠTransaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġcommands . add ( arg ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġ[ Command ] Ġto Ġthe Ġtransaction , Ġspecified Ġby Ġthe Ġencaps ulated Ġ[ Command Data ] Ġobject Ġand Ġrequired Ġlist Ġof ĊĠĠĠĠ Ġ* Ġsigning Ġ[ PublicKey ] s . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Command ( data : ĠCommand Data , Ġvar arg Ġkeys : ĠPublicKey ) Ġ= Ġadd Command ( Command ( data , ĠlistOf (* keys ))) ĊĊĠĠĠ Ġfun Ġadd Command ( data : ĠCommand Data , Ġkeys : ĠList < PublicKey >) Ġ= Ġadd Command ( Command ( data , Ġkeys )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe Ġ[ Time Window ] Ġfor Ġthis Ġtransaction , Ġreplacing Ġthe Ġexisting Ġ[ Time Window ] Ġif Ġthere Ġis Ġone . ĠTo Ġbe Ġvalid , Ġthe ĊĠĠĠĠ Ġ* Ġtransaction Ġmust Ġthen Ġbe Ġsigned Ġby Ġthe Ġnot ary Ġservice Ġwithin Ġthis Ġwindow Ġof Ġtime . ĠIn Ġthis Ġway , Ġthe Ġnot ary Ġacts Ġas ĊĠĠĠĠ Ġ* Ġthe ĠTimestamp ĠAuthor ity . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Time Window ( time Window : ĠTime Window ): ĠTransaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( not ary Ġ!= Ġnull ) Ġ{ Ġ" Only Ġnot ar ised Ġtransactions Ġcan Ġhave Ġa Ġtime - window " Ġ} ĊĠĠĠĠĠĠĠ Ġwindow Ġ= Ġtime Window ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ Time Window ] Ġfor Ġthe Ġtransaction Ġcan Ġalso Ġbe Ġdefined Ġas Ġ[ time ] Ġ+ /- Ġ[ time Tolerance ]. ĠThe Ġtolerance Ġshould Ġbe ĊĠĠĠĠ Ġ* Ġchosen Ġsuch Ġthat Ġyour Ġcode Ġcan Ġfinish Ġbuilding Ġthe Ġtransaction Ġand Ġsending Ġit Ġto Ġthe ĠTimestamp ĠAuthor ity Ġwithin ĊĠĠĠĠ Ġ* Ġthat Ġwindow Ġof Ġtime , Ġtaking Ġinto Ġaccount Ġfactors Ġsuch Ġas Ġnetwork Ġlatency . ĠTransactions Ġbeing Ġbuilt Ġby Ġa Ġgroup Ġof ĊĠĠĠĠ Ġ* Ġcollabor ating Ġparties Ġmay Ġtherefore Ġrequire Ġa Ġhigher Ġtime Ġtolerance Ġthan Ġa Ġtransaction Ġbeing Ġbuilt Ġby Ġa Ġsingle ĊĠĠĠĠ Ġ* Ġnode . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Time Window ( time : ĠInstant , Ġtime Tolerance : ĠDuration ) Ġ= Ġset Time Window ( Time Window . with Tolerance ( time , Ġtime Tolerance )) ĊĊĠĠĠ Ġfun Ġset Privacy Salt ( privacy Salt : ĠPrivacy Salt ): ĠTransaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . privacy Salt Ġ= Ġprivacy Salt ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġan Ġimmutable Ġlist Ġof Ġinput Ġ[ State Ref ] s . Ġ*/ ĊĠĠĠ Ġfun Ġinput States (): ĠList < State Ref > Ġ= ĠArrayList ( inputs ) ĊĊĠĠĠ Ġ/** ĠReturns Ġan Ġimmutable Ġlist Ġof Ġreference Ġinput Ġ[ State Ref ] s . Ġ*/ ĊĠĠĠ Ġfun Ġreference States (): ĠList < State Ref > Ġ= ĠArrayList ( references ) ĊĊĠĠĠ Ġ/** ĠReturns Ġan Ġimmutable Ġlist Ġof Ġattachment Ġhashes . Ġ*/ ĊĠĠĠ Ġfun Ġattachments (): ĠList < Secure Hash > Ġ= ĠArrayList ( attachments ) ĊĊĠĠĠ Ġ/** ĠReturns Ġan Ġimmutable Ġlist Ġof Ġoutput Ġ[ Transaction State ] s . Ġ*/ ĊĠĠĠ Ġfun Ġoutput States (): ĠList < Transaction State <* >> Ġ= ĠArrayList ( outputs ) ĊĊĠĠĠ Ġ/** ĠReturns Ġan Ġimmutable Ġlist Ġof Ġ[ Command ] s . Ġ*/ ĊĠĠĠ Ġfun Ġcommands (): ĠList < Command <* >> Ġ= ĠArrayList ( commands ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSign Ġthe Ġbuilt Ġtransaction Ġand Ġreturn Ġit . ĠThis Ġis Ġan Ġinternal Ġfunction Ġfor Ġuse Ġby Ġthe Ġservice Ġhub , Ġplease Ġuse ĊĠĠĠĠ Ġ* Ġ[ Service Hub . sign Initial Transaction ] Ġinstead . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġto Signed Transaction ( key Management Service : ĠKey Management Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey : ĠPublicKey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature Metadata : ĠSignature Metadata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservices : ĠServices For Resolution ): ĠSigned Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġw tx Ġ= Ġto Wire Transaction ( services ) ĊĠĠĠĠĠĠĠ Ġval Ġsign able Data Ġ= ĠSign able Data ( w tx . id , Ġsignature Metadata ) ĊĠĠĠĠĠĠĠ Ġval Ġsig Ġ= Ġkey Management Service . sign ( sign able Data , ĠpublicKey ) ĊĠĠĠĠĠĠĠ Ġreturn ĠSigned Transaction ( w tx , ĠlistOf ( sig )) ĊĠĠĠ Ġ} Ċ } Ċ