package Ġcom . mult il ateral ag re ements . contracts . tests Ċ Ċ import Ġcom . mult il ateral ag re ements . contracts .* Ċ import Ġnet . cord a . core . contracts .* Ċ import Ġnet . cord a . core . identity . C ord a X 5 0 0 Name Ċ import Ġnet . cord a . serialization . internal . model . PropertyName Ċ import Ġnet . cord a . testing . common . internal . test Network Parameters Ċ import Ġnet . cord a . testing . core . Test Identity Ċ import Ġnet . cord a . testing . node . Mock Services Ċ import Ġnet . cord a . testing . node . ledger Ċ import Ġnet . cord a . testing . node . make Test Identity Service Ċ import Ġorg . junit . Test Ċ import Ġjava . time . Instant ĊĊ Ċ class ĠProposal Contract Tests (){ ĊĠĠĠ Ġprivate Ġval Ġledger Services Ġ= ĠMock Services ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc ord app Packages Ġ= ĠlistOf (" com . mult il ateral ag re ements . contracts "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Identity Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" Test Identity ", Ġ"", Ġ" GB ")), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentity Service Ġ= Ġmake Test Identity Service (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Parameters Ġ= Ġtest Network Parameters ( minimum Platform Version Ġ= Ġ 4 )) ĊĊĠĠĠ Ġprivate Ġval Ġparty 1 Ġ= ĠTest Identity ( C ord a X 5 0 0 Name . parse (" O = party 1 , L = L ondon , C = GB ")) ĊĠĠĠ Ġprivate Ġval Ġparty 2 Ġ= ĠTest Identity ( C ord a X 5 0 0 Name . parse (" O = party 2 , L = New Y ork , C = US ")) ĊĠĠĠ Ġprivate Ġval Ġparty 3 Ġ= ĠTest Identity ( C ord a X 5 0 0 Name . parse (" O = party 3 , L = Z ur ich , C = CH ")) ĊĠĠĠ Ġprivate Ġval Ġother Identity Ġ= ĠTest Identity ( C ord a X 5 0 0 Name . parse (" O = other Identity , L = Par is , C = FR ")) ĊĊĊĠĠĠ Ġprivate Ġval Ġmock Agreement State Ġ= ĠAgreement State ( agreement Details Ġ= Ġ" This Ġis Ġa Ġmock Ġagreement ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 1 Ġ= Ġparty 1 . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 2 Ġ= Ġparty 2 . party ) ĊĊĊĠĠĠ Ġprivate Ġval Ġmock Agreement State _ 2 Ġ= ĠAgreement State ( agreement Details Ġ= Ġ" This Ġis Ġa Ġmock Ġagreement Ġbut Ġwith Ġdifferent Ġdetails ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 1 Ġ= Ġparty 1 . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 2 Ġ= Ġparty 2 . party ) ĊĊĠĠĠ Ġprivate Ġval Ġmock Agreement State _ 3 Ġ= ĠAgreement State ( agreement Details Ġ= Ġ" This Ġis Ġa Ġmock Ġagreement Ġbut Ġwith Ġdifferent Ġdetails ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 1 Ġ= Ġparty 1 . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 2 Ġ= Ġparty 2 . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠAgreement State Status . AG RE ED ) ĊĊĊĊĊĠĠĠ Ġprivate Ġval Ġcurrent Agreement State Draft Ġ= ĠAgreement State ( agreement Details Ġ= Ġ" This Ġis Ġcurrent ĠAgreement State with ĠStatus ĠDraft ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 1 Ġ= Ġparty 1 . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 2 Ġ= Ġparty 2 . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠAgreement State Status . DR AFT ) ĊĊĠĠĠ Ġprivate Ġval Ġnew Agreement State Ag reed Ġ= ĠAgreement State ( agreement Details Ġ= Ġ" This Ġis Ġnew ĠAgreement State Ġwith Ġstatus ĠA GRE ED ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 1 Ġ= Ġparty 1 . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 2 Ġ= Ġparty 2 . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠAgreement State Status . AG RE ED ) ĊĊĠĠĠ Ġprivate Ġval Ġalternative New Agreement State Ag reed Ġ= ĠAgreement State ( agreement Details Ġ= Ġ" This Ġis Ġan ĠAltern ative Ġnew ĠAgreement State Ġwith Ġstatus ĠA GRE ED ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 1 Ġ= Ġparty 1 . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty 2 Ġ= Ġparty 2 . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠAgreement State Status . AG RE ED ) ĊĊĊĠĠĠ Ġ// Ġtodo : Ġadd Ġextra Ġdummy Ġstates Ġas Ġoutputs Ġinput Ġto Ġtest Ġfiltering Ġout Ġof Ġproposal Ġstates ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` one Ġproposal Contract Ġcommand Ġonly ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠCreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtwo Ġcommands Ġ- Ġsame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġexactly Ġone ĠPro pose ĠContract Ġcommand ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtwo Ġcommands , Ġbut Ġdifferent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Final ise ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġexactly Ġone ĠPro pose ĠContract Ġcommand ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` pro pose Ġ- Ġno Ġinputs ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġone Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġno ĠProposal State Ġinputs ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` pro pose Ġ- Ġoutputs ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtwo Ġoutputs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġa Ġsingle Ġoutput Ġof Ġtype ĠProposal State ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` pro pose Ġ- Ġreference Ġstates ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġreference Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġone Ġexisting ĠAgreement State Ġas Ġa Ġreference Ġstate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtwo Ġreference Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference ( Agreement Contract . ID , Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġone Ġexisting ĠAgreement State Ġas Ġa Ġreference Ġstate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreference Ġstate Ġdoesn 't Ġmatch Ġcurrent State Pointer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference ( Agreement Contract . ID , Ġmock Agreement State _ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` pro pose Ġ- Ġsign ers `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpro poser Ġand Ġresponder Ġsign ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( party 1 . publicKey , party 2 . publicKey ), ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresponder Ġsigns Ġbut Ġnot Ġpro poser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" Pro poser Ġshould Ġsign Ġthe Ġtransaction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( other Identity . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" Pro poser Ġshould Ġsign Ġthe Ġtransaction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` final ise Ġ- Ġall ` (){ ĊĊĠĠĠĠĠĠĠ Ġ// Ġnote : Ġdoes Ġnot Ġrefer Ġto ĠAgre ements Ġstate ĠA part Ġfrom Ġinitial Ġset Ġup Ġto Ġget Ġa Ġstat eref . Ġ ĠAgreement State Ġ- ĠProposal State Ġinteraction Ġwill Ġbe Ġtested Ġin ĠAgreement Contract Tests ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Current ĠAgreement State ĠLabel ", Ġcurrent Agreement State Draft ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Current ĠAgreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġnew Agreement State Ag reed , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġup ĠProposal State Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Current ĠAgreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġ" Proposal State ĠLabel ", Ġ Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State State And Ref Ġ= Ġretrieve Output State And Ref ( Proposal State :: class . java , Ġ" Proposal State ĠLabel ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠReady State Ġon ĠLed ger ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġready State Ġ= ĠReady State ( party 2 . party , Ġproposal State State And Ref . ref , Ġagreement State State And Ref . ref , ĠInstant . MAX , Ġproposal State . pro poser , Ġproposal State . respon ders ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID ," Ready State ĠLabel ", Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhappy Ġcase Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput (" Ready State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( party 1 . publicKey ), ĠProposal Contract . Commands . Final ise ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno ĠReady State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġnew Agreement State Ag reed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( party 1 . publicKey ), ĠProposal Contract . Commands . Final ise ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis .` fails Ġwith ` (" Each Ġresponder Ġmust Ġhave Ġa Ġready State Ġwhich Ġthey Ġown ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReady State Ġowned Ġby Ġwrong Ġparty ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġready State Wrong Party Ġ= ĠReady State ( party 1 . party , Ġproposal State State And Ref . ref , Ġagreement State State And Ref . ref , ĠInstant . MAX , Ġproposal State . pro poser , Ġproposal State . respon ders ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID ," Ready State ĠWrong ĠParty ĠLabel ", Ġready State Wrong Party ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput (" Ready State ĠWrong ĠParty ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġnew Agreement State Ag reed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( party 1 . publicKey ), ĠProposal Contract . Commands . Final ise ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis .` fails Ġwith ` (" Each Ġresponder Ġmust Ġhave Ġa Ġready State Ġwhich Ġthey Ġown ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReady State Ġhas Ġwrong Ġproposal State Ref Ġ- Ġwon 't Ġallow Ġcreation Ġof Ġinconsistent Ġready State ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġready State Wrong Proposal State Ref Ġ= ĠReady State ( party 1 . party , Ġagreement State State And Ref . ref , Ġagreement State State And Ref . ref , ĠInstant . MAX , Ġproposal State . pro poser , Ġproposal State . respon ders ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID ," Ready State ĠWrong Ġproposal State Ref ĠLabel ", Ġready State Wrong Proposal State Ref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis .` fails Ġwith ` (" Resolved Ġproposal State Pointer Ġmust Ġmatch ĠReference ĠState ĠState And Ref ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSignature s Ġ- no ĠParty Ġin Ġpro poser / respon ders Ġsigns ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput (" Ready State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( other Identity . publicKey ), ĠProposal Contract . Commands . Final ise ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" The Ġpro poser Ġor Ġany Ġresponder Ġshould Ġsign Ġthe Ġtransaction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` cancel Ġ- Ġinputs ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Cancel ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtwo Ġinputs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Cancel ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġa Ġsingle ĠProposal State Ġinputs ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnon ĠProposal State Ġinput Ġ+ Ġproposal Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Mock Contract . ID , ĠMock State ( party 1 . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Cancel ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` cancel Ġ- Ġoutputs ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Cancel ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnon ĠProposal State Ġoutput Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference ( Agreement Contract . ID , Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Mock Contract . ID , Mock State ( party 1 . party ) Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Cancel ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠProposal State Ġoutput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference ( Agreement Contract . ID , Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Cancel ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġno Ġoutput Ġof Ġtype ĠProposal State ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` cancel Ġ- Ġsignatures ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Cancel ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsigner Ġis Ġa Ġresponder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference ( Agreement Contract . ID , Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( other Identity . publicKey , ĠProposal Contract . Commands . Cancel ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" The Ġpro poser Ġshould Ġsign Ġthe Ġtransaction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsigner Ġis Ġnot Ġpro poser Ġor Ġresponder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference ( Agreement Contract . ID , Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( other Identity . publicKey , ĠProposal Contract . Commands . Cancel ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" The Ġpro poser Ġshould Ġsign Ġthe Ġtransaction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` consent Ġ- Ġno Ġinputs ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġup ĠProposal State Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġ" Proposal State ĠLabel ", Ġ Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State State And Ref Ġ= Ġretrieve Output State And Ref ( Proposal State :: class . java , Ġ" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġready State Ġ= ĠReady State ( party 2 . party , Ġproposal State State And Ref . ref , Ġagreement State State And Ref . ref , ĠInstant . MAX , Ġproposal State . pro poser , Ġproposal State . respon ders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġone Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , readyState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġno ĠReady State Ġinputs ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` consent Ġ- Ġoutputs ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġup ĠProposal State Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġ" Proposal State ĠLabel ", Ġ Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State State And Ref Ġ= Ġretrieve Output State And Ref ( Proposal State :: class . java , Ġ" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġready State Ġ= ĠReady State ( party 2 . party , Ġproposal State State And Ref . ref , Ġagreement State State And Ref . ref , ĠInstant . MAX , Ġproposal State . pro poser , Ġproposal State . respon ders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtwo Ġoutputs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġa Ġsingle Ġoutput Ġof Ġtype ĠReady State ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` consent Ġ- Ġreference Ġstates ` (){ Ċ Ċ // ĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( mock Agreement State , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) Ċ // ĠĠĠĠĠĠĠ Ġval Ġproposal State _ 2 Ġ= ĠProposal State ( mock Agreement State _ 2 , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) Ċ // ĠĠĠĠĠĠĠ Ġval Ġready State Ġ= ĠReady State ( party 2 . party , Ġproposal State , ĠInstant . now (), Ġproposal State . pro poser , Ġproposal State . respon ders Ġ) ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State _ 2 Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 2 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġup ĠProposal State Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġ" Proposal State ĠLabel ", Ġ Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State State And Ref Ġ= Ġretrieve Output State And Ref ( Proposal State :: class . java , Ġ" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġready State Ġ= ĠReady State ( party 2 . party , Ġproposal State State And Ref . ref , Ġagreement State State And Ref . ref , ĠInstant . MAX , Ġproposal State . pro poser , Ġproposal State . respon ders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġreference Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġone Ġexisting ĠProposal State Ġas Ġa Ġreference Ġstate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtwo ĠProposal Ġreference Ġstates ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference ( Proposal Contract . ID , Ġproposal State _ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġone Ġexisting ĠProposal State Ġas Ġa Ġreference Ġstate ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtwo Ġdifferent Ġreference Ġstates ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreferenced ĠProposal State Ġdoesn 't Ġmatch Ġhash Ġin ĠReady State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference ( Proposal Contract . ID , Ġproposal State _ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` consent Ġ- Ġsign ers ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State _ 2 Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 2 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġup ĠProposal State Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġ" Proposal State ĠLabel ", Ġ Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State State And Ref Ġ= Ġretrieve Output State And Ref ( Proposal State :: class . java , Ġ" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġready State Ġ= ĠReady State ( party 2 . party , Ġproposal State State And Ref . ref , Ġagreement State State And Ref . ref , ĠInstant . MAX , Ġproposal State . pro poser , Ġproposal State . respon ders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġparty 1 Ġsigns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" Owner Ġshould Ġsign Ġthe Ġtransaction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġonly Ġparty Ġwho Ġis Ġno Ġpro poser Ġor Ġin Ġrespon ders Ġsigns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( other Identity . publicKey , ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" Owner Ġshould Ġsign Ġthe Ġtransaction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġowner Ġsigns Ġwith Ġanother Ġparty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( party 2 . publicKey , Ġother Identity . publicKey ), ĠProposal Contract . Commands . Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` revoke Consent Ġ- Ġinputs ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State _ 2 Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 2 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġup ĠProposal State Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġ" Proposal State ĠLabel ", Ġ Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State State And Ref Ġ= Ġretrieve Output State And Ref ( Proposal State :: class . java , Ġ" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġready State Ġ= ĠReady State ( party 2 . party , Ġproposal State State And Ref . ref , Ġagreement State State And Ref . ref , ĠInstant . MAX , Ġproposal State . pro poser , Ġproposal State . respon ders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Re voke Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtwo Ġinputs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Re voke Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġbe Ġa Ġsingle ĠReady State Ġinput ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnon ĠProposal State Ġinput Ġ+ Ġproposal Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Mock Contract . ID , ĠMock State ( party 1 . party )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Re voke Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` revoke Consent Ġ- Ġoutputs ` (){ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State _ 2 Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 2 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġup ĠProposal State Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġ" Proposal State ĠLabel ", Ġ Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State State And Ref Ġ= Ġretrieve Output State And Ref ( Proposal State :: class . java , Ġ" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġready State Ġ= ĠReady State ( party 2 . party , Ġproposal State State And Ref . ref , Ġagreement State State And Ref . ref , ĠInstant . MAX , Ġproposal State . pro poser , Ġproposal State . respon ders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Re voke Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġoutput Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Re voke Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" There Ġshould Ġno Ġoutput Ġof Ġtype ĠReady State ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` revoke Consent Ġ- Ġsign ers `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġup ĠAgreement ĠState Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Agreement Contract . ID , Ġ" Agreement State ĠLabel ", Ġmock Agreement State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠAgreement Contract . Commands . Create ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet ĠStatic Pointer Ġto Ġref Ġstate Ġand Ġcreate Ġthe ĠProposal State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State State And Ref Ġ= Ġretrieve Output State And Ref ( Agreement State :: class . java , Ġ" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagreement State Static Pointer Ġ= ĠStatic Pointer < Agreement State >( agreement State State And Ref . ref , ĠAgreement State :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 3 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State _ 2 Ġ= ĠProposal State ( agreement State State And Ref . ref , Ġmock Agreement State _ 2 , ĠInstant . now (), Ġparty 1 . party , ĠlistOf ( party 2 . party )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġup ĠProposal State Ġon ĠLed ger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference (" Agreement State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Proposal Contract . ID , Ġ" Proposal State ĠLabel ", Ġ Ġproposal State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 1 . publicKey , ĠProposal Contract . Commands . Pro pose ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State State And Ref Ġ= Ġretrieve Output State And Ref ( Proposal State :: class . java , Ġ" Proposal State ĠLabel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproposal State Static Pointer Ġ= ĠStatic Pointer < Proposal State >( proposal State State And Ref . ref , ĠProposal State :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġready State Ġ= ĠReady State ( party 2 . party , Ġproposal State State And Ref . ref , Ġagreement State State And Ref . ref , ĠInstant . MAX , Ġproposal State . pro poser , Ġproposal State . respon ders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġverifies ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( party 2 . publicKey , ĠProposal Contract . Commands . Re voke Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsigned Ġby Ġsome body Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( other Identity . publicKey , ĠProposal Contract . Commands . Re voke Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fails With (" The Ġowner Ġshould Ġsign Ġthe Ġtransaction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Proposal Contract . ID , Ġready State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( party 2 . publicKey , Ġother Identity . publicKey ), ĠProposal Contract . Commands . Re voke Consent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } ĊĊĊĊĊĊĊĊĊĊĊĊĊĊĊĊ ĊĊĊĊĊĊĊĊ ĊĊĊĊ ĊĊĊĊĊ