/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 1 ĠON IX Labs Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . on ix labs . cord a . core . contract Ċ Ċ import Ġnet . cord a . core . contracts .* Ċ import Ġnet . cord a . core . transactions . Ledger Transaction Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġinput Ġref Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ param Ġcontract State Class ĠThe Ġclass Ġof Ġthe Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġinput Ġref Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠContract State > ĠLed ger Transaction . single Input Ref OfType ( contract State Class : ĠClass < T >): ĠState And Ref < T > Ġ{ ĊĠĠĠ Ġreturn Ġin Refs OfType ( contract State Class ). single () Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġinput Ġref Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġinput Ġref Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠContract State > ĠLed ger Transaction . single Input Ref OfType (): ĠState And Ref < T > Ġ{ ĊĠĠĠ Ġreturn Ġsingle Input Ref OfType ( T :: class . java ) Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġinput Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ param Ġcontract State Class ĠThe Ġclass Ġof Ġthe Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġinput Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠContract State > ĠLed ger Transaction . single Input OfType ( contract State Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġinputs OfType ( contract State Class ). single () Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġinput Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġinput Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠContract State > ĠLed ger Transaction . single Input OfType (): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġsingle Input OfType ( T :: class . java ) Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġreference Ġinput Ġref Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ param Ġcontract State Class ĠThe Ġclass Ġof Ġthe Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġreference Ġinput Ġref Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠContract State > ĠLed ger Transaction . single Reference Input Ref OfType ( contract State Class : ĠClass < T >): ĠState And Ref < T > Ġ{ ĊĠĠĠ Ġreturn Ġreference Input Refs OfType ( contract State Class ). single () Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġreference Ġinput Ġref Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġreference Ġinput Ġref Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠContract State > ĠLed ger Transaction . single Reference Input Ref OfType (): ĠState And Ref < T > Ġ{ ĊĠĠĠ Ġreturn Ġsingle Reference Input Ref OfType ( T :: class . java ) Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġreference Ġinput Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ param Ġcontract State Class ĠThe Ġclass Ġof Ġthe Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġreference Ġinput Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠContract State > ĠLed ger Transaction . single Reference Input OfType ( contract State Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġreference Inputs OfType ( contract State Class ). single () Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġreference Ġinput Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġreference Ġinput Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠContract State > ĠLed ger Transaction . single Reference Input OfType (): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġsingle Reference Input OfType ( T :: class . java ) Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġoutput Ġref Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ param Ġcontract State Class ĠThe Ġclass Ġof Ġthe Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġoutput Ġref Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠContract State > ĠLed ger Transaction . single Output Ref OfType ( contract State Class : ĠClass < T >): ĠState And Ref < T > Ġ{ ĊĠĠĠ Ġreturn Ġout Refs OfType ( contract State Class ). single () Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġoutput Ġref Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġoutput Ġref Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠContract State > ĠLed ger Transaction . single Output Ref OfType (): ĠState And Ref < T > Ġ{ ĊĠĠĠ Ġreturn Ġsingle Output Ref OfType ( T :: class . java ) Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġoutput Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ param Ġcontract State Class ĠThe Ġclass Ġof Ġthe Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġoutput Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠContract State > ĠLed ger Transaction . single Output OfType ( contract State Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġoutputs OfType ( contract State Class ). single () Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġoutput Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġoutput Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠContract State > ĠLed ger Transaction . single Output OfType (): ĠT Ġ{ ĊĠĠĠ Ġreturn Ġsingle Output OfType ( T :: class . java ) Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġcommand Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ param Ġcommand Class ĠThe Ġclass Ġof Ġthe Ġcommand Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġcommand Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠCommand Data > ĠLed ger Transaction . single Command OfType ( command Class : ĠClass < T >): ĠCommand < T > Ġ{ ĊĠĠĠ Ġreturn Ġcommands OfType ( command Class ). single () Ċ } Ċ Ċ /** Ċ Ġ* ĠOb t ains Ġa Ġsingle Ġcommand Ġfrom Ġa Ġledger Ġtransaction . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġcontract Ġstate Ġtype Ġto Ġobtain . Ċ Ġ* Ġ@ return ĠReturns Ġa Ġsingle Ġcommand Ġfrom Ġa Ġledger Ġtransaction Ġof Ġthe Ġspecified Ġtype . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠCommand Data > ĠLed ger Transaction . single Command OfType (): ĠCommand < T > Ġ{ ĊĠĠĠ Ġreturn Ġsingle Command OfType ( T :: class . java ) Ċ } Ċ Ċ /** Ċ Ġ* ĠProvides Ġutility Ġfor Ġ[ Verified Command Data ] Ġimplementations , Ġspecifying Ġwhich Ġcommands Ġare Ġallowed Ġwithin Ġa Ġcontract . Ċ Ġ* ĠThis Ġfunction Ġwill Ġverify Ġallowed Ġcommands , Ġor Ġthrow Ġan Ġ[ IllegalArgumentException ] Ġexception Ġif Ġthe Ġcommand Ġis Ġnot Ġallowed . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġ[ Verified Command Data ] Ġtype . Ċ Ġ* Ġ@ param Ġcommand Class ĠThe Ġclass Ġof Ġthe Ġallowed Ġcommands . Ċ Ġ* Ġ@ param Ġallowed Ġthe Ġallowed Ġcommands . Ċ Ġ* Ġ@ throws Ġ[ IllegalArgumentException ] Ġif Ġthe Ġcommand Ġis Ġnot Ġallowed . Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠVerified Command Data > ĠLed ger Transaction . allow Commands ( command Class : ĠClass < T >, Ġvar arg Ġallowed : ĠClass < out ĠT >) Ġ{ ĊĠĠĠ Ġval Ġcommand Ġ= Ġcommands . require Single Command ( command Class ) ĊĊĠĠĠ Ġif Ġ( command . value . java Class Ġ! in Ġallowed ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Un re cogn ised Ġcommand : Ġ${ command . value . java Class . canonical Name }. ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcommand . value . verify ( this , Ġcommand . sign ers . toSet ()) Ċ } Ċ Ċ /** Ċ Ġ* ĠProvides Ġutility Ġfor Ġ[ Verified Command Data ] Ġimplementations , Ġspecifying Ġwhich Ġcommands Ġare Ġallowed Ġwithin Ġa Ġcontract . Ċ Ġ* ĠThis Ġfunction Ġwill Ġverify Ġallowed Ġcommands , Ġor Ġthrow Ġan Ġ[ IllegalArgumentException ] Ġexception Ġif Ġthe Ġcommand Ġis Ġnot Ġallowed . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT ĠThe Ġunderlying Ġ[ Verified Command Data ] Ġtype . Ċ Ġ* Ġ@ param Ġallowed Ġthe Ġallowed Ġcommands . Ċ Ġ* Ġ@ throws Ġ[ IllegalArgumentException ] Ġif Ġthe Ġcommand Ġis Ġnot Ġallowed . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠVerified Command Data > ĠLed ger Transaction . allow Commands ( var arg Ġallowed : ĠClass < out ĠT >) Ġ{ ĊĠĠĠ Ġreturn Ġallow Commands ( T :: class . java , Ġ* allowed ) Ċ } Ċ