@@ -26,14 +26,15 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
2626
2727private static final int OFFSET_MAX =10000 ;
2828
29- private static final String ACT_BALANCE_ACTION =ACT_PARAM +"balance" ;
30- private static final String ACT_TOKEN_BALANCE_PARAM =ACT_PARAM +"tokenbalance" ;
31- private static final String ACT_BALANCE_MULTI_ACTION =ACT_PARAM +"balancemulti" ;
32- private static final String ACT_TX_ACTION =ACT_PARAM +"txlist" ;
33- private static final String ACT_TX_INTERNAL_ACTION =ACT_PARAM +"txlistinternal" ;
34- private static final String ACT_TX_TOKEN_ACTION =ACT_PARAM +"tokentx" ;
35- private static final String ACT_MINED_ACTION =ACT_PARAM +"getminedblocks" ;
36-
29+ private static final String ACT_BALANCE_ACTION =ACT_PREFIX +"balance" ;
30+ private static final String ACT_TOKEN_BALANCE_PARAM =ACT_PREFIX +"tokenbalance" ;
31+ private static final String ACT_BALANCE_MULTI_ACTION =ACT_PREFIX +"balancemulti" ;
32+ private static final String ACT_TX_ACTION =ACT_PREFIX +"txlist" ;
33+ private static final String ACT_TX_INTERNAL_ACTION =ACT_PREFIX +"txlistinternal" ;
34+ private static final String ACT_TX_TOKEN_ACTION =ACT_PREFIX +"tokentx" ;
35+ private static final String ACT_MINED_ACTION =ACT_PREFIX +"getminedblocks" ;
36+
37+ private static final String CONTRACT_PARAM ="&contractaddress=" ;
3738private static final String BLOCK_TYPE_PARAM ="&blocktype=blocks" ;
3839private static final String TAG_LATEST_PARAM ="&tag=latest" ;
3940private static final String START_BLOCK_PARAM ="&startblock=" ;
@@ -53,7 +54,7 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
5354
5455@ NotNull
5556@ Override
56- public Balance balance (final String address ) {
57+ public Balance balance (final String address )throws ApiException {
5758BasicUtils .validateAddress (address );
5859
5960final String urlParams =ACT_BALANCE_ACTION +TAG_LATEST_PARAM +ADDRESS_PARAM +address ;
@@ -66,13 +67,21 @@ public Balance balance(final String address) {
6667
6768@ NotNull
6869@ Override
69- public Balance balance (final String address ,final String contract )throws ApiException {
70- return null ;
70+ public TokenBalance balance (final String address ,final String contract )throws ApiException {
71+ BasicUtils .validateAddress (address );
72+ BasicUtils .validateAddress (contract );
73+
74+ final String urlParams =ACT_TOKEN_BALANCE_PARAM +ADDRESS_PARAM +address +CONTRACT_PARAM +contract ;
75+ final StringResponseTO response =getRequest (urlParams ,StringResponseTO .class );
76+ if (response .getStatus () !=1 )
77+ throw new EtherScanException (response .getMessage () +", with status " +response .getStatus ());
78+
79+ return new TokenBalance (address ,new BigInteger (response .getResult ()),contract );
7180 }
7281
7382@ NotNull
7483@ Override
75- public List <Balance >balances (final List <String >addresses ) {
84+ public List <Balance >balances (final List <String >addresses )throws ApiException {
7685if (BasicUtils .isEmpty (addresses ))
7786return Collections .emptyList ();
7887
@@ -103,19 +112,19 @@ private String toAddressParam(final List<String> addresses) {
103112
104113@ NotNull
105114@ Override
106- public List <Tx >txs (final String address ) {
115+ public List <Tx >txs (final String address )throws ApiException {
107116return txs (address ,MIN_START_BLOCK );
108117 }
109118
110119@ NotNull
111120@ Override
112- public List <Tx >txs (final String address ,final long startBlock ) {
121+ public List <Tx >txs (final String address ,final long startBlock )throws ApiException {
113122return txs (address ,startBlock ,MAX_END_BLOCK );
114123 }
115124
116125@ NotNull
117126@ Override
118- public List <Tx >txs (final String address ,final long startBlock ,final long endBlock ) {
127+ public List <Tx >txs (final String address ,final long startBlock ,final long endBlock )throws ApiException {
119128BasicUtils .validateAddress (address );
120129
121130final String offsetParam =PAGE_PARAM +"%s" +OFFSET_PARAM +OFFSET_MAX ;
@@ -135,7 +144,8 @@ public List<Tx> txs(final String address, final long startBlock, final long endB
135144 * @param <R> responseListTO type
136145 * @return List of T values
137146 */
138- private <T ,R extends BaseListResponseTO >List <T >getRequestUsingOffset (final String urlParams ,Class <R >tClass ) {
147+ private <T ,R extends BaseListResponseTO >List <T >getRequestUsingOffset (final String urlParams ,Class <R >tClass )
148+ throws ApiException {
139149final List <T >result =new ArrayList <>();
140150int page =1 ;
141151while (true ) {
@@ -155,19 +165,19 @@ private <T, R extends BaseListResponseTO> List<T> getRequestUsingOffset(final St
155165
156166@ NotNull
157167@ Override
158- public List <TxInternal >txsInternal (final String address ) {
168+ public List <TxInternal >txsInternal (final String address )throws ApiException {
159169return txsInternal (address ,MIN_START_BLOCK );
160170 }
161171
162172@ NotNull
163173@ Override
164- public List <TxInternal >txsInternal (final String address ,final long startBlock ) {
174+ public List <TxInternal >txsInternal (final String address ,final long startBlock )throws ApiException {
165175return txsInternal (address ,startBlock ,MAX_END_BLOCK );
166176 }
167177
168178@ NotNull
169179@ Override
170- public List <TxInternal >txsInternal (final String address ,final long startBlock ,final long endBlock ) {
180+ public List <TxInternal >txsInternal (final String address ,final long startBlock ,final long endBlock )throws ApiException {
171181BasicUtils .validateAddress (address );
172182
173183final String offsetParam =PAGE_PARAM +"%s" +OFFSET_PARAM +OFFSET_MAX ;
@@ -177,10 +187,9 @@ public List<TxInternal> txsInternal(final String address, final long startBlock,
177187return getRequestUsingOffset (urlParams ,TxInternalResponseTO .class );
178188 }
179189
180-
181190@ NotNull
182191@ Override
183- public List <TxInternal >txsInternalByHash (final String txhash ) {
192+ public List <TxInternal >txsInternalByHash (final String txhash )throws ApiException {
184193BasicUtils .validateTxHash (txhash );
185194
186195final String urlParams =ACT_TX_INTERNAL_ACTION +TXHASH_PARAM +txhash ;
@@ -194,19 +203,19 @@ public List<TxInternal> txsInternalByHash(final String txhash) {
194203
195204@ NotNull
196205@ Override
197- public List <TxToken >txsToken (final String address ) {
206+ public List <TxToken >txsToken (final String address )throws ApiException {
198207return txsToken (address ,MIN_START_BLOCK );
199208 }
200209
201210@ NotNull
202211@ Override
203- public List <TxToken >txsToken (final String address ,final long startBlock ) {
212+ public List <TxToken >txsToken (final String address ,final long startBlock )throws ApiException {
204213return txsToken (address ,startBlock ,MAX_END_BLOCK );
205214 }
206215
207216@ NotNull
208217@ Override
209- public List <TxToken >txsToken (final String address ,final long startBlock ,final long endBlock ) {
218+ public List <TxToken >txsToken (final String address ,final long startBlock ,final long endBlock )throws ApiException {
210219BasicUtils .validateAddress (address );
211220
212221final String offsetParam =PAGE_PARAM +"%s" +OFFSET_PARAM +OFFSET_MAX ;
@@ -218,7 +227,7 @@ public List<TxToken> txsToken(final String address, final long startBlock, final
218227
219228@ NotNull
220229@ Override
221- public List <Block >minedBlocks (final String address ) {
230+ public List <Block >minedBlocks (final String address )throws ApiException {
222231BasicUtils .validateAddress (address );
223232
224233final String offsetParam =PAGE_PARAM +"%s" +OFFSET_PARAM +OFFSET_MAX ;