Etherscan Java API implementation.
Library supports all available EtherScan API calls for all available Ethereum Networks.
Maven
<dependency>
<groupId>com.github.goodforgod</groupId>
<artifactId>java-etherscan-api</artifactId>
<version>1.0.0</version>
</dependency>
Gradle
dependencies {
compile 'com.github.goodforgod:java-etherscan-api:1.0.0'
}
API support Ethereum: MAINNET, ROPSTEN, KOVAN, RINKEBY networks.
EtherScanApi api = new EtherScanApi(EthNetwork.MAINTNET);
EtherScanApi api = new EtherScanApi(EthNetwork.RINKEBY);
EtherScanApi api = new EtherScanApi("YourApiKey", EthNetwork.KOVAN);
In case you need to set custom timeout, custom headers or better implementation for HttpClient, just implement IHttpExecutor by your self or initialize it with your values.
int connectionTimeout = 10000;
int readTimeout = 7000;
Supplier<IHttpExecutor> supplier = () -> new HttpExecutor(connectionTimeout);
Supplier<IHttpExecutor> supplierFull = () -> new HttpExecutor(connectionTimeout, readTimeout);
EtherScanApi api = new EtherScanApi(EthNetwork.RINKEBY, supplier);
EtherScanApi apiWithKey = new EtherScanApi("YourApiKey", EthNetwork.MAINNET, supplierFull);
You can read about all API methods on Etherscan
Library support all available EtherScan API.
You can use API with you key or without key as well (Check API request\sec restrictions). Library support limit when used without key and will limit requests up to 5 req/sec by itself.
EtherScanApi api = new EtherScanApi();
EtherScanApi api = new EtherScanApi("YourApiKey");
Below there are examples for each API category.
Get Ether Balance for a single Address
EtherScanApi api = new EtherScanApi();
Balance balance = api.account().balance("0x8d4426f94e42f721C7116E81d6688cd935cB3b4F");
Get uncles block for block height
EtherScanApi api = new EtherScanApi();
Optional<UncleBlock> uncles = api.block().uncles(200000);
Request contract ABI from verified codes
EtherScanApi api = new EtherScanApi();
Abi abi = api.contract().contractAbi("0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413");
Get event logs for single topic
EtherScanApi api = new EtherScanApi();
LogQuery query = LogQueryBuilder.with("0x33990122638b9132ca29c723bdf037f1a891a70c")
.topic("0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545")
.build();
List<Log> logs = api.logs().logs(query);
Get event logs for 3 topics with respectful operations
EtherScanApi api = new EtherScanApi();
LogQuery query = LogQueryBuilder.with("0x33990122638b9132ca29c723bdf037f1a891a70c", 379224, 400000)
.topic("0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545",
"0x72657075746174696f6e00000000000000000000000000000000000000000000",
"0x72657075746174696f6e00000000000000000000000000000000000000000000")
.setOpTopic0_1(LogOp.AND)
.setOpTopic0_2(LogOp.OR)
.setOpTopic1_2(LogOp.AND)
.build();
List<Log> logs = api.logs().logs(query);
Get tx detailds with proxy endpoint
EtherScanApi api = new EtherScanApi(EthNetwork.MAINNET);
Optional<TxProxy> tx = api.proxy().tx("0x1e2910a262b1008d0616a0beb24c1a491d78771baa54a33e66065e03b1f46bc1");
Get block info with proxy endpoint
EtherScanApi api = new EtherScanApi(EthNetwork.MAINNET);
Optional<BlockProxy> block = api.proxy().block(15215);
Statistic about last price
EtherScanApi api = new EtherScanApi();
Price price = api.stats().lastPrice();
Request receipt status for tx
EtherScanApi api = new EtherScanApi();
Optional<Boolean> status = api.txs().receiptStatus("0x513c1ba0bebf66436b5fed86ab668452b7805593c05073eb2d51d3a52f480a76");
You can read token API here
Token API methods migrated to Account & Stats respectfully.
1.0.0 - Initial project with all API functionality, for all available networks, with tests coverage for all cases.
This project is licensed under the MIT - see the LICENSE file for details.