package Ġme . dark ness yy k . chain . model Ċ Ċ import Ġme . dark ness yy k . chain . util . ByteArray Wrapper Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . security . Message Digest Ċ import Ġjava . security . NoSuch AlgorithmException Ċ import Ġjava . security . PublicKey Ċ import Ġjava . security . interfaces . RS AP ublic Key Ċ import Ġjava . util .* Ċ Ċ class ĠOutput ( ĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠDouble , ĊĠĠĠĠĠĠĠ Ġval Ġaddress : ĠPublicKey ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother . java Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġother Ġas ĠOutput ĊĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġoutput . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(( address Ġas ĠRS AP ublic Key ). public Exponent Ġ!= Ġ( output . address Ġas ĠRS AP ublic Key ). public Exponent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ(( address Ġas ĠRS AP ublic Key ). modulus Ġ!= Ġ( output . address Ġas ĠRS AP ublic Key ). modulus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhash Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġhash Ġ= Ġhash Ġ* Ġ 1 7 Ġ+ Ġvalue . toInt () Ġ* Ġ 1 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġhash Ġ= Ġhash Ġ* Ġ 3 1 Ġ+ Ġ( address Ġas ĠRS AP ublic Key ). public Exponent . hashCode () ĊĠĠĠĠĠĠĠ Ġhash Ġ= Ġhash Ġ* Ġ 3 1 Ġ+ Ġ( address Ġas ĠRS AP ublic Key ). modulus . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġhash ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠInput ( prev Hash : ĠByteArray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Index : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġprev Tx Hash : ĠByteArray Ġ= Ġprev Hash . copyOf () ĊĠĠĠ Ġvar Ġsignature : ĠByteArray ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ?. copyOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother . java Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġother Ġas ĠInput ĊĊĠĠĠĠĠĠĠ Ġif Ġ( prev Tx Hash . size Ġ!= Ġinput . prev Tx Hash . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġprev Tx Hash . indices ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġprev Tx Hash [ it ] Ġ!= Ġinput . prev Tx Hash [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġreturn Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( output Index Ġ!= Ġinput . output Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( signature !!. size Ġ!= Ġinput . signature !!. size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġsignature !!. indices . none Ġ{ Ġsignature ! ![ it ] Ġ!= Ġinput . signature ! ![ it ] Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhash Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġhash Ġ= Ġhash Ġ* Ġ 1 7 Ġ+ ĠArrays . hashCode ( prev Tx Hash ) ĊĠĠĠĠĠĠĠ Ġhash Ġ= Ġhash Ġ* Ġ 3 1 Ġ+ Ġoutput Index ĊĠĠĠĠĠĠĠ Ġhash Ġ= Ġhash Ġ* Ġ 3 1 Ġ+ ĠArrays . hashCode ( signature ) ĊĠĠĠĠĠĠĠ Ġreturn Ġhash ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠTransaction Ġ{ ĊĠĠĠ Ġvar Ġhash : ĠByteArray ? Ġ= Ġnull ĊĠĠĠ Ġval Ġinputs : ĠArrayList < Input > ĊĠĠĠ Ġval Ġoutputs : ĠArrayList < Output > ĊĠĠĠ Ġval Ġis Coin base : ĠBoolean ĊĊĠĠĠ Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġhash Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinputs Ġ= ĠArrayList < Input >() ĊĠĠĠĠĠĠĠ Ġoutputs Ġ= ĠArrayList < Output >() ĊĠĠĠĠĠĠĠ Ġis Coin base Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( tx : ĠTransaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhash Ġ= Ġtx . hash !!. clone () ĊĠĠĠĠĠĠĠ Ġinputs Ġ= ĠArrayList ( tx . inputs ) ĊĠĠĠĠĠĠĠ Ġoutputs Ġ= ĠArrayList ( tx . outputs ) ĊĠĠĠĠĠĠĠ Ġis Coin base Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( coin : ĠDouble , Ġaddress : ĠPublicKey ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Coin base Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinputs Ġ= ĠArrayList < Input >() ĊĠĠĠĠĠĠĠ Ġoutputs Ġ= ĠArrayList < Output >() ĊĠĠĠĠĠĠĠ Ġadd Output ( coin , Ġaddress ) ĊĠĠĠĠĠĠĠ Ġfinalize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Input ( prev Tx Hash : ĠByteArray , Ġoutput Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠInput ( prev Tx Hash , Ġoutput Index ) ĊĠĠĠĠĠĠĠ Ġinputs . add ( input ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Output ( value : ĠDouble , Ġaddress : ĠPublicKey ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠOutput ( value , Ġaddress ) ĊĠĠĠĠĠĠĠ Ġoutputs . add ( output ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Input ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinputs . remove At ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Input ( ut : ĠU TX O ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġinputs . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġinputs [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Ġ= ĠU TX O ( input . prev Tx Hash , Ġinput . output Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( u Ġ== Ġut ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinputs . remove At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget RawData To Sign ( index : ĠInt ): ĠByteArray ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ith Ġinput Ġand Ġall Ġoutputs ĊĠĠĠĠĠĠĠ Ġval Ġsig Data Ġ= ĠArrayList < Byte >() ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġinputs . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġinputs [ index ] ĊĠĠĠĠĠĠĠ Ġval Ġprev Tx Hash Ġ= Ġinput . prev Tx Hash ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠByteBuffer . allocate ( Integer . SIZE Ġ/ Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġb . put Int ( input . output Index ) ĊĠĠĠĠĠĠĠ Ġval Ġoutput Index Ġ= Ġb . array () ĊĠĠĠĠĠĠĠ Ġprev Tx Hash . indices . map To ( sig Data ) Ġ{ Ġprev Tx Hash [ it ] Ġ} ĊĠĠĠĠĠĠĠ Ġoutput Index . indices . map To ( sig Data ) Ġ{ Ġoutput Index [ it ] Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( output Ġin Ġoutputs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbo Ġ= ĠByteBuffer . allocate ( java . lang . Double . SIZE Ġ/ Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbo . put Double ( output . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġbo . array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Exponent Ġ= Ġ( output . address Ġas ĠRS AP ublic Key ). public Exponent . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Mod ulus Ġ= Ġ( output . address Ġas ĠRS AP ublic Key ). modulus . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . indices . map To ( sig Data ) Ġ{ Ġvalue [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Exponent . indices . map To ( sig Data ) Ġ{ Ġaddress Exponent [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Mod ulus . indices . map To ( sig Data ) Ġ{ Ġaddress Mod ulus [ it ] Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsig Data . toByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Signature ( signature : ĠByteArray , Ġindex : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinputs [ index ]. signature Ġ= Ġsignature ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġraw Tx : ĠByteArray ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Tx Ġ= ĠArrayList < Byte >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( input Ġin Ġinputs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Tx Hash Ġ= Ġinput . prev Tx Hash ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠByteBuffer . allocate ( Integer . SIZE Ġ/ Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . put Int ( input . output Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Index Ġ= Ġb . array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġinput . signature ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Tx Hash . indices . map To ( raw Tx ) Ġ{ Ġprev Tx Hash [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Index . indices . map To ( raw Tx ) Ġ{ Ġoutput Index [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( signature Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature . indices . map To ( raw Tx ) Ġ{ Ġsignature [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( output Ġin Ġoutputs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠByteBuffer . allocate ( java . lang . Double . SIZE Ġ/ Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . put Double ( output . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġb . array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Exponent Ġ= Ġ( output . address Ġas ĠRS AP ublic Key ). public Exponent . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Mod ulus Ġ= Ġ( output . address Ġas ĠRS AP ublic Key ). modulus . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . indices . map To ( raw Tx ) Ġ{ Ġvalue [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Exponent . indices . map To ( raw Tx ) Ġ{ Ġaddress Exponent [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Mod ulus . indices . map To ( raw Tx ) Ġ{ Ġaddress Mod ulus [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġraw Tx . toByteArray () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfinalize () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmd Ġ= ĠMessage Digest . getInstance (" SHA - 2 5 6 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmd . update ( raw Tx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash Ġ= Ġmd . digest () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( x : ĠNoSuch AlgorithmException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx . printStackTrace ( System . err ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Input ( index : ĠInt ): ĠInput ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġinputs . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinputs [ index ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Output ( index : ĠInt ): ĠOutput ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ< Ġoutputs . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoutputs [ index ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnum Inputs (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinputs . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnum Outputs (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġoutputs . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( java Class Ġ!= Ġother . java Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtx Ġ= Ġother Ġas ĠTransaction ? ĊĠĠĠĠĠĠĠ Ġ// Ġinputs Ġand Ġoutputs Ġshould Ġbe Ġsame ĊĠĠĠĠĠĠĠ Ġif Ġ( tx !!. num Inputs () Ġ!= Ġnum Inputs ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ( 0 .. num Inputs () Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġget Input ( it ) Ġ!= Ġtx . getInput ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġreturn Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( tx . num Outputs () Ġ!= Ġnum Outputs ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( 0 .. num Outputs () Ġ- Ġ 1 ). none Ġ{ Ġget Output ( it ) Ġ!= Ġtx . getOutput ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhash Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. num Inputs () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash Ġ= Ġhash Ġ* Ġ 3 1 Ġ+ Ġget Input ( i ) !!. hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. num Outputs () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash Ġ= Ġhash Ġ* Ġ 3 1 Ġ+ Ġget Output ( i ) !!. hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhash ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠTransaction Pool Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpool : ĠHashMap < ByteArray Wrapper , ĠTransaction > ĊĊĠĠĠ Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġpool Ġ= ĠHashMap < ByteArray Wrapper , ĠTransaction >() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( tx Pool : ĠTransaction Pool ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpool Ġ= ĠHashMap < ByteArray Wrapper , ĠTransaction >( tx Pool . pool ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Transaction ( tx : ĠTransaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhash Ġ= ĠByteArray Wrapper ( tx . hash !! ) ĊĠĠĠĠĠĠĠ Ġpool . put ( hash , Ġtx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Transaction ( tx Hash : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhash Ġ= ĠByteArray Wrapper ( tx Hash ) ĊĠĠĠĠĠĠĠ Ġpool . remove ( hash ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Transaction ( tx Hash : ĠByteArray ): ĠTransaction ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhash Ġ= ĠByteArray Wrapper ( tx Hash ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpool [ hash ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtransactions : ĠList < Transaction > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpool . values . toList () ĊĠĠĠĠĠĠĠ Ġ} Ċ }