/** Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠT ari ĠProject Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ċ Ġ* Ġwithout Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ċ Ġ* Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ 1 . ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ 2 . ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ċ Ġ* Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ċ Ġ* Ġdocumentation Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ 3 . ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder Ġnor Ġthe Ġnames Ġof Ċ Ġ* Ġits Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ċ Ġ* Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND Ċ Ġ* ĠCONTRIBUTORS Ġ" AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , Ċ Ġ* ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES Ċ Ġ* ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE Ċ Ġ* ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR Ċ Ġ* ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , Ċ Ġ* ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT Ċ Ġ* ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; Ċ Ġ* ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) Ċ Ġ* ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN Ċ Ġ* ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE Ċ Ġ* ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS Ċ Ġ* ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġcom . t ari . android . wallet . service Ċ Ċ import Ġandroid . app .* Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . IB inder Ċ import Ġcom . or h ano but . logger . Logger Ċ import Ġcom . t ari . android . wallet . R Ċ import Ġcom . t ari . android . wallet . application . T ari Wallet Application Ċ import Ġcom . t ari . android . wallet . event . Event Ċ import Ġcom . t ari . android . wallet . event . EventBus Ċ import Ġcom . t ari . android . wallet . ffi .* Ċ import Ġcom . t ari . android . wallet . model .* Ċ import Ġcom . t ari . android . wallet . notification . Notification Helper Ċ import Ġcom . t ari . android . wallet . ui . activity . home . Home Activity Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġjava . math . BigInteger Ċ import Ġjavax . inject . Inject Ċ import Ġcom . t ari . android . wallet . model . Tx . Direction .* Ċ Ċ /** Ċ Ġ* ĠFore ground Ġwallet Ġservice . Ċ Ġ* Ċ Ġ* Ġ@ author ĠThe ĠT ari ĠDevelopment ĠTeam Ċ Ġ*/ Ċ class ĠWallet Service Ġ: ĠService (), ĠF FI Wallet Listener Adapter Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġnotification Ġid ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNOT IFICATION _ ID Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMESSAGE _ PREFIX Ġ= Ġ" Hello ĠT ari Ġfrom " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġapp : ĠT ari Wallet Application ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġwallet : ĠFF ITest Wallet ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġt ari REST Service : ĠT ari REST Service ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġnotification Helper : ĠNotification Helper ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠService Ġstub Ġimplementation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġservice Impl Ġ= ĠT ari Wallet ServiceImpl () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegistered Ġlisteners . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġlisteners Ġ= Ġmutable ListOf < T ari Wallet Service Listener >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġ( application Ġas ĠT ari Wallet Application ). app Component . inject ( this ) ĊĠĠĠĠĠĠĠ Ġwallet . listener Adapter Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġon Ġservice Ġstart - up . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent , Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnotification Ġ= Ġnotification Helper . build Foreground Service Notification () ĊĠĠĠĠĠĠĠ Ġstart Foreground ( NOTIFICATION _ ID , Ġnotification ) ĊĠĠĠĠĠĠĠ ĠLogger . d (" T ari Ġwallet Ġservice Ġstarted .") ĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ NOT _ STICK Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBound Ġservice . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ?): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d (" Service Ġbound .") ĊĠĠĠĠĠĠĠ Ġreturn Ġservice Impl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Un bind ( intent : ĠIntent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d (" Service Ġun bound .") ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Un bind ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġbroadcast Ġis Ġmade Ġon Ġdestroy Ġto Ġget Ġthe Ġservice Ġrunning Ġagain . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d (" Service Ġdestroyed .") ĊĠĠĠĠĠĠĠ Ġsend Broadcast ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠService Restart Broadcast Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tx Broadcast ( completed : ĠCompleted Tx ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d (" Tx Ġ${ completed . id } Ġbroadcast .") ĊĠĠĠĠĠĠĠ Ġ// Ġpost Ġevent Ġto Ġbus Ġfor Ġthe Ġinternal Ġlisteners ĊĠĠĠĠĠĠĠ ĠEvent Bus . post ( Event . Wallet . Tx Broadcast ( completed )) ĊĠĠĠĠĠĠĠ Ġ// Ġnotify Ġexternal Ġlisteners ĊĠĠĠĠĠĠĠ Ġlisteners . iterator (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Tx Broadcast ( completed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tx M ined ( completed : ĠCompleted Tx ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d (" Tx Ġ${ completed . id } Ġm ined .") ĊĠĠĠĠĠĠĠ Ġ// Ġpost Ġevent Ġto Ġbus Ġfor Ġthe Ġinternal Ġlisteners ĊĠĠĠĠĠĠĠ ĠEvent Bus . post ( Event . Wallet . Tx M ined ( completed )) ĊĠĠĠĠĠĠĠ Ġ// Ġnotify Ġexternal Ġlisteners ĊĠĠĠĠĠĠĠ Ġlisteners . iterator (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Tx M ined ( completed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tx Received ( pending Inbound : ĠPending Inbound Tx ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d (" Tx Ġ${ pending Inbound . id } Ġreceived .") ĊĠĠĠĠĠĠĠ Ġ// Ġpost Ġevent Ġto Ġbus Ġfor Ġthe Ġinternal Ġlisteners ĊĊĠĠĠĠĠĠĠ ĠEvent Bus . post ( Event . Wallet . Tx Received ( pending Inbound )) ĊĠĠĠĠĠĠĠ Ġ// Ġmanage Ġnotifications ĊĠĠĠĠĠĠĠ Ġpost Tx Notification ( pending Inbound ) ĊĠĠĠĠĠĠĠ Ġ// Ġnotify Ġlisteners ĊĠĠĠĠĠĠĠ Ġlisteners . iterator (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Tx Received ( pending Inbound ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tx Reply Received ( completed : ĠCompleted Tx ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d (" Tx Ġ${ completed . id } Ġreply Ġreceived .") ĊĠĠĠĠĠĠĠ Ġ// Ġpost Ġevent Ġto Ġbus Ġfor Ġthe Ġinternal Ġlisteners ĊĠĠĠĠĠĠĠ ĠEvent Bus . post ( Event . Wallet . Tx Reply Received ( completed )) ĊĠĠĠĠĠĠĠ Ġ// Ġnotify Ġexternal Ġlisteners ĊĠĠĠĠĠĠĠ Ġlisteners . iterator (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Tx Reply Received ( completed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Tx Final ized ( completed : ĠCompleted Tx ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d (" Tx Ġ${ completed . id } Ġfinal ized .") ĊĠĠĠĠĠĠĠ Ġ// Ġpost Ġevent Ġto Ġbus Ġfor Ġthe Ġinternal Ġlisteners ĊĠĠĠĠĠĠĠ ĠEvent Bus . post ( Event . Wallet . Tx Final ized ( completed )) ĊĠĠĠĠĠĠĠ Ġ// Ġnotify Ġexternal Ġlisteners ĊĠĠĠĠĠĠĠ Ġlisteners . iterator (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Tx Final ized ( completed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Discovery Complete ( tx Id : ĠBigInteger , Ġsuccess : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d (" Tx Ġ$ tx Id Ġdiscovery Ġcompleted . ĠSuccess : Ġ$ success ") ĊĠĠĠĠĠĠĠ Ġ// Ġpost Ġevent Ġto Ġbus ĊĠĠĠĠĠĠĠ ĠEvent Bus . post ( Event . Wallet . Discovery Complete ( Tx Id ( tx Id ), Ġsuccess )) ĊĠĠĠĠĠĠĠ Ġ// Ġnotify Ġexternal Ġlisteners ĊĠĠĠĠĠĠĠ Ġlisteners . iterator (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Discovery Complete ( Tx Id ( tx Id ), Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Base Node Sync Complete ( rx Id : ĠBigInteger , Ġsuccess : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . d (" Request Ġ$ rx Id Ġbase Ġnode Ġsync Ġcomplete . ĠSuccess : Ġ$ success ") ĊĠĠĠĠĠĠĠ Ġ// Ġpost Ġevent Ġto Ġbus ĊĠĠĠĠĠĠĠ ĠEvent Bus . post ( Event . Wallet . Base Node Sync Complete ( Rx Id ( rx Id ), Ġsuccess )) ĊĠĠĠĠĠĠĠ Ġ// Ġnotify Ġexternal Ġlisteners ĊĠĠĠĠĠĠĠ Ġlisteners . iterator (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Base Node Sync Complete ( Rx Id ( rx Id ), Ġsuccess ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Tx Notification ( tx : ĠTx ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġapp Ġis Ġback gro unded , Ġdisplay Ġheads - up Ġnotification ĊĠĠĠĠĠĠĠ Ġif Ġ(! app . isIn Foreground Ġ|| Ġapp . current Activity Ġ! is ĠHome Activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Helper . post Custom Layout Tx Notification ( tx ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠImplementation Ġof Ġthe ĠA IDL Ġservice Ġdefinition . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠT ari Wallet ServiceImpl Ġ: ĠT ari Wallet Service . Stub () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMaps Ġthe Ġthrowable Ġinto Ġthe Ġerror Ġout Ġparameter . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmap Throwable Into Error ( throwable : ĠThrowable , Ġerror : ĠWallet Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . code Ġ= ĠWallet ErrorCode . UNKNOWN _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror . message Ġ= Ġthrowable . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throwable Ġis ĠF FI Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throwable . error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . code Ġ= ĠWallet ErrorCode . from Code ( throwable . error . code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Contact By PublicKey HexString ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts : ĠList < Contact >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhex String : ĠString ĊĠĠĠĠĠĠĠ Ġ): ĠContact ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts . iterator (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . publicKey . hex String Ġ== Ġhex String ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġregister Listener ( listener : ĠT ari Wallet Service Listener ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . add ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . as Binder (). link To Death ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremove Successful Ġ= Ġlisteners . remove ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . i (" Listener Ġdi ed . ĠRemove Ġsuccessful : Ġ$ remove Successful .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġunregister Listener ( listener : ĠT ari Wallet Service Listener ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlisteners . remove ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget PublicKey HexString ( error : ĠWallet Error ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet . get PublicKey (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Throwable Into Error ( throwable , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWallet Ġbalance Ġinfo . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Balance Info ( error : ĠWallet Error ): ĠBalance Info ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBalance Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMicro T ari ( wallet . get Available Balance ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMicro T ari ( wallet . get Pending Incoming Balance ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMicro T ari ( wallet . get Pending Outgoing Balance ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Throwable Into Error ( throwable , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġall Ġcontacts . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Contacts ( error : ĠWallet Error ): ĠList < Contact >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontacts FF I Ġ= Ġwallet . get Contacts () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontacts Ġ= Ġmutable ListOf < Contact >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcontacts FF I . getLength ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontact FF I Ġ= Ġcontacts FF I . get At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey FF I Ġ= Ġcontact FF I . get PublicKey () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContact ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey From FF I ( publicKey FF I ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact FF I . get Alias () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdestroy Ġnative Ġobjects ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdestroy Ġnative Ġcollection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontacts FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontacts . sorted With ( compare By Ġ{ Ġit . alias Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . code Ġ= ĠWallet ErrorCode . UNKNOWN _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . message Ġ= Ġthrowable . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throwable Ġis ĠF FI Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( throwable . error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . code Ġ= ĠWallet ErrorCode . from Code ( throwable . error . code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġall Ġusers Ġthat Ġthis Ġwallet Ġhad Ġa Ġtransaction Ġwith , Ġand Ġreturns Ġa Ġlist ĊĠĠĠĠĠĠĠĠ Ġ* Ġof Ġmost Ġrecent Ġones , Ġlimited Ġby Ġthe Ġlimit Ġparameter . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Recent Tx Users ( max Count : ĠInt , Ġerror : ĠWallet Error ): ĠMutable List < User >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpre - fetch Ġcont acs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Contacts Ġ= Ġget Contacts ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . code Ġ!= ĠWallet ErrorCode . NO _ ERROR Ġ|| Ġall Contacts Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt xs Ġ= ĠArrayList < Tx >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcollect Ġall Ġtransactions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt xs . addAll ( get Pending Inbound T xs ( all Contacts )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt xs . addAll ( get Pending Outbound T xs ( all Contacts )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt xs . addAll ( get Completed T xs ( all Contacts )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsort Ġthem Ġby Ġdescending Ġtimestamp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted T xs Ġ= Ġt xs . sorted With ( compare By Descending Ġ{ Ġit . timestamp Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecent Tx Users Ġ= Ġmutable ListOf < User >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( tx Ġin Ġsorted T xs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recent Tx Users . size Ġ>= Ġmax Count ) Ġ{ Ġ// Ġcomes Ġfirst Ġfor Ġthe Ġcase Ġof Ġ( max Count Ġ<= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! recent Tx Users . contains ( tx . user )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtx User Ġ= Ġget Contact By PublicKey HexString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx . user . publicKey . hex String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġtx . user ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecent Tx Users . add ( tx User ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrecent Tx Users ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInternal Ġfunction Ġto Ġget Ġall Ġcompleted Ġtransactions . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġall Contacts Ġpre - f etched Ġlist Ġof Ġall Ġcontacts ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Completed T xs ( all Contacts : ĠList < Contact >): ĠList < Completed Tx > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompleted T xs FF I Ġ= Ġwallet . get Completed T xs () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompleted T xs Ġ= Ġmutable ListOf < Completed Tx >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcompleted T xs FF I . getLength ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompleted T xFF I Ġ= Ġcompleted T xs FF I . get At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompleted Tx Ġ= Ġcompleted Tx From FF I ( completed T xFF I , Ġall Contacts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted T xFF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted T xs . add ( completed Tx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdestroy Ġnative Ġcollection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted T xs FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcompleted T xs ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġall Ġcompleted Ġtransactions . ĊĠĠĠĠĠĠĠĠ Ġ* ĠClient - facing Ġfunction . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Completed T xs ( error : ĠWallet Error ): ĠList < Completed Tx >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontacts Ġ= Ġget Contacts ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . code Ġ!= ĠWallet ErrorCode . NO _ ERROR Ġ|| Ġcontacts Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Completed T xs ( contacts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Throwable Into Error ( throwable , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInternal Ġfunction Ġto Ġget Ġa Ġcompleted Ġtransaction Ġby Ġid . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġid Ġtx Ġid ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġall Contacts Ġpre - f etched Ġlist Ġof Ġall Ġcontacts ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Completed Tx ById ( id : ĠTx Id , Ġall Contacts : ĠList < Contact >): ĠCompleted Tx Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompleted T xFF I Ġ= Ġwallet . get Completed Tx ById ( id . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompleted Tx Ġ= Ġcompleted Tx From FF I ( completed T xFF I , Ġall Contacts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted T xFF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcompleted Tx ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġcompleted Ġtransaction Ġby Ġid . ĊĠĠĠĠĠĠĠĠ Ġ* ĠClient - facing Ġfunction . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Completed Tx ById ( id : ĠTx Id , Ġerror : ĠWallet Error ): ĠCompleted Tx ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontacts Ġ= Ġget Contacts ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . code Ġ!= ĠWallet ErrorCode . NO _ ERROR Ġ|| Ġcontacts Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Completed Tx ById ( id , Ġcontacts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Throwable Into Error ( throwable , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInternal Ġfunction Ġto Ġget Ġall Ġpending Ġinbound Ġtransactions . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġall Contacts Ġpre - f etched Ġlist Ġof Ġall Ġcontacts ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Pending Inbound T xs ( all Contacts : ĠList < Contact >): ĠList < Pending Inbound Tx > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Inbound T xs FF I Ġ= Ġwallet . get Pending Inbound T xs () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Inbound T xs Ġ= Ġmutable ListOf < Pending Inbound Tx >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġpending Inbound T xs FF I . getLength ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Inbound T xFF I Ġ= Ġpending Inbound T xs FF I . get At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Inbound Tx Ġ= Ġpending Inbound Tx From FF I ( pending Inbound T xFF I , Ġall Contacts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Inbound T xFF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Inbound T xs . add ( pending Inbound Tx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdestroy Ġnative Ġcollection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Inbound T xs FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpending Inbound T xs ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġall Ġpending Ġinbound Ġtransactions . ĊĠĠĠĠĠĠĠĠ Ġ* ĠClient - facing Ġfunction . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Pending Inbound T xs ( error : ĠWallet Error ): ĠList < Pending Inbound Tx >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontacts Ġ= Ġget Contacts ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . code Ġ!= ĠWallet ErrorCode . NO _ ERROR Ġ|| Ġcontacts Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Pending Inbound T xs ( contacts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Throwable Into Error ( throwable , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInternal Ġfunction Ġto Ġget Ġa Ġpending Ġinbound Ġtransaction Ġby Ġid . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġid Ġtx Ġid ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġall Contacts Ġpre - f etched Ġlist Ġof Ġall Ġcontacts ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Pending Inbound Tx ById ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠTx Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts : ĠList < Contact > ĊĠĠĠĠĠĠĠ Ġ): ĠPending Inbound Tx Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Inbound T xFF I Ġ= Ġwallet . get Pending Inbound Tx ById ( id . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Inbound Tx Ġ= Ġpending Inbound Tx From FF I ( pending Inbound T xFF I , Ġall Contacts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Inbound T xFF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpending Inbound Tx ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġpending Ġinbound Ġtransaction Ġby Ġid . ĊĠĠĠĠĠĠĠĠ Ġ* ĠClient - facing Ġfunction . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Pending Inbound Tx ById ( id : ĠTx Id , Ġerror : ĠWallet Error ): ĠPending Inbound Tx ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcall Ġthe Ġcorresponding Ġfunction Ġwith Ġfresh Ġcontacts Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontacts Ġ= Ġget Contacts ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . code Ġ!= ĠWallet ErrorCode . NO _ ERROR Ġ|| Ġcontacts Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Pending Inbound Tx ById ( id , Ġcontacts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Throwable Into Error ( throwable , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInternal Ġfunction Ġto Ġget Ġall Ġpending Ġoutbound Ġtransactions . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġall Contacts Ġpre - f etched Ġlist Ġof Ġall Ġcontacts ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Pending Outbound T xs ( all Contacts : ĠList < Contact >): ĠList < Pending Outbound Tx > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Outbound T xs FF I Ġ= Ġwallet . get Pending Outbound T xs () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Outbound T xs Ġ= Ġmutable ListOf < Pending Outbound Tx >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġpending Outbound T xs FF I . getLength ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Outbound T xFF I Ġ= Ġpending Outbound T xs FF I . get At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Outbound Tx Ġ= Ġpending Outbound Tx From FF I ( pending Outbound T xFF I , Ġall Contacts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Outbound T xFF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Outbound T xs . add ( pending Outbound Tx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdestroy Ġnative Ġcollection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Outbound T xs FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpending Outbound T xs ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġall Ġpending Ġoutbound Ġtransactions . ĊĠĠĠĠĠĠĠĠ Ġ* ĠClient - facing Ġfunction . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Pending Outbound T xs ( error : ĠWallet Error ): ĠList < Pending Outbound Tx >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcall Ġthe Ġcorresponding Ġfunction Ġwith Ġfresh Ġcontacts Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontacts Ġ= Ġget Contacts ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . code Ġ!= ĠWallet ErrorCode . NO _ ERROR Ġ|| Ġcontacts Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Pending Outbound T xs ( contacts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Throwable Into Error ( throwable , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠInternal Ġfunction Ġto Ġget Ġa Ġpending Ġoutbound Ġtransaction Ġby Ġid . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġid Ġtx Ġid ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġall Contacts Ġpre - f etched Ġlist Ġof Ġall Ġcontacts ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Pending Outbound Tx ById ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠTx Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts : ĠList < Contact > ĊĠĠĠĠĠĠĠ Ġ): ĠPending Outbound Tx Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Outbound T xFF I Ġ= Ġwallet . get Pending Outbound Tx ById ( id . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Outbound Tx Ġ= Ġpending Outbound Tx From FF I ( pending Outbound T xFF I , Ġall Contacts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Outbound T xFF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpending Outbound Tx ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet Ġpending Ġoutbound Ġtransaction Ġby Ġid . ĊĠĠĠĠĠĠĠĠ Ġ* ĠClient - facing Ġfunction . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Pending Outbound Tx ById ( id : ĠTx Id , Ġerror : ĠWallet Error ): ĠPending Outbound Tx ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcall Ġthe Ġcorresponding Ġfunction Ġwith Ġfresh Ġcontacts Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontacts Ġ= Ġget Contacts ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . code Ġ!= ĠWallet ErrorCode . NO _ ERROR Ġ|| Ġcontacts Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Pending Outbound Tx ById ( id , Ġcontacts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Throwable Into Error ( throwable , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsend T ari ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser : ĠUser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamount : ĠMicro T ari , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfee : ĠMicro T ari , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror : ĠWallet Error ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey FF I Ġ= ĠF FI PublicKey ( HexString ( user . publicKey . hex String )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġwallet . send Tx ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey FF I , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfee . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Throwable Into Error ( throwable , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġregion ĠF FI Ġto Ġmodel Ġextraction Ġfunctions ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠpublicKey From FF I ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey FF I : ĠF FI PublicKey ĊĠĠĠĠĠĠĠ Ġ): ĠPublicKey Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPublicKey ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey FF I . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey FF I . get Emoji NodeId () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcompleted Tx From FF I ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted T xFF I : ĠF FI Completed Tx , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts : ĠList < Contact > ĊĠĠĠĠĠĠĠ Ġ): ĠCompleted Tx Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource PublicKey FF I Ġ= Ġcompleted T xFF I . getSource PublicKey () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination PublicKey FF I Ġ= Ġcompleted T xFF I . get Destination PublicKey () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġwhen Ġ( completed T xFF I . getStatus ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . TX _ NULL _ ERROR Ġ-> ĠStatus . TX _ NULL _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . BRO ADCAST Ġ-> ĠStatus . BRO ADCAST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . COMPLETED Ġ-> ĠStatus . COMPLETED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . MIN ED Ġ-> ĠStatus . MIN ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . IMPORTED Ġ-> ĠStatus . IMPORTED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . PENDING Ġ-> ĠStatus . PENDING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . UNKNOWN Ġ-> ĠStatus . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirection : ĠTx . Direction ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġpublic Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠWallet Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey HexString Ġ= Ġget PublicKey HexString ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . code Ġ!= ĠWallet ErrorCode . NO _ ERROR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠF FI Exception ( message Ġ= Ġerror . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( publicKey HexString Ġ== Ġdestination PublicKey FF I . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= ĠIN BOUND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser PublicKey Ġ= ĠPublicKey ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource PublicKey FF I . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource PublicKey FF I . get Emoji NodeId () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġget Contact By PublicKey HexString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource PublicKey FF I . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: ĠUser ( user PublicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= ĠOUT BOUND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser PublicKey Ġ= ĠPublicKey ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination PublicKey FF I . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination PublicKey FF I . get Emoji NodeId () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġget Contact By PublicKey HexString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination PublicKey FF I . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: ĠUser ( user PublicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompleted Tx Ġ= ĠCompleted Tx ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted T xFF I . getId (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMicro T ari ( completed T xFF I . get Amount ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted T xFF I . get Fee (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted T xFF I . getTimestamp (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted T xFF I . getMessage (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdestroy Ġnative Ġobjects ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource PublicKey FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination PublicKey FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcompleted Tx ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġpending Inbound Tx From FF I ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Inbound T xFF I : ĠF FI Pending Inbound Tx , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts : ĠList < Contact > ĊĠĠĠĠĠĠĠ Ġ): ĠPending Inbound Tx Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġwhen Ġ( pending Inbound T xFF I . getStatus ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . TX _ NULL _ ERROR Ġ-> ĠStatus . TX _ NULL _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . BRO ADCAST Ġ-> ĠStatus . BRO ADCAST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . COMPLETED Ġ-> ĠStatus . COMPLETED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . MIN ED Ġ-> ĠStatus . MIN ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . IMPORTED Ġ-> ĠStatus . IMPORTED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . PENDING Ġ-> ĠStatus . PENDING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . UNKNOWN Ġ-> ĠStatus . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource PublicKey FF I Ġ= Ġpending Inbound T xFF I . getSource PublicKey () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser PublicKey Ġ= ĠPublicKey ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource PublicKey FF I . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource PublicKey FF I . get Emoji NodeId () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Contact By PublicKey HexString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource PublicKey FF I . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: ĠUser ( user PublicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Inbound Tx Ġ= ĠPending Inbound Tx ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Inbound T xFF I . getId (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMicro T ari ( pending Inbound T xFF I . get Amount ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Inbound T xFF I . getTimestamp (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Inbound T xFF I . getMessage (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdestroy Ġnative Ġobjects ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource PublicKey FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpending Inbound Tx ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġpending Outbound Tx From FF I ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Outbound T xFF I : ĠF FI Pending Outbound Tx , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts : ĠList < Contact > ĊĠĠĠĠĠĠĠ Ġ): ĠPending Outbound Tx Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġwhen Ġ( pending Outbound T xFF I . getStatus ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . TX _ NULL _ ERROR Ġ-> ĠStatus . TX _ NULL _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . BRO ADCAST Ġ-> ĠStatus . BRO ADCAST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . COMPLETED Ġ-> ĠStatus . COMPLETED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . MIN ED Ġ-> ĠStatus . MIN ED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . IMPORTED Ġ-> ĠStatus . IMPORTED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . PENDING Ġ-> ĠStatus . PENDING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Status . UNKNOWN Ġ-> ĠStatus . UNKNOWN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination PublicKey FF I Ġ= Ġpending Outbound T xFF I . get Destination PublicKey () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser PublicKey Ġ= ĠPublicKey ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination PublicKey FF I . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination PublicKey FF I . get Emoji NodeId () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget Contact By PublicKey HexString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Contacts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination PublicKey FF I . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: ĠUser ( user PublicKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Outbound Tx Ġ= ĠPending Outbound Tx ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Outbound T xFF I . getId (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMicro T ari ( pending Outbound T xFF I . get Amount ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Outbound T xFF I . getTimestamp (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Outbound T xFF I . getMessage (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdestroy Ġnative Ġobjects ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination PublicKey FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpending Outbound Tx ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrequest Test net T ari ( error : ĠWallet Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġpublic Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey HexString Ġ= Ġget PublicKey HexString ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error . code Ġ!= ĠWallet ErrorCode . NO _ ERROR Ġ|| ĠpublicKey HexString Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Test net T ari Request Failed (" Service Ġerror .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ"$ MESSAGE _ PREFIX Ġ$ publicKey HexString " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsigning Ġ= Ġwallet . sign Message ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġsigning . split ("| ")[ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnonce Ġ= Ġsigning . split ("| ")[ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= ĠTest net T ari Allocate Request ( signature , Ġnonce ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġt ari REST Service . request Max Test net T ari ( publicKey HexString , Ġrequest Body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . enqueue ( object Ġ: ĠCallback < Test net T ari Allocate Max Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Test net T ari Allocate Max Response >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . code Ġ= ĠWallet ErrorCode . UNKNOWN _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Test net T ari Request Failed ( getString ( R . string . wallet _ service _ error _ no _ internet _ connection )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠCall < Test net T ari Allocate Max Response >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠResponse < Test net T ari Allocate Max Response > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . code () Ġin Ġ 2 0 0 .. 2 0 9 Ġ&& Ġbody Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsender PublicKey FF I Ġ= ĠF FI PublicKey ( HexString ( body . return Wallet Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsender PublicKey Ġ= ĠpublicKey From FF I ( sender PublicKey FF I ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġcontact ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI Contact (" T ari Bot ", Ġsender PublicKey FF I ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet . add Update Contact ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġimport ĠU TX Os ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġbody . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI PrivateKey ( HexString ( key . key )). also Ġ{ Ġs pending PrivateKey FF I Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Ġ= ĠBigInteger ( key . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet . import UT XO ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . home _ t ari _ bot _ some _ t ari _ to _ get _ started ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs pending PrivateKey FF I , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender PublicKey FF I ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs pending PrivateKey FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdestroy Ġnative Ġobjects ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender PublicKey FF I . destroy () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpost Ġevent Ġto Ġbus Ġfor Ġthe Ġinternal Ġlisteners ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . post ( Event . Test net . Test net T ari Request Successful ( sender PublicKey )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnotify Ġexternal Ġlisteners ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . iterator (). forEach Ġ{ Ġlistener Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Test net T ari Request Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpost Ġnotification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Completed T xs ( Wallet Error ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . direction Ġ== ĠIN BOUND Ġ&& Ġit . user . publicKey Ġ== Ġsender PublicKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġtx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Tx Notification ( tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . code Ġ= ĠWallet ErrorCode . UNKNOWN _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . wallet _ service _ error _ test net _ t ari _ request ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . error Body ()?. string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . message Ġ= ĠerrorMessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Test net T ari Request Failed ( errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġnotify Test net T ari Request Failed ( error : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpost Ġevent Ġto Ġbus Ġfor Ġthe Ġinternal Ġlisteners ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Bus . post ( Event . Test net . Test net T ari Request Error ( error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnotify Ġexternal Ġlisteners ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . iterator (). forEach Ġ{ Ġlistener Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Test net T ari Request Error ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate Contact Alias ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey : ĠPublicKey , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontact Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror : ĠWallet Error ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey FF I Ġ= ĠF FI PublicKey ( HexString ( publicKey . hex String )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontact Ġ= ĠF FI Contact ( contact Name , ĠpublicKey FF I ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet . add Update Contact ( contact ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠpublicKey FF I . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Throwable Into Error ( throwable , Ġerror ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġpublic Ġkey Ġconstructed Ġfrom Ġinput Ġemoji Ġid . ĠNull Ġif Ġthe Ġemoji Ġid Ġis Ġinvalid ĊĠĠĠĠĠĠĠĠ Ġ* Ġor Ġit Ġdoes Ġnot Ġcorrespond Ġto Ġa Ġpublic Ġkey . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget PublicKey From Emoji Id ( emoji Id : ĠString ?): ĠPublicKey ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI PublicKey ( emoji Id Ġ?: Ġ""). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey Ġ= ĠpublicKey From FF I ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠpublicKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġpublic Ġkey Ġconstructed Ġfrom Ġinput Ġpublic Ġkey Ġhex Ġstring Ġid . ĠNull Ġif Ġthe Ġemoji Ġid ĊĠĠĠĠĠĠĠĠ Ġ* Ġis Ġinvalid Ġor Ġit Ġdoes Ġnot Ġcorrespond Ġto Ġa Ġpublic Ġkey . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget PublicKey From HexString ( publicKey Hex : ĠString ?): ĠPublicKey ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF FI PublicKey ( HexString ( publicKey Hex Ġ?: Ġ" ")). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpublicKey Ġ= ĠpublicKey From FF I ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠpublicKey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġend region ĊĠĠĠ Ġ} Ċ }