Bitcoin Core version 0.10.0 is now available from:
https://bitcoin.org/bin/0.10.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
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), 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.10.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.
Because release 0.10.0 makes use of headers-first synchronization and parallel block download, the block files and databases are not backwards-compatible with older versions of Bitcoin Core:
-
Blocks will be stored on disk out of order (in the order they are received, really), which makes it incompatible with some tools or other programs. Reindexing using earlier versions will also not work anymore as a result of this.
-
The block index database will now hold headers for which no block is stored on disk, which earlier versions won't support.
If you want to be able to downgrade smoothly, make a backup of your entire data directory. Without this your node will need start syncing (or importing from bootstrap.dat) anew afterwards.
This does not affect wallet forward or backward compatibility.
This release automatically estimates how high a transaction fee (or how high a priority) transactions require to be confirmed quickly. The default settings will create transactions that confirm quickly; see the new 'txconfirmtarget' setting to control the tradeoff between fees and confirmation times.
Prior releases used hard-coded fees (and priorities), and would sometimes create transactions that took a very long time to confirm.
Statistics used to estimate fees and priorities are saved in the
data directory in the fee_estimates.dat file just before
program shutdown, and are read in at startup.
-txconfirmtarget=n: create transactions that have enough fees (or priority) so they are likely to confirm within n blocks (default: 1). This setting is over-ridden by the -paytxfee option.
-
estimatefee nblocks: Returns approximate fee-per-1,000-bytes needed for a transaction to be confirmed within nblocks. Returns -1 if not enough transactions have been observed to compute a good estimate. -
estimatepriority nblocks: Returns approximate priority needed for a zero-fee transaction to confirm within nblocks. Returns -1 if not enough free transactions have been observed to compute a good estimate.
Subnet matching for the purpose of access control is now done
by matching the binary network address, instead of with string wildcard matching.
For the user this means that -rpcallowip takes a subnet specification, which can be
- a single IP address (e.g.
1.2.3.4orfe80::0012:3456:789a:bcde) - a network/CIDR (e.g.
1.2.3.0/24orfe80::0000/64) - a network/netmask (e.g.
1.2.3.4/255.255.255.0orfe80::0012:3456:789a:bcde/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff)
An arbitrary number of -rpcallow arguments can be given. An incoming connection will be accepted if its origin address
matches one of them.
For example:
| 0.9.x and before | 0.10.x |
|---|---|
-rpcallowip=192.168.1.1 |
-rpcallowip=192.168.1.1 (unchanged) |
-rpcallowip=192.168.1.* |
-rpcallowip=192.168.1.0/24 |
-rpcallowip=192.168.* |
-rpcallowip=192.168.0.0/16 |
-rpcallowip=* (dangerous!) |
-rpcallowip=::/0 |
Using wildcards will result in the rule being rejected with the following error in debug.log:
Error: Invalid -rpcallowip subnet specification: *. Valid are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24).
The RPC server is started earlier now, before most of the expensive intialisations like loading the block index. It is available now almost immediately after starting the process. However, until all initialisations are done, it always returns an immediate error with code -28 to all calls.
This new behaviour can be useful for clients to know that a server is already started and will be available soon (for instance, so that they do not have to start it themselves).
For 0.10 the security of signing against unusual attacks has been improved by making the signatures constant time and deterministic.
This change is a result of switching signing to use libsecp256k1 instead of OpenSSL. Libsecp256k1 is a cryptographic library optimized for the curve Bitcoin uses which was created by Bitcoin Core developer Pieter Wuille.
There exist attacks[1] against most ECC implementations where an attacker on shared virtual machine hardware could extract a private key if they could cause a target to sign using the same key hundreds of times. While using shared hosts and reusing keys are inadvisable for other reasons, it's a better practice to avoid the exposure.
OpenSSL has code in their source repository for derandomization and reduction in timing leaks, and we've eagerly wanted to use it for a long time but this functionality has still not made its way into a released version of OpenSSL. Libsecp256k1 achieves significantly stronger protection: As far as we're aware this is the only deployed implementation of constant time signing for the curve Bitcoin uses and we have reason to believe that libsecp256k1 is better tested and more thoroughly reviewed than the implementation in OpenSSL.
[1] https://eprint.iacr.org/2014/161.pdf
The IsStandard() rules have been almost completely removed for P2SH redemption scripts, allowing applications to make use of any valid script type, such as "n-of-m OR y", hash-locked oracle addresses, etc. While the Bitcoin protocol has always supported these types of script, actually using them on mainnet has been previously inconvenient as standard Bitcoin Core nodes wouldn't relay them to miners, nor would most miners include them in blocks they mined.
Detailed release notes follow. This overview includes changes that affect external behavior, not code moves, refactors or string updates.
RPC:
f923c07Support IPv6 lookup in bitcoin-cli even when IPv6 only bound on localhostb641c9cFix addnode "onetry": Connect with OpenNetworkConnection171ca77estimatefee / estimatepriority RPC methodsb750cf1Remove cli functionality from bitcoindf6984e8Add "chain" to getmininginfo, improve help in getblockchaininfo99ddc6cAdd nLocalServices info to RPC getinfocf0c47bRemove getwork() RPC call2a72d45prioritisetransactione44fea5Add an option-datacarrierto allow users to disable relaying/mining data carrier transactions2ec5a3dPrevent easy RPC memory exhaustion attackd4640d7Added argument to getbalance to include watchonly addresses and fixed errors in balance calculation83f3543Added argument to listaccounts to include watchonly addresses952877eShowing 'involvesWatchonly' property for transactions returned by 'listtransactions' and 'listsinceblock'. It is only appended when the transaction involves a watchonly addressd7d5d23Added argument to listtransactions and listsinceblock to include watchonly addressesf87ba3dadded includeWatchonly argument to 'gettransaction' because it affects balance calculation0fa2f88added includedWatchonly argument to listreceivedbyaddress/...account6c37f7fgetrawchangeaddress: fail when keypool exhausted and wallet lockedff6a7afgetblocktemplate: longpolling supportc4a321fAdd peerid to getpeerinfo to allow correlation with the logs1b4568cAdd vout to ListTransactions outputb33bd7aImplement "getchaintips" RPC command to monitor blockchain forks733177eRemove size limit in RPC client, keep it in server6b5b7cbCategorize rpc help overview6f2c26aClosely track mempool byte total. Add "getmempoolinfo" RPCaa82795Add detailed network info to getnetworkinfo RPC01094bdDon't reveal whether password is <20 or >20 characters in RPC57153d4rpc: Compute number of confirmations of a block from block heightff36cbegetnetworkinfo: export local node's client sub-version stringd14d7deSanitizeString: allow '(' and ')'31d6390Fixed setaccount accepting foreign addressb5ec5feupdate getnetworkinfo help with subversionad6e601RPC additions after headers-first33dfbf5rpc: Fix leveldb iterator leak, and flush beforegettxoutsetinfo2aa6329Enable customising node policy for datacarrier data size with a -datacarriersize optionf877aaasubmitblock: Use a temporary CValidationState to determine accurately the outcome of ProcessBlocke69a587submitblock: Support for returning specific rejection reasonsaf82884Add "warmup mode" for RPC servere2655e0Add unauthenticated HTTP REST interface to public blockchain data683dc40Disable SSLv3 (in favor of TLS) for the RPC client and server44b4c0dsignrawtransaction: validate private key9765a50Implement BIP 23 Block Proposalf9de17eAdd warning comment to getinfo
Command-line options:
ee21912Use netmasks instead of wildcards for IP address matchingdeb3572Add-rpcbindoption to allow binding RPC port on a specific interface96b733eAdd-versionoption to get just the version1569353Add-stopafterblockimportoption77cbd46Let -zapwallettxes recover transaction meta data1c750dbremove -tor compatibility code (only allow -onion)4aaa017rework help messages for fee-related options4278b1dClarify error message when invalid -rpcallowip6b407e4-datadir is now allowed in config filesbdd5b58Add option-syspermsto disable 077 umask (create new files with system default umask)cbe39a3Add "bitcoin-tx" command line utility and supporting modulesdbca89bTrigger -alertnotify if network is upgrading without youad96e7cMake -reindex cope with out-of-order blocks16d5194Skip reindexed blocks individuallyec01243--tracerpc option for regression testsf654f00Change -genproclimit default to 13c77714Make -proxy set all network types, avoiding a connect leak57be955Remove -printblock, -printblocktree, and -printblockindexad3d208remove -maxorphanblocks config parameter since it is no longer functional
Block and transaction handling:
7a0e84dProcessGetData(): abort if a block file is missing from disk8c93bf4LoadBlockIndexDB(): Require block db reindex if anyblk*.datfiles are missing77339e5Get rid of the static chainMostWork (optimization)4e0eed8Allow ActivateBestChain to release its lock on cs_main18e7216Push cs_mains down in ProcessBlockfa126efAvoid undefined behavior using CFlatData in CScript serialization7f3b4e9Relax IsStandard rules for pay-to-script-hash transactionsc9a0918Add a skiplist to the CBlockIndex structurebc42503Use unordered_map for CCoinsViewCache with salted hash (optimization)d4d3fbdDo not flush the cache after every block outside of IBD (optimization)ad08d0bBugfix: make CCoinsViewMemPool support pruned entries in underlying cache5734d4dOnly remove actualy failed blocks from setBlockIndexValidd70bc52Rework block processing benchmark code714a3e6Only keep setBlockIndexValid entries that are possible improvementsea100c7Reduce maximum coinscache size during verification (reduce memory usage)4fad8e6Reject transactions with excessive numbers of sigopsb0875ebAllow BatchWrite to destroy its input, reducing copying (optimization)92bb6f2Bypass reloading blocks from disk (optimization)2e28031Perform CVerifyDB on pcoinsdbview instead of pcoinsTip (reduce memory usage)ab15b2eAvoid copying undo data (optimization)341735eHeaders-first synchronizationafc32c5Fix rebuild-chainstate feature and improve its performancee11b2ceFix large reorgsed6d1a2Keep information about all block files in memorya48f2d6Abstract context-dependent block checking from acceptance7e615f5Fixed mempool sync after sending a transaction51ce901Improve chainstate/blockindex disk writing policya206950Introduce separate flushing modes9ec75c5Add a locking mechanism to IsInitialBlockDownload to ensure it never goes from false to true868d041Remove coinbase-dependant transactions during reorg723d12cRemove txn which are invalidated by coinbase maturity during reorg0cb8763Check against MANDATORY flags prior to accepting to mempool8446262Reject headers that build on an invalid parent
P2P protocol and network code:
f80cffaDo not trigger a DoS ban if SCRIPT_VERIFY_NULLDUMMY failsc30329aAdd testnet DNS seed of Alex Kotenko45a4bafAdd testnet DNS seed of Andreas Schildbachf1920e8Ping automatically every 2 minutes (unconditionally)806fd19Allocate receive buffers in on the fly6ecf3edDisplay unknown commands receivedaa81564Track peers' available blockscaf6150Use async name resolving to improve net thread responsiveness9f4da19Use pong receive time rather than processing time0127a9bremove SOCKS4 support from core and GUI, use SOCKS540f5cb8Send rejects and apply DoS scoring for errors in direct block validationdc942e6Introduce whitelisted peersc994d2eprevent SOCKET leak in BindListenPort()a60120eAdd built-in seeds for .onion60dc8e4Allow -onlynet=onion to be used3a56de7addrman: Do not propagate obviously poor addresses onto the network6050ab6netbase: Make SOCKS5 negotiation interruptible604ee2aRemove tx from AlreadyAskedFor list once we receive it, not when we process itefad808Avoid reject message feedback loops71697f9Separate protocol versioning from clientversion20a5f61Don't relay alerts to peers before version negotiationb4ee0bdIntroduce preferred download peers845c86dDo not use third party services for IP detection12a49caLimit the number of new addressses to accumulate35e408fRegard connection failures as attempt for addrman
Validation:
6fd7ef2Also switch the (unused) verification code to low-s instead of even-s584a358Do merkle root and txid duplicates check simultaneously217a5c9When transaction outputs exceed inputs, show the offending amounts so as to aid debuggingf74fc9bPrint input index when signature validation fails, to aid debugging6fd59eescript.h: set_vch() should shift a >32 bit valued752ba8Add SCRIPT_VERIFY_SIGPUSHONLY (BIP62 rule 2) (test only)698c6abAdd SCRIPT_VERIFY_MINIMALDATA (BIP62 rules 3 and 4) (test only)ab9edbdscript: create sane error return codes for script validation and remove logging219a147script: check ScriptError values in script tests0391423Discourage NOPs reserved for soft-fork upgrades98b135fMake STRICTENC invalid pubkeys fail the script rather than the opcode307f7d4Report script evaluation failures in log and reject messages
Build system:
f25e3adFix build in OS X 10.965e8ba4build: Switch to non-recursive make460b32dbuild: fix broken boost chrono check on some platforms9ce0774build: Fix windows configure when using --with-qt-libdirea96475build: Add mention of --disable-wallet to bdb48 error messages1dec09bdepends: add shared dependency builderc101c76build: Add --with-utils (bitcoin-cli and bitcoin-tx, default=yes). Help string consistency tweaks. Target sanity check fixe432a5fbuild: add option for reducing exports (v2)6134b43Fixing condition 'sabotaging' MSVC buildaf0bd5eosx: fix signing to make Gatekeeper happy (again)a7d1f03build: fix dynamic boost check when --with-boost= is usedd5fd094build: fix qt test build when libprotobuf is in a non-standard path2cf5f16Add libbitcoinconsensus library914868abuild: add a deterministic dmg signer
Wallet:
b33d1f5Use fee/priority estimates in wallet CreateTransaction4b7b1bbSanity checks for estimatesc898846Add support for watch-only addressesd5087d1Use script matching rather than destination matching for watch-onlyd88af56Fee fixesa35b55bDont run full check every time we decrypt wallet3a7c348Fix make_change to not create half-satoshisf606bb9fix a possible memory leak in CWalletDB::Recover870da77fix possible memory leaks in CWallet::EncryptWalletccca27aWatch-only fixes9b1627d[Wallet] Reduce minTxFee for transaction creation to 1000 satoshisa53fd41Deterministic signing15ad0b5Apply AreSane() checks to the fees from the network11855c1Enforce minRelayTxFee on wallet created tx and add a maxtxfee option
GUI:
c21c74bosx: Fix missing dock menu with qt5b90711cFix Transaction details shows wrong To:516053cMake links in 'About Bitcoin Core' clickablebdc83e8Ensure payment request network matches client network65f78a1Add GUI view of peer information06a91d9VerifyDB progress reportingfe6bff2Add BerkeleyDB version info to RPCConsoleb917555PeerTableModel: Fix potential deadlock. #4296dff0e3bImprove rpc console history behavior95a9383Remove CENT-fee-rule from coin control completely56b07d2Allow setting listen via GUId95ba75Log messages with type>QtDebugMsg as non-debug8969828New status bar Unit Display Control and related changes674c070seed OpenSSL PNRG with Windows event data509f926Payment request parsing on startup now only changes network if a valid network name is specifiedacd432bPrevent balloon-spam after rescan7007402Implement SI-style (thin space) thoudands separator91cce17Use fixed-point arithmetic in amount spinboxbdba2ddRemove an obscure option no-one cares aboutbd0aa10Replace the temporary file hack currently used to change Bitcoin-Qt's dock icon (OS X) with a buffer-based solution94e1b9eRe-work overviewpage UI8bfdc9aBetter looking trayiconb197bf3disable tray interactions when client model set to 01c5f0afAdd column Watch-only to transactions list21f139bFix tablet crash. closes #4854e84843cBroken addresses on command line no longer trigger testneta49f11dChange splash screen to normal window1f9be98Disable App Nap on OSX 10.9+27c3e91Add proxy to options overridden if necessary4bd1185Allow "emergency" shutdown during startupd52f072Don't show wallet options in the preferences menu when running with -disablewallet6093aa1Qt: QProgressBar CPU-Issue workaround0ed9675[Wallet] Add global boolean whether to send free transactions (default=true)ed3e5e4[Wallet] Add global boolean whether to pay at least the custom fee (default=true)e7876b2[Wallet] Prevent user from paying a non-sense feec1c9d5bAdd Smartfee to GUIe0a25c5Make askpassphrase dialog behave more sanely
Tests:
b41e594Fix script test handling of empty scriptsd3a33fcTest CHECKMULTISIG with m == 0 and n == 029c1749Let tx (in)valid tests use any SCRIPT_VERIFY flag6380180Add rejection of non-null CHECKMULTISIG dummy values21bf3d2Add tests for BoostAsioToCNetAddrb5ad5e7Add Python test for -rpcbind and -rpcallowip9ec0306Add CODESEPARATOR/FindAndDelete() tests75ebcedAdded many rpc wallet tests0193fb8Allow multiple regression tests to run at once92a6220Hook up sanity checks3820e01Extend and move all crypto tests to crypto_tests.cpp3f9a019added list/get received by address/ account testsa90689fRemove timing-based signature cache unit test236982cAdd skiplist unit testsf4b00beAdd CChain::GetLocator() unit testb45a6e8Add test for getblocktemplate longpollingcdf305eSet -discover=0 in regtest frameworked02282additional test for OP_SIZE in script_valid.json0072d98script tests: BOOLAND, BOOLOR decode to integer833ff16script tests: values that overflow to 0 are true4cac5dbscript tests: value with trailing 0x00 is true89101c6script test: test case for 5-byte boolsd2d9dc0script tests: add tests for CHECKMULTISIG limitsd789386Add "it works" test for bitcoin-txdf4d61eAdd bitcoin-tx testsaa41ac2Test IsPushOnly() with invalid push6022b5dMakescript_{valid,invalid}.jsonvalidation flags configurable8138cbeAdd automatic script test generation, and actual checksig testsed27e53Add coins_tests with a large randomized CCoinViewCache test9df9cf5Make SCRIPT_VERIFY_STRICTENC compatible with BIP62dcb9846Extend getchaintips RPC test554147aEnsure MINIMALDATA invalid tests can only fail one waydfeec18Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule2b62e17Clearly separate PUSHDATA and numeric argument MINIMALDATA tests16d78bdAdd valid invert of invalid every numeric opcode testsf635269tests: enable alertnotify test for Windows7a41614tests: allow rpc-tests to get filenames for bitcoind and bitcoin-cli from the environment5122ea7tests: fix forknotify.py on windowsfa7f8cdtests: remove old pull-tester scripts7667850tests: replace the old (unused since Travis) tests with new rpc test scriptsf4e0aefDo signature-s negation inside the tests1837987Optimize -regtest setgenerate block generation2db4c8aFix node ranges in the test frameworka8b2ce5regression test only setmocktime RPC calldaf03e7RPC tests: create initial chain with specific timestamps8656dbbPort/fix txnmall.sh regression testca81587Test the exact order of CHECKMULTISIG sig/pubkey evaluation7357893Prioritize and display -testsafemode status in UIf321d6bAdd key generation/verification to ECC sanity check132ea9bminer_tests: Disable checkpoints so they don't fail the subsidy-change testbc6cb41QA RPC tests: Add tests block block proposalsf67a9ceUse deterministically generated script tests11d7a7d[RPC] add rpc-test for http keep-alive (persistent connections)34318d7RPC-test based on invalidateblock for mempool coinbase spends76ec867Use actually valid transactions for script testsc8589bfAdd actual signature tests
Miscellaneous:
122549fFix incorrect checkpoint data for testnet35bd02cfLog used config file to debug.log on startup68ba85fUpdated Debian example bitcoin.conf with config from wiki + removed some cruft and updated commentse5ee8f0Remove -beta suffix38405acAdd comment regarding experimental-use service bitsbe873f6Issue warning if collecting RandSeed data failed8ae973cAllocate more space if necessary in RandSeedAddPerfMon675bcd5Correct comment for 15-of-15 p2sh script sizefda3fedlibsecp256k1 integration2e36866Show nodeid instead of addresses in log (for anonymity) unless otherwise requestedcd01a5eEnable paranoid corruption checks in LevelDB >= 1.169365937Add comment about never updating nTimeOffset past 199 samples403c1bfcontrib: remove getwork-based pyminer (as getwork API call has been removed)0c3e101contrib: Added systemd .service file in order to help distributions integrate bitcoind0a0878ddoc: Add new DNSseed policy2887bffUpdate coding style and add .clang-format5cbda4fChanged LevelDB cursors to use scoped pointers to ensure destruction when going out of scopeb4a72a7contrib/linearize: split output files based on new-timestamp-year or max-file-sizee982b57Use explicit fflush() instead of setvbuf()234bfbfcontrib: Add init scripts and docs for Upstart and OpenRC01c2807Add warning about the merkle-tree algorithm duplicate txid flawd6712dbAlso create pid file in non-daemon mode772ab0econtrib: use batched JSON-RPC in linarize-hashes (optimization)7ab4358Update bash-completion for v0.106e6a36ccontrib: show pull # in prompt for github-merge script
Thanks to everyone who contributed to this release:
- 21E14
- Adam Weiss
- Aitor Pazos
- Alexander Jeng
- Alex Morcos
- Alon Muroch
- Andreas Schildbach
- Andrew Poelstra
- Andy Alness
- Ashley Holman
- Benedict Chan
- Ben Holden-Crowther
- Bryan Bishop
- BtcDrak
- Christian von Roques
- Clinton Christian
- Cory Fields
- Cozz Lovan
- daniel
- Daniel Kraft
- David Hill
- Derek701
- dexX7
- dllud
- Dominyk Tiller
- Doug
- elichai
- elkingtowa
- ENikS
- Eric Shaw
- Federico Bond
- Francis GASCHET
- Gavin Andresen
- Giuseppe Mazzotta
- Glenn Willen
- Gregory Maxwell
- gubatron
- HarryWu
- himynameismartin
- Huang Le
- Ian Carroll
- imharrywu
- Jameson Lopp
- Janusz Lenar
- JaSK
- Jeff Garzik
- JL2035
- Johnathan Corgan
- Jonas Schnelli
- jtimon
- Julian Haight
- Kamil Domanski
- kazcw
- kevin
- kiwigb
- Kosta Zertsekel
- LongShao007
- Luke Dashjr
- Mark Friedenbach
- Mathy Vanvoorden
- Matt Corallo
- Matthew Bogosian
- Micha
- Michael Ford
- Mike Hearn
- mrbandrews
- mruddy
- ntrgn
- Otto Allmendinger
- paveljanik
- Pavel Vasin
- Peter Todd
- phantomcircuit
- Philip Kaufmann
- Pieter Wuille
- pryds
- randy-waterhouse
- R E Broadley
- Rose Toomey
- Ross Nicoll
- Roy Badami
- Ruben Dario Ponticelli
- Rune K. Svendsen
- Ryan X. Charles
- Saivann
- sandakersmann
- SergioDemianLerner
- shshshsh
- sinetek
- Stuart Cardall
- Suhas Daftuar
- Tawanda Kembo
- Teran McKinney
- tm314159
- Tom Harding
- Trevin Hofmann
- Whit J
- Wladimir J. van der Laan
- Yoichi Hirai
- Zak Wilcox
As well as everyone that helped translating on Transifex.