Skip to content

Commit dddec66

Browse files
committed
TxRefactoring
JSON converter iter -> gson OTher model refactoring and account provider wip
1 parent 2556c0c commit dddec66

23 files changed

+487
-246
lines changed

pom.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1414
<maven.compiler.source>1.8</maven.compiler.source>
1515
<maven.compiler.target>1.8</maven.compiler.target>
16+
<apache.http>4.5.6</apache.http>
1617
</properties>
1718

1819
<dependencies>
@@ -26,7 +27,13 @@
2627
<dependency>
2728
<groupId>org.apache.httpcomponents</groupId>
2829
<artifactId>httpclient</artifactId>
29-
<version>4.5.6</version>
30+
<version>${apache.http}</version>
31+
</dependency>
32+
33+
<dependency>
34+
<groupId>com.google.code.gson</groupId>
35+
<artifactId>gson</artifactId>
36+
<version>2.8.5</version>
3037
</dependency>
3138

3239
<dependency>

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

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

33
import io.api.core.EtherScanApi;
4+
import io.api.model.Tx;
5+
6+
import java.util.List;
47

58
/**
69
*
710
*/
811
public class App {
912
public static void main(String[] args) {
1013
EtherScanApi api = new EtherScanApi(args[0]);
11-
String abi = api.contract().contractAbi("0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413");
12-
System.out.println(abi);
14+
List<Tx> txs = api.account().txs("0x8d4426f94e42f721C7116E81d6688cd935cB3b4F");
15+
System.out.println("Test");
1316
}
1417
}

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

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

33
import io.api.model.Balance;
44
import io.api.model.Block;
5-
import io.api.model.Transaction;
5+
import io.api.model.Tx;
66

77
import java.util.List;
88

@@ -25,22 +25,24 @@ public interface IAccountProvider {
2525
List<Balance> balances(List<String> addresses);
2626

2727
/** All txs */
28-
List<Transaction> txs(String address);
28+
List<Tx> txs(String address);
2929
/** Only last 10000 txs */
30-
List<Transaction> txs(String address, int startBlock);
31-
List<Transaction> txs(String address, int startBlock, int endBlock);
30+
List<Tx> txs(String address, long startBlock);
31+
List<Tx> txs(String address, long startBlock, long endBlock);
3232

3333
/** All internal txs */
34-
List<Transaction> txsInternal(String address);
34+
List<Tx> txsInternal(String address);
3535
/** Only last 10000 internal txs */
36-
List<Transaction> txsInternal(String address, int startBlock);
37-
List<Transaction> txsInternal(String address, int startBlock, int endBlock);
36+
List<Tx> txsInternal(String address, long startBlock);
37+
List<Tx> txsInternal(String address, long startBlock, long endBlock);
38+
/** Only last 10000 internal txs by txhash */
39+
List<Tx> txsInternalByHash(String txhash);
3840

3941
/** All token txs */
40-
List<Transaction> txsToken(String address);
42+
List<Tx> txsToken(String address);
4143
/** Only last 10000 token txs */
42-
List<Transaction> txsToken(String address, int startBlock);
43-
List<Transaction> txsToken(String address, int startBlock, int endBlock);
44+
List<Tx> txsToken(String address, long startBlock);
45+
List<Tx> txsToken(String address, long startBlock, long endBlock);
4446

4547
/** All blocks mined by address */
4648
List<Block> minedBlocks(String address);

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

Lines changed: 73 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@
22

33
import com.sun.istack.internal.NotNull;
44
import io.api.core.IAccountProvider;
5+
import io.api.error.EtherScanException;
56
import io.api.model.Balance;
67
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;
813

14+
import java.util.Collections;
915
import java.util.List;
1016
import java.util.Map;
17+
import java.util.stream.Collectors;
1118

1219
/**
1320
* ! NO DESCRIPTION !
@@ -20,12 +27,21 @@ public class AccountProvider extends BasicProvider implements IAccountProvider {
2027
private static final int MAX_END_BLOCK = 999999999;
2128
private static final int MIN_START_BLOCK = 0;
2229

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+
2337
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=";
2641
private static final String SORT_DESC_PARAM = "&sort=desc";
2742
private static final String SORT_ASC_PARAM = "&sort=asc";
2843
private static final String ADDRESS_PARAM = "&address=";
44+
private static final String TXHASH_PARAM = "&txhash=";
2945
private static final String OFFSET_PARAM = "&offset=";
3046
private static final String PAGE_PARAM = "&page=";
3147

@@ -37,66 +53,107 @@ public AccountProvider(final String baseUrl,
3753
@NotNull
3854
@Override
3955
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()));
4165
}
4266

4367
@NotNull
4468
@Override
4569
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(","));
4785
}
4886

4987
@NotNull
5088
@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);
5393
}
5494

5595
@NotNull
5696
@Override
57-
public List<Transaction> txs(final String address, final int startBlock) {
97+
public List<Tx> txs(final String address, final long startBlock) {
5898
return txs(address, startBlock, MAX_END_BLOCK);
5999
}
60100

61101
@NotNull
62102
@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();
65116
}
66117

67118
@NotNull
68119
@Override
69-
public List<Transaction> txsInternal(final String address) {
120+
public List<Tx> txsInternal(final String address) {
70121
return null;
71122
}
72123

73124
@NotNull
74125
@Override
75-
public List<Transaction> txsInternal(final String address, final int startBlock) {
126+
public List<Tx> txsInternal(final String address, final long startBlock) {
76127
return txsInternal(address, startBlock, MAX_END_BLOCK);
77128
}
78129

79130
@NotNull
80131
@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) {
82139
return null;
83140
}
84141

85142
@NotNull
86143
@Override
87-
public List<Transaction> txsToken(final String address) {
144+
public List<Tx> txsToken(final String address) {
88145
return null;
89146
}
90147

91148
@NotNull
92149
@Override
93-
public List<Transaction> txsToken(final String address, final int startBlock) {
150+
public List<Tx> txsToken(final String address, final long startBlock) {
94151
return txsToken(address, startBlock, MAX_END_BLOCK);
95152
}
96153

97154
@NotNull
98155
@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) {
100157
return null;
101158
}
102159

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

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

3-
import com.jsoniter.JsonIterator;
3+
import com.google.gson.Gson;
44
import io.api.error.ConnectionException;
55
import io.api.error.ParseException;
66
import io.api.executor.HttpExecutor;
@@ -16,7 +16,9 @@
1616
*/
1717
abstract class BasicProvider {
1818

19-
private static final String moduleParam = "&module=";
19+
static final String ACTION_PARAM = "&module=";
20+
21+
private static final String MODULE_PARAM = "&module=";
2022
private final String module;
2123

2224
private final String baseUrl;
@@ -33,12 +35,12 @@ abstract class BasicProvider {
3335
}
3436

3537
private String getModuleParam() {
36-
return moduleParam + module;
38+
return MODULE_PARAM + module;
3739
}
3840

3941
<T> T convert(String json, Class<T> tClass) {
4042
try {
41-
return JsonIterator.deserialize(json, tClass);
43+
return new Gson().fromJson(json, tClass);
4244
} catch (Exception e) {
4345
throw new ParseException(e.getMessage(), e.getCause());
4446
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
*/
1515
public class ContractProvider extends BasicProvider implements IContractProvider {
1616

17-
private static final String ABI_PARAM = "&action=getabi";
17+
private static final String ACTION_ABI_PARAM = "&action=getabi";
1818
private static final String ADDRESS_PARAM = "&address=";
1919

2020
public ContractProvider(final String baseUrl,
@@ -26,8 +26,8 @@ public ContractProvider(final String baseUrl,
2626
public String contractAbi(String address) {
2727
BasicUtils.validateAddress(address);
2828

29-
final String response = getRequest(ABI_PARAM + ADDRESS_PARAM + address);
30-
final StringResponseTO convert = convert(response, StringResponseTO.class);
31-
return convert.getMessage();
29+
final String response = getRequest(ACTION_ABI_PARAM + ADDRESS_PARAM + address);
30+
final StringResponseTO converted = convert(response, StringResponseTO.class);
31+
return converted.getResult();
3232
}
3333
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.api.error;
2+
3+
/**
4+
* ! NO DESCRIPTION !
5+
*
6+
* @author GoodforGod
7+
* @since 29.10.2018
8+
*/
9+
public class EtherScanException extends RuntimeException {
10+
11+
public EtherScanException(String message) {
12+
super(message);
13+
}
14+
}

src/main/java/io/api/model/Balance.java

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

3+
import io.api.model.temporary.BalanceTO;
4+
35
/**
46
* ! NO DESCRIPTION !
57
*
@@ -18,6 +20,10 @@ public Balance(final String address,
1820
this.balance = balance;
1921
}
2022

23+
public static Balance of(BalanceTO balance) {
24+
return new Balance(balance.getAccount(), Long.valueOf(balance.getBalance()));
25+
}
26+
2127
//<editor-fold desc="Getters">
2228
public String getAddress() {
2329
return address;

0 commit comments

Comments
 (0)