@@ -26,14 +26,15 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
2626
2727 private 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=" ;
3738 private static final String BLOCK_TYPE_PARAM = "&blocktype=blocks" ;
3839 private static final String TAG_LATEST_PARAM = "&tag=latest" ;
3940 private 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 {
5758 BasicUtils .validateAddress (address );
5859
5960 final 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 {
7685 if (BasicUtils .isEmpty (addresses ))
7786 return 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 {
107116 return 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 {
113122 return 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 {
119128 BasicUtils .validateAddress (address );
120129
121130 final 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 {
139149 final List <T > result = new ArrayList <>();
140150 int page = 1 ;
141151 while (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 {
159169 return 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 {
165175 return 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 {
171181 BasicUtils .validateAddress (address );
172182
173183 final String offsetParam = PAGE_PARAM + "%s" + OFFSET_PARAM + OFFSET_MAX ;
@@ -177,10 +187,9 @@ public List<TxInternal> txsInternal(final String address, final long startBlock,
177187 return 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 {
184193 BasicUtils .validateTxHash (txhash );
185194
186195 final 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 {
198207 return 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 {
204213 return 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 {
210219 BasicUtils .validateAddress (address );
211220
212221 final 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 {
222231 BasicUtils .validateAddress (address );
223232
224233 final String offsetParam = PAGE_PARAM + "%s" + OFFSET_PARAM + OFFSET_MAX ;
0 commit comments