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

Commit01a05a9

Browse files
committed
JetBrains annotation integrated
Exception improvementsQueueManager integratedModel improvementsAccount Provider improvements
1 parentdddec66 commit01a05a9

18 files changed

+324
-108
lines changed

‎pom.xml‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@
3636
<version>2.8.5</version>
3737
</dependency>
3838

39+
<dependency>
40+
<groupId>org.jetbrains</groupId>
41+
<artifactId>annotations</artifactId>
42+
<version>13.0</version>
43+
</dependency>
44+
3945
<dependency>
4046
<groupId>com.jsoniter</groupId>
4147
<artifactId>jsoniter</artifactId>

‎src/main/java/io/api/App.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
importio.api.core.EtherScanApi;
44
importio.api.model.Tx;
5+
importio.api.model.TxInternal;
6+
importio.api.model.TxToken;
57

68
importjava.util.List;
79

@@ -12,6 +14,8 @@ public class App {
1214
publicstaticvoidmain(String[]args) {
1315
EtherScanApiapi =newEtherScanApi(args[0]);
1416
List<Tx>txs =api.account().txs("0x8d4426f94e42f721C7116E81d6688cd935cB3b4F");
17+
List<TxInternal>txInternals =api.account().txsInternal("0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3");
18+
List<TxToken>txTokens =api.account().txsToken("0xf261B3A60Ef40eE0B369B0705c1a2c58B02799DF");
1519
System.out.println("Test");
1620
}
1721
}

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
importio.api.core.impl.AccountProvider;
44
importio.api.core.impl.ContractProvider;
5+
importio.api.manager.IQueueManager;
6+
importio.api.manager.impl.QueueManager;
57
importio.api.model.EthereumNetwork;
68

79
importjava.util.HashMap;
@@ -24,8 +26,8 @@ public class EtherScanApi {
2426
HEADERS.put("cache-control","max-age=0");
2527
}
2628

27-
privatefinalContractProvidercontract;
28-
privatefinalAccountProvideraccount;
29+
privatefinalIContractProvidercontract;
30+
privatefinalIAccountProvideraccount;
2931

3032
publicEtherScanApi(finalStringapiKey) {
3133
this(apiKey,EthereumNetwork.MAINNET);
@@ -37,16 +39,19 @@ public EtherScanApi(final String apiKey,
3739
?EthereumNetwork.MAINNET
3840
:network;
3941

42+
// EtherScan 5req\sec limit support
43+
finalIQueueManagermasterQueue =newQueueManager(5,1);
44+
4045
finalStringurl ="https://" +usedNetwork.getDomain() +".etherscan.io/api" +"?apikey=" +apiKey;
41-
this.contract =newContractProvider(url,HEADERS);
42-
this.account =newAccountProvider(url,HEADERS);
46+
this.contract =newContractProvider(masterQueue,url,HEADERS);
47+
this.account =newAccountProvider(masterQueue,url,HEADERS);
4348
}
4449

45-
publicContractProvidercontract() {
50+
publicIContractProvidercontract() {
4651
returncontract;
4752
}
4853

49-
publicAccountProvideraccount() {
54+
publicIAccountProvideraccount() {
5055
returnaccount;
5156
}
5257
}
Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
packageio.api.core;
22

3-
importio.api.model.Balance;
4-
importio.api.model.Block;
5-
importio.api.model.Tx;
3+
importio.api.error.ApiException;
4+
importio.api.model.*;
5+
importorg.jetbrains.annotations.NotNull;
66

77
importjava.util.List;
88

@@ -16,34 +16,34 @@
1616
publicinterfaceIAccountProvider {
1717

1818
/** Address ETH balance */
19-
Balancebalance(Stringaddress);
19+
@NotNullBalancebalance(Stringaddress)throwsApiException;
2020

2121
/**
2222
* Maximum 20 address for batch request
2323
* If address > 20, then there will be more than 1 request performed
2424
*/
25-
List<Balance>balances(List<String>addresses);
25+
@NotNullList<Balance>balances(List<String>addresses)throwsApiException;
2626

2727
/** All txs */
28-
List<Tx>txs(Stringaddress);
28+
@NotNullList<Tx>txs(Stringaddress)throwsApiException;
2929
/** Only last 10000 txs */
30-
List<Tx>txs(Stringaddress,longstartBlock);
31-
List<Tx>txs(Stringaddress,longstartBlock,longendBlock);
30+
@NotNullList<Tx>txs(Stringaddress,longstartBlock);
31+
@NotNullList<Tx>txs(Stringaddress,longstartBlock,longendBlock);
3232

3333
/** All internal txs */
34-
List<Tx>txsInternal(Stringaddress);
34+
@NotNullList<TxInternal>txsInternal(Stringaddress);
3535
/** Only last 10000 internal txs */
36-
List<Tx>txsInternal(Stringaddress,longstartBlock);
37-
List<Tx>txsInternal(Stringaddress,longstartBlock,longendBlock);
36+
@NotNullList<TxInternal>txsInternal(Stringaddress,longstartBlock);
37+
@NotNullList<TxInternal>txsInternal(Stringaddress,longstartBlock,longendBlock);
3838
/** Only last 10000 internal txs by txhash */
39-
List<Tx>txsInternalByHash(Stringtxhash);
39+
@NotNullList<TxInternal>txsInternalByHash(Stringtxhash);
4040

4141
/** All token txs */
42-
List<Tx>txsToken(Stringaddress);
42+
@NotNullList<TxToken>txsToken(Stringaddress);
4343
/** Only last 10000 token txs */
44-
List<Tx>txsToken(Stringaddress,longstartBlock);
45-
List<Tx>txsToken(Stringaddress,longstartBlock,longendBlock);
44+
@NotNullList<TxToken>txsToken(Stringaddress,longstartBlock);
45+
@NotNullList<TxToken>txsToken(Stringaddress,longstartBlock,longendBlock);
4646

4747
/** All blocks mined by address */
48-
List<Block>minedBlocks(Stringaddress);
48+
@NotNullList<Block>minedBlocks(Stringaddress);
4949
}

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

Lines changed: 84 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
packageio.api.core.impl;
22

3-
importcom.sun.istack.internal.NotNull;
43
importio.api.core.IAccountProvider;
54
importio.api.error.EtherScanException;
6-
importio.api.model.Balance;
7-
importio.api.model.Block;
8-
importio.api.model.Tx;
9-
importio.api.model.temporary.BalanceResponseTO;
10-
importio.api.model.temporary.StringResponseTO;
11-
importio.api.model.temporary.TxResponseTO;
5+
importio.api.manager.IQueueManager;
6+
importio.api.model.*;
7+
importio.api.model.temporary.*;
128
importio.api.util.BasicUtils;
9+
importorg.jetbrains.annotations.NotNull;
1310

11+
importjava.util.ArrayList;
1412
importjava.util.Collections;
1513
importjava.util.List;
1614
importjava.util.Map;
@@ -45,9 +43,10 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
4543
privatestaticfinalStringOFFSET_PARAM ="&offset=";
4644
privatestaticfinalStringPAGE_PARAM ="&page=";
4745

48-
publicAccountProvider(finalStringbaseUrl,
46+
publicAccountProvider(finalIQueueManagerqueueManager,
47+
finalStringbaseUrl,
4948
finalMap<String,String>header) {
50-
super("account",baseUrl,header);
49+
super(queueManager,"account",baseUrl,header);
5150
}
5251

5352
@NotNull
@@ -56,28 +55,38 @@ public Balance balance(final String address) {
5655
BasicUtils.validateAddress(address);
5756

5857
finalStringurlParams =BALANCE_ACTION +TAG_LATEST_PARAM +ADDRESS_PARAM +address;
59-
finalStringresponse =getRequest(urlParams);
60-
finalStringResponseTOconverted =convert(response,StringResponseTO.class);
58+
finalStringResponseTOconverted =getRequest(urlParams,StringResponseTO.class);
6159
if (converted.getStatus() !=1)
62-
thrownewEtherScanException(converted.getMessage() +" with status " +converted.getStatus());
60+
thrownewEtherScanException(converted.getMessage() +", with status " +converted.getStatus());
6361

6462
returnnewBalance(address,Long.valueOf(converted.getResult()));
6563
}
6664

6765
@NotNull
6866
@Override
6967
publicList<Balance>balances(finalList<String>addresses) {
70-
BasicUtils.validateAddresses(addresses);
71-
if (addresses.isEmpty())
68+
if (BasicUtils.isEmpty(addresses))
7269
returnCollections.emptyList();
7370

74-
finalStringurlParams =BALANCE_MULTI_ACTION +TAG_LATEST_PARAM +ADDRESS_PARAM +toAddressParam(addresses);
75-
finalStringresponse =getRequest(urlParams);
76-
finalBalanceResponseTOconverted =convert(response,BalanceResponseTO.class);
77-
if (converted.getStatus() !=1)
78-
thrownewEtherScanException(converted.getMessage() +" with status " +converted.getStatus());
71+
BasicUtils.validateAddresses(addresses);
72+
73+
// Maximum addresses in batch request - 20
74+
finalList<Balance>balances =newArrayList<>();
75+
finalList<List<String>>addressesAsBatches =BasicUtils.partition(addresses,20);
7976

80-
returnconverted.getBalances().stream().map(Balance::of).collect(Collectors.toList());
77+
for (finalList<String>batch :addressesAsBatches) {
78+
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());
82+
83+
if (!BasicUtils.isEmpty(converted.getBalances()))
84+
balances.addAll(converted.getBalances().stream()
85+
.map(Balance::of)
86+
.collect(Collectors.toList()));
87+
}
88+
89+
returnbalances;
8190
}
8291

8392
privateStringtoAddressParam(finalList<String>addresses) {
@@ -88,8 +97,7 @@ private String toAddressParam(final List<String> addresses) {
8897
@Override
8998
publicList<Tx>txs(finalStringaddress) {
9099
//TODO all txs implementations with pagination
91-
92-
returntxs(address,MIN_START_BLOCK,MAX_END_BLOCK);
100+
returntxs(address,MIN_START_BLOCK);
93101
}
94102

95103
@NotNull
@@ -105,8 +113,7 @@ public List<Tx> txs(final String address, final long startBlock, final long endB
105113

106114
finalStringblockParam =START_BLOCK_PARAM +startBlock +END_BLOCK_PARAM +endBlock;
107115
finalStringurlParams =TX_ACTION +ADDRESS_PARAM +address +blockParam +SORT_ASC_PARAM;
108-
finalStringresponse =getRequest(urlParams);
109-
finalTxResponseTOconverted =convert(response,TxResponseTO.class);
116+
finalTxResponseTOconverted =getRequest(urlParams,TxResponseTO.class);
110117
if (converted.getStatus() !=1)
111118
thrownewEtherScanException(converted.getMessage() +" with status " +converted.getStatus());
112119

@@ -117,49 +124,89 @@ public List<Tx> txs(final String address, final long startBlock, final long endB
117124

118125
@NotNull
119126
@Override
120-
publicList<Tx>txsInternal(finalStringaddress) {
121-
returnnull;
127+
publicList<TxInternal>txsInternal(finalStringaddress) {
128+
//TODO all txs implementations with pagination
129+
returntxsInternal(address,MIN_START_BLOCK);
122130
}
123131

124132
@NotNull
125133
@Override
126-
publicList<Tx>txsInternal(finalStringaddress,finallongstartBlock) {
134+
publicList<TxInternal>txsInternal(finalStringaddress,finallongstartBlock) {
127135
returntxsInternal(address,startBlock,MAX_END_BLOCK);
128136
}
129137

130138
@NotNull
131139
@Override
132-
publicList<Tx>txsInternal(finalStringaddress,finallongstartBlock,finallongendBlock) {
133-
returnnull;
140+
publicList<TxInternal>txsInternal(finalStringaddress,finallongstartBlock,finallongendBlock) {
141+
BasicUtils.validateAddress(address);
142+
143+
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());
148+
149+
return (converted.getResult() ==null)
150+
?Collections.emptyList()
151+
:converted.getResult();
134152
}
135153

136154
@NotNull
137155
@Override
138-
publicList<Tx>txsInternalByHash(Stringtxhash) {
139-
returnnull;
156+
publicList<TxInternal>txsInternalByHash(finalStringtxhash) {
157+
BasicUtils.validateTxHash(txhash);
158+
159+
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());
163+
164+
return (converted.getResult() ==null)
165+
?Collections.emptyList()
166+
:converted.getResult();
140167
}
141168

142169
@NotNull
143170
@Override
144-
publicList<Tx>txsToken(finalStringaddress) {
145-
returnnull;
171+
publicList<TxToken>txsToken(finalStringaddress) {
172+
//TODO all txs implementations with pagination
173+
returntxsToken(address,MIN_START_BLOCK);
146174
}
147175

148176
@NotNull
149177
@Override
150-
publicList<Tx>txsToken(finalStringaddress,finallongstartBlock) {
178+
publicList<TxToken>txsToken(finalStringaddress,finallongstartBlock) {
151179
returntxsToken(address,startBlock,MAX_END_BLOCK);
152180
}
153181

154182
@NotNull
155183
@Override
156-
publicList<Tx>txsToken(finalStringaddress,finallongstartBlock,finallongendBlock) {
157-
returnnull;
184+
publicList<TxToken>txsToken(finalStringaddress,finallongstartBlock,finallongendBlock) {
185+
BasicUtils.validateAddress(address);
186+
187+
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());
192+
193+
return (converted.getResult() ==null)
194+
?Collections.emptyList()
195+
:converted.getResult();
158196
}
159197

160198
@NotNull
161199
@Override
162200
publicList<Block>minedBlocks(finalStringaddress) {
163-
returnnull;
201+
BasicUtils.validateAddress(address);
202+
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());
207+
208+
return (converted.getResult() ==null)
209+
?Collections.emptyList()
210+
:converted.getResult();
164211
}
165212
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp