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

Commit bb87f90

Browse files
[3.0.0-SNAPSHOT]
Added JdkEthHttpClient All contracts open or protected Updated dependencies Updated Gradle
1 parent 3de7b24 commit bb87f90

Some content is hidden

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

55 files changed

+536
-237
lines changed

β€ŽREADME.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ Library supports EtherScan *API* for all available *Ethereum Networks* for *ethe
1515

1616
**Gradle**
1717
```groovy
18-
implementation "com.github.goodforgod:java-etherscan-api:2.1.0"
18+
implementation "com.github.goodforgod:java-etherscan-api:3.0.0"
1919
```
2020

2121
**Maven**
2222
```xml
2323
<dependency>
2424
<groupId>com.github.goodforgod</groupId>
2525
<artifactId>java-etherscan-api</artifactId>
26-
<version>2.1.0</version>
26+
<version>3.0.0</version>
2727
</dependency>
2828
```
2929

@@ -76,6 +76,14 @@ EtherScanAPI api = EtherScanAPI.builder()
7676
.build();
7777
```
7878

79+
Also you can use Java 11+ HttpClient:
80+
```java
81+
Supplier<EthHttpClient> ethHttpClientSupplier = () -> new JdkEthHttpClient();
82+
EtherScanAPI api = EtherScanAPI.builder()
83+
.withHttpClient(supplier)
84+
.build();
85+
```
86+
7987
## API Examples
8088

8189
You can read about all API methods on [Etherscan](https://docs.etherscan.io/api-endpoints/accounts)
@@ -149,7 +157,7 @@ List<Log> logs = api.logs().logs(query);
149157
**Get tx details with proxy endpoint**
150158
```java
151159
EtherScanAPI api = EtherScanAPI.builder().build();
152-
Optional<TxProxy> tx = api.proxy().tx("0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1");
160+
Optional<TxProxy> tx = api.proxy().tx("0x1e2910a263.0.08d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1");
153161
```
154162

155163
**Get block info with proxy endpoint**

β€Žbuild.gradle

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ plugins {
33
id "java-library"
44
id "maven-publish"
55

6-
id "org.sonarqube" version "4.3.0.3225"
6+
id "org.sonarqube" version "6.3.1.5724"
77
id "com.diffplug.spotless" version "6.19.0"
8-
id "io.github.gradle-nexus.publish-plugin" version "1.3.0"
8+
id "io.github.gradle-nexus.publish-plugin" version "2.0.0"
99
}
1010

1111
repositories {
@@ -17,16 +17,16 @@ group = groupId
1717
var ver = System.getenv().getOrDefault("RELEASE_VERSION", artifactVersion)
1818
version = ver.startsWith("v") ? ver.substring(1) : ver
1919

20-
sourceCompatibility = JavaVersion.VERSION_1_8
21-
targetCompatibility = JavaVersion.VERSION_1_8
20+
sourceCompatibility = JavaVersion.VERSION_11
21+
targetCompatibility = JavaVersion.VERSION_11
2222

2323
dependencies {
24-
compileOnly "org.jetbrains:annotations:23.0.0"
24+
compileOnly "org.jetbrains:annotations:24.0.1"
2525
implementation "io.goodforgod:gson-configuration:2.0.0"
2626

27-
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.9.3"
28-
testImplementation "org.junit.jupiter:junit-jupiter-api:5.9.3"
29-
testImplementation "org.junit.jupiter:junit-jupiter-params:5.9.3"
27+
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.11.4"
28+
testImplementation "org.junit.jupiter:junit-jupiter-api:5.11.4"
29+
testImplementation "org.junit.jupiter:junit-jupiter-params:5.11.4"
3030
}
3131

3232
test {

β€Žgradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
groupId=com.github.goodforgod
22
artifactId=java-etherscan-api
3-
artifactVersion=2.1.0-SNAPSHOT
3+
artifactVersion=3.0.0-SNAPSHOT
44

55

66
##### GRADLE #####

β€Žgradle/wrapper/gradle-wrapper.jar

-17.4 KB
Binary file not shown.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
44
networkTimeout=10000
5+
validateDistributionUrl=true
56
zipStoreBase=GRADLE_USER_HOME
67
zipStorePath=wrapper/dists

β€Žgradlew

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
# See the License for the specific language governing permissions and
1616
# limitations under the License.
1717
#
18+
# SPDX-License-Identifier: Apache-2.0
19+
#
1820

1921
##############################################################################
2022
#
@@ -55,7 +57,7 @@
5557
# Darwin, MinGW, and NonStop.
5658
#
5759
# (3) This script is generated from the Groovy template
58-
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
60+
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
5961
# within the Gradle project.
6062
#
6163
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -83,10 +85,8 @@ done
8385
# This is normally unused
8486
# shellcheck disable=SC2034
8587
APP_BASE_NAME=${0##*/}
86-
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
87-
88-
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
89-
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
88+
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
89+
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
9090

9191
# Use the maximum available, or set MAX_FD != -1 to use that value.
9292
MAX_FD=maximum
@@ -114,7 +114,7 @@ case "$( uname )" in #(
114114
NONSTOP* ) nonstop=true ;;
115115
esac
116116

117-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
117+
CLASSPATH="\\\"\\\""
118118

119119

120120
# Determine the Java command to use to start the JVM.
@@ -133,26 +133,29 @@ location of your Java installation."
133133
fi
134134
else
135135
JAVACMD=java
136-
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
136+
if ! command -v java >/dev/null 2>&1
137+
then
138+
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
137139
138140
Please set the JAVA_HOME variable in your environment to match the
139141
location of your Java installation."
142+
fi
140143
fi
141144

142145
# Increase the maximum file descriptors if we can.
143146
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
144147
case $MAX_FD in #(
145148
max*)
146149
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
147-
# shellcheck disable=SC3045
150+
# shellcheck disable=SC2039,SC3045
148151
MAX_FD=$( ulimit -H -n ) ||
149152
warn "Could not query maximum file descriptor limit"
150153
esac
151154
case $MAX_FD in #(
152155
'' | soft) :;; #(
153156
*)
154157
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
155-
# shellcheck disable=SC3045
158+
# shellcheck disable=SC2039,SC3045
156159
ulimit -n "$MAX_FD" ||
157160
warn "Could not set maximum file descriptor limit to $MAX_FD"
158161
esac
@@ -197,16 +200,20 @@ if "$cygwin" || "$msys" ; then
197200
done
198201
fi
199202

200-
# Collect all arguments for the java command;
201-
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
202-
# shell script including quotes and variable substitutions, so put them in
203-
# double quotes to make sure that they get re-expanded; and
204-
# * put everything else in single quotes, so that it's not re-expanded.
203+
204+
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
205+
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
206+
207+
# Collect all arguments for the java command:
208+
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
209+
# and any embedded shellness will be escaped.
210+
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
211+
# treated as '${Hostname}' itself on the command line.
205212

206213
set -- \
207214
"-Dorg.gradle.appname=$APP_BASE_NAME" \
208215
-classpath "$CLASSPATH" \
209-
org.gradle.wrapper.GradleWrapperMain \
216+
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
210217
"$@"
211218

212219
# Stop when "xargs" is not available.

β€Žgradlew.bat

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
@rem See the License for the specific language governing permissions and
1414
@rem limitations under the License.
1515
@rem
16+
@rem SPDX-License-Identifier: Apache-2.0
17+
@rem
1618

1719
@if "%DEBUG%"=="" @echo off
1820
@rem ##########################################################################
@@ -43,11 +45,11 @@ set JAVA_EXE=java.exe
4345
%JAVA_EXE% -version >NUL 2>&1
4446
if %ERRORLEVEL% equ 0 goto execute
4547

46-
echo.
47-
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
48-
echo.
49-
echo Please set the JAVA_HOME variable in your environment to match the
50-
echo location of your Java installation.
48+
echo.1>&2
49+
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.1>&2
50+
echo.1>&2
51+
echo Please set the JAVA_HOME variable in your environment to match the1>&2
52+
echo location of your Java installation.1>&2
5153

5254
goto fail
5355

@@ -57,22 +59,22 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
5759

5860
if exist "%JAVA_EXE%" goto execute
5961

60-
echo.
61-
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
62-
echo.
63-
echo Please set the JAVA_HOME variable in your environment to match the
64-
echo location of your Java installation.
62+
echo.1>&2
63+
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%1>&2
64+
echo.1>&2
65+
echo Please set the JAVA_HOME variable in your environment to match the1>&2
66+
echo location of your Java installation.1>&2
6567

6668
goto fail
6769

6870
:execute
6971
@rem Setup the command line
7072

71-
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73+
set CLASSPATH=
7274

7375

7476
@rem Execute Gradle
75-
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
77+
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
7678

7779
:end
7880
@rem End local scope for the variables with windows NT shell

β€Žsrc/main/java/io/goodforgod/api/etherscan/AccountAPIProvider.java

Lines changed: 11 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
* @author GoodforGod
2222
* @since 28.10.2018
2323
*/
24-
final class AccountAPIProvider extends BasicProvider implements AccountAPI {
24+
public class AccountAPIProvider extends BasicProvider implements AccountAPI {
2525

26-
private static final int OFFSET_MAX = 10000;
26+
private static final int OFFSET_MAX = 9999;
2727

2828
private static final String ACT_BALANCE_ACTION = ACT_PREFIX + "balance";
2929
private static final String ACT_TOKEN_BALANCE_PARAM = ACT_PREFIX + "tokenbalance";
@@ -47,11 +47,11 @@ final class AccountAPIProvider extends BasicProvider implements AccountAPI {
4747
private static final String OFFSET_PARAM = "&offset=";
4848
private static final String PAGE_PARAM = "&page=";
4949

50-
AccountAPIProvider(RequestQueueManager requestQueueManager,
51-
String baseUrl,
52-
EthHttpClient executor,
53-
Converter converter,
54-
int retryCount) {
50+
publicAccountAPIProvider(RequestQueueManager requestQueueManager,
51+
String baseUrl,
52+
EthHttpClient executor,
53+
Converter converter,
54+
int retryCount) {
5555
super(requestQueueManager, "account", baseUrl, executor, converter, retryCount);
5656
}
5757

@@ -61,7 +61,7 @@ public Balance balance(@NotNull String address) throws EtherScanException {
6161
BasicUtils.validateAddress(address);
6262

6363
final String urlParams = ACT_BALANCE_ACTION + TAG_LATEST_PARAM + ADDRESS_PARAM + address;
64-
final StringResponseTO response = getRequest(urlParams, StringResponseTO.class);
64+
final StringResponseTO response = getResponse(urlParams, StringResponseTO.class);
6565
if (response.getStatus() != 1)
6666
throw new EtherScanResponseException(response);
6767

@@ -75,7 +75,7 @@ public TokenBalance balance(@NotNull String address, @NotNull String contract) t
7575
BasicUtils.validateAddress(contract);
7676

7777
final String urlParams = ACT_TOKEN_BALANCE_PARAM + ADDRESS_PARAM + address + CONTRACT_PARAM + contract;
78-
final StringResponseTO response = getRequest(urlParams, StringResponseTO.class);
78+
final StringResponseTO response = getResponse(urlParams, StringResponseTO.class);
7979
if (response.getStatus() != 1)
8080
throw new EtherScanResponseException(response);
8181

@@ -98,7 +98,7 @@ public List<Balance> balances(@NotNull List<String> addresses) throws EtherScanE
9898
for (final List<String> batch : addressesAsBatches) {
9999
final String urlParams = ACT_BALANCE_MULTI_ACTION + TAG_LATEST_PARAM + ADDRESS_PARAM
100100
+ BasicUtils.toAddressParam(batch);
101-
final BalanceResponseTO response = getRequest(urlParams, BalanceResponseTO.class);
101+
final BalanceResponseTO response = getResponse(urlParams, BalanceResponseTO.class);
102102
if (response.getStatus() != 1) {
103103
throw new EtherScanResponseException(response);
104104
}
@@ -139,34 +139,6 @@ public List<Tx> txs(@NotNull String address, long startBlock, long endBlock) thr
139139
return getRequestUsingOffset(urlParams, TxResponseTO.class);
140140
}
141141

142-
/**
143-
* Generic search for txs using offset api param To avoid 10k limit per response
144-
*
145-
* @param urlParams Url params for #getRequest()
146-
* @param tClass responseListTO class
147-
* @param <T> responseTO list T type
148-
* @param <R> responseListTO type
149-
* @return List of T values
150-
*/
151-
private <T, R extends BaseListResponseTO<T>> List<T> getRequestUsingOffset(final String urlParams, Class<R> tClass)
152-
throws EtherScanException {
153-
final List<T> result = new ArrayList<>();
154-
int page = 1;
155-
while (true) {
156-
final String formattedUrl = String.format(urlParams, page++);
157-
final R response = getRequest(formattedUrl, tClass);
158-
BasicUtils.validateTxResponse(response);
159-
if (BasicUtils.isEmpty(response.getResult()))
160-
break;
161-
162-
result.addAll(response.getResult());
163-
if (response.getResult().size() < OFFSET_MAX)
164-
break;
165-
}
166-
167-
return result;
168-
}
169-
170142
@NotNull
171143
@Override
172144
public List<TxInternal> txsInternal(@NotNull String address) throws EtherScanException {
@@ -200,7 +172,7 @@ public List<TxInternal> txsInternalByHash(@NotNull String txhash) throws EtherSc
200172
BasicUtils.validateTxHash(txhash);
201173

202174
final String urlParams = ACT_TX_INTERNAL_ACTION + TXHASH_PARAM + txhash;
203-
final TxInternalResponseTO response = getRequest(urlParams, TxInternalResponseTO.class);
175+
final TxInternalResponseTO response = getResponse(urlParams, TxInternalResponseTO.class);
204176
BasicUtils.validateTxResponse(response);
205177

206178
return BasicUtils.isEmpty(response.getResult())

0 commit comments

Comments
(0)

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /