2
2
3
3
import com .sun .istack .internal .NotNull ;
4
4
import io .api .core .IAccountProvider ;
5
+ import io .api .error .EtherScanException ;
5
6
import io .api .model .Balance ;
6
7
import io .api .model .Block ;
7
- import io .api .model .Transaction ;
8
+ import io .api .model .Tx ;
9
+ import io .api .model .temporary .BalanceResponseTO ;
10
+ import io .api .model .temporary .StringResponseTO ;
11
+ import io .api .model .temporary .TxResponseTO ;
12
+ import io .api .util .BasicUtils ;
8
13
14
+ import java .util .Collections ;
9
15
import java .util .List ;
10
16
import java .util .Map ;
17
+ import java .util .stream .Collectors ;
11
18
12
19
/**
13
20
* ! NO DESCRIPTION !
@@ -20,12 +27,21 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
20
27
private static final int MAX_END_BLOCK = 999999999 ;
21
28
private static final int MIN_START_BLOCK = 0 ;
22
29
30
+ private static final String BALANCE_ACTION = ACTION_PARAM + "balance" ;
31
+ private static final String BALANCE_MULTI_ACTION = ACTION_PARAM + "balancemulti" ;
32
+ private static final String TX_ACTION = ACTION_PARAM + "txlist" ;
33
+ private static final String TX_INTERNAL_ACTION = ACTION_PARAM + "txlistinternal" ;
34
+ private static final String TX_TOKEN_ACTION = ACTION_PARAM + "tokentx" ;
35
+ private static final String MINED_ACTION = ACTION_PARAM + "getminedblocks" ;
36
+
23
37
private static final String BLOCK_TYPE_PARAM = "&blocktype=blocks" ;
24
- private static final String START_BLOCK_PARAM = "&endblock=" ;
25
- private static final String END_BLOCK_PARAM = "&startblock=" ;
38
+ private static final String TAG_LATEST_PARAM = "&tag=latest" ;
39
+ private static final String START_BLOCK_PARAM = "&startblock=" ;
40
+ private static final String END_BLOCK_PARAM = "&endblock=" ;
26
41
private static final String SORT_DESC_PARAM = "&sort=desc" ;
27
42
private static final String SORT_ASC_PARAM = "&sort=asc" ;
28
43
private static final String ADDRESS_PARAM = "&address=" ;
44
+ private static final String TXHASH_PARAM = "&txhash=" ;
29
45
private static final String OFFSET_PARAM = "&offset=" ;
30
46
private static final String PAGE_PARAM = "&page=" ;
31
47
@@ -37,66 +53,107 @@ public AccountProvider(final String baseUrl,
37
53
@ NotNull
38
54
@ Override
39
55
public Balance balance (final String address ) {
40
- return null ;
56
+ BasicUtils .validateAddress (address );
57
+
58
+ final String urlParams = BALANCE_ACTION + TAG_LATEST_PARAM + ADDRESS_PARAM + address ;
59
+ final String response = getRequest (urlParams );
60
+ final StringResponseTO converted = convert (response , StringResponseTO .class );
61
+ if (converted .getStatus () != 1 )
62
+ throw new EtherScanException (converted .getMessage () + " with status " + converted .getStatus ());
63
+
64
+ return new Balance (address , Long .valueOf (converted .getResult ()));
41
65
}
42
66
43
67
@ NotNull
44
68
@ Override
45
69
public List <Balance > balances (final List <String > addresses ) {
46
- return null ;
70
+ BasicUtils .validateAddresses (addresses );
71
+ if (addresses .isEmpty ())
72
+ return Collections .emptyList ();
73
+
74
+ final String urlParams = BALANCE_MULTI_ACTION + TAG_LATEST_PARAM + ADDRESS_PARAM + toAddressParam (addresses );
75
+ final String response = getRequest (urlParams );
76
+ final BalanceResponseTO converted = convert (response , BalanceResponseTO .class );
77
+ if (converted .getStatus () != 1 )
78
+ throw new EtherScanException (converted .getMessage () + " with status " + converted .getStatus ());
79
+
80
+ return converted .getBalances ().stream ().map (Balance ::of ).collect (Collectors .toList ());
81
+ }
82
+
83
+ private String toAddressParam (final List <String > addresses ) {
84
+ return addresses .stream ().collect (Collectors .joining ("," ));
47
85
}
48
86
49
87
@ NotNull
50
88
@ Override
51
- public List <Transaction > txs (final String address ) {
52
- return null ;
89
+ public List <Tx > txs (final String address ) {
90
+ //TODO all txs implementations with pagination
91
+
92
+ return txs (address , MIN_START_BLOCK , MAX_END_BLOCK );
53
93
}
54
94
55
95
@ NotNull
56
96
@ Override
57
- public List <Transaction > txs (final String address , final int startBlock ) {
97
+ public List <Tx > txs (final String address , final long startBlock ) {
58
98
return txs (address , startBlock , MAX_END_BLOCK );
59
99
}
60
100
61
101
@ NotNull
62
102
@ Override
63
- public List <Transaction > txs (final String address , final int startBlock , final int endBlock ) {
64
- return null ;
103
+ public List <Tx > txs (final String address , final long startBlock , final long endBlock ) {
104
+ BasicUtils .validateAddress (address );
105
+
106
+ final String blockParam = START_BLOCK_PARAM + startBlock + END_BLOCK_PARAM + endBlock ;
107
+ final String urlParams = TX_ACTION + ADDRESS_PARAM + address + blockParam + SORT_ASC_PARAM ;
108
+ final String response = getRequest (urlParams );
109
+ final TxResponseTO converted = convert (response , TxResponseTO .class );
110
+ if (converted .getStatus () != 1 )
111
+ throw new EtherScanException (converted .getMessage () + " with status " + converted .getStatus ());
112
+
113
+ return (converted .getResult () == null )
114
+ ? Collections .emptyList ()
115
+ : converted .getResult ();
65
116
}
66
117
67
118
@ NotNull
68
119
@ Override
69
- public List <Transaction > txsInternal (final String address ) {
120
+ public List <Tx > txsInternal (final String address ) {
70
121
return null ;
71
122
}
72
123
73
124
@ NotNull
74
125
@ Override
75
- public List <Transaction > txsInternal (final String address , final int startBlock ) {
126
+ public List <Tx > txsInternal (final String address , final long startBlock ) {
76
127
return txsInternal (address , startBlock , MAX_END_BLOCK );
77
128
}
78
129
79
130
@ NotNull
80
131
@ Override
81
- public List <Transaction > txsInternal (final String address , final int startBlock , final int endBlock ) {
132
+ public List <Tx > txsInternal (final String address , final long startBlock , final long endBlock ) {
133
+ return null ;
134
+ }
135
+
136
+ @ NotNull
137
+ @ Override
138
+ public List <Tx > txsInternalByHash (String txhash ) {
82
139
return null ;
83
140
}
84
141
85
142
@ NotNull
86
143
@ Override
87
- public List <Transaction > txsToken (final String address ) {
144
+ public List <Tx > txsToken (final String address ) {
88
145
return null ;
89
146
}
90
147
91
148
@ NotNull
92
149
@ Override
93
- public List <Transaction > txsToken (final String address , final int startBlock ) {
150
+ public List <Tx > txsToken (final String address , final long startBlock ) {
94
151
return txsToken (address , startBlock , MAX_END_BLOCK );
95
152
}
96
153
97
154
@ NotNull
98
155
@ Override
99
- public List <Transaction > txsToken (final String address , final int startBlock , final int endBlock ) {
156
+ public List <Tx > txsToken (final String address , final long startBlock , final long endBlock ) {
100
157
return null ;
101
158
}
102
159
0 commit comments