I'm pleased to announce the release of version 0.6 of
bitcoinj, the leading Java implementation of Bitcoin. You can download the source from Google Code, or use the release-0.6 branch from git. Our Nexus repository will be updated soon.
This release focuses on improved compliance with the protocol, improved and more scalable network handling, a more flexible send API, other misc API improvements and of course, a large pile of bug fixes. You should upgrade your software to use bitcoinj 0.6 as soon as possible, if only to benefit from the fixes - the API changes are minimal so it should be easy.
In more detail:
- Thanks to Jim Burton, the wallet now stores the depth and work done for all transactions, and coinbase transactions are now processed correctly. The ability to handle pubkey-only outputs was added, so these are now spendable. Migration from 0.5 wallets that don't store this is supported, but only for depth, by using WalletProtobufSerializer.setChainHeight().
- Made some more APIs documented and public.
- Improved block chain download handling.
- Added compatibility with the broken URIs generated by blockchain.info, meaning that the iPhone app and Android apps can now read each others QRcodes.
- Wallets can now auto-save themselves, taking the hassle of managing wallet persistence away from your app. See the javadocs for Wallet.autoSaveToFile() for information on this.
- The network layer was rewritten on top of Netty to be more robust, more scalable and to remove flakyness in the unit tests. Thanks to Miron Cuperman for this work.
- Thanks to Matt Corallo the ping/pong protocol is now supported. Also various protocol conformance issues and other misc bugs were resolved.
- WalletTool now has a RAW_DUMP option that prints the raw protocol buffer form as text.
- You can now explicitly set fees on a created transaction using the fee member of SendRequest. Please note that the correct fees for a transaction are still not auto-calculated or minimized. This will come in a future release.
- Many bug fixes.
API changes:
- TransactionConfidence.OVERRIDDEN_BY_DOUBLE_SPEND is now called DEAD
- PeerGroup.broadcastTransaction now returns a Guava ListenableFuture (which is a subclass of Future, so it's compatible). The future completes when the transaction has been heard back from the network, instead of just being written out.
- Wallet.sendCoins() now returns a SendResult that contains both the transaction, and the future returned by PeerGroup.broadcastTransaction(), so it will no longer block. As a result sendCoinsAsync() has been removed.
- Various send methods on Wallet now take a SendRequest object that lets you customize the created transactions. The methods that let you explicitly set the change address are removed, you should set the changeAddress member of the SendRequest instead.
Future work will involve merging more changes from Matt Corallo to make bitcoinj optionally fully validating, supporting Bloom filtering of connections (again thanks to Matt), merging encrypted wallets from Jim Burton, and supporting testnet3.[/list]