package Ġnet . cord a . split cord a . contracts Ċ Ċ import Ġnet . cord a . core . contracts . Unique Identifier Ċ import Ġnet . cord a . core . identity . C ord a X 5 0 0 Name Ċ import Ġnet . cord a . testing . core . Test Identity Ċ import Ġnet . cord a . testing . node . Mock Services Ċ import Ġnet . cord a . testing . node . ledger Ċ import Ġorg . junit . Test Ċ import Ġjava . math . BigDecimal Ċ Ċ class ĠSplit Contract Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġledger Services Ġ= ĠMock Services ( Test Identity ( C ord a X 5 0 0 Name (" TestId ", Ġ"", Ġ" GB "))) ĊĠĠĠ Ġprivate Ġval Ġalice Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" Alice ", Ġ"", Ġ" GB ")) ĊĠĠĠ Ġprivate Ġval Ġbob Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" Bob ", Ġ"", Ġ" GB ")) ĊĠĠĠ Ġprivate Ġval Ġchar lie Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" Char lie ", Ġ"", Ġ" GB ")) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrequest Contract Requires Zero Inputs InThe Transaction () Ġ{ ĊĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbill Entry Ġ= ĠBill Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" be ers ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= ĠBigDecimal ( 1 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaid By Ġ= Ġalice . party , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbene fici aries Ġ= Ġsequence Of ( alice , Ġbob , Ġchar lie ). map Ġ{ Ġit . party Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Split Contract . ID , Ġbill Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Split Contract . ID , Ġbill Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice , Ġbob , Ġchar lie ). map Ġ{ Ġit . publicKey Ġ}, ĠSplit Contract . Commands . Create Bill ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Split Contract . ID , Ġbill Entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice , Ġbob , Ġchar lie ). map Ġ{ Ġit . publicKey Ġ}, ĠSplit Contract . Commands . Create Bill ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverifies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġapprove Should Not Change State () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠUnique Identifier () ĊĠĠĠĠĠĠĠ Ġval Ġbill Entry In Ġ= ĠBill Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Id Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" be ers ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= ĠBigDecimal ( 1 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaid By Ġ= Ġalice . party , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbene fici aries Ġ= Ġsequence Of ( alice , Ġbob , Ġchar lie ). map Ġ{ Ġit . party Ġ}. toSet (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= ĠBill Entry . State . Pro posed ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbill Entry Out With Different Amount Ġ= Ġbill Entry In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= ĠBigDecimal ( 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Split Contract . ID , Ġbill Entry In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Split Contract . ID , Ġbill Entry Out With Different Amount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice , Ġbob , Ġchar lie ). map Ġ{ Ġit . publicKey Ġ}, ĠSplit Contract . Commands . Approve Bill ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbill Entry Out With Different Pay er Ġ= Ġbill Entry In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaid By Ġ= Ġbob . party ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Split Contract . ID , Ġbill Entry In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Split Contract . ID , Ġbill Entry Out With Different Pay er ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice , Ġbob , Ġchar lie ). map Ġ{ Ġit . publicKey Ġ}, ĠSplit Contract . Commands . Approve Bill ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbill Entry Out With Different Bene fici aries Ġ= Ġbill Entry In . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbene fici aries Ġ= Ġsequence Of ( alice , Ġchar lie ). map Ġ{ Ġit . party Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Split Contract . ID , Ġbill Entry In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Split Contract . ID , Ġbill Entry Out With Different Bene fici aries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice , Ġbob , Ġchar lie ). map Ġ{ Ġit . publicKey Ġ}, ĠSplit Contract . Commands . Approve Bill ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbill Entry Out With Different Description Ġ= Ġbill Entry In . copy ( description Ġ= Ġ" beer ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Split Contract . ID , Ġbill Entry In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Split Contract . ID , Ġbill Entry Out With Different Description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice , Ġbob , Ġchar lie ). map Ġ{ Ġit . publicKey Ġ}, ĠSplit Contract . Commands . Approve Bill ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbill Entry Out EqualTo In Ġ= Ġbill Entry In . copy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġledger Services . ledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput ( Split Contract . ID , Ġbill Entry In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput ( Split Contract . ID , Ġbill Entry Out EqualTo In ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ( listOf ( alice , Ġbob , Ġchar lie ). map Ġ{ Ġit . publicKey Ġ}, ĠSplit Contract . Commands . Approve Bill ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfails () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }