package Ġorg . at to . node . transaction Ċ Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . at to . commons .* Ċ import Ġorg . at to . node . Application Properties Ċ import Ġorg . at to . node . account . Account Ċ import Ġorg . at to . protocol . At to Node Ċ import Ġorg . at to . protocol . network . codec . transaction . At to Transaction Codec Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . context . annotation . Configuration Ċ import Ġorg . springframework . core . annotation . Order Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . time . Instant Ċ import Ġjavax . annotation . Post Construct Ċ Ċ @ Configuration Ċ class ĠTransaction Configuration Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġfun Ġgenesis At to Transaction ( ĊĠĠĠĠĠĠĠ Ġproperties : ĠApplication Properties , ĊĠĠĠĠĠĠĠ Ġtransaction Codec : ĠAt to Transaction Codec , ĊĠĠĠĠĠĠĠ ĠprivateKey : ĠAt to PrivateKey , ĊĠĠĠĠĠĠĠ Ġthis Node : ĠAt to Node ĊĠĠĠ Ġ): ĠAt to Transaction Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgenesis Ġ= Ġproperties . genesis ĊĊĠĠĠĠĠĠĠ Ġif Ġ( genesis Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġgenesis . from Hex To ByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġtransaction Codec . from ByteBuffer ( At to ByteBuffer . from ( byteArray )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transaction Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtransaction ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Invalid Ġgenesis : Ġ${ properties . genesis }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" No Ġgenesis Ġconfigured . ĠCreating Ġnew Ġgenesis Ġwith Ġthis Ġnode Ġprivate Ġkey ..." Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġblock Ġ= ĠAt to Open Block ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ 0 u , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey Ġ= ĠprivateKey . to PublicKey (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbalance Ġ= ĠAt to Amount . max , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Hash Ġ= ĠAt to Hash ( ByteArray ( 3 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentative Ġ= ĠprivateKey . to PublicKey (), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġat to Transaction Ġ= ĠAt to Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= Ġblock , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignature Ġ= ĠprivateKey . sign ( block . hash . value ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Ġ= ĠAt to Work . work ( block . publicKey , Ġthis Node . network ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Created Ġgenesis Ġtransaction Ġ${ transaction Codec . to ByteBuffer ( at to Transaction ). to Hex () }" Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġat to Transaction ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Component ĊĠĠĠ Ġ@ Order ( Integer . MIN _ VALUE ) ĊĠĠĠ Ġclass ĠGen esis Checker ( ĊĠĠĠĠĠĠĠ Ġval Ġthis Node : ĠAt to Node , ĊĠĠĠĠĠĠĠ Ġval Ġgenesis At to Transaction : ĠAt to Transaction , ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Service : ĠTransaction Service , ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Repository : ĠTransaction Repository , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠĠĠĠĠ Ġ@ Post Construct ĊĠĠĠĠĠĠĠ Ġfun Ġcheck () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġany Account Change Ġ= Ġtransaction Repository . findFirst () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( any Account Change Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Ġ= Ġgenesis At to Transaction . block Ġas ĠAt to Open Block ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= ĠAccount ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey Ġ= Ġblock . publicKey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ 0 u , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġ 0 u , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentative Ġ= ĠAt to PublicKey ( ByteArray ( 3 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbalance Ġ= ĠAt to Amount . min , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Hash Ġ= ĠAt to Hash ( ByteArray ( 3 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Timestamp Ġ= ĠInstant . MIN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= ĠTransaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= Ġblock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature Ġ= Ġgenesis At to Transaction . signature , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork Ġ= Ġgenesis At to Transaction . work , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Timestamp Ġ= ĠInstant . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Service . save ( account , Ġtransaction ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= Ġthis Node . network ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġgenesis At to Transaction . hash ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Initialized Ġ$ network Ġdatabase Ġwith Ġgenesis Ġtransaction Ġhash Ġ$ hash " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( transaction Repository . findFirst By PublicKey ( genesis At to Transaction . block . publicKey ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Database Ġinitialized Ġbut Ġdoesn 't Ġcontains Ġcurrent Ġgenesis Ġaccount ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }