@ file : Use Serial izers ( Chain Id Byte Serializer :: class , ĠHash Serializer :: class ) Ċ Ċ package Ġorg . know ledger . ledger . storage . block header Ċ Ċ import Ġkotlinx . serialization . Binary Format Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . Use Serial izers Ċ import Ġorg . know ledger . ledger . config . Block Params Ċ import Ġorg . know ledger . ledger . config . Chain Id Ċ import Ġorg . know ledger . ledger . core . serial . Hash Serializer Ċ import Ġorg . know ledger . ledger . crypto . Hash Ċ import Ġorg . know ledger . ledger . serial . binary . Chain Id Byte Serializer Ċ import Ġorg . know ledger . ledger . storage . Nonce Re gen Ċ import Ġjava . time . Instant Ċ Ċ @ Serializable Ċ internal Ġdata Ġclass ĠBlock Header Impl ( ĊĠĠĠ Ġoverride Ġval Ġchain Id : ĠChain Id , ĊĠĠĠ Ġoverride Ġval Ġprevious Hash : ĠHash , ĊĠĠĠ Ġoverride Ġval Ġparams : ĠBlock Params , ĊĠĠĠ Ġprivate Ġvar Ġ_ mer kle Root : ĠHash Ġ= ĠHash . empty Hash , ĊĠĠĠ Ġoverride Ġval Ġseconds : ĠLong Ġ= ĠInstant . now (). epoch Second , ĊĠĠĠ Ġprivate Ġvar Ġ_ nonce : ĠLong Ġ= ĠLong . MIN _ VALUE Ċ ) Ġ: ĠBlock Header , ĠN once Re gen , ĊĠĠĠ ĠN once Reset , ĠMer kle Tree Update Ġ{ ĊĠĠĠ Ġoverride Ġval Ġnonce : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ nonce ĊĊĠĠĠ Ġoverride Ġval Ġmer kle Root : ĠHash ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ mer kle Root ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( ĊĠĠĠĠĠĠĠ Ġencoder : ĠBinary Format ĊĠĠĠ Ġ): ĠByteArray Ġ= ĊĠĠĠĠĠĠĠ Ġencoder . dump ( serializer (), Ġthis ) ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Mer kle Tree ( new Root : ĠHash ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ mer kle Root Ġ= Ġnew Root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnonce Reset () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ nonce Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnew Nonce () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ nonce ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclone (): ĠBlock Header Impl Ġ= ĊĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchain Id Ġ= Ġchain Id ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠBlock Header ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( chain Id Ġ!= Ġother . chain Id ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( previous Hash Ġ!= Ġother . previous Hash ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( params Ġ!= Ġother . params ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(_ mer kle Root Ġ!= Ġother . mer kle Root ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( seconds Ġ!= Ġother . seconds ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(_ nonce Ġ!= Ġother . nonce ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġchain Id . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġprevious Hash . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġparams . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ_ mer kle Root . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġseconds . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġ_ nonce . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊ Ċ }