package Ġorg . erg op l atform . wallet Ċ Ċ import Ġorg . erg op l atform . pers istance . Wallet Ċ import Ġorg . erg op l atform . pers istance . Wallet Address Ċ import Ġorg . erg op l atform . pers istance . Wallet State Ċ import Ġorg . erg op l atform . pers istance . Wallet Token Ċ import Ġorg . erg op l atform . wallet . addresses . ensure Wallet Address List Has First Address Ċ Ċ /** Ċ Ġ* Ġsums Ġup Ġall Ġbalances Ġof Ġderived Ġaddress Ċ Ġ*/ Ċ fun ĠWallet . get Balance ForAll Addresses (): ĠLong Ġ{ ĊĠĠĠ Ġreturn Ġstate . map Ġ{ Ġit . balance Ġ?: Ġ 0 Ġ}. sum () Ċ } Ċ Ċ /** Ċ Ġ* Ġsums Ġup Ġall Ġun confirmed Ġbalances Ġof Ġderived Ġaddress Ċ Ġ*/ Ċ fun ĠWallet . getUn confirmed Balance ForAll Addresses (): ĠLong Ġ{ ĊĠĠĠ Ġreturn Ġstate . map Ġ{ Ġit . un confirmed Balance Ġ?: Ġ 0 Ġ}. sum () Ċ } Ċ Ċ fun ĠWallet . get Tokens ForAll Addresses (): ĠList < Wallet Token > Ġ{ ĊĠĠĠ Ġ// Ġcombine Ġtokens Ġwith Ġsame Ġid Ġbut Ġdifferent Ġlist Ġentries ĊĠĠĠ Ġval Ġhash map Ġ= ĠHashMap < String , ĠWallet Token >() ĊĊĠĠĠ Ġtokens . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġhash map . put ( it . tokenId !! , Ġhash map . get ( it . tokenId )?. let Ġ{ Ġtoken In Map Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWallet Token ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ"", Ġit . wallet First Address , Ġit . tokenId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . amount Ġ?: Ġ 0 ) Ġ+ Ġ( token In Map . amount Ġ?: Ġ 0 ), Ġit . decimals , Ġit . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcombined Tokens Ġ= Ġhash map . values ĊĠĠĠ Ġreturn Ġif Ġ( combined Tokens . size Ġ< Ġtokens . size ) Ġcombined Tokens . toList () Ġelse Ġtokens Ċ } Ċ Ċ fun ĠWallet . get Tokens For Address ( address : ĠString ): ĠList < Wallet Token > Ġ{ ĊĠĠĠ Ġreturn Ġtokens . filter Ġ{ Ġit . public Address . equals ( address ) Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ return Ġderived Ġaddress Ġstring Ġwith Ġgiven Ġindex Ċ Ġ*/ Ċ fun ĠWallet . get Derived Address ( der ivation Idx : ĠInt ): ĠString ? Ġ{ ĊĠĠĠ Ġ// Ġedge Ġcase : Ġindex Ġ 0 Ġis Ġnot Ġ( always ) Ġpart Ġof Ġaddresses Ġtable ĊĠĠĠ Ġif Ġ( der ivation Idx Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwallet Config . first Address ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġaddresses . first OrNull Ġ{ Ġit . der ivation Index Ġ== Ġder ivation Idx Ġ} ?. public Address ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ return Ġderived Ġaddress Ġentity Ġwith Ġgiven Ġder ivation Ġindex Ċ Ġ*/ Ċ fun ĠWallet . get Derived Address Entity ( der ivation Idx : ĠInt ): ĠWallet Address ? Ġ{ ĊĠĠĠ Ġval Ġall Addresses Ġ= ĊĠĠĠĠĠĠĠ Ġensure Wallet Address List Has First Address ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddresses , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Config . first Address !! ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġall Addresses . first OrNull Ġ{ Ġit . der ivation Index Ġ== Ġder ivation Idx Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ return Ġderived Ġaddresses Ġlist , Ġmaking Ġsure Ġthat Ġ 0 Ġaddress Ġis Ġincluded Ġand Ġlist Ġis Ġsorted Ġby Ġidx Ċ Ġ*/ Ċ fun ĠWallet . get Sorted Derived Addresses List (): ĠList < Wallet Address > Ġ{ ĊĠĠĠ Ġval Ġret List Ġ= Ġensure Wallet Address List Has First Address ( ĊĠĠĠĠĠĠĠ Ġaddresses , ĊĠĠĠĠĠĠĠ Ġwallet Config . first Address !! ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġret List . sorted By Ġ{ Ġit . der ivation Index Ġ} Ċ } Ċ Ċ fun ĠWallet . getNum Of Addresses (): ĠInt Ġ{ ĊĠĠĠ Ġ// Ġedge Ġcase : Ġindex Ġ 0 Ġis Ġnot Ġ( always ) Ġpart Ġof Ġaddresses Ġtable ĊĠĠĠ Ġreturn Ġaddresses . filter Ġ{ Ġit . der ivation Index Ġ!= Ġ 0 Ġ}. size Ġ+ Ġ 1 Ċ } Ċ Ċ fun ĠWallet . getState For Address ( address : ĠString ): ĠWallet State ? Ġ{ ĊĠĠĠ Ġreturn Ġstate . filter Ġ{ Ġit . public Address . equals ( address ) Ġ}. first OrNull () Ċ }