package Ġcom . example . contract Ċ Ċ import Ġcom . example . state . Black list State Ċ import Ġcom . example . state . Bond State Ċ import Ġnet . cord a . core . contracts .* Ċ import Ġnet . cord a . core . contracts . Requirements . using Ċ import Ġnet . cord a . core . transactions . Ledger Transaction Ċ import Ġjava . security . PublicKey Ċ Ċ class ĠBlack list Contract Ġ: ĠContract Ġ{ ĊĊĠĠĠ Ġ// ĠComp anion Ġwhen Ġuse Ġit Ġcan Ġskip Ġobject Ġname Ġe . x . ĠB ond Contact . Bond _ CONTRACT _ ID ( It Ġdont Ġuse Ġo be j ct Ġname Ġto Ġcall ) ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġval ĠBLACK _ CONTRACT _ ID Ġ= Ġ" com . example . contract . Black list Contract " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCommands Ġ: ĠCommand Data Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠBlack Issue Ġ: ĠType Only Command Data (), Commands ĊĠĠĠĠĠĠĠ Ġclass ĠBlack Update Ġ: ĠType Only Command Data (), Commands ĊĠĠĠĠĠĠĠ Ġclass ĠBlack End Ġ: ĠType Only Command Data (), Commands ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġverify ( tx : ĠLed ger Transaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCommand Ġfrom Ġcommands Ġ( issue , update , re deem ) ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġtx . commands . require Single Command < Commands >() ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġof Ġsigner Ġin Ġcommand Ġdata ĊĠĠĠĠĠĠĠ Ġval Ġset Of Sign ers Ġ= Ġcommand . sign ers . toSet () ĊĊĠĠĠĠĠĠĠ Ġwhen ( command . value ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Black Issue Ġ-> Ġverify Black list Issue ( tx , Ġset Of Sign ers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Black Update Ġ-> Ġverify Black list Update ( tx , Ġset Of Sign ers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCommands . Black End -> Ġverify Black list End ( tx , Ġset Of Sign ers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Un re cogn ised Ġcommand .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Black list Issue ( tx : ĠLed ger Transaction , Ġsign ers : ĠSet < PublicKey >) Ġ= Ġrequire That Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġinput Ġand Ġoutput ĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ" No Ġinputs Ġshould Ġbe Ġconsumed Ġwhen Ġiss uing Ġan ĠBlack list ." Ġusing Ġ( tx . inputs . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ" Only Ġone Ġoutput Ġbond Ġstate Ġshould Ġbe Ġcreated ." Ġusing Ġ( tx . outputs . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġblack Out Ġ= Ġtx . output States . single () Ġas ĠBlack list State ĊĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġsigner ĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġtx . commands . require Single Command < Commands . Black Issue >() ĊĠĠĠĠĠĠĠ Ġ" All Ġof Ġthe Ġparticipants Ġ( Output ) Ġmust Ġbe Ġsign ers ." Ġusing Ġ( command . sign ers . contains All ( black Out . participants . map Ġ{ Ġit . own ing Key Ġ})) ĊĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġlogic ĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Black list Update ( tx : ĠLed ger Transaction , Ġsign ers : ĠSet < PublicKey >) Ġ= Ġrequire That Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġinput Ġand Ġoutput ĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ" The Ġcan Ġonly Ġone Ġinput Ġstate Ġin ĠUpdate Ġblack Ġlist ." Ġusing Ġ( tx . input States . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ" There Ġmust Ġbe Ġtwo Ġoutput Ġstates Ġin ĠUpdate Ġblacklist ." Ġusing Ġ( tx . output States . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġblack In Ġ= Ġtx . input States . single () Ġas ĠBlack list State ĊĠĠĠĠĠĠĠ Ġval Ġblack Out Ġ= Ġtx . output States . single () Ġas ĠBlack list State ĊĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġsigner ĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġtx . commands . require Single Command < Commands . Black Update >() ĊĠĠĠĠĠĠĠ Ġ" All Ġof Ġthe Ġparticipants Ġ( Input ) Ġmust Ġbe Ġsign ers ." Ġusing Ġ( command . sign ers . contains All ( black In . participants . map Ġ{ Ġit . own ing Key Ġ})) ĊĠĠĠĠĠĠĠ Ġ" All Ġof Ġthe Ġparticipants Ġ( Output ) Ġmust Ġbe Ġsign ers ." Ġusing Ġ( command . sign ers . contains All ( black Out . participants . map Ġ{ Ġit . own ing Key Ġ})) ĊĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġlogic ĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Black list End ( tx : ĠLed ger Transaction , Ġsign ers : ĠSet < PublicKey >) Ġ= Ġrequire That Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġinput Ġand Ġoutput ĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ" The Ġcan Ġonly Ġone Ġinput Ġstate Ġin ĠEnd Ġbond .." Ġusing Ġ( tx . inputs . size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ" No Ġoutput Ġshould Ġbe Ġconsumed Ġwhen ĠEnd ing Ġan ĠB ond ." Ġusing Ġ( tx . outputs . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġval Ġblack In Ġ= Ġtx . input States . single () Ġas ĠBlack list State ĊĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġsigner ĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġtx . commands . require Single Command < Commands . Black End >() ĊĠĠĠĠĠĠĠ Ġ" All Ġof Ġthe Ġparticipants Ġ( Input ) Ġmust Ġbe Ġsign ers ." Ġusing Ġ( command . sign ers . contains All ( black In . participants . map Ġ{ Ġit . own ing Key Ġ})) ĊĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġlogic ĊĠĠĠĠĠĠĠ Ġ// -------------------------------- ĊĠĠĠ Ġ} Ċ Ċ }