package Ġnet . cord a . node . services . network Ċ Ċ import Ġnet . cord a . core . crypto . Secure Hash Ċ import Ġnet . cord a . core . internal . Network Parameters Storage Ċ import Ġnet . cord a . core . node . Network Parameters Ċ import Ġnet . cord a . core . node . Not ary Info Ċ import Ġnet . cord a . core . utilities . context Logger Ċ import Ġnet . cord a . node . internal . Network Parameters Reader Ċ import Ġnet . cord a . node api . internal . network . verified Network Parameters Cert Ċ import Ġjava . security . cert . X 5 0 9 Certificate Ċ import Ġkotlin . reflect . full . declared Member Properties Ċ import Ġkotlin . reflect . jvm . java Getter Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġis Ġresponsible Ġfor Ġhot loading Ġnew Ġnetwork Ġparameters Ġor Ġshut Ġdown Ġthe Ġnode Ġif Ġit 's Ġnot Ġpossible . Ċ Ġ* ĠCurrently Ġonly Ġhot loading Ġnot ary Ġchanges Ġare Ġsupported . Ċ Ġ*/ Ċ class ĠNetwork Parameters Hot loader ( private Ġval Ġnetwork Map Client : ĠNetwork Map Client , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtrust Root : ĠX 5 0 9 Certificate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Volatile Ġprivate Ġvar Ġnetwork Parameters : ĠNetwork Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġnetwork Parameters Reader : ĠNetwork Parameters Reader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġnetwork Parameters Storage : ĠNetwork Parameters Storage ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= Ġcontext Logger () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġalways Hot load able Ġ= ĠlistOf ( Network Parameters :: epoch , ĠNetwork Parameters :: modified Time ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġnetwork Parameter Update Listeners Ġ= Ġmutable ListOf < Network Parameter Update Listener >() ĊĠĠĠ Ġprivate Ġval Ġnot ary Update Listeners Ġ= Ġmutable ListOf < Not ary Update Listener >() ĊĊĠĠĠ Ġfun Ġadd Network Parameters Changed Listeners ( listener : ĠNetwork Parameter Update Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnetwork Parameter Update Listeners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Not ary Update Listener ( listener : ĠNot ary Update Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnot ary Update Listeners . add ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify Listeners For ( not aries : ĠList < Not ary Info >) Ġ= Ġnot ary Update Listeners . forEach Ġ{ Ġit . on New Not ary List ( not aries ) Ġ} ĊĠĠĠ Ġprivate Ġfun Ġnotify Listeners For ( network Parameters : ĠNetwork Parameters ) Ġ= Ġnetwork Parameter Update Listeners . forEach Ġ{ Ġit . on New Network Parameters ( network Parameters ) Ġ} ĊĊĠĠĠ Ġfun Ġattempt Hot load ( new Network Parameter Hash : ĠSecure Hash ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Signed Net Params Ġ= Ġnetwork Map Client . get Network Parameters ( new Network Parameter Hash ) ĊĠĠĠĠĠĠĠ Ġval Ġnew Net Params Ġ= Ġnew Signed Net Params . verified Network Parameters Cert ( trust Root ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( can Hot load ( new Net Params )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" All Ġchanged Ġparameters Ġare Ġhot load able ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhot load Parameters ( new Net Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIgn oring Ġalways Ġhot load able Ġproperties Ġ( epoch , Ġmodified Time ) Ġreturn Ġtrue Ġif Ġthe Ġnot ary Ġis Ġthe Ġonly Ġproperty Ġthat Ġis Ġdifferent Ġin Ġthe Ġnew Ġnetwork Ġparameters ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcan Hot load ( new Network Parameters : ĠNetwork Parameters ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġproperties Changed Ġ= ĠNetwork Parameters :: class . declared Member Properties ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. minus ( always Hot load able ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġnetwork Parameters . value Changed ( new Network Parameters , Ġit . java Getter ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" Updated ĠNetwork Parameters Ġproperties : Ġ$ properties Changed ") ĊĊĠĠĠĠĠĠĠ Ġval Ġno Properties Changed Ġ= Ġproperties Changed . isEmpty () ĊĠĠĠĠĠĠĠ Ġval Ġonly Not aries Changed Ġ= Ġproperties Changed Ġ== ĠlistOf ( Network Parameters :: not aries ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Properties Changed Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġonly Not aries Changed Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġlocal Ġnetwork Parameters Ġand Ġcurrent Parameters Hash Ġwith Ġnew Ġvalues . ĊĠĠĠĠ Ġ* ĠNotify Ġall Ġlisteners Ġfor Ġnetwork Ġparameter Ġchanges ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhot load Parameters ( new Network Parameters : ĠNetwork Parameters ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġnetwork Parameters Ġ= Ġnew Network Parameters ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Parameters And Signed Ġ= Ġnetwork Parameters Reader . read () ĊĠĠĠĠĠĠĠ Ġnetwork Parameters Storage . setCurrent Parameters ( network Parameters And Signed . signed , Ġtrust Root ) ĊĠĠĠĠĠĠĠ Ġnotify Listeners For ( new Network Parameters ) ĊĠĠĠĠĠĠĠ Ġnotify Listeners For ( new Network Parameters . not aries ) ĊĠĠĠ Ġ} Ċ }