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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy