package Ġio . def itr ack . me v Ċ Ċ import Ġio . def itr ack . me v . chains . polygon . config . Polygon Contract Accessor Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . ensure Active Ċ import Ġkotlinx . coroutines . future . await Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . math . BigInteger Ċ Ċ @ Component Ċ class ĠEthereum Che ap Block Producer ( private Ġval Ġpolygon Contract Accessor : ĠPolygon Contract Accessor ) Ġ{ ĊĊĠĠĠ Ġsuspend Ġfun Ġproduce Blocks ( action : Ġ( BigInteger ) Ġ-> ĠUnit ) Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġlatest Block : ĠBigInteger Ġ= ĠBigInteger . ZERO ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ensure Active () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthis Block Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpolygon Contract Accessor . get Gateway (). web 3 j (). eth Block Number (). send Async (). await (). block Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( latest Block Ġ!= Ġthis Block ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest Block Ġ= Ġthis Block ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( this Block ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Error Ġtrying Ġto Ġproduce Ġblocks ", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) ĊĠĠĠ Ġ} Ċ }