/* Ċ Ġ* ĠCopyright ĠD 3 ĠLed ger , ĠInc . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġcom . d 3 . eth . provider Ċ Ċ import Ġcom . d 3 . commons . side chain . iro ha . util . I ro ha Query Helper Ċ import Ġcom . github . kit tin un f . result . Result Ċ import Ġcom . github . kit tin un f . result . map Ċ import Ġmu . K Logging Ċ Ċ /** Ċ Ġ* ĠProvides Ġwith Ġfree Ġe thereum Ġrelay Ġwallet Ċ Ġ* Ġ@ param Ġquery Helper Ġ- Ġi ro ha Ġqueries Ġnetwork Ġlayer Ċ Ġ* Ġ@ param Ġstorage Account Ġ- Ġaccount Ġin ĠI ro ha Ġto Ġwrite Ġdown Ġthe Ġinformation Ġabout Ġfree Ġrelay Ġwallet s Ġhas Ġbeen Ġadded Ċ Ġ*/ Ċ // ĠTODO ĠPrevent Ġdouble Ġrelay Ġaccounts Ġusage Ġ( in Ġperfect Ġworld Ġit Ġis Ġon ĠI ro ha Ġside Ġwith Ġcustom Ġcode ). ĠIn Ġreal Ġworld Ċ // Ġon Ġprovider Ġside Ġwith Ġsome Ġsynchronization . Ċ class ĠE th Free Relay Provider ( ĊĠĠĠ Ġprivate Ġval Ġquery Helper : ĠI ro ha Query Helper , ĊĠĠĠ Ġprivate Ġval Ġstorage Account : ĠString , ĊĠĠĠ Ġprivate Ġval Ġsetter Account : ĠString Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfree Relay Predicate Ġ= Ġ{ Ġ_: ĠString , Ġvalue : ĠString Ġ-> Ġvalue Ġ== Ġ" free " Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Init Ġfree Ġrelay Ġprovider Ġwith Ġholder Ġaccount Ġ'$ storage Account ' Ġand Ġsetter Ġaccount Ġ'$ setter Account '" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġfirst Ġfree ĠEthereum Ġrelay Ġwallet . ĊĠĠĠĠ Ġ* Ġ@ return Ġfree ĠEthereum Ġrelay Ġwallet ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Relay (): ĠResult < String , ĠException > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Helper . get Account Details First ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Account , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter Account , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfree Relay Predicate ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġfree Wallet Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! free Wallet . isPresent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Eth Free Relay Provider Ġ- Ġno Ġfree Ġrelay Ġwallet s Ġcreated Ġby Ġ$ setter Account ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfree Wallet . get (). key ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġall Ġfree ĠEthereum Ġrelay Ġwallet s ĊĠĠĠĠ Ġ* Ġ@ return Ġfree ĠEthereum Ġrelay Ġwallet s ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Rel ays (): ĠResult < Set < String >, ĠException > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Helper . get Account Details Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Account , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter Account , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfree Relay Predicate ĊĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġrelay s Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelay s . keys ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġnumber Ġof Ġall Ġfree ĠEthereum Ġrelay Ġwallet s ĊĠĠĠĠ Ġ* Ġ@ return Ġnumber Ġof Ġfree ĠEthereum Ġrelay Ġwallet s ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Rel ays Count (): ĠResult < Int , ĠException > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery Helper . get Account Details Count ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Account , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetter Account , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfree Relay Predicate ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLogger ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠK Logging () Ċ } Ċ