are there Java libraries for Bitcoin available to develop client applications?
2 Answers
In addition to @D.H's answer, BitCoinJ provides the following for developers
- open source through Subversion
- easy to use Java API
- easy to integrate via Maven
- access to either release or snapshot editions depending on your risk profile
BitCoinJ also uses the Bouncy Castle encryption algorithm implementations. Some of these were missing or poorly implemented in Android which necessitated the inclusion of these libraries into BitCoinJ (currently via the Maven Shade plugin to allow updates to Bouncy Castle to be introduced when they occur).
These inclusions makes it a very useful library to get started with than simply rolling your own against the JSON API of the standard client.
Disclaimer: I'm a contributor to the BitCoinJ project so I'm a bit biased regarding it's utility.
A transaction and balance monitoring API for Java.
From the website:
The BCCAPI (BitCoin Client API) allows you to create a light-weight secure Bitcoin client in Java. The BCCAPI connects to a server that holds the block chain, and which tracks the client’s wallet balance on the clients behalf. The server only has knowledge of the clients public keys, and is in no position to spend funds owned by the client’s wallet.
This could be useful if your application does not require the client to spend coins through your system.
Off topic: A note on Bitcoin clients in Java
Although it's not a library as such, you may benefit from looking at the source code for the MultiBit project to get you started in creating a Java Swing based Bitcoin client based on BitCoinJ with internationalisation and QR code support.
BitcoinJ is the most mature library to my knowledge (though it is still at an early development stage). It has been developed by Google employee Mike Hearn.
BitCoinJ implements the "simplified payment verification" mode of Satoshis paper. It does not store a full copy of the block chain, rather, it stores what it needs in order to verify transactions with the aid of an untrusted peer node.
The above makes it especially useful for mobile applications.