package Ġio . pl as mas im ulator . pl asma . vert icles Ċ Ċ import Ġio . pl as mas im ulator . pl asma . models .* Ċ import Ġio . pl as mas im ulator . pl asma . services . Main Chain Connector Ċ import Ġio . pl as mas im ulator . utils . Hash Utils Ċ import Ġio . vertx . core . Future Ċ import Ġio . vertx . core . json . Json Ċ import Ġio . vertx . core . json . JsonObject Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġio . pl as mas im ulator . conf . Address Ċ Ċ open Ġclass ĠPl asma Participant : ĠMain Chain Connector () Ġ{ ĊĠ Ġvar Ġchain : ĠPl asma Chain Ġ= ĠPl asma Chain ( chain Address Ġ= Ġ"", Ġpl asma Block Interval Ġ= Ġ 1 0 ) ĊĠ Ġvar Ġpl asma Pool : ĠU TX OP ool Ġ= ĠU TX OP ool () ĊĠ Ġval Ġroot Chain Service Ġ= Ġthis ĊĊĠ Ġval Ġaddress : ĠString Ġ= ĠPl asma Participant . address Num ++. toString () // UUID . randomUUID (). toString () ĊĠ Ġvar Ġbalance : ĠInt Ġ= Ġ 0 ĊĠ Ġvar Ġmy UT X Os Ġ= Ġmutable ListOf < UT XO >() ĊĠ Ġvar Ġspent UT X Os Ġ= Ġmutable ListOf < UT XO >() ĊĠ Ġvar Ġpending UT X Os Ġ= Ġmy UT X Os . to Mutable List () ĊĊĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠLOG Ġ= ĠLoggerFactory . getLogger ( Pl asma Participant :: class . java ) ĊĠĠĠ Ġprivate Ġvar Ġaddress Num Ġ= Ġ 0 ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġstart ( start Future : ĠFuture < Void > ?) Ġ{ ĊĠĠĠ Ġsuper . start ( start Future ) ĊĠĠĠ Ġ// Ġdeploying Ġroot Chain Vert icle ĊĊĠĠĠ ĠLOG . info (" Initialize ĠPl asma Vert icle Ġ$ address ") ĊĠĠĠ Ġval Ġchain Address : ĠString ĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġconfig (). getString (" chain Address ") ĊĠĠĠ Ġval Ġpl asma Block Interval ĠĠĠĠĠĠĠ Ġ= Ġconfig (). getInteger (" pl asma Block Interval ") ĊĊĠĠĠ Ġchain Ġ= ĠPl asma Chain ( chain Address Ġ= Ġchain Address , Ġpl asma Block Interval Ġ= Ġpl asma Block Interval ) ĊĊĠĠĠ Ġif ( config (). containsKey (" parent Pl asma Address ")) Ġ{ ĊĠĠĠĠĠ Ġchain . parent Chain Address ĠĠĠĠĠĠĠĠĠ Ġ= Ġconfig (). getString (" parent Pl asma Address ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif ( chain . parent Chain Address Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠI Ġhave Ġa Ġparent Ġpl asma Ġchain , Ġso ĠI Ġam Ġexpecting Ġto Ġsee Ġsome Ġblocks ĊĠĠĠĠĠ Ġvert x . event Bus (). consumer < Any >( chain . chain Address ) Ġ{ Ġmsg Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġparent Block : ĠPl asma Block Ġ= ĠJson . decode Value ( msg . body (). toString (), ĠPl asma Block :: class . java ) ĊĠĠĠĠĠĠĠ Ġchain . add Parent Block ( parent Block ) ĊĠĠĠĠĠĠĠ Ġif ( this Ġis ĠOperator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). send ( Address . PARENT _ BLOCK _ RECE IVED . name , ĠJsonObject (). put (" chain Address ", Ġchain Address )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġremove UT X Os For Block ( block : ĠPl asma Block ) Ġ{ ĊĠĠĠ Ġfor ( tx Ġin Ġblock . transactions ) Ġ{ ĊĠĠĠĠĠ Ġfor ( input Ġin Ġtx . inputs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġut xo ToRemove Ġ= ĠU TX O ( input . block Num , Ġinput . tx Index , Ġinput . output Index ) ĊĠĠĠĠĠĠĠ Ġif ( my UT X Os . contains ( ut xo ToRemove )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġmy UT X Os . remove ( ut xo ToRemove ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpl asma Pool . remove UT XO ( ut xo ToRemove ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate UT X Os For Block ( block : ĠPl asma Block ) Ġ{ ĊĠĠĠ Ġfor (( tx Index , Ġtx ) Ġin Ġblock . transactions . with Index ()) Ġ{ ĊĠĠĠĠĠ Ġfor (( output Index , Ġoutput ) Ġin Ġtx . outputs . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew UT XO Ġ= ĠU TX O ( block . number , Ġtx Index , Ġoutput Index ) ĊĠĠĠĠĠĠĠ Ġif ( address Ġ== Ġoutput . address Ġ&& Ġ! my UT X Os . contains ( new UT XO )){ ĊĠĠĠĠĠĠĠĠĠ Ġmy UT X Os . add ( new UT XO ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpl asma Pool . add UT XO ( new UT XO , Ġoutput ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġstop ( stop Future : ĠFuture < Void > ?) Ġ{ ĊĠĠĠ Ġsuper . stop ( stop Future ) ĊĠ Ġ} Ċ } Ċ