Skip to content

Commit ef3a682

Browse files
committed
Most of providers implemented
Model improvements & refactoring
1 parent 2604d93 commit ef3a682

29 files changed

+256
-101
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public interface IAccountProvider {
1919
@NotNull Balance balance(String address) throws ApiException;
2020

2121
/** ERC20 token balance for address */
22-
@NotNull Balance balance(String address, String contract) throws ApiException;
22+
@NotNull TokenBalance balance(String address, String contract) throws ApiException;
2323

2424
/**
2525
* Maximum 20 address for single batch request

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import io.api.model.UncleBlock;
55
import org.jetbrains.annotations.NotNull;
66

7-
import java.util.Optional;
8-
97
/**
108
* EtherScan - API Descriptions
119
* https://etherscan.io/apis#blocks
@@ -16,5 +14,5 @@
1614
public interface IBlockProvider {
1715

1816
/** Return uncle blocks */
19-
@NotNull Optional<UncleBlock> uncles(long blockNumber) throws ApiException;
17+
@NotNull UncleBlock uncles(long blockNumber) throws ApiException;
2018
}

src/main/java/io/api/core/IContractProvider.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.error.ApiException;
4+
import io.api.model.Abi;
45
import org.jetbrains.annotations.NotNull;
56

67
/**
@@ -13,5 +14,5 @@
1314
public interface IContractProvider {
1415

1516
/** Get Verified Contract Sources */
16-
@NotNull String contractAbi(String address) throws ApiException;
17+
@NotNull Abi contractAbi(String address) throws ApiException;
1718
}

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

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

33
import io.api.model.Log;
4-
import io.api.model.builder.LogQuery;
4+
import io.api.model.query.impl.LogQuery;
55
import org.jetbrains.annotations.NotNull;
66

77
import java.util.List;

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import org.jetbrains.annotations.NotNull;
66

77
import java.math.BigInteger;
8-
import java.util.Optional;
98

109
/**
1110
* EtherScan - API Descriptions
@@ -16,10 +15,10 @@
1615
*/
1716
public interface IStatisticProvider {
1817

19-
/** ERC20 Total Supply */
20-
@NotNull Optional<BigInteger> supply(String contract);
18+
/** ERC20 token total Supply */
19+
@NotNull BigInteger supply(String contract);
2120

22-
/** Eth Total Supply */
21+
/** Eth total supply */
2322
@NotNull Supply supply();
2423

2524
/** Eth last USD and BTC price */

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

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,15 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
2626

2727
private static final int OFFSET_MAX = 10000;
2828

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=";
3738
private static final String BLOCK_TYPE_PARAM = "&blocktype=blocks";
3839
private static final String TAG_LATEST_PARAM = "&tag=latest";
3940
private static final String START_BLOCK_PARAM = "&startblock=";
@@ -53,7 +54,7 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
5354

5455
@NotNull
5556
@Override
56-
public Balance balance(final String address) {
57+
public Balance balance(final String address) throws ApiException {
5758
BasicUtils.validateAddress(address);
5859

5960
final String urlParams = ACT_BALANCE_ACTION + TAG_LATEST_PARAM + ADDRESS_PARAM + address;
@@ -66,13 +67,21 @@ public Balance balance(final String address) {
6667

6768
@NotNull
6869
@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);
7180
}
7281

7382
@NotNull
7483
@Override
75-
public List<Balance> balances(final List<String> addresses) {
84+
public List<Balance> balances(final List<String> addresses) throws ApiException {
7685
if (BasicUtils.isEmpty(addresses))
7786
return Collections.emptyList();
7887

@@ -103,19 +112,19 @@ private String toAddressParam(final List<String> addresses) {
103112

104113
@NotNull
105114
@Override
106-
public List<Tx> txs(final String address) {
115+
public List<Tx> txs(final String address) throws ApiException {
107116
return txs(address, MIN_START_BLOCK);
108117
}
109118

110119
@NotNull
111120
@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 {
113122
return txs(address, startBlock, MAX_END_BLOCK);
114123
}
115124

116125
@NotNull
117126
@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 {
119128
BasicUtils.validateAddress(address);
120129

121130
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
135144
* @param <R> responseListTO type
136145
* @return List of T values
137146
*/
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 {
139149
final List<T> result = new ArrayList<>();
140150
int page = 1;
141151
while (true) {
@@ -155,19 +165,19 @@ private <T, R extends BaseListResponseTO> List<T> getRequestUsingOffset(final St
155165

156166
@NotNull
157167
@Override
158-
public List<TxInternal> txsInternal(final String address) {
168+
public List<TxInternal> txsInternal(final String address) throws ApiException {
159169
return txsInternal(address, MIN_START_BLOCK);
160170
}
161171

162172
@NotNull
163173
@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 {
165175
return txsInternal(address, startBlock, MAX_END_BLOCK);
166176
}
167177

168178
@NotNull
169179
@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 {
171181
BasicUtils.validateAddress(address);
172182

173183
final String offsetParam = PAGE_PARAM + "%s" + OFFSET_PARAM + OFFSET_MAX;
@@ -177,10 +187,9 @@ public List<TxInternal> txsInternal(final String address, final long startBlock,
177187
return getRequestUsingOffset(urlParams, TxInternalResponseTO.class);
178188
}
179189

180-
181190
@NotNull
182191
@Override
183-
public List<TxInternal> txsInternalByHash(final String txhash) {
192+
public List<TxInternal> txsInternalByHash(final String txhash) throws ApiException {
184193
BasicUtils.validateTxHash(txhash);
185194

186195
final String urlParams = ACT_TX_INTERNAL_ACTION + TXHASH_PARAM + txhash;
@@ -194,19 +203,19 @@ public List<TxInternal> txsInternalByHash(final String txhash) {
194203

195204
@NotNull
196205
@Override
197-
public List<TxToken> txsToken(final String address) {
206+
public List<TxToken> txsToken(final String address) throws ApiException {
198207
return txsToken(address, MIN_START_BLOCK);
199208
}
200209

201210
@NotNull
202211
@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 {
204213
return txsToken(address, startBlock, MAX_END_BLOCK);
205214
}
206215

207216
@NotNull
208217
@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 {
210219
BasicUtils.validateAddress(address);
211220

212221
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
218227

219228
@NotNull
220229
@Override
221-
public List<Block> minedBlocks(final String address) {
230+
public List<Block> minedBlocks(final String address) throws ApiException {
222231
BasicUtils.validateAddress(address);
223232

224233
final String offsetParam = PAGE_PARAM + "%s" + OFFSET_PARAM + OFFSET_MAX;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ abstract class BasicProvider {
1616
static final int MAX_END_BLOCK = 999999999;
1717
static final int MIN_START_BLOCK = 0;
1818

19-
static final String ACT_PARAM = "&action=";
19+
static final String ACT_PREFIX = "&action=";
2020

2121
private final String module;
2222
private final String baseUrl;

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
import io.api.util.BasicUtils;
99
import org.jetbrains.annotations.NotNull;
1010

11-
import java.util.Optional;
12-
1311
/**
1412
* ! NO DESCRIPTION !
1513
*
@@ -18,7 +16,7 @@
1816
*/
1917
public class BlockProvider extends BasicProvider implements IBlockProvider {
2018

21-
private static final String ACT_BLOCK_PARAM = ACT_PARAM + "getblockreward";
19+
private static final String ACT_BLOCK_PARAM = ACT_PREFIX + "getblockreward";
2220

2321
private static final String BLOCKNO_PARAM = "&blockno=";
2422

@@ -30,13 +28,13 @@ public class BlockProvider extends BasicProvider implements IBlockProvider {
3028

3129
@NotNull
3230
@Override
33-
public Optional<UncleBlock> uncles(long blockNumber) {
31+
public UncleBlock uncles(long blockNumber) {
3432
final String urlParam = ACT_BLOCK_PARAM + BLOCKNO_PARAM + blockNumber;
3533
final UncleBlockResponseTO response = getRequest(urlParam, UncleBlockResponseTO.class);
3634
BasicUtils.validateTxResponse(response);
3735

38-
return (response.getResult() == null || response.getResult().isEmpty())
39-
? Optional.empty()
40-
: Optional.of(response.getResult());
36+
return (response.getResult() == null)
37+
? UncleBlock.EMPTY
38+
: response.getResult();
4139
}
4240
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.api.error.EtherScanException;
55
import io.api.executor.IHttpExecutor;
66
import io.api.manager.IQueueManager;
7+
import io.api.model.Abi;
78
import io.api.model.utility.StringResponseTO;
89
import io.api.util.BasicUtils;
910
import org.jetbrains.annotations.NotNull;
@@ -16,7 +17,7 @@
1617
*/
1718
public class ContractProvider extends BasicProvider implements IContractProvider {
1819

19-
private static final String ACT_ABI_PARAM = ACT_PARAM + "getabi";
20+
private static final String ACT_ABI_PARAM = ACT_PREFIX + "getabi";
2021

2122
private static final String ADDRESS_PARAM = "&address=";
2223

@@ -28,16 +29,16 @@ public class ContractProvider extends BasicProvider implements IContractProvider
2829

2930
@NotNull
3031
@Override
31-
public String contractAbi(final String address) {
32+
public Abi contractAbi(final String address) {
3233
BasicUtils.validateAddress(address);
3334

3435
final String urlParam = ACT_ABI_PARAM + ADDRESS_PARAM + address;
3536
final StringResponseTO response = getRequest(urlParam, StringResponseTO.class);
36-
if (response.getStatus() != 1)
37+
if (response.getStatus() != 1 && !"NOTOK".equals(response.getMessage()))
3738
throw new EtherScanException(response.getMessage() + ", with status " + response.getStatus());
3839

3940
return BasicUtils.isEmpty(response.getResult())
40-
? ""
41-
: response.getResult();
41+
? Abi.nonVerified()
42+
: Abi.verified(response.getResult());
4243
}
4344
}

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

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

3-
import io.api.core.IAccountProvider;
4-
import io.api.core.IBlockProvider;
5-
import io.api.core.IContractProvider;
3+
import io.api.core.*;
64
import io.api.executor.IHttpExecutor;
75
import io.api.executor.impl.HttpExecutor;
86
import io.api.manager.IQueueManager;
@@ -21,9 +19,13 @@ public class EtherScanApi {
2119

2220
private static final Supplier<IHttpExecutor> DEFAULT_SUPPLIER = HttpExecutor::new;
2321

24-
private final IContractProvider contract;
2522
private final IAccountProvider account;
2623
private final IBlockProvider block;
24+
private final IContractProvider contract;
25+
private final ILogsProvider logs;
26+
//private final IParityProvider parityProvider;
27+
private final IStatisticProvider stats;
28+
private final ITransactionProvider txs;
2729

2830
public EtherScanApi(final String apiKey) {
2931
this(apiKey, EthereumNetwork.MAINNET);
@@ -44,9 +46,12 @@ public EtherScanApi(final String apiKey,
4446
final EthereumNetwork usedNetwork = (network == null) ? EthereumNetwork.MAINNET : network;
4547
final String baseUrl = "https://" + usedNetwork.getDomain() + ".etherscan.io/api" + "?apikey=" + apiKey;
4648

47-
this.contract = new ContractProvider(masterQueue, baseUrl, executor);
4849
this.account = new AccountProvider(masterQueue, baseUrl, executor);
49-
this.block = new BlockProvider(masterQueue, baseUrl, executor);
50+
this.block = new BlockProvider(masterQueue, baseUrl, executor);
51+
this.contract = new ContractProvider(masterQueue, baseUrl, executor);
52+
this.logs = new LogsProvider(masterQueue, baseUrl, executor);
53+
this.stats = new StatisticProvider(masterQueue, baseUrl, executor);
54+
this.txs = new TransactionProvider(masterQueue, baseUrl, executor);
5055
}
5156

5257
public IContractProvider contract() {
@@ -60,4 +65,16 @@ public IAccountProvider account() {
6065
public IBlockProvider block() {
6166
return block;
6267
}
68+
69+
public ILogsProvider logs() {
70+
return logs;
71+
}
72+
73+
public IStatisticProvider stats() {
74+
return stats;
75+
}
76+
77+
public ITransactionProvider txs() {
78+
return txs;
79+
}
6380
}

0 commit comments

Comments
 (0)