package Ġcom . star base . bank wallet . modules . add token Ċ Ċ import Ġio . horizontal systems . bank wallet . core . I Add Token Blockchain Service Ċ import Ġio . horizontal systems . bank wallet . core . I AppConfig Provider Ċ import Ġio . horizontal systems . bank wallet . core . IN etwork Manager Ċ import Ġio . horizontal systems . bank wallet . entities . ApiError Ċ import Ġio . horizontal systems . co ink it . models . Coin Ċ import Ġio . horizontal systems . co ink it . models . Coin Type Ċ import Ġio . horizontal systems . ethereum kit . core . Address Validator Ċ import Ġio . horizontal systems . ethereum kit . core . E thereum Kit Ċ import Ġio . reactivex . Single Ċ import Ġjava . util .* Ċ Ċ class ĠAdd E vm Token Blockchain Service ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġapp Config Provider : ĠI AppConfig Provider , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnetwork Manager : ĠIN etwork Manager , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnetwork Type : ĠEthereum Kit . Network Type Ċ ): ĠI Add Token Blockchain Service Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġget Api Url ( network Type : ĠEthereum Kit . Network Type ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( network Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth Main Net Ġ-> Ġ" https :// api . e thers can . io " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth R op sten Ġ-> Ġ" https :// api - rop sten . e thers can . io " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth K ovan Ġ-> Ġ" https :// api - k ovan . e thers can . io " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth R in ke by Ġ-> Ġ" https :// api - rin ke by . e thers can . io " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth Go er li Ġ-> Ġ" https :// api - go er li . e thers can . io " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . B sc Main Net Ġ-> Ġ" https :// api . b sc scan . com " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Explorer Key ( network Type : ĠEthereum Kit . Network Type ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( network Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth Main Net , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth R op sten , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth K ovan , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth R in ke by , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth Go er li Ġ-> Ġapp Config Provider . e thers can ApiKey ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . B sc Main Net Ġ-> Ġapp Config Provider . b sc scan ApiKey ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisValid ( reference : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAddress Validator . validate ( reference ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcoin Type ( reference : ĠString ): ĠCoin Type Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġreference . toLowerCase ( Locale . EN GL ISH ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( network Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth Main Net , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth R op sten , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth K ovan , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth R in ke by , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . Eth Go er li Ġ-> ĠCoin Type . E rc 2 0 ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEthereum Kit . Network Type . B sc Main Net Ġ-> ĠCoin Type . B ep 2 0 ( address ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcoin Async ( reference : ĠString ): ĠSingle < Coin > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġ" api ? module = account & action = tok ent x & contract address =$ reference & page = 1 & offset = 1 & sort = asc & apikey =${ get Explorer Key ( network Type )}" ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnetwork Manager . get E vm Info ( get Api Url ( network Type ), Ġrequest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . get (" status "). asString Ġ== Ġ" 0 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . get (" result "). asString . toLowerCase ( Locale . EN GL ISH ). contains (" limit Ġreached ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠApi Error . Api Limit Exceeded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// parsing Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . get (" status "). asString Ġ== Ġ" 0 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠApi Error . Contract NotFound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġresponse . getAs JsonArray (" result ") ?. get ( 0 )?. as JsonObject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠApi Error . Invalid Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Name Ġ= Ġresult . get (" token Name ") ?. asString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠApi Error . Invalid Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Symbol Ġ= Ġresult . get (" token Symbol ") ?. asString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠApi Error . Invalid Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Decimal Ġ= Ġresult . get (" token Decimal ") ?. asString ?. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠApi Error . Invalid Response ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map ĠCoin ( title Ġ= Ġtoken Name , Ġcode Ġ= Ġtoken Symbol , Ġdecimal Ġ= Ġtoken Decimal , Ġtype Ġ= Ġcoin Type ( reference )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ