// ĠVer i Block ĠPo P ĠMin er Ċ // ĠCopyright Ġ 2 0 1 7 - 2 0 2 1 ĠX en ios ĠSE ZC Ċ // ĠAll Ġrights Ġreserved . Ċ // Ġhttps :// www . ver ib lock . org Ċ // ĠDistributed Ġunder Ġthe ĠMIT Ġsoftware Ġlicense , Ġsee Ġthe Ġaccompanying Ċ // Ġfile ĠLICENSE Ġor Ġhttp :// www . opensource . org / licenses / mit - license . php . Ċ Ċ @ file : Jvm Name (" Ver i Block Po P Miner ") Ċ Ċ package Ġorg . ver ib lock . min ers . pop Ċ Ċ import Ġjava . net . Bind Exception Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . bitcoin j . core . Context Ċ import Ġorg . bitcoin j . utils . Threading Ċ import Ġorg . bouncycastle . j ce . provider . Bo unc y Castle Provider Ċ import Ġorg . k oin . core . context . start K oin Ċ import Ġorg . ver ib lock . core . Shared Constants Ċ import Ġorg . ver ib lock . core . params .* Ċ import Ġorg . ver ib lock . core . tu w eni . pro gp ow . Prog Po W Cache Ċ import Ġorg . ver ib lock . min ers . pop . api . Api Server Ċ import Ġorg . ver ib lock . min ers . pop . api . web Api Module Ċ import Ġorg . ver ib lock . min ers . pop . autom ine . Auto Mine Engine Ċ import Ġorg . ver ib lock . min ers . pop . schedule . Po P Min ing Scheduler Ċ import Ġorg . ver ib lock . min ers . pop . service . Miner Service Ċ import Ġorg . ver ib lock . min ers . pop . shell . Pop Shell Ċ import Ġjava . security . Security Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . Executor Ċ import Ġorg . ver ib lock . core . utilities . check Jvm Version Ċ import Ġorg . ver ib lock . core . utilities . debug Error Ċ import Ġorg . ver ib lock . core . utilities . extensions . check Port Vi ability Ċ import Ġkotlin . system . exit Process Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ private Ġval Ġevent Registrar Ġ= ĠAny () Ċ Ċ private Ġval Ġshutdown Signal : ĠCount DownLatch Ġ= ĠCount DownLatch ( 1 ) Ċ private Ġlateinit Ġvar Ġshell : ĠPop Shell Ċ private Ġlateinit Ġvar Ġpop Miner Service : ĠMin er Service Ċ var Ġexternal Quit Ġ= Ġfalse Ċ Ċ fun Ġrun ( args : ĠArray < String >): ĠInt Ġ{ ĊĠĠĠ ĠSecurity . add Provider ( Bo unc y Castle Provider ()) ĊĠĠĠ ĠEvent Bus . shell Completed Event . register ( event Registrar , Ġ:: on Shell Completed ) ĊĠĠĠ ĠEvent Bus . program Quit Event . register ( event Registrar , Ġ:: on Program Quit ) ĊĊĠĠĠ Ġprint ( Shared Constants . LICENSE ) ĊĠĠĠ Ġprintln ( Shared Constants . VER IB LOCK _ APPLICATION _ NAME . replace ("$ 1 ", ĠApplication Meta . FULL _ APPLICATION _ NAME _ VERSION )) ĊĠĠĠ Ġprintln ("\ t \ t ${ Shared Constants . VER IB LOCK _ WE BS ITE }") ĊĠĠĠ Ġprintln ("\ t \ t ${ Shared Constants . VER IB LOCK _ EX PL OR ER }\ n ") ĊĠĠĠ Ġprintln ("${ Shared Constants . VER IB LOCK _ PRODUCT _ WI KI _ URL . replace ("$ 1 ", Ġ" https :// wiki . ver ib lock . org / index . php / How To _ run _ Po P _ Miner _ 0 . 4 . 9 ") }\ n ") ĊĠĠĠ Ġprintln ("${ Shared Constants . TYPE _ HELP }\ n ") ĊĊĠĠĠ Ġval Ġj vm Version Result Ġ= Ġcheck Jvm Version () ĊĠĠĠ Ġif Ġ(! jvm Version Result . was Successful ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error (" JVM Ġversion Ġis Ġnot Ġcorrect !") ĊĠĠĠĠĠĠĠ Ġlogger . error ( jvm Version Result . error ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠRuntime . get Runtime (). add Shutdown Hook ( Thread ( Runnable Ġ{ Ġshutdown Signal . count Down () Ġ})) ĊĠĠĠ Ġval Ġstartup Injector Ġ= Ġstart K oin Ġ{ ĊĠĠĠĠĠĠĠ Ġmodules ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Module ( args ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbootstrap Module , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Api Module ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}. k oin ĊĊĠĠĠ Ġval Ġconfig : ĠV pm Config Ġ= Ġstartup Injector . get () ĊĠĠĠ Ġif Ġ(! config . api . port . check Port Vi ability ( config . api . host )) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error Ġ{ Ġ" The Ġport Ġ${ config . api . port } Ġis Ġnot Ġavailable Ġat Ġthe Ġhost Ġ${ config . api . host }, Ġplease Ġset Ġa Ġdifferent Ġminer ĠAPI Ġport !" Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( config . bitcoin . network . toString () Ġ== Ġ" Main Net ") Ġ{ ĊĠĠĠĠĠĠĠ Ġorg . ver ib lock . core . Context . create ( default Main Net Parameters ); ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġorg . ver ib lock . core . Context . create ( default Test Net Parameters ); ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠPro g Po W Cache . setMax Cached Pairs ( 2 ); Ġ// ĠF ew er Ġcached Ġpairs Ġfor ĠPo P Ġminer ĊĊĠĠĠ ĠThread ing . ignore Lock Cycles () ĊĠĠĠ ĠThread ing . USER _ THREAD Ġ= ĠExecutor Ġ{ Ġcommand : ĠRunnable Ġ-> ĊĠĠĠĠĠĠĠ ĠContext . propagate ( config . bitcoin . context ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . run () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Exception Ġrunning Ġlistener ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġpop Miner Service Ġ= Ġstartup Injector . get () ĊĠĠĠ Ġval Ġscheduler : ĠPo P Min ing Scheduler Ġ= Ġstartup Injector . get () ĊĠĠĠ Ġval Ġauto Mine Engine : ĠAuto Mine Engine Ġ= Ġstartup Injector . get () ĊĠĠĠ Ġval Ġapi Server : ĠApi Server Ġ= Ġstartup Injector . get () ĊĠĠĠ Ġshell Ġ= Ġstartup Injector . get () ĊĠĠĠ Ġshell . initialize () ĊĊĠĠĠ Ġvar Ġerro red Ġ= Ġfalse ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġpop Miner Service . run () ĊĠĠĠĠĠĠĠ Ġshell . run Once () ĊĠĠĠĠĠĠĠ Ġscheduler . run () ĊĠĠĠĠĠĠĠ Ġauto Mine Engine . run () ĊĠĠĠĠĠĠĠ Ġapi Server . start () ĊĠĠĠĠĠĠĠ Ġshell . run () ĊĠĠĠ Ġ} Ġcatch Ġ( exception : ĠBind Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerro red Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlogger . debug Error ( exception ) Ġ{ Ġ" The Ġport Ġ${ config . api . port } Ġis Ġnot Ġavailable Ġat Ġthe Ġhost Ġ${ config . api . host }, Ġplease Ġset Ġa Ġdifferent Ġminer ĠAPI Ġport !" Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerro red Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġshell . render From Throwable ( exception ) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġshutdown Signal . count Down () ĊĠĠĠ Ġ} ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġshutdown Signal . await () ĊĊĠĠĠĠĠĠĠ ĠEvent Bus . shell Completed Event . unregister ( event Registrar ) ĊĠĠĠĠĠĠĠ ĠEvent Bus . program Quit Event . unregister ( event Registrar ) ĊĊĠĠĠĠĠĠĠ Ġapi Server . shutdown () ĊĠĠĠĠĠĠĠ Ġauto Mine Engine . shutdown () ĊĠĠĠĠĠĠĠ Ġscheduler . shutdown () ĊĠĠĠĠĠĠĠ Ġpop Miner Service . shutdown () ĊĠĠĠĠĠĠĠ Ġlogger . info (" Application Ġexit ") ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error (" Shutdown Ġsignal Ġwas Ġinterrupted ", Ġe ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error (" Could Ġnot Ġshut Ġdown Ġservices Ġclean ly ", Ġe ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġif Ġ(! er rored ) Ġ 0 Ġelse Ġ 1 Ċ } Ċ Ċ private Ġfun Ġon Shell Completed () Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġshutdown Signal . count Down () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . error ( e . message , Ġe ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġon Program Quit ( quit Reason : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( quit Reason Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexternal Quit Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġpop Miner Service . setIs Shut ting Down ( true ) ĊĠĠĠ Ġshell . interrupt () Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġprogram Exit Result Ġ= Ġrun ( args ) ĊĠĠĠ Ġif Ġ( external Quit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexit Process ( 2 ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġexit Process ( program Exit Result ) ĊĠĠĠ Ġ} Ċ } Ċ