package Ġcom . r 3 . ref app . contracts Ċ Ċ import Ġcom . r 3 . cord a . lib . accounts . contracts . states . Account Info Ċ import Ġcom . r 3 . ref app . states . Account Status Ċ import Ġcom . r 3 . ref app . util . EUR Ċ import Ġcom . r 3 . ref app . util . of Ċ import Ġnet . cord a . core . contracts . Unique Identifier Ċ import Ġorg . junit . Test Ċ import Ġjava . time . Instant Ċ import Ġjava . util .* Ċ Ċ class ĠSet Limits Contract Test Ġ: ĠAbstract Contract Test () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtx Date Ġ= ĠInstant . now () ĊĠĠĠ Ġprivate Ġval Ġunique Identifier Ġ= ĠUnique Identifier () ĊĠĠĠ Ġprivate Ġval Ġcustomer Id Ġ= ĠUUID . randomUUID () ĊĠĠĠ Ġprivate Ġval Ġcurrent Account In Ġ= ĠgetCurrent Account ( alice Id . id , Ġbank , Ġid Ġ= Ġunique Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx Date Ġ= Ġtx Date , Ġlinear Id Ġ= Ġunique Identifier , Ġcustomer Id Ġ= Ġcustomer Id ) ĊĠĠĠ Ġprivate Ġval Ġcurrent Account Out Ġ= ĠgetCurrent Account ( alice Id . id , Ġbank , Ġid Ġ= Ġunique Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx Date Ġ= Ġtx Date , Ġlinear Id Ġ= Ġunique Identifier , Ġcustomer Id Ġ= Ġcustomer Id , Ġwithdraw al Daily Limit Ġ= Ġ 1 0 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransfer Daily Limit Ġ= Ġ 1 0 0 L ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify ĠSet Limits Ġhappy Ġpath Ġfor Ġcurrent Ġand Ġover draft Ġaccount Ġtypes `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġverifies Ġfor Ġover draft Ġaccount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġget Over draft Account ( current Account In )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġget Over draft Account ( current Account Out )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġverifies Ġfor Ġcurrent Ġaccount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġcurrent Account In ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġcurrent Account Out ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify ĠSet Limits Ġfails Ġon Ġcommand Ġchecks `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġcommand Ġtype Ġcheck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġcurrent Account In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġcurrent Account Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), ĠDummy Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Contract Ġverification Ġfailed : ĠCommand Ġnot Ġrecognized ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġnumber Ġof Ġcommands Ġcheck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġcurrent Account In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġcurrent Account Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Contract Ġverification Ġfailed : ĠFailed Ġrequirement : ĠNumber Ġof Ġcommands Ġshould Ġbe Ġequal Ġto Ġ 1 Ġfor ĠSet Limits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġrequired Ġsign ers Ġcheck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġcurrent Account In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġcurrent Account Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank 2 . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Bank 's Ġkey Ġkey Ġmust Ġbe Ġonly Ġsigner Ġfor ĠSet Limits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify ĠSet Limits Ġfails Ġon Ġinput Ġchecks `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġnumber Ġof Ġinputs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġcurrent Account In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġcurrent Account In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġcurrent Account Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Number Ġof Ġinputs Ġshould Ġbe Ġequal Ġto Ġ 1 Ġfor ĠSet Limits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġnumber Ġof Ġinputs Ġof Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , ĠDummy State ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġcurrent Account Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Number Ġof Ġinputs Ġof Ġtype ĠCurrent Account State Ġshould Ġbe Ġequal Ġto Ġ 1 Ġfor ĠSet Limits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġinput Ġloan Ġaccount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġget Loan Account State ( alice . name . organisation , Ġalice Id , Ġamount Ġ= Ġ 4 5 Ġof ĠEUR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġcurrent Account Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Number Ġof Ġinputs Ġof Ġtype ĠCurrent Account State Ġshould Ġbe Ġequal Ġto Ġ 1 Ġfor ĠSet Limits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġinput Ġs avings Ġaccount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġget Saving Account State ( alice . name . organisation , Ġalice Id , Ġamount Ġ= Ġ 4 5 Ġof ĠEUR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġcurrent Account Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Number Ġof Ġinputs Ġof Ġtype ĠCurrent Account State Ġshould Ġbe Ġequal Ġto Ġ 1 Ġfor ĠSet Limits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġaccount Ġid Ġcheck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġcurrent Account In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġcurrent Account Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ( bob Id . id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Command Ġaccount Ġshould Ġbe Ġthe Ġsame Ġas Ġinput Ġaccount ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify ĠSet Limits Ġfails Ġon Ġout Ġchecks `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġnumber Ġof Ġoutputs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġcurrent Account In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġcurrent Account Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġcurrent Account Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Number Ġof Ġoutputs Ġshould Ġbe Ġequal Ġto Ġ 1 Ġfor ĠSet Limits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġnumber Ġof Ġoutputs Ġof Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġcurrent Account In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , ĠDummy State ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Number Ġof Ġoutputs Ġof Ġtype ĠCurrent Account State Ġshould Ġbe Ġequal Ġto Ġ 1 Ġfor ĠSet Limits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġoutput Ġloan Ġaccount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġcurrent Account In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġget Loan Account State ( alice . name . organisation , Ġalice Id , Ġamount Ġ= Ġ 4 5 Ġof ĠEUR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Number Ġof Ġoutputs Ġof Ġtype ĠCurrent Account State Ġshould Ġbe Ġequal Ġto Ġ 1 Ġfor ĠSet Limits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġoutput Ġs avings Ġaccount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġcurrent Account In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġget Saving Account State ( alice . name . organisation , Ġalice Id , Ġamount Ġ= Ġ 4 5 Ġof ĠEUR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Number Ġof Ġoutputs Ġof Ġtype ĠCurrent Account State Ġshould Ġbe Ġequal Ġto Ġ 1 Ġfor ĠSet Limits ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify ĠSet Limits Ġfails Ġon Ġin Ġand Ġout Ġchecks `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġover draft Account Ġ= Ġget Over draft Account ( current Account In ) ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġin Ġand Ġout Ġaccounts Ġnot Ġsame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġover draft Account ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġover draft Account . copy ( account Data Ġ= Ġover draft Account . account Data . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Info Ġ= ĠAccount Info (" test ", Ġbank . party , ĠUnique Identifier ())) )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Account 's Ġwithdraw al Daily Limit Ġand Ġtransfer Daily Limit Ġshould Ġbe Ġset Ġto Ġcommands Ġvalues , Ġother Ġfields Ġmust Ġbe Ġunchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġin Ġand Ġout Ġaccounts Ġnot Ġin Ġsame Ġbank ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġover draft Account ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġover draft Account . copy ( account Data Ġ= Ġover draft Account . account Data . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Info Ġ= ĠAccount Info ( current Account In . account Data . account Info . name , Ġbank 2 . party , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Account In . account Data . account Info . identifier )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Account 's Ġwithdraw al Daily Limit Ġand Ġtransfer Daily Limit Ġshould Ġbe Ġset Ġto Ġcommands Ġvalues , Ġother Ġfields Ġmust Ġbe Ġunchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġin Ġand Ġout Ġbalance Ġnot Ġsame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġover draft Account ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġover draft Account . copy ( account Data Ġ= Ġover draft Account . account Data . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbalance Ġ= Ġ 5 Ġof ĠEUR ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Account 's Ġwithdraw al Daily Limit Ġand Ġtransfer Daily Limit Ġshould Ġbe Ġset Ġto Ġcommands Ġvalues , Ġother Ġfields Ġmust Ġbe Ġunchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġin Ġand Ġout Ġcustomer Ġnot Ġsame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġover draft Account ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġover draft Account . copy ( account Data Ġ= Ġover draft Account . account Data . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustomer Id Ġ= ĠUUID . randomUUID ()))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Account 's Ġwithdraw al Daily Limit Ġand Ġtransfer Daily Limit Ġshould Ġbe Ġset Ġto Ġcommands Ġvalues , Ġother Ġfields Ġmust Ġbe Ġunchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġin Ġand Ġout Ġlinear Ġid Ġnot Ġsame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġover draft Account ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġover draft Account . copy ( linear Id Ġ= ĠUnique Identifier ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Account 's Ġwithdraw al Daily Limit Ġand Ġtransfer Daily Limit Ġshould Ġbe Ġset Ġto Ġcommands Ġvalues , Ġother Ġfields Ġmust Ġbe Ġunchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġin Ġand Ġout Ġstatus Ġnot Ġsame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġover draft Account ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġover draft Account . copy ( account Data Ġ= Ġover draft Account . account Data . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠAccount Status . ACTIVE ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Account 's Ġwithdraw al Daily Limit Ġand Ġtransfer Daily Limit Ġshould Ġbe Ġset Ġto Ġcommands Ġvalues , Ġother Ġfields Ġmust Ġbe Ġunchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġin Ġand Ġout Ġover draft Balance Ġnot Ġsame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġover draft Account ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġover draft Account . copy ( over draft Balance Ġ= Ġ 2 0 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Account 's Ġwithdraw al Daily Limit Ġand Ġtransfer Daily Limit Ġshould Ġbe Ġset Ġto Ġcommands Ġvalues , Ġother Ġfields Ġmust Ġbe Ġunchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfails Ġon Ġin Ġand Ġout Ġover draft Limit Ġnot Ġsame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtweak Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Financial Account Contract . ID , Ġover draft Account ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Financial Account Contract . ID , Ġover draft Account . copy ( approved Over draft Limit Ġ= Ġ 2 0 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( bank . publicKey ), Ġget Set Limits Command ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` fails Ġwith ` (" Account 's Ġwithdraw al Daily Limit Ġand Ġtransfer Daily Limit Ġshould Ġbe Ġset Ġto Ġcommands Ġvalues , Ġother Ġfields Ġmust Ġbe Ġunchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Set Limits Command ( accountId : ĠUUID Ġ= Ġalice Id . id , Ġwithdraw al Daily Limit : ĠLong Ġ= Ġ 1 0 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransfer Daily Limit : ĠLong Ġ= Ġ 1 0 0 L ) Ġ= ĠFin ancial Account Contract . Commands . Set Limits ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠaccountId , Ġwithdraw al Daily Limit , Ġtransfer Daily Limit ) Ċ }