Skip to content

Commit 2604d93

Browse files
committed
LogQuery implementation finalized
TransactionProvider & others implemented HttpExecutor supplier in api constructor Refactoring & improvements
1 parent 6d5a02b commit 2604d93

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+743
-437
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package io.api;
22

3-
import io.api.core.EtherScanApi;
3+
import io.api.core.impl.EtherScanApi;
44
import io.api.model.Tx;
55
import io.api.model.TxInternal;
66
import io.api.model.TxToken;
7+
import io.api.model.UncleBlock;
78

89
import java.util.List;
10+
import java.util.Optional;
911

1012
/**
1113
*
@@ -14,8 +16,10 @@ public class App {
1416
public static void main(String[] args) {
1517
EtherScanApi api = new EtherScanApi(args[0]);
1618
List<Tx> txs = api.account().txs("0x8d4426f94e42f721C7116E81d6688cd935cB3b4F");
17-
List<TxInternal> txInternals = api.account().txsInternal("0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3");
1819
List<TxToken> txTokens = api.account().txsToken("0xf261B3A60Ef40eE0B369B0705c1a2c58B02799DF");
20+
List<TxInternal> txInternals = api.account().txsInternal("0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3");
21+
Optional<UncleBlock> uncles = api.block().uncles(2165403);
22+
Optional<UncleBlock> uncleBlock = api.block().uncles(999965403);
1923
System.out.println("Test");
2024
}
2125
}

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

Lines changed: 0 additions & 54 deletions
This file was deleted.

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ public interface IAccountProvider {
1818
/** Address ETH balance */
1919
@NotNull Balance balance(String address) throws ApiException;
2020

21+
/** ERC20 token balance for address */
22+
@NotNull Balance balance(String address, String contract) throws ApiException;
23+
2124
/**
2225
* Maximum 20 address for single batch request
2326
* If address > 20, then there will be more than 1 request performed

src/main/java/io/api/core/IBlockProvider.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package io.api.core;
22

3+
import io.api.error.ApiException;
34
import io.api.model.UncleBlock;
5+
import org.jetbrains.annotations.NotNull;
6+
7+
import java.util.Optional;
48

59
/**
610
* EtherScan - API Descriptions
@@ -12,5 +16,5 @@
1216
public interface IBlockProvider {
1317

1418
/** Return uncle blocks */
15-
UncleBlock uncles(long blockNumber);
19+
@NotNull Optional<UncleBlock> uncles(long blockNumber) throws ApiException;
1620
}

src/main/java/io/api/core/IContractProvider.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package io.api.core;
22

3+
import io.api.error.ApiException;
4+
import org.jetbrains.annotations.NotNull;
5+
36
/**
47
* EtherScan - API Descriptions
58
* https://etherscan.io/apis#contracts
@@ -10,5 +13,5 @@
1013
public interface IContractProvider {
1114

1215
/** Get Verified Contract Sources */
13-
String contractAbi(String address);
16+
@NotNull String contractAbi(String address) throws ApiException;
1417
}

src/main/java/io/api/core/ILogsProvider.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package io.api.core;
22

33
import io.api.model.Log;
4+
import io.api.model.builder.LogQuery;
5+
import org.jetbrains.annotations.NotNull;
46

57
import java.util.List;
68

@@ -13,7 +15,5 @@
1315
*/
1416
public interface ILogsProvider {
1517

16-
List<Log> logs(String address);
17-
List<Log> logs(String address, long startBlock);
18-
List<Log> logs(String address, long startBlock, long endBlock);
18+
@NotNull List<Log> logs(LogQuery query);
1919
}

src/main/java/io/api/core/IParityProvider.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,5 @@
88
* @since 30.10.2018
99
*/
1010
public interface IParityProvider {
11-
1211
//TODO implement
1312
}

src/main/java/io/api/core/IStatisticProvider.java

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

33
import io.api.model.Price;
44
import io.api.model.Supply;
5+
import org.jetbrains.annotations.NotNull;
6+
7+
import java.math.BigInteger;
8+
import java.util.Optional;
59

610
/**
711
* EtherScan - API Descriptions
@@ -12,9 +16,12 @@
1216
*/
1317
public interface IStatisticProvider {
1418

19+
/** ERC20 Total Supply */
20+
@NotNull Optional<BigInteger> supply(String contract);
21+
1522
/** Eth Total Supply */
16-
Supply supply();
23+
@NotNull Supply supply();
1724

1825
/** Eth last USD and BTC price */
19-
Price lastPrice();
26+
@NotNull Price lastPrice();
2027
}

src/main/java/io/api/core/ITokenProvider.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/main/java/io/api/core/ITransactionProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.api.core;
22

33
import io.api.model.Status;
4+
import org.jetbrains.annotations.NotNull;
45

56
/**
67
* EtherScan - API Descriptions
@@ -11,7 +12,7 @@
1112
*/
1213
public interface ITransactionProvider {
1314

14-
Status execStatus(String txhash);
15+
@NotNull Status execStatus(String txhash);
1516

1617
boolean receiptStatus(String txhash);
1718
}

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

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
package io.api.core.impl;
22

33
import io.api.core.IAccountProvider;
4+
import io.api.error.ApiException;
45
import io.api.error.EtherScanException;
6+
import io.api.executor.IHttpExecutor;
57
import io.api.manager.IQueueManager;
68
import io.api.model.*;
7-
import io.api.model.temporary.*;
9+
import io.api.model.utility.*;
810
import io.api.util.BasicUtils;
911
import org.jetbrains.annotations.NotNull;
1012

1113
import java.math.BigInteger;
1214
import java.util.ArrayList;
1315
import java.util.Collections;
1416
import java.util.List;
15-
import java.util.Map;
1617
import java.util.stream.Collectors;
1718

1819
/**
@@ -23,17 +24,15 @@
2324
*/
2425
public class AccountProvider extends BasicProvider implements IAccountProvider {
2526

26-
private static final int MAX_END_BLOCK = 999999999;
27-
private static final int MIN_START_BLOCK = 0;
28-
2927
private static final int OFFSET_MAX = 10000;
3028

31-
private static final String BALANCE_ACTION = ACTION_PARAM + "balance";
32-
private static final String BALANCE_MULTI_ACTION = ACTION_PARAM + "balancemulti";
33-
private static final String TX_ACTION = ACTION_PARAM + "txlist";
34-
private static final String TX_INTERNAL_ACTION = ACTION_PARAM + "txlistinternal";
35-
private static final String TX_TOKEN_ACTION = ACTION_PARAM + "tokentx";
36-
private static final String MINED_ACTION = ACTION_PARAM + "getminedblocks";
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";
3736

3837
private static final String BLOCK_TYPE_PARAM = "&blocktype=blocks";
3938
private static final String TAG_LATEST_PARAM = "&tag=latest";
@@ -46,25 +45,31 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
4645
private static final String OFFSET_PARAM = "&offset=";
4746
private static final String PAGE_PARAM = "&page=";
4847

49-
public AccountProvider(final IQueueManager queueManager,
50-
final String baseUrl,
51-
final Map<String, String> header) {
52-
super(queueManager, "account", baseUrl, header);
48+
AccountProvider(final IQueueManager queueManager,
49+
final String baseUrl,
50+
final IHttpExecutor executor) {
51+
super(queueManager, "account", baseUrl, executor);
5352
}
5453

5554
@NotNull
5655
@Override
5756
public Balance balance(final String address) {
5857
BasicUtils.validateAddress(address);
5958

60-
final String urlParams = BALANCE_ACTION + TAG_LATEST_PARAM + ADDRESS_PARAM + address;
59+
final String urlParams = ACT_BALANCE_ACTION + TAG_LATEST_PARAM + ADDRESS_PARAM + address;
6160
final StringResponseTO response = getRequest(urlParams, StringResponseTO.class);
6261
if (response.getStatus() != 1)
6362
throw new EtherScanException(response.getMessage() + ", with status " + response.getStatus());
6463

6564
return new Balance(address, new BigInteger(response.getResult()));
6665
}
6766

67+
@NotNull
68+
@Override
69+
public Balance balance(final String address, final String contract) throws ApiException {
70+
return null;
71+
}
72+
6873
@NotNull
6974
@Override
7075
public List<Balance> balances(final List<String> addresses) {
@@ -78,7 +83,7 @@ public List<Balance> balances(final List<String> addresses) {
7883
final List<List<String>> addressesAsBatches = BasicUtils.partition(addresses, 20);
7984

8085
for (final List<String> batch : addressesAsBatches) {
81-
final String urlParams = BALANCE_MULTI_ACTION + TAG_LATEST_PARAM + ADDRESS_PARAM + toAddressParam(batch);
86+
final String urlParams = ACT_BALANCE_MULTI_ACTION + TAG_LATEST_PARAM + ADDRESS_PARAM + toAddressParam(batch);
8287
final BalanceResponseTO response = getRequest(urlParams, BalanceResponseTO.class);
8388
if (response.getStatus() != 1)
8489
throw new EtherScanException(response.getMessage() + ", with status " + response.getStatus());
@@ -115,7 +120,7 @@ public List<Tx> txs(final String address, final long startBlock, final long endB
115120

116121
final String offsetParam = PAGE_PARAM + "%s" + OFFSET_PARAM + OFFSET_MAX;
117122
final String blockParam = START_BLOCK_PARAM + startBlock + END_BLOCK_PARAM + endBlock;
118-
final String urlParams = TX_ACTION + offsetParam + ADDRESS_PARAM + address + blockParam + SORT_ASC_PARAM;
123+
final String urlParams = ACT_TX_ACTION + offsetParam + ADDRESS_PARAM + address + blockParam + SORT_ASC_PARAM;
119124

120125
return getRequestUsingOffset(urlParams, TxResponseTO.class);
121126
}
@@ -125,9 +130,9 @@ public List<Tx> txs(final String address, final long startBlock, final long endB
125130
* To avoid 10k limit per response
126131
*
127132
* @param urlParams Url params for #getRequest()
128-
* @param tClass responseListTO class
129-
* @param <T> responseTO list T type
130-
* @param <R> responseListTO type
133+
* @param tClass responseListTO class
134+
* @param <T> responseTO list T type
135+
* @param <R> responseListTO type
131136
* @return List of T values
132137
*/
133138
private <T, R extends BaseListResponseTO> List<T> getRequestUsingOffset(final String urlParams, Class<R> tClass) {
@@ -137,11 +142,11 @@ private <T, R extends BaseListResponseTO> List<T> getRequestUsingOffset(final St
137142
final String formattedUrl = String.format(urlParams, page++);
138143
final R response = getRequest(formattedUrl, tClass);
139144
BasicUtils.validateTxResponse(response);
140-
if(BasicUtils.isEmpty(response.getResult()))
145+
if (BasicUtils.isEmpty(response.getResult()))
141146
break;
142147

143148
result.addAll(response.getResult());
144-
if(response.getResult().size() < OFFSET_MAX)
149+
if (response.getResult().size() < OFFSET_MAX)
145150
break;
146151
}
147152

@@ -167,7 +172,7 @@ public List<TxInternal> txsInternal(final String address, final long startBlock,
167172

168173
final String offsetParam = PAGE_PARAM + "%s" + OFFSET_PARAM + OFFSET_MAX;
169174
final String blockParam = START_BLOCK_PARAM + startBlock + END_BLOCK_PARAM + endBlock;
170-
final String urlParams = TX_INTERNAL_ACTION + offsetParam + ADDRESS_PARAM + address + blockParam + SORT_ASC_PARAM;
175+
final String urlParams = ACT_TX_INTERNAL_ACTION + offsetParam + ADDRESS_PARAM + address + blockParam + SORT_ASC_PARAM;
171176

172177
return getRequestUsingOffset(urlParams, TxInternalResponseTO.class);
173178
}
@@ -178,7 +183,7 @@ public List<TxInternal> txsInternal(final String address, final long startBlock,
178183
public List<TxInternal> txsInternalByHash(final String txhash) {
179184
BasicUtils.validateTxHash(txhash);
180185

181-
final String urlParams = TX_INTERNAL_ACTION + TXHASH_PARAM + txhash;
186+
final String urlParams = ACT_TX_INTERNAL_ACTION + TXHASH_PARAM + txhash;
182187
final TxInternalResponseTO response = getRequest(urlParams, TxInternalResponseTO.class);
183188
BasicUtils.validateTxResponse(response);
184189

@@ -206,7 +211,7 @@ public List<TxToken> txsToken(final String address, final long startBlock, final
206211

207212
final String offsetParam = PAGE_PARAM + "%s" + OFFSET_PARAM + OFFSET_MAX;
208213
final String blockParam = START_BLOCK_PARAM + startBlock + END_BLOCK_PARAM + endBlock;
209-
final String urlParams = TX_TOKEN_ACTION + offsetParam + ADDRESS_PARAM + address + blockParam + SORT_ASC_PARAM;
214+
final String urlParams = ACT_TX_TOKEN_ACTION + offsetParam + ADDRESS_PARAM + address + blockParam + SORT_ASC_PARAM;
210215

211216
return getRequestUsingOffset(urlParams, TxTokenResponseTO.class);
212217
}
@@ -217,7 +222,7 @@ public List<Block> minedBlocks(final String address) {
217222
BasicUtils.validateAddress(address);
218223

219224
final String offsetParam = PAGE_PARAM + "%s" + OFFSET_PARAM + OFFSET_MAX;
220-
final String urlParams = MINED_ACTION + offsetParam + BLOCK_TYPE_PARAM + ADDRESS_PARAM + address;
225+
final String urlParams = ACT_MINED_ACTION + offsetParam + BLOCK_TYPE_PARAM + ADDRESS_PARAM + address;
221226

222227
return getRequestUsingOffset(urlParams, BlockResponseTO.class);
223228
}

0 commit comments

Comments
 (0)