Hello,

I'm pleased to announce the release of bitcoinj 0.11, a library for writing 
Bitcoin applications that run on the JVM. BitcoinJ is widely used across the 
Bitcoin community; some users include Bitcoin Wallet for Android, MultiBit, 
Hive, blockchain.info, the biteasy.com block explorer (written in Lisp!), 
Circle, Neo/Bee (Cypriot payment network), bitpos.me, Bitcoin Touch, BlueMatt's 
relay network and DNS crawler, academic advanced contracts research and more.

The release-0.11 git tag is signed by Andreas Schildbach's GPG key. The commit 
hash is 410d4547a7dd. This paragraph is signed by the same Bitcoin key as with 
previous releases (check their release announcements to establish continuity). 
Additionally, this email is signed using DKIM and for the first time, a key 
that was ID verified by the Swiss government.

Key: 16vSNFP5Acsa6RBbjEA7QYCCRDRGXRFH4m
Signature for last paragraph: 
H3DvWBqFHPxKW/cdYUdZ6OHjbq6ZtC5PHK4ebpeiE+FqTHyRLJ58BItbC0R2vo77h+DthpQigdEZ0V8ivSM7VIg=

Notable changes and new features

Thanks to Ken Sedgwick, an implementation of BIP39 ("Mnemonic code for 
generating deterministic keys") has been added. This is compatible with the 
latest Trezor implementation.
Thanks to Mike Belshe, the wallet can now send to P2SH addresses.
Thanks to Matt Corallo, the network layer was rewritten from scratch. It no 
longer depends on Netty, and it now supports both blocking and non-blocking 
sockets. In practice that means Java's built in support for transparent SSL and 
SOCKS becomes available again, which in turn means connecting via Tor is now 
possible. The new framework is lightweight, easy to understand and has been 
running a DNS seed crawler for some months now.
Thanks to Kevin Greene, we've added some support for the BIP70 payment 
protocol. Wallet authors can now consume payment requests, check their 
signatures and submit payments with the new easy to use PaymentSession class. 
The wallet-tool command line UI has support and an article explains how to use 
it.
Thanks to Miron Cuperman, the wallet can now watch arbitrary addresses and 
scripts. The wallet could previously watch an address as long as the public key 
was known. Now it's possible to watch for addresses even when the public key is 
not known.
Also thanks to Miron, Bloom filtering was also improved. The system now tracks 
false positive rates and cleans the filter when FP rates get too high. 
Unfortunately, some privacy bugs in Bloom filtering remain, which could 
(amongst other things) allow a malicious remote peer to test whether you own a 
particular key.
Thanks to Alex Taylor (bitpos.me), a new PostgreSQL based pruning block store 
was added. This block store is fast, and indexes the UTXO set, allowing for 
fast lookup of the balance of any given address.
A Java 8 based wallet template app is now included. The template is designed 
for people writing contract based applications. It provides a simple app that 
can be copy/pasted, which connects to the P2P network, manages a wallet, and 
provides a GUI that shows progress, balance, address+qrcode for receiving money 
and has a button that is used to empty the wallet out. It's designed to have an 
attractive and modern look, with tasteful animations and artwork.
Micropayment channels got many big improvements to the API and implementation. 
The release in 0.10 can be seen as a beta, in this release the micropayments 
code has been taken for a test drive for a couple of real apps and many rough 
edges polished as a result.
The default USER_THREAD executor can now be replaced, allowing a 1-line switch 
of all callbacks onto a thread of your choice instead of needing to override 
each callback, each time. This should simplify and clean up the GUI code of 
wallet apps significantly.
The WalletTool command line app has a more convenient user interface now.
A new DNS seed has been added. The seed is run by Christian Decker, from ETH 
Zurich.
bitcoinj 0.11 will shortly be available via Maven Central. Please use the 
dependency verifier plugin and/or check the PGP signatures on the uploads, if 
you use this!
Smaller improvements

We finished adding nullity annotations to the API. You should now be able to 
assume that any method not annotated with @Nullable won't ever return null 
values.
The WalletAppKit got a bunch of new features and convenience APIs.
The wallet will now create inputs with dummy signatures if the private key for 
an output is missing, rather than throwing an exception. You can then edit the 
input later to substitute in a real signature. This is useful when the signing 
is being done elsewhere, outside of the library.
In full verification mode, execution of scripts (i.e. checking signatures) can 
now be switched off. This is useful if you trust the source of the chain and 
just want to calculate the UTXO set.
The wallet risk analysis code is now pluggable, better documented and checks 
for finality in a more sensible way.
Various memory usage and flow control optimisations were made to allow much 
larger wallets to sync on Android.
The transaction broadcast algorithm was changed to be more robust.
Double spend handling in the wallet was improved.
Generated signatures now use canonical S values. This will aid a future 
hard-forking rule change which bans malleable signatures.
Some fixes were made for enable usage with the Orchid Tor library. Further 
support for Tor is planned for future releases.
Notable bug fixes

Some hard-forking full verification bugs were fixed.
Thanks to Miron, PeerGroup now performs exponential backoff for peer 
connections, for instance if we cannot connect to them or if they disconnect 
us. This resolves an annoying bug in which if the library was configured with a 
single peer that was down, it would spin in a tight loop consuming battery.
API changes

Some functionality of the Wallet class was moved into separate classes under 
the wallet package.
The micropayments API and protocol changed. New clients/servers are not 
compatible with apps running against previous releases.
The Wallet sendCoins/completeTx methods no longer return booleans or null to 
indicate failure, they now throw InsufficientMoneyException or a subclass if 
the transaction cannot be completed. The exception object typically contains 
information on how much money is missing.
Some mis-named methods in the HD key derivation API were renamed.
The WalletEventListener interface has an extra method for watching scripts now.
Peer discovery classes moved under the net.discovery package
Any APIs that relied on Netty are now different.
New documentation

An article on the networking API
Info on testing your apps, and how to use regtest mode to make a private 
Bitcoin network that allows you to mine blocks instantly.
A reference table showing which API's implement which Bitcoin Improvement 
Proposals (BIPs).
Please note that as I am no longer employed by Google, after 0.11 signing the 
Google contributor license agreement will no longer be necessary. I look 
forward to welcoming contributions from Andreas Schildbach now this requirement 
has gone away. Also, in future I plan to re-namespace the library from 
com.google.bitcoin to org.bitcoinj - auto-migration scripts will be provided 
when this is done.

Attachment: smime.p7s
Description: S/MIME cryptographic signature

------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development

Reply via email to