dash-docs/_releases/v0.9.0.md
David A. Harding 7d98f798ab
Upgrade to Jekyll 3.0
Gemfile:

  - Upgrade to Jekyll 3.x (3.0.1 tested).  This brings several new
    features I want to use, most notably *collections* which allows us
    to add blog-like collections. I've converted the `_releases` and
    `_alerts` pages into collections, although their plugins are
    maintained to handle the Download and Active Alert features.

  - Upgrade to latest Kramdown.

  - Lock Less at 2.4.0.  This prevents breaking our Less plugin.  Jekyll
    3.x provides native support for SCSS, so we may want to switch to
    that in time.

  - Lock HTML Proofer at 2.1.0.  The most recent version was taking
    forever to check our pages (I never actually got it to complete).
    I'll look into it when I get more time.

Makefile:

  - New `make clean` command.  Jekyll 3.x by default attempts to do
    incremental rebuilds.  The new `jekyll clean` command cleans up the
    metadata necessary for than so that a full build is performed, and
    this new `make clean` command is a wrapper around it so that we
    automatically do full rebuilds in the relevant cases.  Note: our
    plugins aren't fully compatible with the incremental rebuilds, but
    I'd like to fix that in the future.

  - Remove WEBrick hack to enable previewing with default URL paths (/
    instead of /index.html).

  - Filter out compliants from Rouge

README.md:

  - Now that Alerts (_alerts) are part of a collection, the file names
    are no longer parsed for dates, so instructions on adding the date
    to the YAML metadata have been added.

_alerts/*:

  - Now that alerts are part of a collection, the file names are no
    longer parsed to provide dates, so a `date:` field has been added to
    the YAML metadata.

_config.yml:

  - Some variables renamed per upgrade instructions.

  - Switched from old default syntax highlighter Pygments to new default
    Rouge.  I tried to use Rouge options to keep new output as similar
    to old output as possible to making diffing easy, but Rouge adds
    extra CSS class info.

  - Move `_alerts` and `_releases` into Jekyll 3.x "collections", which
    provide the organizational features we were using plugins to
    manange.  I haven't removed the old plugins because we still use
    some of their features (alerts.rb provides active issue and banner
    features; releases.rb provides info to Download page)

  - _layouts/* can no longer provide default global metadata; that is now
    provided in the new `defaults:` section in _config.yml.

_layouts/*:

  - Default metadata can no longer be provided in the layout files for
    collections, so I've removed it and left a message to see
    _config.yml.

_plugins/*:

  - Remove filter_for.rb. It's completely broken on Jekyll 3.x because
    of changes to Liquid which prevent adding new arguments to the
    inherited Liquid::For class. Existing uses of filter_for have been
    migrated to built-in for loops prefaced by sorts.

  - Remove remove-html-extension.rb: at it said in the comments, this
    was a temporary hack to get us to Jekyll 3.0.

_releases/*:

  - Rename all the files: prefix a v to the file name so the output html
    (e.g. v10.0.0.html) is the same as the source filename (e.g.
    v10.0.0.md).  This is necessary to migrate them to a Jekyll collection.

  - Remove %v from titles: we have to explicitly set the title, like we
    used to.  Again required for migration to collections.

_templates/events.html & en/rss/events.rss:

  - Sort events by date and then loop with regular for loop rather than
    filter_for

en/alerts.html & en/rss/alerts.rss:

  - Sort alerts by date and then loop with regular for loop rather than
    filter_for

en/bitcoin-core/index.md & en/version-history.html & en/rss/releases.rss:

  - Sort alerts by date and then loop with regular for loop rather than
    filter_for
2016-01-06 23:09:56 -05:00

15 KiB

required_version optional_date title
0.9.0 2014-03-19 Bitcoin Core version 0.9.0 released

Bitcoin Core version 0.9.0 is now available from:

https://bitcoin.org/bin/0.9.0/

This is a new major version release, bringing both new features and bug fixes.

Please report bugs using the issue tracker at github:

https://github.com/bitcoin/bitcoin/issues

How to Upgrade

If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), uninstall all earlier versions of Bitcoin, then run the installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or bitcoind/bitcoin-qt (on Linux).

If you are upgrading from version 0.7.2 or earlier, the first time you run 0.9.0 your blockchain files will be re-indexed, which will take anywhere from 30 minutes to several hours, depending on the speed of your machine.

On Windows, do not forget to uninstall all earlier versions of the Bitcoin client first, especially if you are switching to the 64-bit version.

Windows 64-bit installer

New in 0.9.0 is the Windows 64-bit version of the client. There have been frequent reports of users running out of virtual memory on 32-bit systems during the initial sync. Because of this it is recommended to install the 64-bit version if your system supports it.

NOTE: Release candidate 2 Windows binaries are not code-signed; use PGP and the SHA256SUMS.asc file to make sure your binaries are correct. In the final 0.9.0 release, Windows setup.exe binaries will be code-signed.

OSX 10.5 / 32-bit no longer supported

0.9.0 drops support for older Macs. The minimum requirements are now:

Downgrading warnings

The 'chainstate' for this release is not always compatible with previous releases, so if you run 0.9 and then decide to switch back to a 0.8.x release you might get a blockchain validation error when starting the old release (due to 'pruned outputs' being omitted from the index of unspent transaction outputs).

Running the old release with the -reindex option will rebuild the chainstate data structures and correct the problem.

Also, the first time you run a 0.8.x release on a 0.9 wallet it will rescan the blockchain for missing spent coins, which will take a long time (tens of minutes on a typical machine).

Rebranding to Bitcoin Core

To reduce confusion between Bitcoin-the-network and Bitcoin-the-software we have renamed the reference client to Bitcoin Core.

OP_RETURN and data in the block chain

On OP_RETURN: There was been some confusion and misunderstanding in the community, regarding the OP_RETURN feature in 0.9 and data in the blockchain. This change is not an endorsement of storing data in the blockchain. The OP_RETURN change creates a provably-prunable output, to avoid data storage schemes -- some of which were already deployed -- that were storing arbitrary data such as images as forever-unspendable TX outputs, bloating bitcoin's UTXO database.

Storing arbitrary data in the blockchain is still a bad idea; it is less costly and far more efficient to store non-currency data elsewhere.

Autotools build system

For 0.9.0 we switched to an autotools-based build system instead of individual (q)makefiles.

Using the standard "./autogen.sh; ./configure; make" to build Bitcoin-Qt and bitcoind makes it easier for experienced open source developers to contribute to the project.

Be sure to check doc/build-*.md for your platform before building from source.

Bitcoin-cli

Another change in the 0.9 release is moving away from the bitcoind executable functioning both as a server and as a RPC client. The RPC client functionality ("tell the running bitcoin daemon to do THIS") was split into a separate executable, 'bitcoin-cli'. The RPC client code will eventually be removed from bitcoind, but will be kept for backwards compatibility for a release or two.

walletpassphrase RPC

The behavior of the walletpassphrase RPC when the wallet is already unlocked has changed between 0.8 and 0.9.

The 0.8 behavior of walletpassphrase is to fail when the wallet is already unlocked:

> walletpassphrase 1000
walletunlocktime = now + 1000
> walletpassphrase 10
Error: Wallet is already unlocked (old unlock time stays)

The new behavior of walletpassphrase is to set a new unlock time overriding the old one:

> walletpassphrase 1000
walletunlocktime = now + 1000
> walletpassphrase 10
walletunlocktime = now + 10 (overriding the old unlock time)

This release contains a few fixes for transaction ID (TXID) malleability issues:

  • -nospendzeroconfchange command-line option, to avoid spending zero-confirmation change
  • IsStandard() transaction rules tightened to prevent relaying and mining of mutated transactions
  • Additional information in listtransactions/gettransaction output to report wallet transactions that conflict with each other because they spend the same outputs.
  • Bug fixes to the getbalance/listaccounts RPC commands, which would report incorrect balances for double-spent (or mutated) transactions.
  • New option: -zapwallettxes to rebuild the wallet's transaction information

Transaction Fees

This release drops the default fee required to relay transactions across the network and for miners to consider the transaction in their blocks to 0.01mBTC per kilobyte.

Note that getting a transaction relayed across the network does NOT guarantee that the transaction will be accepted by a miner; by default, miners fill their blocks with 50 kilobytes of high-priority transactions, and then with 700 kilobytes of the highest-fee-per-kilobyte transactions.

The minimum relay/mining fee-per-kilobyte may be changed with the minrelaytxfee option. Note that previous releases incorrectly used the mintxfee setting to determine which low-priority transactions should be considered for inclusion in blocks.

The wallet code still uses a default fee for low-priority transactions of 0.1mBTC per kilobyte. During periods of heavy transaction volume, even this fee may not be enough to get transactions confirmed quickly; the mintxfee option may be used to override the default.

0.9.0 Release notes

RPC:

  • New notion of 'conflicted' transactions, reported as confirmations: -1
  • listreceivedbyaddress now provides tx ids
  • Add raw transaction hex to gettransaction output
  • Updated help and tests for getreceivedby(account|address)
  • In getblock, accept 2nd verbose parameter, similar to getrawtransaction, but defaulting to 1 for backward compatibility
  • Add verifychain, to verify chain database at runtime
  • Add dumpwallet and importwallet RPCs
  • keypoolrefill gains optional size parameter
  • Add getbestblockhash, to return tip of best chain
  • Add chainwork (the total work done by all blocks since the genesis block) to getblock output
  • Make RPC password resistant to timing attacks
  • Clarify help messages and add examples
  • Add getrawchangeaddress call for raw transaction change destinations
  • Reject insanely high fees by default in sendrawtransaction
  • Add RPC call decodescript to decode a hex-encoded transaction script
  • Make validateaddress provide redeemScript
  • Add getnetworkhashps to get the calculated network hashrate
  • New RPC ping command to request ping, new pingtime and pingwait fields in getpeerinfo output
  • Adding new addrlocal field to getpeerinfo output
  • Add verbose boolean to getrawmempool
  • Add rpc command getunconfirmedbalance to obtain total unconfirmed balance
  • Explicitly ensure that wallet is unlocked in importprivkey
  • Add check for valid keys in importprivkey

Command-line options:

  • New option: -nospendzeroconfchange to never spend unconfirmed change outputs
  • New option: -zapwallettxes to rebuild the wallet's transaction information
  • Rename option -tor to -onion to better reflect what it does
  • Add -disablewallet mode to let bitcoind run entirely without wallet (when built with wallet)
  • Update default -rpcsslciphers to include TLSv1.2
  • make -logtimestamps default on and rework help-message
  • RPC client option: -rpcwait, to wait for server start
  • Remove -logtodebugger
  • Allow -noserver with bitcoind

Block-chain handling and storage:

  • Update leveldb to 1.15
  • Check for correct genesis (prevent cases where a datadir from the wrong network is accidentally loaded)
  • Allow txindex to be removed and add a reindex dialog
  • Log aborted block database rebuilds
  • Store orphan blocks in serialized form, to save memory
  • Limit the number of orphan blocks in memory to 750
  • Fix non-standard disconnected transactions causing mempool orphans
  • Add a new checkpoint at block 279,000

Wallet:

  • Bug fixes and new regression tests to correctly compute the balance of wallets containing double-spent (or mutated) transactions
  • Store key creation time. Calculate whole-wallet birthday.
  • Optimize rescan to skip blocks prior to birthday
  • Let user select wallet file with -wallet=foo.dat
  • Consider generated coins mature at 101 instead of 120 blocks
  • Improve wallet load time
  • Don't count txins for priority to encourage sweeping
  • Don't create empty transactions when reading a corrupted wallet
  • Fix rescan to start from beginning after importprivkey
  • Only create signatures with low S values

Mining:

  • Increase default -blockmaxsize/prioritysize to 750K/50K
  • getblocktemplate does not require a key to create a block template
  • Mining code fee policy now matches relay fee policy

Protocol and network:

  • Drop the fee required to relay a transaction to 0.01mBTC per kilobyte
  • Send tx relay flag with version
  • New reject P2P message (BIP 0061, see https://gist.github.com/gavinandresen/7079034 for draft)
  • Dump addresses every 15 minutes instead of 10 seconds
  • Relay OP_RETURN data TxOut as standard transaction type
  • Remove CENT-output free transaction rule when relaying
  • Lower maximum size for free transaction creation
  • Send multiple inv messages if mempool.size > MAX_INV_SZ
  • Split MIN_PROTO_VERSION into INIT_PROTO_VERSION and MIN_PEER_PROTO_VERSION
  • Do not treat fFromMe transaction differently when broadcasting
  • Process received messages one at a time without sleeping between messages
  • Improve logging of failed connections
  • Bump protocol version to 70002
  • Add some additional logging to give extra network insight
  • Added new DNS seed from bitcoinstats.com

Validation:

  • Log reason for non-standard transaction rejection
  • Prune provably-unspendable outputs, and adapt consistency check for it.
  • Detect any sufficiently long fork and add a warning
  • Call the -alertnotify script when we see a long or invalid fork
  • Fix multi-block reorg transaction resurrection
  • Reject non-canonically-encoded serialization sizes
  • Reject dust amounts during validation
  • Accept nLockTime transactions that finalize in the next block

Build system:

  • Switch to autotools-based build system
  • Build without wallet by passing --disable-wallet to configure, this removes the BerkeleyDB dependency
  • Upgrade gitian dependencies (libpng, libz, libupnpc, boost, openssl) to more recent versions
  • Windows 64-bit build support
  • Solaris compatibility fixes
  • Check integrity of gitian input source tarballs
  • Enable full GCC Stack-smashing protection for all OSes

GUI:

  • Switch to Qt 5.2.0 for Windows build
  • Add payment request (BIP 0070) support
  • Improve options dialog
  • Show transaction fee in new send confirmation dialog
  • Add total balance in overview page
  • Allow user to choose data directory on first start, when data directory is missing, or when the -choosedatadir option is passed
  • Save and restore window positions
  • Add vout index to transaction id in transactions details dialog
  • Add network traffic graph in debug window
  • Add open URI dialog
  • Add Coin Control Features
  • Improve receive coins workflow: make the 'Receive' tab into a form to request payments, and move historical address list functionality to File menu.
  • Rebrand to Bitcoin Core
  • Move initialization/shutdown to a thread. This prevents "Not responding" messages during startup. Also show a window during shutdown.
  • Don't regenerate autostart link on every client startup
  • Show and store message of normal bitcoin:URI
  • Fix richtext detection hang issue on very old Qt versions
  • OS X: Make use of the 10.8+ user notification center to display Growl-like notifications
  • OS X: Added NSHighResolutionCapable flag to Info.plist for better font rendering on Retina displays.
  • OS X: Fix bitcoin-qt startup crash when clicking dock icon
  • Linux: Fix Gnome bitcoin: URI handler

Miscellaneous:

  • Add Linux script (contrib/qos/tc.sh) to limit outgoing bandwidth
  • Add -regtest mode, similar to testnet but private with instant block generation with setgenerate RPC.
  • Add linearize.py script to contrib, for creating bootstrap.dat
  • Add separate bitcoin-cli client

Credits

Thanks to everyone who contributed to this release:

  • Andrey
  • Ashley Holman
  • b6393ce9-d324-4fe1-996b-acf82dbc3d53
  • bitsofproof
  • Brandon Dahler
  • Calvin Tam
  • Christian Decker
  • Christian von Roques
  • Christopher Latham
  • Chuck
  • coblee
  • constantined
  • Cory Fields
  • Cozz Lovan
  • daniel
  • Daniel Larimer
  • David Hill
  • Dmitry Smirnov
  • Drak
  • Eric Lombrozo
  • fanquake
  • fcicq
  • Florin
  • frewil
  • Gavin Andresen
  • Gregory Maxwell
  • gubatron
  • Guillermo Céspedes Tabárez
  • Haakon Nilsen
  • HaltingState
  • Han Lin Yap
  • harry
  • Ian Kelling
  • Jeff Garzik
  • Johnathan Corgan
  • Jonas Schnelli
  • Josh Lehan
  • Josh Triplett
  • Julian Langschaedel
  • Kangmo
  • Lake Denman
  • Luke Dashjr
  • Mark Friedenbach
  • Matt Corallo
  • Michael Bauer
  • Michael Ford
  • Michagogo
  • Midnight Magic
  • Mike Hearn
  • Nils Schneider
  • Noel Tiernan
  • Olivier Langlois
  • patrick s
  • Patrick Strateman
  • paveljanik
  • Peter Todd
  • phantomcircuit
  • phelixbtc
  • Philip Kaufmann
  • Pieter Wuille
  • Rav3nPL
  • R E Broadley
  • regergregregerrge
  • Robert Backhaus
  • Roman Mindalev
  • Rune K. Svendsen
  • Ryan Niebur
  • Scott Ellis
  • Scott Willeke
  • Sergey Kazenyuk
  • Shawn Wilkinson
  • Sined
  • sje
  • Subo1978
  • super3
  • Tamas Blummer
  • theuni
  • Thomas Holenstein
  • Timon Rapp
  • Timothy Stranex
  • Tom Geller
  • Torstein Husebø
  • Vaclav Vobornik
  • vhf / victor felder
  • Vinnie Falco
  • Warren Togami
  • Wil Bown
  • Wladimir J. van der Laan