@@ -26,14 +26,15 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
26
26
27
27
private static final int OFFSET_MAX = 10000 ;
28
28
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=" ;
37
38
private static final String BLOCK_TYPE_PARAM = "&blocktype=blocks" ;
38
39
private static final String TAG_LATEST_PARAM = "&tag=latest" ;
39
40
private static final String START_BLOCK_PARAM = "&startblock=" ;
@@ -53,7 +54,7 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
53
54
54
55
@ NotNull
55
56
@ Override
56
- public Balance balance (final String address ) {
57
+ public Balance balance (final String address ) throws ApiException {
57
58
BasicUtils .validateAddress (address );
58
59
59
60
final String urlParams = ACT_BALANCE_ACTION + TAG_LATEST_PARAM + ADDRESS_PARAM + address ;
@@ -66,13 +67,21 @@ public Balance balance(final String address) {
66
67
67
68
@ NotNull
68
69
@ 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 );
71
80
}
72
81
73
82
@ NotNull
74
83
@ Override
75
- public List <Balance > balances (final List <String > addresses ) {
84
+ public List <Balance > balances (final List <String > addresses ) throws ApiException {
76
85
if (BasicUtils .isEmpty (addresses ))
77
86
return Collections .emptyList ();
78
87
@@ -103,19 +112,19 @@ private String toAddressParam(final List<String> addresses) {
103
112
104
113
@ NotNull
105
114
@ Override
106
- public List <Tx > txs (final String address ) {
115
+ public List <Tx > txs (final String address ) throws ApiException {
107
116
return txs (address , MIN_START_BLOCK );
108
117
}
109
118
110
119
@ NotNull
111
120
@ 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 {
113
122
return txs (address , startBlock , MAX_END_BLOCK );
114
123
}
115
124
116
125
@ NotNull
117
126
@ 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 {
119
128
BasicUtils .validateAddress (address );
120
129
121
130
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
135
144
* @param <R> responseListTO type
136
145
* @return List of T values
137
146
*/
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 {
139
149
final List <T > result = new ArrayList <>();
140
150
int page = 1 ;
141
151
while (true ) {
@@ -155,19 +165,19 @@ private <T, R extends BaseListResponseTO> List<T> getRequestUsingOffset(final St
155
165
156
166
@ NotNull
157
167
@ Override
158
- public List <TxInternal > txsInternal (final String address ) {
168
+ public List <TxInternal > txsInternal (final String address ) throws ApiException {
159
169
return txsInternal (address , MIN_START_BLOCK );
160
170
}
161
171
162
172
@ NotNull
163
173
@ 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 {
165
175
return txsInternal (address , startBlock , MAX_END_BLOCK );
166
176
}
167
177
168
178
@ NotNull
169
179
@ 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 {
171
181
BasicUtils .validateAddress (address );
172
182
173
183
final String offsetParam = PAGE_PARAM + "%s" + OFFSET_PARAM + OFFSET_MAX ;
@@ -177,10 +187,9 @@ public List<TxInternal> txsInternal(final String address, final long startBlock,
177
187
return getRequestUsingOffset (urlParams , TxInternalResponseTO .class );
178
188
}
179
189
180
-
181
190
@ NotNull
182
191
@ Override
183
- public List <TxInternal > txsInternalByHash (final String txhash ) {
192
+ public List <TxInternal > txsInternalByHash (final String txhash ) throws ApiException {
184
193
BasicUtils .validateTxHash (txhash );
185
194
186
195
final String urlParams = ACT_TX_INTERNAL_ACTION + TXHASH_PARAM + txhash ;
@@ -194,19 +203,19 @@ public List<TxInternal> txsInternalByHash(final String txhash) {
194
203
195
204
@ NotNull
196
205
@ Override
197
- public List <TxToken > txsToken (final String address ) {
206
+ public List <TxToken > txsToken (final String address ) throws ApiException {
198
207
return txsToken (address , MIN_START_BLOCK );
199
208
}
200
209
201
210
@ NotNull
202
211
@ 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 {
204
213
return txsToken (address , startBlock , MAX_END_BLOCK );
205
214
}
206
215
207
216
@ NotNull
208
217
@ 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 {
210
219
BasicUtils .validateAddress (address );
211
220
212
221
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
218
227
219
228
@ NotNull
220
229
@ Override
221
- public List <Block > minedBlocks (final String address ) {
230
+ public List <Block > minedBlocks (final String address ) throws ApiException {
222
231
BasicUtils .validateAddress (address );
223
232
224
233
final String offsetParam = PAGE_PARAM + "%s" + OFFSET_PARAM + OFFSET_MAX ;
0 commit comments