package Ġnet . cord a . samples . supply chain . contracts Ċ Ċ import Ġnet . cord a . core . contracts .* Ċ import Ġnet . cord a . core . contracts . Requirements . using Ċ import Ġnet . cord a . core . transactions . Ledger Transaction Ċ import Ġnet . cord a . samples . supply chain . states . Order State Ċ import Ġnet . cord a . samples . supply chain . states . Trans State Ċ Ċ class ĠOrder And Trans Contract Ġ: ĠContract Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID Ġ= Ġ" net . cord a . samples . supply chain . contracts . Order And Trans Contract " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠA Ġtransaction Ġis Ġconsidered Ġvalid Ġif Ġthe Ġverify () Ġfunction Ġof Ġthe Ġcontract Ġof Ġeach Ġof Ġthe Ġtransaction 's Ġinput ĊĠĠĠ Ġ// Ġand Ġoutput Ġstates Ġdoes Ġnot Ġthrow Ġan Ġexception . ĊĠĠĠ Ġoverride Ġfun Ġverify ( tx : ĠLed ger Transaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcmd Ġ= Ġtx . commands . require Single Command < Commands >() ĊĠĠĠĠĠĠĠ Ġ" There Ġis Ġexactly Ġone Ġoutput " Ġusing Ġ( tx . output States . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ" There Ġis Ġexactly Ġone Ġcommand " Ġusing Ġ( tx . commands . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ" There Ġis Ġno Ġtimestamp " Ġusing Ġ( tx . time Window Ġ== Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( cmd . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Order Ġ-> Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġare Ġno Ġinputs " Ġusing Ġ( tx . input States . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsingle Ġoutput Ġis Ġof Ġtype ĠOrder State " Ġusing Ġ( tx . outputs OfType < Order State >(). size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġtx . outputs OfType < Order State >(). single () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġbuy er Ġand Ġsell er Ġare Ġthe Ġpro poser Ġand Ġthe Ġpro po see " Ġusing Ġ( set Of ( output . buyer , Ġoutput . seller ) Ġ== Ġset Of ( output . pro poser , Ġoutput . pro po see )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġstatus Ġis Ġinitial " Ġusing ( output . status Ġ== Ġ" Initial ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġbuy er Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . buyer . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsell er Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . seller . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Load Ġ-> Ġrequire That Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġis Ġexactly Ġone Ġinput " Ġusing Ġ( tx . input States . size Ġ== Ġ 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsingle Ġinput Ġis Ġof Ġtype ĠOrder State " Ġusing Ġ( tx . inputs OfType < Order State >(). size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġare Ġno Ġinputs " Ġusing Ġ( tx . input States . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsingle Ġoutput Ġis Ġof Ġtype ĠTrans State " Ġusing Ġ( tx . outputs OfType < Trans State >(). size Ġ== Ġ 1 ) Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġtx . inputs OfType < Order State >(). single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġtx . outputs OfType < Trans State >(). single () Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġgood Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( output . good Ġ== Ġinput . good ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsell er Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( input . seller Ġ== Ġoutput . seller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġstatus Ġis ĠLoad " Ġusing ( output . status Ġ== Ġ" Load ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġdeliver Ġis Ġnot Ġempty Ġin Ġthe Ġoutput " Ġusing Ġ( output . deliver != null ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsell er Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . seller . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġdeliver Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . deliver . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Add It iner ary Ġ-> Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġis Ġexactly Ġone Ġinput " Ġusing Ġ( tx . input States . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsingle Ġinput Ġis Ġof Ġtype ĠTrans State " Ġusing Ġ( tx . inputs OfType < Trans State >(). size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsingle Ġoutput Ġis Ġof Ġtype ĠTrans State " Ġusing Ġ( tx . outputs OfType < Trans State >(). size Ġ== Ġ 1 ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġtx . outputs OfType < Trans State >(). single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġtx . inputs OfType < Trans State >(). single () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġgood Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( output . good Ġ== Ġinput . good ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġbuy er Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( input . buyer Ġ== Ġoutput . buyer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsell er Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( input . seller Ġ== Ġoutput . seller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġit iner ary Ġnow Ġhas Ġa Ġexpected Ġtime " Ġusing Ġ( output . it iner ary . expected Time != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġinput Ġstatus Ġis ĠAdd It iner ary " Ġusing ( input . status Ġ== Ġ" Load ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġoutput Ġstatus Ġis ĠAdd It iner ary " Ġusing ( output . status Ġ== Ġ" Add It iner ary ") ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsell er Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . seller . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġdeliver Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . deliver . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Update Ġ-> Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġis Ġexactly Ġone Ġinput " Ġusing Ġ( tx . input States . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsingle Ġinput Ġis Ġof Ġtype ĠOrder State " Ġusing Ġ( tx . inputs OfType < Order State >(). size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsingle Ġoutput Ġis Ġof Ġtype ĠOrder State " Ġusing Ġ( tx . outputs OfType < Order State >(). size Ġ== Ġ 1 ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġtx . outputs OfType < Order State >(). single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġtx . inputs OfType < Order State >(). single () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġgood Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( output . good Ġ== Ġinput . good ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġbuy er Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( input . buyer Ġ== Ġoutput . buyer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsell er Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( input . seller Ġ== Ġoutput . seller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġit iner ary Ġnow Ġhas Ġan Ġexpected Ġtime " Ġusing Ġ( output . it iner ary . expected Time != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġinput Ġstatus Ġis ĠUpdate " Ġusing ( input . status Ġ== Ġ" Initial ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġoutput Ġstatus Ġis ĠUpdate " Ġusing ( output . status Ġ== Ġ" Updated ") ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġbuy er Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . buyer . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsell er Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . seller . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Ar rive Ġ-> Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġis Ġexactly Ġone Ġinput " Ġusing Ġ( tx . input States . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsingle Ġinput Ġis Ġof Ġtype ĠTrans State " Ġusing Ġ( tx . inputs OfType < Trans State >(). size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsingle Ġoutput Ġis Ġof Ġtype ĠTrans State " Ġusing Ġ( tx . outputs OfType < Trans State >(). size Ġ== Ġ 1 ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġtx . outputs OfType < Trans State >(). single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġtx . inputs OfType < Trans State >(). single () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġgood Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( output . good Ġ== Ġinput . good ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġbuy er Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( input . buyer Ġ== Ġoutput . buyer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsell er Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( input . seller Ġ== Ġoutput . seller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġit iner ary Ġnow Ġhas Ġan Ġexpected Ġtime " Ġusing Ġ( output . it iner ary . expected Time != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġit iner ary Ġnow Ġhas Ġan Ġactual Ġtime " Ġusing Ġ( output . it iner ary . actual Time != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġinput Ġstatus Ġis ĠAdd It iner ary " Ġusing ( input . status Ġ== Ġ" Add It iner ary ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġoutput Ġstatus Ġis ĠAr rival " Ġusing ( output . status Ġ== Ġ" Arrival ") ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsell er Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . seller . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġdeliver Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . deliver . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Deliver Ġ-> Ġrequire That Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" There Ġis Ġexactly Ġone Ġinput " Ġusing Ġ( tx . input States . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsingle Ġinput Ġis Ġof Ġtype ĠOrder State " Ġusing Ġ( tx . inputs OfType < Order State >(). size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsingle Ġoutput Ġis Ġof Ġtype ĠOrder State " Ġusing Ġ( tx . outputs OfType < Order State >(). size Ġ== Ġ 1 ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġtx . outputs OfType < Order State >(). single () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġtx . inputs OfType < Order State >(). single () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġgood Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( output . good Ġ== Ġinput . good ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġbuy er Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( input . buyer Ġ== Ġoutput . buyer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsell er Ġis Ġun modified Ġin Ġthe Ġoutput " Ġusing Ġ( input . seller Ġ== Ġoutput . seller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġit iner ary Ġnow Ġhas Ġan Ġexpected Ġtime " Ġusing Ġ( output . it iner ary . expected Time != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġit iner ary Ġnow Ġhas Ġan Ġactual Ġtime " Ġusing Ġ( output . it iner ary . actual Time != null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġinput Ġstatus Ġis ĠUpdated " Ġusing ( input . status Ġ== Ġ" Updated ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġoutput Ġstatus Ġis ĠComplete " Ġusing ( output . status Ġ== Ġ" Completed ") ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġbuy er Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . buyer . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġsell er Ġis Ġa Ġrequired Ġsigner " Ġusing Ġ( cmd . sign ers . contains ( output . seller . own ing Key )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġrequire ( false ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unsupported Ġcommand " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠUsed Ġto Ġindicate Ġthe Ġtransaction 's Ġintent . ĊĠĠĠ Ġsealed Ġclass ĠCommands Ġ: ĠType Only Command Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠOrder Ġ: ĠCommands () ĊĠĠĠĠĠĠĠ Ġclass ĠLoad Ġ: ĠCommands () ĊĠĠĠĠĠĠĠ Ġclass ĠAdd It iner ary Ġ: ĠCommands () ĊĠĠĠĠĠĠĠ Ġclass ĠUpdate : ĠCommands () ĊĠĠĠĠĠĠĠ Ġclass ĠAr rive : ĠCommands () ĊĠĠĠĠĠĠĠ Ġclass ĠDel iver : ĠCommands () ĊĠĠĠ Ġ} Ċ } ĊĊĊ