Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit73fd165

Browse files
committed
Base response model redesign & improvements
Account provider improvements & refactoring
1 parent01a05a9 commit73fd165

File tree

13 files changed

+106
-94
lines changed

13 files changed

+106
-94
lines changed

‎pom.xml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
<dependency>
4646
<groupId>com.jsoniter</groupId>
4747
<artifactId>jsoniter</artifactId>
48-
<version>0.9.19</version>
48+
<version>0.9.23</version>
4949
</dependency>
5050
</dependencies>
5151

‎src/main/java/io/api/core/IAccountProvider.java‎

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,17 @@ public interface IAccountProvider {
2626

2727
/** All txs */
2828
@NotNullList<Tx>txs(Stringaddress)throwsApiException;
29-
/** Only last 10000 txs */
3029
@NotNullList<Tx>txs(Stringaddress,longstartBlock);
3130
@NotNullList<Tx>txs(Stringaddress,longstartBlock,longendBlock);
3231

3332
/** All internal txs */
3433
@NotNullList<TxInternal>txsInternal(Stringaddress);
35-
/** Only last 10000 internal txs */
3634
@NotNullList<TxInternal>txsInternal(Stringaddress,longstartBlock);
3735
@NotNullList<TxInternal>txsInternal(Stringaddress,longstartBlock,longendBlock);
38-
/** Only last 10000 internal txs by txhash */
3936
@NotNullList<TxInternal>txsInternalByHash(Stringtxhash);
4037

4138
/** All token txs */
4239
@NotNullList<TxToken>txsToken(Stringaddress);
43-
/** Only last 10000 token txs */
4440
@NotNullList<TxToken>txsToken(Stringaddress,longstartBlock);
4541
@NotNullList<TxToken>txsToken(Stringaddress,longstartBlock,longendBlock);
4642

‎src/main/java/io/api/core/impl/AccountProvider.java‎

Lines changed: 56 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
2525
privatestaticfinalintMAX_END_BLOCK =999999999;
2626
privatestaticfinalintMIN_START_BLOCK =0;
2727

28+
privatestaticfinalintOFFSET_MAX =10000;
29+
2830
privatestaticfinalStringBALANCE_ACTION =ACTION_PARAM +"balance";
2931
privatestaticfinalStringBALANCE_MULTI_ACTION =ACTION_PARAM +"balancemulti";
3032
privatestaticfinalStringTX_ACTION =ACTION_PARAM +"txlist";
@@ -55,11 +57,11 @@ public Balance balance(final String address) {
5557
BasicUtils.validateAddress(address);
5658

5759
finalStringurlParams =BALANCE_ACTION +TAG_LATEST_PARAM +ADDRESS_PARAM +address;
58-
finalStringResponseTOconverted =getRequest(urlParams,StringResponseTO.class);
59-
if (converted.getStatus() !=1)
60-
thrownewEtherScanException(converted.getMessage() +", with status " +converted.getStatus());
60+
finalStringResponseTOresponse =getRequest(urlParams,StringResponseTO.class);
61+
if (response.getStatus() !=1)
62+
thrownewEtherScanException(response.getMessage() +", with status " +response.getStatus());
6163

62-
returnnewBalance(address,Long.valueOf(converted.getResult()));
64+
returnnewBalance(address,Long.valueOf(response.getResult()));
6365
}
6466

6567
@NotNull
@@ -76,12 +78,12 @@ public List<Balance> balances(final List<String> addresses) {
7678

7779
for (finalList<String>batch :addressesAsBatches) {
7880
finalStringurlParams =BALANCE_MULTI_ACTION +TAG_LATEST_PARAM +ADDRESS_PARAM +toAddressParam(batch);
79-
finalBalanceResponseTOconverted =getRequest(urlParams,BalanceResponseTO.class);
80-
if (converted.getStatus() !=1)
81-
thrownewEtherScanException(converted.getMessage() +", with status " +converted.getStatus());
81+
finalBalanceResponseTOresponse =getRequest(urlParams,BalanceResponseTO.class);
82+
if (response.getStatus() !=1)
83+
thrownewEtherScanException(response.getMessage() +", with status " +response.getStatus());
8284

83-
if (!BasicUtils.isEmpty(converted.getBalances()))
84-
balances.addAll(converted.getBalances().stream()
85+
if (!BasicUtils.isEmpty(response.getResult()))
86+
balances.addAll(response.getResult().stream()
8587
.map(Balance::of)
8688
.collect(Collectors.toList()));
8789
}
@@ -96,7 +98,6 @@ private String toAddressParam(final List<String> addresses) {
9698
@NotNull
9799
@Override
98100
publicList<Tx>txs(finalStringaddress) {
99-
//TODO all txs implementations with pagination
100101
returntxs(address,MIN_START_BLOCK);
101102
}
102103

@@ -111,21 +112,44 @@ public List<Tx> txs(final String address, final long startBlock) {
111112
publicList<Tx>txs(finalStringaddress,finallongstartBlock,finallongendBlock) {
112113
BasicUtils.validateAddress(address);
113114

115+
finalStringoffsetParam =PAGE_PARAM +"%s" +OFFSET_PARAM +OFFSET_MAX;
114116
finalStringblockParam =START_BLOCK_PARAM +startBlock +END_BLOCK_PARAM +endBlock;
115-
finalStringurlParams =TX_ACTION +ADDRESS_PARAM +address +blockParam +SORT_ASC_PARAM;
116-
finalTxResponseTOconverted =getRequest(urlParams,TxResponseTO.class);
117-
if (converted.getStatus() !=1)
118-
thrownewEtherScanException(converted.getMessage() +" with status " +converted.getStatus());
117+
finalStringurlParams =TX_ACTION +offsetParam +ADDRESS_PARAM +address +blockParam +SORT_ASC_PARAM;
119118

120-
return (converted.getResult() ==null)
121-
?Collections.emptyList()
122-
:converted.getResult();
119+
returngetRequestUsingOffset(urlParams,TxResponseTO.class);
120+
}
121+
122+
/**
123+
* Generic search for txs using offset api param
124+
* To avoid 10k limit per response
125+
*
126+
* @param urlParams Url params for #getRequest()
127+
* @param tClass responseListTO class
128+
* @param <T> responseTO list T type
129+
* @param <R> responseListTO type
130+
* @return List of T values
131+
*/
132+
private <T,RextendsBaseListResponseTO>List<T>getRequestUsingOffset(finalStringurlParams,Class<R>tClass) {
133+
finalList<T>result =newArrayList<>();
134+
intpage =1;
135+
while (true) {
136+
finalStringformattedUrl =String.format(urlParams,page++);
137+
finalRresponse =getRequest(formattedUrl,tClass);
138+
BasicUtils.validateTxResponse(response);
139+
if(BasicUtils.isEmpty(response.getResult()))
140+
break;
141+
142+
result.addAll(response.getResult());
143+
if(response.getResult().size() <OFFSET_MAX)
144+
break;
145+
}
146+
147+
returnresult;
123148
}
124149

125150
@NotNull
126151
@Override
127152
publicList<TxInternal>txsInternal(finalStringaddress) {
128-
//TODO all txs implementations with pagination
129153
returntxsInternal(address,MIN_START_BLOCK);
130154
}
131155

@@ -140,36 +164,31 @@ public List<TxInternal> txsInternal(final String address, final long startBlock)
140164
publicList<TxInternal>txsInternal(finalStringaddress,finallongstartBlock,finallongendBlock) {
141165
BasicUtils.validateAddress(address);
142166

167+
finalStringoffsetParam =PAGE_PARAM +"%s" +OFFSET_PARAM +OFFSET_MAX;
143168
finalStringblockParam =START_BLOCK_PARAM +startBlock +END_BLOCK_PARAM +endBlock;
144-
finalStringurlParams =TX_INTERNAL_ACTION +ADDRESS_PARAM +address +blockParam +SORT_ASC_PARAM;
145-
finalTxInternalResponseTOconverted =getRequest(urlParams,TxInternalResponseTO.class);
146-
if (converted.getStatus() !=1)
147-
thrownewEtherScanException(converted.getMessage() +" with status " +converted.getStatus());
169+
finalStringurlParams =TX_INTERNAL_ACTION +offsetParam +ADDRESS_PARAM +address +blockParam +SORT_ASC_PARAM;
148170

149-
return (converted.getResult() ==null)
150-
?Collections.emptyList()
151-
:converted.getResult();
171+
returngetRequestUsingOffset(urlParams,TxInternalResponseTO.class);
152172
}
153173

174+
154175
@NotNull
155176
@Override
156177
publicList<TxInternal>txsInternalByHash(finalStringtxhash) {
157178
BasicUtils.validateTxHash(txhash);
158179

159180
finalStringurlParams =TX_INTERNAL_ACTION +TXHASH_PARAM +txhash;
160-
finalTxInternalResponseTOconverted =getRequest(urlParams,TxInternalResponseTO.class);
161-
if (converted.getStatus() !=1)
162-
thrownewEtherScanException(converted.getMessage() +" with status " +converted.getStatus());
181+
finalTxInternalResponseTOresponse =getRequest(urlParams,TxInternalResponseTO.class);
182+
BasicUtils.validateTxResponse(response);
163183

164-
return(converted.getResult() ==null)
184+
returnBasicUtils.isEmpty(response.getResult())
165185
?Collections.emptyList()
166-
:converted.getResult();
186+
:response.getResult();
167187
}
168188

169189
@NotNull
170190
@Override
171191
publicList<TxToken>txsToken(finalStringaddress) {
172-
//TODO all txs implementations with pagination
173192
returntxsToken(address,MIN_START_BLOCK);
174193
}
175194

@@ -184,29 +203,21 @@ public List<TxToken> txsToken(final String address, final long startBlock) {
184203
publicList<TxToken>txsToken(finalStringaddress,finallongstartBlock,finallongendBlock) {
185204
BasicUtils.validateAddress(address);
186205

206+
finalStringoffsetParam =PAGE_PARAM +"%s" +OFFSET_PARAM +OFFSET_MAX;
187207
finalStringblockParam =START_BLOCK_PARAM +startBlock +END_BLOCK_PARAM +endBlock;
188-
finalStringurlParams =TX_TOKEN_ACTION +ADDRESS_PARAM +address +blockParam +SORT_ASC_PARAM;
189-
finalTxTokenResponseTOconverted =getRequest(urlParams,TxTokenResponseTO.class);
190-
if (converted.getStatus() !=1)
191-
thrownewEtherScanException(converted.getMessage() +" with status " +converted.getStatus());
208+
finalStringurlParams =TX_TOKEN_ACTION +offsetParam +ADDRESS_PARAM +address +blockParam +SORT_ASC_PARAM;
192209

193-
return (converted.getResult() ==null)
194-
?Collections.emptyList()
195-
:converted.getResult();
210+
returngetRequestUsingOffset(urlParams,TxTokenResponseTO.class);
196211
}
197212

198213
@NotNull
199214
@Override
200215
publicList<Block>minedBlocks(finalStringaddress) {
201216
BasicUtils.validateAddress(address);
202217

203-
finalStringurlParams =MINED_ACTION +BLOCK_TYPE_PARAM +ADDRESS_PARAM +address;
204-
finalBlockResponseTOconverted =getRequest(urlParams,BlockResponseTO.class);
205-
if (converted.getStatus() !=1)
206-
thrownewEtherScanException(converted.getMessage() +" with status " +converted.getStatus());
218+
finalStringoffsetParam =PAGE_PARAM +"%s" +OFFSET_PARAM +OFFSET_MAX;
219+
finalStringurlParams =MINED_ACTION +offsetParam +BLOCK_TYPE_PARAM +ADDRESS_PARAM +address;
207220

208-
return (converted.getResult() ==null)
209-
?Collections.emptyList()
210-
:converted.getResult();
221+
returngetRequestUsingOffset(urlParams,BlockResponseTO.class);
211222
}
212223
}

‎src/main/java/io/api/model/BaseTx.java‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,19 @@ public long getGasUsed() {
6262
returngasUsed;
6363
}
6464
//</editor-fold>
65+
66+
@Override
67+
publicbooleanequals(Objecto) {
68+
if (this ==o)returntrue;
69+
if (o ==null ||getClass() !=o.getClass())returnfalse;
70+
71+
BaseTxbaseTx = (BaseTx)o;
72+
73+
returnhash !=null ?hash.equals(baseTx.hash) :baseTx.hash ==null;
74+
}
75+
76+
@Override
77+
publicinthashCode() {
78+
returnhash !=null ?hash.hashCode() :0;
79+
}
6580
}
Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
11
packageio.api.model.temporary;
22

3-
importjava.util.List;
4-
53
/**
64
* ! NO DESCRIPTION !
75
*
86
* @author GoodforGod
97
* @since 29.10.2018
108
*/
11-
publicclassBalanceResponseTOextendsBaseReponseTO {
12-
13-
privateList<BalanceTO>balances;
9+
publicclassBalanceResponseTOextendsBaseListResponseTO<BalanceTO> {
1410

15-
publicList<BalanceTO>getBalances() {
16-
returnbalances;
17-
}
1811
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
packageio.api.model.temporary;
2+
3+
importjava.util.List;
4+
5+
/**
6+
* ! NO DESCRIPTION !
7+
*
8+
* @author GoodforGod
9+
* @since 30.10.2018
10+
*/
11+
publicabstractclassBaseListResponseTO<T>extendsBaseResponseTO {
12+
13+
privateList<T>result;
14+
15+
publicList<T>getResult() {
16+
returnresult;
17+
}
18+
}

‎src/main/java/io/api/model/temporary/BaseReponseTO.java‎renamed to ‎src/main/java/io/api/model/temporary/BaseResponseTO.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @author GoodforGod
99
* @since 29.10.2018
1010
*/
11-
abstractclassBaseReponseTO {
11+
publicabstractclassBaseResponseTO {
1212

1313
privateStringstatus;
1414
privateStringmessage;

‎src/main/java/io/api/model/temporary/BlockResponseTO.java‎

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,12 @@
22

33
importio.api.model.Block;
44

5-
importjava.util.List;
6-
75
/**
86
* ! NO DESCRIPTION !
97
*
108
* @author GoodforGod
119
* @since 30.10.2018
1210
*/
13-
publicclassBlockResponseTOextendsBaseReponseTO {
14-
15-
privateList<Block>result;
11+
publicclassBlockResponseTOextendsBaseListResponseTO<Block> {
1612

17-
publicList<Block>getResult() {
18-
returnresult;
19-
}
2013
}

‎src/main/java/io/api/model/temporary/StringResponseTO.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* @author GoodforGod
77
* @since 29.10.2018
88
*/
9-
publicclassStringResponseTOextendsBaseReponseTO {
9+
publicclassStringResponseTOextendsBaseResponseTO {
1010

1111
privateStringresult;
1212

‎src/main/java/io/api/model/temporary/TxInternalResponseTO.java‎

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,12 @@
22

33
importio.api.model.TxInternal;
44

5-
importjava.util.List;
6-
75
/**
86
* ! NO DESCRIPTION !
97
*
108
* @author GoodforGod
119
* @since 29.10.2018
1210
*/
13-
publicclassTxInternalResponseTOextendsBaseReponseTO {
14-
15-
privateList<TxInternal>result;
11+
publicclassTxInternalResponseTOextendsBaseListResponseTO<TxInternal> {
1612

17-
publicList<TxInternal>getResult() {
18-
returnresult;
19-
}
2013
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp