package Ġnet . cord a . contracts . universal Ċ Ċ import Ġnet . cord a . testing . D UMMY _ NOT ARY Ċ import Ġnet . cord a . testing . transaction Ċ import Ġorg . junit . Ignore Ċ import Ġorg . junit . Test Ċ import Ġjava . time . Instant Ċ Ċ class ĠFX Swap Ġ{ ĊĊĠĠĠ Ġval ĠTEST _ TX _ TIME _ 1 : ĠInstant Ġget () Ġ= ĠInstant . parse (" 2 0 1 7 - 0 9 - 0 2 T 1 2 : 0 0 : 0 0 . 0 0 Z ") ĊĠĠĠ Ġval ĠTEST _ TX _ TIME _ TOO _ EAR LY : ĠInstant Ġget () Ġ= ĠInstant . parse (" 2 0 1 7 - 0 8 - 3 1 T 1 2 : 0 0 : 0 0 . 0 0 Z ") ĊĊĠĠĠ Ġval Ġcontract Ġ= Ġarrange Ġ{ ĊĠĠĠĠĠĠĠ Ġactions Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( acme Cor p Ġor Ġhigh Street Bank ) Ġmay Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" execute ". given That ( after (" 2 0 1 7 - 0 9 - 0 1 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhigh Street Bank . ow es ( acme Cor p , Ġ 1 0 7 0 . K , ĠEUR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġac me Cor p . ow es ( high Street Bank , Ġ 1 . M , ĠUSD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtransfer 1 Ġ= Ġarrange Ġ{ Ġhigh Street Bank . ow es ( acme Cor p , Ġ 1 0 7 0 . K , ĠEUR ) Ġ} ĊĠĠĠ Ġval Ġtransfer 2 Ġ= Ġarrange Ġ{ Ġac me Cor p . ow es ( high Street Bank , Ġ 1 . M , ĠUSD ) Ġ} ĊĊĠĠĠ Ġval Ġout State 1 Ġ= ĠUniversal Contract . State ( listOf ( D UMMY _ NOT ARY ), Ġtransfer 1 ) ĊĠĠĠ Ġval Ġout State 2 Ġ= ĠUniversal Contract . State ( listOf ( D UMMY _ NOT ARY ), Ġtransfer 2 ) ĊĊĠĠĠ Ġval Ġtransfer Bad 1 Ġ= Ġarrange Ġ{ Ġhigh Street Bank . ow es ( acme Cor p , Ġ 1 0 7 0 . K , ĠUSD ) Ġ} Ġ// Ġwrong Ġcurrency ĊĠĠĠ Ġval Ġtransfer Bad 2 Ġ= Ġarrange Ġ{ Ġac me Cor p . ow es ( high Street Bank , Ġ 9 0 0 . K , ĠUSD ) Ġ} Ġ// Ġwrong Ġamount ĊĠĠĠ Ġval Ġtransfer Bad 3 Ġ= Ġarrange Ġ{ Ġhigh Street Bank . ow es ( high Street Bank , Ġ 1 0 7 0 . K , ĠEUR ) Ġ} Ġ// Ġwrong Ġparty ĊĊĠĠĠ Ġval Ġout State Bad 1 Ġ= ĠUniversal Contract . State ( listOf ( D UMMY _ NOT ARY ), Ġtransfer Bad 1 ) ĊĠĠĠ Ġval Ġout State Bad 2 Ġ= ĠUniversal Contract . State ( listOf ( D UMMY _ NOT ARY ), Ġtransfer Bad 2 ) ĊĠĠĠ Ġval Ġout State Bad 3 Ġ= ĠUniversal Contract . State ( listOf ( D UMMY _ NOT ARY ), Ġtransfer Bad 3 ) ĊĊĠĠĠ Ġval Ġin State Ġ= ĠUniversal Contract . State ( listOf ( D UMMY _ NOT ARY ), Ġcontract ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` issue Ġ- Ġsignature `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġin State Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Window ( TEST _ TX _ TIME _ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" transaction Ġhas Ġa Ġsingle Ġcommand " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( acme Cor p . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Issue () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" the Ġtransaction Ġis Ġsigned Ġby Ġall Ġli able Ġparties " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( high Street Bank . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Issue () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" the Ġtransaction Ġis Ġsigned Ġby Ġall Ġli able Ġparties " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( high Street Bank . own ing Key , Ġac me Cor p . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Issue () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` execute `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġin State Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Window ( TEST _ TX _ TIME _ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( high Street Bank . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Action (" some Ġundefined Ġname ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" action Ġmust Ġbe Ġdefined " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( high Street Bank . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Action (" execute ") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` execute Ġ- Ġreversed Ġorder `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġin State Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Window ( TEST _ TX _ TIME _ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( high Street Bank . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Action (" some Ġundefined Ġname ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" action Ġmust Ġbe Ġdefined " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( high Street Bank . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Action (" execute ") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` execute Ġ- Ġnot Ġauthorized `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġin State Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Window ( TEST _ TX _ TIME _ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( m om And Pop . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Action (" execute ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" condition Ġmust Ġbe Ġmet " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` execute Ġ- Ġbefore Ġmat urity `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġin State Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Window ( TEST _ TX _ TIME _ TOO _ EAR LY ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( acme Cor p . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Action (" execute ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" condition Ġmust Ġbe Ġmet " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` execute Ġ- Ġout State Ġmismatch Ġ 1 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġin State Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Window ( TEST _ TX _ TIME _ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( acme Cor p . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Action (" execute ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" output Ġstate Ġmust Ġmatch Ġaction Ġresult Ġstate " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` execute Ġ- Ġout State Ġmismatch Ġ 2 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġin State Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State Bad 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Window ( TEST _ TX _ TIME _ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( acme Cor p . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Action (" execute ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" output Ġstates Ġmust Ġmatch Ġaction Ġresult Ġstate " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` execute Ġ- Ġout State Ġmismatch Ġ 3 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġin State Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State Bad 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Window ( TEST _ TX _ TIME _ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( acme Cor p . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Action (" execute ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" output Ġstates Ġmust Ġmatch Ġaction Ġresult Ġstate " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` execute Ġ- Ġout State Ġmismatch Ġ 4 `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Ġ{ Ġin State Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġout State Bad 3 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Window ( TEST _ TX _ TIME _ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( acme Cor p . own ing Key ) Ġ{ ĠUniversal Contract . Commands . Action (" execute ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" output Ġstates Ġmust Ġmatch Ġaction Ġresult Ġstate " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Ignore ĊĠĠĠ Ġfun Ġ` pretty Ġprint `() Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln Ġ( Ġpretty Print ( contract ) Ġ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ