Today web3j has hit the milestone 1.0 release, providing a number of key pieces of functionality for integrating Java applications with Ethereum:
- Complete implementation of Ethereum's JSON-RPC client API
- Ethereum wallet support
- Auto-generation of Java smart contract wrappers to create, deploy, transact with and call smart contracts from native Java code
- Support for Parity's Personal, and Geth's Personal client APIs
- Support for Infura, so you don't have to run an Ethereum client yourself
- Comprehensive documentation and integration tests
web3j started off as a simple Java library for Java applications to communicate with Ethereum clients over JSON-RPC. However, it rapidly morphed into a fully featured library for working with Ethereum clients.
The integration with JSON-RPC was only one of the challenges faced by applications wishing to work with Ethereum. I found that there were a number of additional obstacles that developers needed to overcome to effectively work with the client JSON-RPC API. The 1.0 release addresses these:
- Conversion to and from Solidity's primitive types which differ from those used in Java - for instance, it’s native numeric type is 256 bits
- Encoding/de-decoding of these Ethereum types into Ethereum's Application Binary Interface (ABI), and Recursive Length Prefix (RLP) formats for transmission over JSON-RPC
- Secure transaction signing using Elliptic Curve Digital Signature Algorithms
- Secure creation of and management of Ethereum wallet files, and associated public/private keys
- Identification of unique transaction identifiers (nonces) prior to sending new transactions
- No direct integration existing for working with smart contracts written in Solidity from Java code
- The lack of a single source of comprehensive documentation for working with the platform for Java developers
I've invested a lot of time into the documentation of the project, as I believe that one of the challenges for newcomers working with Ethereum is that they need to look in a number of different sources to understand how the different pieces of the eco-system fit together.
I also believe that services such as Infura by Consensys help lower the barriers to entry of working with Ethereum, by taking away the overhead of running and managing Ethereum clients for users, so they instead focus on developing their applications. Which is why web3j provides wallet management, and transaction signing so applications can work directly with Infura.