A new milestone in the development of the Bitcoin reference implementation has been reached, version 0.9.0. As a major version it introduces both new features and bug fixes.
The full list of changes is huge and it is too much to mention everything in this blog post. I will highlight a few prominent changes from a user perspective.
Payment requests are Bitcoin invoices. They were introduced (in BIP 70) to solve the limitations of Bitcoin URIs and provide a safe and flexible payment solution. For example a refund address is automatically provided to the merchant to be able to refund the order when something goes wrong. Payment requests can be also be cryptographically signed to make sure that the payment goes to the intended recipient.
The payment requests can be sent by a website (as a link) but also sent over mail or any other communication medium that supports file attachments. When opening a payment request is will be shown like this:
The payment request functionality in 0.9.0 is a first iteration. In upcoming releases the user experience and functionality will be fine-tuned. For merchants it is recommended to migrate to using payment requests as soon as possible. Various other Bitcoin wallets, as well as payment providers such as Bitpay have already added support.
Rebranding to Bitcoin Core
A long time ago the Bitcoin reference implementation was the only implementation of Bitcoin.
This time is long past and today quite a few alternative clients exist, which makes it ever more important to distinguish between Bitcoin-the-network and Bitcoin-the-software.
For this reason the Bitcoin reference client has been rebranded with 0.9.0. The new name is Bitcoin Core.
The name “Core” highlights the purpose of the software to run the core infrastructure of the Bitcoin network. It also describes the near-future direction of the project to encompass the core functionality instead of trying to be everything for everyone. Over the next releases, non-core functionality (such as the wallet) will be split off to different projects to allow independent collaboration and release cycles.
New receive coins workflow
A more convenient workflow has been introduced for receiving coins. The Receive tab has been replaced with a form in which an invoice can be created.
Let’s say that you want to request a payment from someone. You can fill in the amount of coins requested, the label and a message for the payer. All of these attributes are optional, so it is possible to just request an address without entering any of these.
When finished, this invoice is immediately shown with a QR code and Bitcoin URI. All information can be easily copied to be pasted in a document or message. The QR code can be scanned with a mobile device.
These invoices will be stored in a list for later reference. Unlike receiving addresses which are kept forever, these invoices can be freely deleted. It is possible to get the full list of receiving addresses as before through Receiving Addresses… in the File menu.
Coin Control is a new feature for advanced users that allows manual control over coin selection. Every time that you receive coins, a new unspent output is added to the wallet. These outputs (“coins”) are combined as necessary for outgoing payments. Normally this selection process happens automatically and outside control of the user. With Coin Control, the user can select which unspent outputs to use as inputs to an transaction. It also makes it possible to control to which address the change will go.
Exercising manual control over coin selection allows for a degree of privacy by controlling which coins are used together, and thus what a third party looking at the block chain will see. It also gives insight into the inner workings of Bitcoin, such as the fee computation and the size of transactions which is nice for educational value.
Coin Control is disabled by default and can be enabled through the Options:
Work on Coin Control has been going on for a long time as a separate patch. With the 0.9 release it has finally been integrated into the upstream repository.
Last but not least, thanks to everyone that helped in developing, testing, translating, documenting, or who contributed in any other way to make this release possible!