web3j is a lightweight Java library for integrating with clients (nodes) on the Ethereum network.
[ JVM application ] + [ web3j ] <---> [ Ethereum node ]
It only has two runtime dependencies:
- Apache HTTP Client
- Jackson Core for fast JSON serialisation/deserialisation
Add the following dependency to your project:
<repositories>
<repository>
<id>oss.jfrog.org</id>
<name>Repository from Bintray</name>
<url>http://dl.bintray.com/conor10/maven</url>
</repository>
</repositories>
<dependency>
<groupId>org.web3j</groupId>
<artifactId>core</artifactId>
<version>1.0.0-RELEASE</version>
</dependency>
repositories {
maven {url "http://dl.bintray.com/conor10/maven"}
}
compile ("org.web3j:core:1.0.0-RELEASE")
Start up an Ethereum client if you don't already have one running, such as Geth:
geth --rpc --testnet
To send synchronous requests:
Web3jService web3 = new Web3jService(); // defaults to http://localhost:8545/
Web3ClientVersion clientVersion = web3.web3ClientVersion().send();
clientVersion.getWeb3ClientVersion();
To send asynchronous requests using a Future:
Web3jService web3 = new Web3jService();
Web3ClientVersion clientVersion = web3.web3ClientVersion().sendAsync().get();
clientVersion.getWeb3ClientVersion();
web3j is based on specifications from the JSON-RPC and web3.js projects.
It provides type safe access to all responses. Optional or null responses are wrapped in Java 8's Optional type.
Async requests are handled using Java 8's CompletableFutures.
Quantity data types are returned as BigInteger's. For simple results, you can obtain the quantity as a String via org.web3j.protocol.jsonrpc20.Response.getResult()
.
Geth
- 1.4.10-stable-5f55d95a (in progress)
More coming soon.
You can run the integration test class org.web3j.protocol.jsonrpc20.ProtocolIT
verify other clients.
- Offline transaction signing
- IPC interface support
- WebSocket interface support
For a .NET implementation, check out Nethereum.
For a pure Java implementation of the Ethereum client, check out EthereumJ and the work of Ether.Camp.