package Ġio . horizontal systems . bank wallet . core . adapters Ċ Ċ import Ġio . horizontal systems . bank wallet . core .* Ċ import Ġio . horizontal systems . bank wallet . entities . Account Type Ċ import Ġio . horizontal systems . bank wallet . entities . Sync Mode Ċ import Ġio . horizontal systems . bank wallet . entities . Transaction Record Ċ import Ġio . horizontal systems . bank wallet . entities .* Ċ import Ġio . horizontal systems . bitcoin core . Bitcoin Core Ċ import Ġio . horizontal systems . bitcoin core . core . B ip Ċ import Ġio . horizontal systems . bitcoin core . models . Balance Info Ċ import Ġio . horizontal systems . bitcoin core . models . Block Info Ċ import Ġio . horizontal systems . core . helpers . Date Helper Ċ import Ġio . horizontal systems . bitcoin core . models . Transaction Info Ċ import Ġio . horizontal systems . gro est l co ink it . Gro est l coin Kit Ċ import Ġio . horizontal systems . gro est l co ink it . Gro est l coin Kit . Network Type Ċ import Ġio . reactivex . Single Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . util .* Ċ Ċ class ĠGro est l coin Adapter ( override Ġval Ġkit : ĠGro est l coin Kit ) Ġ: ĊĠĠĠĠĠĠĠ ĠBitcoin Base Adapter ( kit ), ĠGro est l coin Kit . Listener , ĠIS end Gro est l coin Adapter Ġ{ ĊĊĠĠĠ Ġconstructor ( wallet : ĠWallet , Ġtest Mode : ĠBoolean ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ( create Kit ( wallet , Ġtest Mode )) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġkit . listener Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠBitcoin Base Adapter ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġoverride Ġval Ġsat osh isIn Bitcoin : ĠBigDecimal Ġ= ĠBigDecimal . valueOf ( Math . pow ( 1 0 . 0 , Ġdecimal . toDouble ())) ĊĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠGro est l coin Kit ĠListener ĊĠĠĠ Ġ// ĊĊĠĠĠ Ġoverride Ġfun Ġon Balance Update ( balance : ĠBalance Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbalance Updated Subject . onNext ( Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Last Block Info Update ( block Info : ĠBlock Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlast Block Updated Subject . onNext ( Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Kit State Update ( state : ĠBitcoin Core . Kit State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBitcoin Core . Kit State . Sync ed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . state Ġ! is ĠAdapter State . Sync ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= ĠAdapter State . Sync ed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBitcoin Core . Kit State . Not Sync ed Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . state Ġ! is ĠAdapter State . Not Sync ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= ĠAdapter State . Not Sync ed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBitcoin Core . Kit State . Sync ing Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state . let Ġ{ Ġcurrent State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Progress Ġ= Ġ( state . progress Ġ* Ġ 1 0 0 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Date Ġ= Ġkit . last Block Info ?. timestamp ?. let Ġ{ ĠDate ( it Ġ* Ġ 1 0 0 0 ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentState Ġis ĠAdapter State . Sync ing Ġ&& Ġcurrent State . progress Ġ== Ġnew Progress ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Date Ġ= Ġcurrent State . last Block Date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Date Ġ!= Ġnull Ġ&& Ġcurrent Date Ġ!= Ġnull Ġ&& ĠDate Helper . is Same Day ( new Date , Ġcurrent Date )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . state Ġ= ĠAdapter State . Sync ing ( new Progress , Ġnew Date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Transactions Update ( inserted : ĠList < Transaction Info >, Ġupdated : ĠList < Transaction Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrecords Ġ= Ġmutable ListOf < Transaction Record >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( info Ġin Ġinserted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecords . add ( transaction Record ( info )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( info Ġin Ġupdated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecords . add ( transaction Record ( info )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtransaction Records Subject . onNext ( records ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Transactions Delete ( hashes : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġignored Ġfor Ġnow ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Transactions ( from : ĠTransaction Record ?, Ġlimit : ĠInt ): ĠSingle < List < Transaction Record >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġkit . transactions ( from ?. uid , Ġlimit ). map Ġ{ Ġit . map Ġ{ Ġtx Ġ-> Ġtransaction Record ( tx ) Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠIS end Gro est l Adapter ĊĊĠĠĠ Ġoverride Ġfun Ġavailable Balance ( address : ĠString ?): ĠBigDecimal Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġavailable Balance ( fee Rate , Ġaddress , Ġmap Of ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfee ( amount : ĠBigDecimal , Ġaddress : ĠString ?): ĠBigDecimal Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfee ( amount , Ġfee Rate , Ġaddress , Ġmap Of ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalidate ( address : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalidate ( address , Ġmap Of ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend ( amount : ĠBigDecimal , Ġaddress : ĠString ): ĠSingle < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsend ( amount , Ġaddress , Ġfee Rate , Ġmap Of ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġfee Rate Ġ= Ġ 2 0 L ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Network Type ( test Mode : ĠBoolean ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( test Mode ) ĠNetwork Type . Test Net Ġelse ĠNetwork Type . Main Net ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget B ip ( der ivation : ĠAccount Type . Der ivation ?): ĠB ip Ġ= Ġwhen Ġ( der ivation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAccount Type . Der ivation . bip 4 9 Ġ-> ĠB ip . B IP 4 9 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAccount Type . Der ivation . bip 8 4 Ġ-> ĠB ip . B IP 8 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠB ip . B IP 4 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Kit ( wallet : ĠWallet , Ġtest Mode : ĠBoolean ): ĠGro est l coin Kit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġwallet . account ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Type Ġ= Ġaccount . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwallet Der ivation Ġ= Ġwallet . settings [ Coin Setting . Der ivation ]?. let Ġ{ ĠAccount Type . Der ivation . valueOf ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( wallet Der ivation Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Der ivation Ġ= ĠAccount Type . Der ivation . bip 4 9 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsync Mode Ġ= Ġwallet . settings [ Coin Setting . Sync Mode ]?. let Ġ{ ĠSync Mode . valueOf ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( account Type Ġis ĠAccount Type . Mnemonic Ġ&& Ġaccount Type . words . size Ġ== Ġ 1 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGro est l coin Kit ( context Ġ= ĠApp . instance , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwords Ġ= Ġaccount Type . words , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwallet Id Ġ= Ġaccount . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Mode Ġ= Ġget Sync Mode ( sync Mode ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Type Ġ= Ġget Network Type ( test Mode ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm ations Threshold Ġ= Ġdefault Confirm ations Threshold , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb ip Ġ= Ġget B ip ( wallet Der ivation )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupported Account Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġclear ( wallet Id : ĠString , Ġtest Mode : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGro est l coin Kit . clear ( App . instance , Ġget Network Type ( test Mode ), Ġwallet Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ