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 Upgrading and downgrading ========================= 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), 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. Downgrading warning --------------------- Because release 0.10.0 makes use of headers-first synchronization and parallel block download (see further), 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. Notable changes =============== Faster synchronization ---------------------- Bitcoin Core now uses 'headers-first synchronization'. This means that we first ask peers for block headers (a total of 27 megabytes, as of December 2014) and validate those. In a second stage, when the headers have been discovered, we download the blocks. However, as we already know about the whole chain in advance, the blocks can be downloaded in parallel from all available peers. In practice, this means a much faster and more robust synchronization. On recent hardware with a decent network link, it can be as little as 3 hours for an initial full synchronization. You may notice a slower progress in the very first few minutes, when headers are still being fetched and verified, but it should gain speed afterwards. A few RPCs were added/updated as a result of this: - `getblockchaininfo` now returns the number of validated headers in addition to the number of validated blocks. - `getpeerinfo` lists both the number of blocks and headers we know we have in common with each peer. While synchronizing, the heights of the blocks that we have requested from peers (but haven't received yet) are also listed as 'inflight'. - A new RPC `getchaintips` lists all known branches of the block chain, including those we only have headers for. Transaction fee changes ----------------------- 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. New command line options for fee estimation: - `-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. New RPC commands for fee estimation: - `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. RPC access control changes -------------------------- 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.4` or `fe80::0012:3456:789a:bcde`) - a network/CIDR (e.g. `1.2.3.0/24` or `fe80::0000/64`) - a network/netmask (e.g. `1.2.3.4/255.255.255.0` or `fe80::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). REST interface -------------- A new HTTP API is exposed when running with the `-rest` flag, which allows unauthenticated access to public node data. It is served on the same port as RPC, but does not need a password, and uses plain HTTP instead of JSON-RPC. Assuming a local RPC server running on port 8332, it is possible to request: - Blocks: http://localhost:8332/rest/block/*HASH*.*EXT* - Blocks without transactions: http://localhost:8332/block/notxdetails/*HASH*.*EXT* - Transactions (requires `-txindex`): http://localhost:8332/tx/*HASH*.*EXT* In every case, *EXT* can be `bin` (for raw binary data), `hex` (for hex-encoded binary) or `json`. For more details, see the `doc/REST-interface.md` document in the repository. RPC Server "Warm-Up" Mode ------------------------- 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). Improved signing security ------------------------- 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 Watch-only addresses in the wallet ---------------------------------- The wallet can now track transactions to addresses (or scripts) for which you do not have the private keys. This can be used to track payments without needing the private keys online on a possibly vulnerable system. In addition, it can help for (manual) construction of multisig transactions where you are only one of the signers. One new RPC, `importaddress`, is added which functions similarly to `importprivkey`, but instead takes an address or script (in hexadecimal) as argument. After using it, outputs credited to this address or script are considered to be yours. The following RPCs have optional support for watch-only addresses: `getbalance`, `listreceivedbyaddress`, `listreceivedbyaccount`, `listtransactions`, `listaccounts`, `listsinceblock`, `gettransaction`. See the RPC documentation for those methods for more information. Compared to using `getrawtransaction`, this mechanism does not require `-txindex`, scales better, integrates better with the wallet, and is compatible with future block chain pruning functionality. It does mean the address needs to added to the wallet before the payment, though. Consensus library ----------------- Starting from 0.10.0, the Bitcoin Core distribution includes a consensus library. The purpose of this library is to make the verification functionality that is critical to Bitcoin's consensus available to other applications, e.g. to language bindings such as [python_bitcoinlib](https://pypi.python.org/pypi/python-bitcoinlib) or alternative node implementations. This library is called `libbitcoinconsensus.so` (or, `.dll` for Windows). Its interface is defined in the C header [bitcoinconsensus.h](https://github.com/bitcoin/bitcoin/blob/0.10/src/script/bitcoinconsensus.h). In its initial version the API includes two functions: - `bitcoinconsensus_verify_script` verifies a script. It returns whether the indicated input of the provided serialized transaction correctly spends the passed scriptPubKey under additional constraints indicated by flags - `bitcoinconsensus_version` returns the API version, currently at an experimental `0` The functionality is planned to be extended to e.g. UTXO management in upcoming releases, but the interface for existing methods should remain stable. Standard script rules relaxed for P2SH addresses ------------------------------------------------ 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. bitcoin-tx ---------- It has been observed that many of the RPC functions offered by bitcoind are "pure functions", and operate independently of the bitcoind wallet. This included many of the RPC "raw transaction" API functions, such as createrawtransaction. bitcoin-tx is a newly introduced command line utility designed to enable easy manipulation of bitcoin transactions. A summary of its operation may be obtained via "bitcoin-tx --help" Transactions may be created or signed in a manner similar to the RPC raw tx API. Transactions may be updated, deleting inputs or outputs, or appending new inputs and outputs. Custom scripts may be easily composed using a simple text notation, borrowed from the bitcoin test suite. This tool may be used for experimenting with new transaction types, signing multi-party transactions, and many other uses. Long term, the goal is to deprecate and remove "pure function" RPC API calls, as those do not require a server round-trip to execute. Other utilities "bitcoin-key" and "bitcoin-script" have been proposed, making key and script operations easily accessible via command line. 0.10.0 Change log ================= Detailed release notes follow. This overview includes changes that affect external behavior, not code moves, refactors or string updates. RPC: - `f923c07` Support IPv6 lookup in bitcoin-cli even when IPv6 only bound on localhost - `b641c9c` Fix addnode "onetry": Connect with OpenNetworkConnection - `171ca77` estimatefee / estimatepriority RPC methods - `b750cf1` Remove cli functionality from bitcoind - `f6984e8` Add "chain" to getmininginfo, improve help in getblockchaininfo - `99ddc6c` Add nLocalServices info to RPC getinfo - `cf0c47b` Remove getwork() RPC call - `2a72d45` prioritisetransaction - `e44fea5` Add an option `-datacarrier` to allow users to disable relaying/mining data carrier transactions - `2ec5a3d` Prevent easy RPC memory exhaustion attack - `d4640d7` Added argument to getbalance to include watchonly addresses and fixed errors in balance calculation - `83f3543` Added argument to listaccounts to include watchonly addresses - `952877e` Showing 'involvesWatchonly' property for transactions returned by 'listtransactions' and 'listsinceblock'. It is only appended when the transaction involves a watchonly address - `d7d5d23` Added argument to listtransactions and listsinceblock to include watchonly addresses - `f87ba3d` added includeWatchonly argument to 'gettransaction' because it affects balance calculation - `0fa2f88` added includedWatchonly argument to listreceivedbyaddress/...account - `6c37f7f` `getrawchangeaddress`: fail when keypool exhausted and wallet locked - `ff6a7af` getblocktemplate: longpolling support - `c4a321f` Add peerid to getpeerinfo to allow correlation with the logs - `1b4568c` Add vout to ListTransactions output - `b33bd7a` Implement "getchaintips" RPC command to monitor blockchain forks - `733177e` Remove size limit in RPC client, keep it in server - `6b5b7cb` Categorize rpc help overview - `6f2c26a` Closely track mempool byte total. Add "getmempoolinfo" RPC - `aa82795` Add detailed network info to getnetworkinfo RPC - `01094bd` Don't reveal whether password is <20 or >20 characters in RPC - `57153d4` rpc: Compute number of confirmations of a block from block height - `ff36cbe` getnetworkinfo: export local node's client sub-version string - `d14d7de` SanitizeString: allow '(' and ')' - `31d6390` Fixed setaccount accepting foreign address - `b5ec5fe` update getnetworkinfo help with subversion - `ad6e601` RPC additions after headers-first - `33dfbf5` rpc: Fix leveldb iterator leak, and flush before `gettxoutsetinfo` - `2aa6329` Enable customising node policy for datacarrier data size with a -datacarriersize option - `f877aaa` submitblock: Use a temporary CValidationState to determine accurately the outcome of ProcessBlock - `e69a587` submitblock: Support for returning specific rejection reasons - `af82884` Add "warmup mode" for RPC server - `e2655e0` Add unauthenticated HTTP REST interface to public blockchain data - `683dc40` Disable SSLv3 (in favor of TLS) for the RPC client and server - `44b4c0d` signrawtransaction: validate private key - `9765a50` Implement BIP 23 Block Proposal - `f9de17e` Add warning comment to getinfo Command-line options: - `ee21912` Use netmasks instead of wildcards for IP address matching - `deb3572` Add `-rpcbind` option to allow binding RPC port on a specific interface - `96b733e` Add `-version` option to get just the version - `1569353` Add `-stopafterblockimport` option - `77cbd46` Let -zapwallettxes recover transaction meta data - `1c750db` remove -tor compatibility code (only allow -onion) - `4aaa017` rework help messages for fee-related options - `4278b1d` Clarify error message when invalid -rpcallowip - `6b407e4` -datadir is now allowed in config files - `bdd5b58` Add option `-sysperms` to disable 077 umask (create new files with system default umask) - `cbe39a3` Add "bitcoin-tx" command line utility and supporting modules - `dbca89b` Trigger -alertnotify if network is upgrading without you - `ad96e7c` Make -reindex cope with out-of-order blocks - `16d5194` Skip reindexed blocks individually - `ec01243` --tracerpc option for regression tests - `f654f00` Change -genproclimit default to 1 - `3c77714` Make -proxy set all network types, avoiding a connect leak - `57be955` Remove -printblock, -printblocktree, and -printblockindex - `ad3d208` remove -maxorphanblocks config parameter since it is no longer functional Block and transaction handling: - `7a0e84d` ProcessGetData(): abort if a block file is missing from disk - `8c93bf4` LoadBlockIndexDB(): Require block db reindex if any `blk*.dat` files are missing - `77339e5` Get rid of the static chainMostWork (optimization) - `4e0eed8` Allow ActivateBestChain to release its lock on cs_main - `18e7216` Push cs_mains down in ProcessBlock - `fa126ef` Avoid undefined behavior using CFlatData in CScript serialization - `7f3b4e9` Relax IsStandard rules for pay-to-script-hash transactions - `c9a0918` Add a skiplist to the CBlockIndex structure - `bc42503` Use unordered_map for CCoinsViewCache with salted hash (optimization) - `d4d3fbd` Do not flush the cache after every block outside of IBD (optimization) - `ad08d0b` Bugfix: make CCoinsViewMemPool support pruned entries in underlying cache - `5734d4d` Only remove actualy failed blocks from setBlockIndexValid - `d70bc52` Rework block processing benchmark code - `714a3e6` Only keep setBlockIndexValid entries that are possible improvements - `ea100c7` Reduce maximum coinscache size during verification (reduce memory usage) - `4fad8e6` Reject transactions with excessive numbers of sigops - `b0875eb` Allow BatchWrite to destroy its input, reducing copying (optimization) - `92bb6f2` Bypass reloading blocks from disk (optimization) - `2e28031` Perform CVerifyDB on pcoinsdbview instead of pcoinsTip (reduce memory usage) - `ab15b2e` Avoid copying undo data (optimization) - `341735e` Headers-first synchronization - `afc32c5` Fix rebuild-chainstate feature and improve its performance - `e11b2ce` Fix large reorgs - `ed6d1a2` Keep information about all block files in memory - `a48f2d6` Abstract context-dependent block checking from acceptance - `7e615f5` Fixed mempool sync after sending a transaction - `51ce901` Improve chainstate/blockindex disk writing policy - `a206950` Introduce separate flushing modes - `9ec75c5` Add a locking mechanism to IsInitialBlockDownload to ensure it never goes from false to true - `868d041` Remove coinbase-dependant transactions during reorg - `723d12c` Remove txn which are invalidated by coinbase maturity during reorg - `0cb8763` Check against MANDATORY flags prior to accepting to mempool - `8446262` Reject headers that build on an invalid parent P2P protocol and network code: - `f80cffa` Do not trigger a DoS ban if SCRIPT_VERIFY_NULLDUMMY fails - `c30329a` Add testnet DNS seed of Alex Kotenko - `45a4baf` Add testnet DNS seed of Andreas Schildbach - `f1920e8` Ping automatically every 2 minutes (unconditionally) - `806fd19` Allocate receive buffers in on the fly - `6ecf3ed` Display unknown commands received - `aa81564` Track peers' available blocks - `caf6150` Use async name resolving to improve net thread responsiveness - `9f4da19` Use pong receive time rather than processing time - `0127a9b` remove SOCKS4 support from core and GUI, use SOCKS5 - `40f5cb8` Send rejects and apply DoS scoring for errors in direct block validation - `dc942e6` Introduce whitelisted peers - `c994d2e` prevent SOCKET leak in BindListenPort() - `a60120e` Add built-in seeds for .onion - `60dc8e4` Allow -onlynet=onion to be used - `3a56de7` addrman: Do not propagate obviously poor addresses onto the network - `6050ab6` netbase: Make SOCKS5 negotiation interruptible - `604ee2a` Remove tx from AlreadyAskedFor list once we receive it, not when we process it - `efad808` Avoid reject message feedback loops - `71697f9` Separate protocol versioning from clientversion - `20a5f61` Don't relay alerts to peers before version negotiation - `b4ee0bd` Introduce preferred download peers - `845c86d` Do not use third party services for IP detection - `12a49ca` Limit the number of new addressses to accumulate - `35e408f` Regard connection failures as attempt for addrman Validation: - `6fd7ef2` Also switch the (unused) verification code to low-s instead of even-s - `584a358` Do merkle root and txid duplicates check simultaneously - `217a5c9` When transaction outputs exceed inputs, show the offending amounts so as to aid debugging - `f74fc9b` Print input index when signature validation fails, to aid debugging - `6fd59ee` script.h: set_vch() should shift a >32 bit value - `d752ba8` Add SCRIPT_VERIFY_SIGPUSHONLY (BIP62 rule 2) (test only) - `698c6ab` Add SCRIPT_VERIFY_MINIMALDATA (BIP62 rules 3 and 4) (test only) - `ab9edbd` script: create sane error return codes for script validation and remove logging - `219a147` script: check ScriptError values in script tests - `0391423` Discourage NOPs reserved for soft-fork upgrades - `98b135f` Make STRICTENC invalid pubkeys fail the script rather than the opcode - `307f7d4` Report script evaluation failures in log and reject messages Build system: - `f25e3ad` Fix build in OS X 10.9 - `65e8ba4` build: Switch to non-recursive make - `460b32d` build: fix broken boost chrono check on some platforms - `9ce0774` build: Fix windows configure when using --with-qt-libdir - `ea96475` build: Add mention of --disable-wallet to bdb48 error messages - `1dec09b` depends: add shared dependency builder - `c101c76` build: Add --with-utils (bitcoin-cli and bitcoin-tx, default=yes). Help string consistency tweaks. Target sanity check fix - `e432a5f` build: add option for reducing exports (v2) - `6134b43` Fixing condition 'sabotaging' MSVC build - `af0bd5e` osx: fix signing to make Gatekeeper happy (again) - `a7d1f03` build: fix dynamic boost check when --with-boost= is used - `d5fd094` build: fix qt test build when libprotobuf is in a non-standard path - `2cf5f16` Add libbitcoinconsensus library - `914868a` build: add a deterministic dmg signer Wallet: - `b33d1f5` Use fee/priority estimates in wallet CreateTransaction - `4b7b1bb` Sanity checks for estimates - `c898846` Add support for watch-only addresses - `d5087d1` Use script matching rather than destination matching for watch-only - `d88af56` Fee fixes - `a35b55b` Dont run full check every time we decrypt wallet - `3a7c348` Fix make_change to not create half-satoshis - `f606bb9` fix a possible memory leak in CWalletDB::Recover - `870da77` fix possible memory leaks in CWallet::EncryptWallet - `ccca27a` Watch-only fixes - `9b1627d` [Wallet] Reduce minTxFee for transaction creation to 1000 satoshis - `a53fd41` Deterministic signing - `15ad0b5` Apply AreSane() checks to the fees from the network - `11855c1` Enforce minRelayTxFee on wallet created tx and add a maxtxfee option GUI: - `c21c74b` osx: Fix missing dock menu with qt5 - `b90711c` Fix Transaction details shows wrong To: - `516053c` Make links in 'About Bitcoin Core' clickable - `bdc83e8` Ensure payment request network matches client network - `65f78a1` Add GUI view of peer information - `06a91d9` VerifyDB progress reporting - `fe6bff2` Add BerkeleyDB version info to RPCConsole - `b917555` PeerTableModel: Fix potential deadlock. #4296 - `dff0e3b` Improve rpc console history behavior - `95a9383` Remove CENT-fee-rule from coin control completely - `56b07d2` Allow setting listen via GUI - `d95ba75` Log messages with type>QtDebugMsg as non-debug - `8969828` New status bar Unit Display Control and related changes - `674c070` seed OpenSSL PNRG with Windows event data - `509f926` Payment request parsing on startup now only changes network if a valid network name is specified - `acd432b` Prevent balloon-spam after rescan - `7007402` Implement SI-style (thin space) thoudands separator - `91cce17` Use fixed-point arithmetic in amount spinbox - `bdba2dd` Remove an obscure option no-one cares about - `bd0aa10` Replace the temporary file hack currently used to change Bitcoin-Qt's dock icon (OS X) with a buffer-based solution - `94e1b9e` Re-work overviewpage UI - `8bfdc9a` Better looking trayicon - `b197bf3` disable tray interactions when client model set to 0 - `1c5f0af` Add column Watch-only to transactions list - `21f139b` Fix tablet crash. closes #4854 - `e84843c` Broken addresses on command line no longer trigger testnet - `a49f11d` Change splash screen to normal window - `1f9be98` Disable App Nap on OSX 10.9+ - `27c3e91` Add proxy to options overridden if necessary - `4bd1185` Allow "emergency" shutdown during startup - `d52f072` Don't show wallet options in the preferences menu when running with -disablewallet - `6093aa1` Qt: QProgressBar CPU-Issue workaround - `0ed9675` [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 fee - `c1c9d5b` Add Smartfee to GUI - `e0a25c5` Make askpassphrase dialog behave more sanely Tests: - `b41e594` Fix script test handling of empty scripts - `d3a33fc` Test CHECKMULTISIG with m == 0 and n == 0 - `29c1749` Let tx (in)valid tests use any SCRIPT_VERIFY flag - `6380180` Add rejection of non-null CHECKMULTISIG dummy values - `21bf3d2` Add tests for BoostAsioToCNetAddr - `b5ad5e7` Add Python test for -rpcbind and -rpcallowip - `9ec0306` Add CODESEPARATOR/FindAndDelete() tests - `75ebced` Added many rpc wallet tests - `0193fb8` Allow multiple regression tests to run at once - `92a6220` Hook up sanity checks - `3820e01` Extend and move all crypto tests to crypto_tests.cpp - `3f9a019` added list/get received by address/ account tests - `a90689f` Remove timing-based signature cache unit test - `236982c` Add skiplist unit tests - `f4b00be` Add CChain::GetLocator() unit test - `b45a6e8` Add test for getblocktemplate longpolling - `cdf305e` Set -discover=0 in regtest framework - `ed02282` additional test for OP_SIZE in script_valid.json - `0072d98` script tests: BOOLAND, BOOLOR decode to integer - `833ff16` script tests: values that overflow to 0 are true - `4cac5db` script tests: value with trailing 0x00 is true - `89101c6` script test: test case for 5-byte bools - `d2d9dc0` script tests: add tests for CHECKMULTISIG limits - `d789386` Add "it works" test for bitcoin-tx - `df4d61e` Add bitcoin-tx tests - `aa41ac2` Test IsPushOnly() with invalid push - `6022b5d` Make `script_{valid,invalid}.json` validation flags configurable - `8138cbe` Add automatic script test generation, and actual checksig tests - `ed27e53` Add coins_tests with a large randomized CCoinViewCache test - `9df9cf5` Make SCRIPT_VERIFY_STRICTENC compatible with BIP62 - `dcb9846` Extend getchaintips RPC test - `554147a` Ensure MINIMALDATA invalid tests can only fail one way - `dfeec18` Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule - `2b62e17` Clearly separate PUSHDATA and numeric argument MINIMALDATA tests - `16d78bd` Add valid invert of invalid every numeric opcode tests - `f635269` tests: enable alertnotify test for Windows - `7a41614` tests: allow rpc-tests to get filenames for bitcoind and bitcoin-cli from the environment - `5122ea7` tests: fix forknotify.py on windows - `fa7f8cd` tests: remove old pull-tester scripts - `7667850` tests: replace the old (unused since Travis) tests with new rpc test scripts - `f4e0aef` Do signature-s negation inside the tests - `1837987` Optimize -regtest setgenerate block generation - `2db4c8a` Fix node ranges in the test framework - `a8b2ce5` regression test only setmocktime RPC call - `daf03e7` RPC tests: create initial chain with specific timestamps - `8656dbb` Port/fix txnmall.sh regression test - `ca81587` Test the exact order of CHECKMULTISIG sig/pubkey evaluation - `7357893` Prioritize and display -testsafemode status in UI - `f321d6b` Add key generation/verification to ECC sanity check - `132ea9b` miner_tests: Disable checkpoints so they don't fail the subsidy-change test - `bc6cb41` QA RPC tests: Add tests block block proposals - `f67a9ce` Use deterministically generated script tests - `11d7a7d` [RPC] add rpc-test for http keep-alive (persistent connections) - `34318d7` RPC-test based on invalidateblock for mempool coinbase spends - `76ec867` Use actually valid transactions for script tests - `c8589bf` Add actual signature tests Miscellaneous: - `122549f` Fix incorrect checkpoint data for testnet3 - `5bd02cf` Log used config file to debug.log on startup - `68ba85f` Updated Debian example bitcoin.conf with config from wiki + removed some cruft and updated comments - `e5ee8f0` Remove -beta suffix - `38405ac` Add comment regarding experimental-use service bits - `be873f6` Issue warning if collecting RandSeed data failed - `8ae973c` Allocate more space if necessary in RandSeedAddPerfMon - `675bcd5` Correct comment for 15-of-15 p2sh script size - `fda3fed` libsecp256k1 integration - `2e36866` Show nodeid instead of addresses in log (for anonymity) unless otherwise requested - `cd01a5e` Enable paranoid corruption checks in LevelDB >= 1.16 - `9365937` Add comment about never updating nTimeOffset past 199 samples - `403c1bf` contrib: remove getwork-based pyminer (as getwork API call has been removed) - `0c3e101` contrib: Added systemd .service file in order to help distributions integrate bitcoind - `0a0878d` doc: Add new DNSseed policy - `2887bff` Update coding style and add .clang-format - `5cbda4f` Changed LevelDB cursors to use scoped pointers to ensure destruction when going out of scope - `b4a72a7` contrib/linearize: split output files based on new-timestamp-year or max-file-size - `e982b57` Use explicit fflush() instead of setvbuf() - `234bfbf` contrib: Add init scripts and docs for Upstart and OpenRC - `01c2807` Add warning about the merkle-tree algorithm duplicate txid flaw - `d6712db` Also create pid file in non-daemon mode - `772ab0e` contrib: use batched JSON-RPC in linarize-hashes (optimization) - `7ab4358` Update bash-completion for v0.10 - `6e6a36c` contrib: show pull # in prompt for github-merge script - `5b9f842` Upgrade leveldb to 1.18, make chainstate databases compatible between ARM and x86 (issue #2293) Credits ======= 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](https://www.transifex.com/projects/p/bitcoin/).