package Ġnet . cord a . contracts Ċ Ċ import Ġnet . cord a . contracts . asset .* Ċ import Ġnet . cord a . contracts . testing . fill With Some Test Cash Ċ import Ġnet . cord a . core . contracts .* Ċ import Ġnet . cord a . core . crypto . Party Ċ import Ġnet . cord a . core . crypto . Secure Hash Ċ import Ġnet . cord a . core . crypto . composite Ċ import Ġnet . cord a . core . days Ċ import Ġnet . cord a . core . node . services . Vault Ċ import Ġnet . cord a . core . node . services . Vault Service Ċ import Ġnet . cord a . core . seconds Ċ import Ġnet . cord a . core . transactions . Ledger Transaction Ċ import Ġnet . cord a . core . transactions . Signed Transaction Ċ import Ġnet . cord a . core . utilities . D UMMY _ NOT ARY Ċ import Ġnet . cord a . core . utilities . D UMMY _ NOT ARY _ KEY Ċ import Ġnet . cord a . core . utilities . D UMMY _ PUB KEY _ 1 Ċ import Ġnet . cord a . core . utilities . TEST _ TX _ TIME Ċ import Ġnet . cord a . node . utilities . configure Database Ċ import Ġnet . cord a . node . utilities . database Transaction Ċ import Ġnet . cord a . testing .* Ċ import Ġnet . cord a . testing . node . Mock Services Ċ import Ġnet . cord a . testing . node . make Test DataSource Properties Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ import Ġjava . time . Instant Ċ import Ġjava . util .* Ċ import Ġkotlin . test . assert Fails With Ċ import Ġkotlin . test . assertTrue Ċ Ċ // ĠTODO : ĠThe Ġgenerate Ġfunctions Ġaren 't Ġtested Ġby Ġthese Ġtests : Ġadd Ġthem . Ċ Ċ interface ĠI Com mercial Paper Test Template Ġ{ ĊĠĠĠ Ġfun Ġget Paper (): ĠI Com mercial Paper State ĊĠĠĠ Ġfun Ġget Issue Command ( not ary : ĠParty ): ĠCommand Data ĊĠĠĠ Ġfun Ġget Re deem Command ( not ary : ĠParty ): ĠCommand Data ĊĠĠĠ Ġfun Ġget Move Command (): ĠCommand Data Ċ } Ċ Ċ class ĠJava Com mercial Paper Test () Ġ: ĠI Com mercial Paper Test Template Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Paper (): ĠI Com mercial Paper State Ġ= ĠCom mercial Paper . State ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠME GA _ COR P . ref ( 1 2 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠME GA _ COR P _ PUB KEY , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 0 . DO LL ARS Ġ` iss ued Ġby ` ĠME GA _ COR P . ref ( 1 2 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTEST _ TX _ TIME Ġ+ Ġ 7 . days ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Issue Command ( not ary : ĠParty ): ĠCommand Data Ġ= ĠCom mercial Paper . Commands . Issue () ĊĠĠĠ Ġoverride Ġfun Ġget Re deem Command ( not ary : ĠParty ): ĠCommand Data Ġ= ĠCom mercial Paper . Commands . Re deem () ĊĠĠĠ Ġoverride Ġfun Ġget Move Command (): ĠCommand Data Ġ= ĠCom mercial Paper . Commands . Move () Ċ } Ċ Ċ class ĠKotlin Com mercial Paper Test () Ġ: ĠI Com mercial Paper Test Template Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Paper (): ĠI Com mercial Paper State Ġ= ĠCom mercial Paper . State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiss u ance Ġ= ĠME GA _ COR P . ref ( 1 2 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Ġ= ĠME GA _ COR P _ PUB KEY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġface Value Ġ= Ġ 1 0 0 0 . DO LL ARS Ġ` iss ued Ġby ` ĠME GA _ COR P . ref ( 1 2 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmat urity Date Ġ= ĠTEST _ TX _ TIME Ġ+ Ġ 7 . days ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Issue Command ( not ary : ĠParty ): ĠCommand Data Ġ= ĠCom mercial Paper . Commands . Issue () ĊĠĠĠ Ġoverride Ġfun Ġget Re deem Command ( not ary : ĠParty ): ĠCommand Data Ġ= ĠCom mercial Paper . Commands . Re deem () ĊĠĠĠ Ġoverride Ġfun Ġget Move Command (): ĠCommand Data Ġ= ĠCom mercial Paper . Commands . Move () Ċ } Ċ Ċ class ĠKotlin Com mercial Paper Legacy Test () Ġ: ĠI Com mercial Paper Test Template Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Paper (): ĠI Com mercial Paper State Ġ= ĠCom mercial Paper Legacy . State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiss u ance Ġ= ĠME GA _ COR P . ref ( 1 2 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Ġ= ĠME GA _ COR P _ PUB KEY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġface Value Ġ= Ġ 1 0 0 0 . DO LL ARS Ġ` iss ued Ġby ` ĠME GA _ COR P . ref ( 1 2 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmat urity Date Ġ= ĠTEST _ TX _ TIME Ġ+ Ġ 7 . days ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Issue Command ( not ary : ĠParty ): ĠCommand Data Ġ= ĠCom mercial Paper Legacy . Commands . Issue () ĊĠĠĠ Ġoverride Ġfun Ġget Re deem Command ( not ary : ĠParty ): ĠCommand Data Ġ= ĠCom mercial Paper Legacy . Commands . Re deem () ĊĠĠĠ Ġoverride Ġfun Ġget Move Command (): ĠCommand Data Ġ= ĠCom mercial Paper Legacy . Commands . Move () Ċ } Ċ Ċ @ RunWith ( Parameterized :: class ) Ċ class ĠCom mercial Paper Tests Generic Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġdata () Ġ= ĠlistOf ( Java Com mercial Paper Test (), ĠKotlin Com mercial Paper Test (), ĠKotlin Com mercial Paper Legacy Test ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parameterized . Parameter ĊĠĠĠ Ġlateinit Ġvar Ġthis Test : ĠI Com mercial Paper Test Template ĊĊĠĠĠ Ġval Ġissuer Ġ= ĠME GA _ COR P . ref ( 1 2 3 ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` trade Ġlifecycle Ġtest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsome Pro fits Ġ= Ġ 1 2 0 0 . DO LL ARS Ġ` iss ued Ġby ` Ġissuer ĊĠĠĠĠĠĠĠ Ġledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun verified Transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" alice 's Ġ$ 9 0 0 ", Ġ 9 0 0 . DO LL ARS . C ASH Ġ` iss ued Ġby ` Ġissuer Ġ` owned Ġby ` ĠA LIC E _ PUB KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" some Ġpro fits ", Ġsome Pro fits . STATE Ġ` owned Ġby ` ĠME GA _ COR P _ PUB KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSome ĠCP Ġis Ġissued Ġonto Ġthe Ġledger Ġby ĠMe ga Cor p . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction (" Iss u ance ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" paper ") Ġ{ Ġthis Test . get Paper () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( ME GA _ COR P _ PUB KEY ) Ġ{ Ġthis Test . get Issue Command ( D UMMY _ NOT ARY ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp ( TEST _ TX _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe ĠCP Ġis Ġsold Ġto Ġalice Ġfor Ġher Ġ$ 9 0 0 , Ġ$ 1 0 0 Ġless Ġthan Ġthe Ġface Ġvalue . ĠAt Ġ 1 0 % Ġinterest Ġafter Ġonly Ġ 7 Ġdays , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthat Ġsounds Ġa Ġbit Ġtoo Ġgood Ġto Ġbe Ġtrue ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction (" Trade ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput (" paper ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput (" alice 's Ġ$ 9 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" borrow ed Ġ$ 9 0 0 ") Ġ{ Ġ 9 0 0 . DO LL ARS . C ASH Ġ` iss ued Ġby ` Ġissuer Ġ` owned Ġby ` ĠME GA _ COR P _ PUB KEY Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" alice 's Ġpaper ") Ġ{ Ġ" paper ". output < IC om mercial Paper State >() Ġ` owned Ġby ` ĠA LIC E _ PUB KEY Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE _ PUB KEY ) Ġ{ ĠCash . Commands . Move () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( ME GA _ COR P _ PUB KEY ) Ġ{ Ġthis Test . get Move Command () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTime Ġpasses , Ġand ĠAlice Ġrede em 's Ġher ĠCP Ġfor Ġ$ 1 0 0 0 , Ġnet ting Ġa Ġ$ 1 0 0 Ġprofit . ĠMe ga Cor p Ġhas Ġreceived Ġ$ 1 2 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġas Ġa Ġsingle Ġpayment Ġfrom Ġsomewhere Ġand Ġuses Ġit Ġto Ġpay ĠAlice Ġoff , Ġkeeping Ġthe Ġremaining Ġ$ 2 0 0 Ġas Ġchange . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction (" Re de mpt ion ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput (" alice 's Ġpaper ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput (" some Ġpro fits ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠTransaction DSL < Transaction DSL Interpreter >. outputs ( alice Gets Back : ĠAmount < Iss ued < Currency >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" Alice 's Ġprofit ") Ġ{ Ġalice Gets Back . STATE Ġ` owned Ġby ` ĠA LIC E _ PUB KEY Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" Change ") Ġ{ Ġ( some Pro fits Ġ- Ġalice Gets Back ). STATE Ġ` owned Ġby ` ĠME GA _ COR P _ PUB KEY Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( ME GA _ COR P _ PUB KEY ) Ġ{ ĠCash . Commands . Move () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( AL ICE _ PUB KEY ) Ġ{ Ġthis Test . get Re deem Command ( D UMMY _ NOT ARY ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutputs ( 7 0 0 . DO LL ARS Ġ` iss ued Ġby ` Ġissuer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp ( TEST _ TX _ TIME Ġ+ Ġ 8 . days ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" received Ġamount Ġequals Ġthe Ġface Ġvalue " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutputs ( 1 0 0 0 . DO LL ARS Ġ` iss ued Ġby ` Ġissuer ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp ( TEST _ TX _ TIME Ġ+ Ġ 2 . days ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" must Ġhave Ġm ature d " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp ( TEST _ TX _ TIME Ġ+ Ġ 8 . days ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġ" paper ". output < IC om mercial Paper State >() Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" must Ġbe Ġdestroyed " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ver ifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` key Ġmismatch Ġat Ġissue `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġthis Test . get Paper () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( D UMMY _ PUB KEY _ 1 ) Ġ{ Ġthis Test . get Issue Command ( D UMMY _ NOT ARY ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp ( TEST _ TX _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" output Ġstates Ġare Ġissued Ġby Ġa Ġcommand Ġsigner " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` face Ġvalue Ġis Ġnot Ġzero `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġthis Test . get Paper (). with Face Value ( 0 . DO LL ARS Ġ` iss ued Ġby ` Ġissuer ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( ME GA _ COR P _ PUB KEY ) Ġ{ Ġthis Test . get Issue Command ( D UMMY _ NOT ARY ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp ( TEST _ TX _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" output Ġvalues Ġsum Ġto Ġmore Ġthan Ġthe Ġinputs " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` mat urity Ġdate Ġnot Ġin Ġthe Ġpast `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġthis Test . get Paper (). with Mat urity Date ( TEST _ TX _ TIME Ġ- Ġ 1 0 . days ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( ME GA _ COR P _ PUB KEY ) Ġ{ Ġthis Test . get Issue Command ( D UMMY _ NOT ARY ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp ( TEST _ TX _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" mat urity Ġdate Ġis Ġnot Ġin Ġthe Ġpast " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` issue Ġcannot Ġreplace Ġan Ġexisting Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( this Test . get Paper ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ Ġthis Test . get Paper () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( ME GA _ COR P _ PUB KEY ) Ġ{ Ġthis Test . get Issue Command ( D UMMY _ NOT ARY ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp ( TEST _ TX _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ġ` fails Ġwith ` Ġ" output Ġvalues Ġsum Ġto Ġmore Ġthan Ġthe Ġinputs " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcash Outputs To Vault ( var arg Ġoutputs : ĠTransaction State < Cash . State >): ĠPair < Ledger Transaction , ĠList < State And Ref < Cash . State >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl tx Ġ= ĠLed ger Transaction ( emptyList (), ĠlistOf (* outputs ), Ġempty List (), Ġempty List (), ĠSecure Hash . random SHA 2 5 6 (), Ġnull , Ġempty List (), Ġnull , ĠTransaction Type . General ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( l tx , Ġoutputs . map Indexed Ġ{ Ġindex , Ġstate Ġ-> ĠState And Ref ( state , ĠState Ref ( l tx . id , Ġindex )) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠUnit Ġtest Ġrequires Ġtwo Ġseparate ĠDatabase Ġinstances Ġto Ġrepresent Ġeach Ġof Ġthe Ġtwo ĊĠĠĠĠ Ġ* Ġ Ġtransaction Ġparticipants Ġ( en forces Ġuni queness Ġof Ġvault Ġcontent Ġin Ġli eu Ġof Ġpart ip ant Ġidentity ) ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbig Cor p Services : ĠMock Services ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbig Cor p Vault : ĠVault < Contract State > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbig Cor p Vault Service : ĠVault Service ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġalice Services : ĠMock Services ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġalice Vault Service : ĠVault Service ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġal ices Vault : ĠVault < Contract State > ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmove TX : ĠSigned Transaction ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` issue Ġmove Ġand Ġthen Ġrede em `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠdataSource Props Alice Ġ= Ġmake Test DataSource Properties () ĊĠĠĠĠĠĠĠ Ġval ĠdataSource And Database Alice Ġ= Ġconfigure Database ( dataSource Props Alice ) ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Alice Ġ= ĠdataSource And Database Alice . second ĊĠĠĠĠĠĠĠ Ġdatabase Transaction ( database Alice ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġalice Services Ġ= Ġobject Ġ: ĠMock Services () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġvault Service : ĠVault Service Ġ= Ġmake Vault Service ( dataSource Props Alice ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecord Transactions ( tx s : ĠIterable < Signed Transaction >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( st x Ġin Ġt xs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Service . validated Transactions . add Transaction ( st x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRef actored Ġto Ġuse Ġnotify All () Ġas Ġwe Ġhave Ġno Ġother Ġunit Ġtest Ġfor Ġthat Ġmethod Ġwith Ġmultiple Ġtransactions . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvault Service . notify All ( tx s . map Ġ{ Ġit . tx Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġal ices Vault Ġ= Ġalice Services . fill With Some Test Cash ( 9 0 0 0 . DO LL ARS , Ġat Least This Many States Ġ= Ġ 1 , Ġat Most This Many States Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalice Vault Service Ġ= Ġalice Services . vault Service ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠdataSource Props Big Cor p Ġ= Ġmake Test DataSource Properties () ĊĠĠĠĠĠĠĠ Ġval ĠdataSource And Database Big Cor p Ġ= Ġconfigure Database ( dataSource Props Big Cor p ) ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Big Cor p Ġ= ĠdataSource And Database Big Cor p . second ĊĠĠĠĠĠĠĠ Ġdatabase Transaction ( database Big Cor p ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbig Cor p Services Ġ= Ġobject Ġ: ĠMock Services () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġvault Service : ĠVault Service Ġ= Ġmake Vault Service ( dataSource Props Big Cor p ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecord Transactions ( tx s : ĠIterable < Signed Transaction >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( st x Ġin Ġt xs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Service . validated Transactions . add Transaction ( st x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRef actored Ġto Ġuse Ġnotify All () Ġas Ġwe Ġhave Ġno Ġother Ġunit Ġtest Ġfor Ġthat Ġmethod Ġwith Ġmultiple Ġtransactions . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvault Service . notify All ( tx s . map Ġ{ Ġit . tx Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbig Cor p Vault Ġ= Ġbig Cor p Services . fill With Some Test Cash ( 1 3 0 0 0 . DO LL ARS , Ġat Least This Many States Ġ= Ġ 1 , Ġat Most This Many States Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbig Cor p Vault Service Ġ= Ġbig Cor p Services . vault Service ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠPro pag ate Ġthe Ġcash Ġtransactions Ġto Ġeach Ġside . ĊĠĠĠĠĠĠĠ Ġalice Services . record Transactions ( big Cor p Vault . states . map Ġ{ Ġbig Cor p Services . storage Service . validated Transactions . getTransaction ( it . ref . tx hash ) !! Ġ}) ĊĠĠĠĠĠĠĠ Ġbig Cor p Services . record Transactions ( al ices Vault . states . map Ġ{ Ġalice Services . storage Service . validated Transactions . getTransaction ( it . ref . tx hash ) !! Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠBig Cor p âĦ ¢ Ġissues Ġ$ 1 0 , 0 0 0 Ġof Ġcommercial Ġpaper , Ġto Ġm ature Ġin Ġ 3 0 Ġdays , Ġowned Ġinitially Ġby Ġitself . ĊĠĠĠĠĠĠĠ Ġval Ġface Value Ġ= Ġ 1 0 0 0 0 . DO LL ARS Ġ` iss ued Ġby ` ĠD UMMY _ C ASH _ IS SU ER ĊĠĠĠĠĠĠĠ Ġval Ġiss u ance Ġ= Ġbig Cor p Services . my Info . legal Identity . ref ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġissue TX : ĠSigned Transaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCom mercial Paper (). generate Issue ( iss u ance , Ġface Value , ĠTEST _ TX _ TIME Ġ+ Ġ 3 0 . days , ĠD UMMY _ NOT ARY ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Time ( TEST _ TX _ TIME , Ġ 3 0 . seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign With ( big Cor p Services . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign With ( D UMMY _ NOT ARY _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Signed Transaction () ĊĊĠĠĠĠĠĠĠ Ġdatabase Transaction ( database Alice ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAlice Ġp ays Ġ$ 9 0 0 0 Ġto ĠBig Cor p Ġto Ġown Ġsome Ġof Ġtheir Ġde bt . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove TX Ġ= Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp tx Ġ= ĠTransaction Type . General . Builder ( D UMMY _ NOT ARY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalice Vault Service . generate S pend ( pt x , Ġ 9 0 0 0 . DO LL ARS , Ġbig Cor p Services . key . public . composite ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCom mercial Paper (). generate Move ( pt x , Ġissue TX . tx . out Ref ( 0 ), Ġalice Services . key . public . composite ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp tx . sign With ( big Cor p Services . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp tx . sign With ( alice Services . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp tx . sign With ( D UMMY _ NOT ARY _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp tx . to Signed Transaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdatabase Transaction ( database Big Cor p ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthe Ġtx ns Ġare Ġvalid Ġand Ġinsert Ġinto Ġboth Ġsides . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( issue TX , Ġmove TX ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . to Ledger Transaction ( alice Services ). verify () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalice Services . record Transactions ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbig Cor p Services . record Transactions ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdatabase Transaction ( database Big Cor p ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġmake Re deem TX ( time : ĠInstant ): ĠPair < Signed Transaction , ĠUUID > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp tx Ġ= ĠTransaction Type . General . Builder ( D UMMY _ NOT ARY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp tx . setTime ( time , Ġ 3 0 . seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCom mercial Paper (). generate Re deem ( pt x , Ġmove TX . tx . out Ref ( 1 ), Ġbig Cor p Vault Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp tx . sign With ( alice Services . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp tx . sign With ( big Cor p Services . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp tx . sign With ( D UMMY _ NOT ARY _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( pt x . to Signed Transaction (), Ġp tx . lock Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrede em TX Ġ= Ġmake Re deem TX ( TEST _ TX _ TIME Ġ+ Ġ 1 0 . days ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoo Early Re de mpt ion Ġ= Ġrede em TX . first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoo Early Re de mpt ion Lock Id Ġ= Ġrede em TX . second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġassert Fails With ( Transaction Verification Exception :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoo Early Re de mpt ion . to Ledger Transaction ( alice Services ). verify () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmanually Ġrelease Ġlocks Ġheld Ġby Ġthis Ġfailing Ġtransaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalice Services . vault Service . soft Lock Release ( too Early Re de mpt ion Lock Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( e . cause !!. message !!. contains (" paper Ġmust Ġhave Ġm ature d ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalid Re de mpt ion Ġ= Ġmake Re deem TX ( TEST _ TX _ TIME Ġ+ Ġ 3 1 . days ). first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Re de mpt ion . to Ledger Transaction ( alice Services ). verify () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsoft Ġlock Ġnot Ġreleased Ġafter Ġsuccess Ġeither !!! Ġ( as Ġtransaction Ġnot Ġrecorded ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ