package Ġcom . indigo . contract Ċ Ċ import Ġcom . indigo . state . S ov rin Trust State Ċ import Ġnet . cord a . core . contracts .* Ċ import Ġnet . cord a . core . contracts . Requirements . using Ċ import Ġnet . cord a . core . transactions . Ledger Transaction Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġnx sh ah 5 Ġon Ġ 1 1 / 9 / 1 7 . Ċ Ġ*/ ĊĊ Ċ open Ġclass ĠTrust Contract Ġ: ĠContract Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTR UST _ PROGRAM _ ID : ĠContract ClassName Ġ= Ġ" com . indigo . contract . Trust Contract " ĊĠĠĠ Ġ} ĊĠĠĠ Ġinterface ĠCommands : ĠCommand Data Ġ{ ĊĊĠĠĠĠĠĠĠ Ġclass ĠIssue : ĠType Only Command Data (), ĠCommands ĊĠĠĠĠĠĠĠ Ġclass ĠEst ablish : Type Only Command Data (), ĠCommands ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġverify ( tx : ĠLed ger Transaction ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= Ġtx . group States ( S ov rin Trust State :: java Class ) ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġtx . commands . require Single Command < Commands >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( inputs , Ġoutputs , Ġ_) Ġin Ġgroups ) Ġ{ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( command . value ) Ġ{ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Issue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġoutputs . single (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġis Ġno Ġinput " Ġusing Ġinputs . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġis Ġonly Ġ 1 Ġoutput " Ġusing Ġ( outputs . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" other Ġparty Ġdata Ġis Ġempty Ġat Ġthis Ġtime " Ġusing Ġ( output . other Party DID Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġoutput . other Party Ġ== Ġnull Ġ&& Ġoutput . pair wise DID Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Est ablish Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġval Ġinput Ġ= Ġinputs . single (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġoutputs . single (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire That Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġis Ġonly Ġ 1 Ġoutput " Ġusing Ġ( outputs . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġis Ġonly Ġ 0 Ġinput " Ġusing Ġ( inputs . size Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Other Ġparty Ġdata Ġshould Ġexist " Ġusing Ġ( output . other Party DID != null Ġ&& Ġoutput . other Party != null Ġ&& Ġoutput . pair wise DID != null ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }