aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/release-notes.md481
-rwxr-xr-xqa/rpc-tests/p2p-segwit.py6
-rw-r--r--src/consensus/consensus.h4
-rw-r--r--src/init.cpp2
-rw-r--r--src/main.cpp12
-rw-r--r--src/main.h2
-rw-r--r--src/miner.cpp42
-rw-r--r--src/miner.h4
-rw-r--r--src/policy/policy.cpp10
-rw-r--r--src/policy/policy.h12
-rw-r--r--src/primitives/block.cpp6
-rw-r--r--src/primitives/block.h4
-rw-r--r--src/primitives/transaction.cpp4
-rw-r--r--src/primitives/transaction.h4
-rw-r--r--src/rpc/blockchain.cpp4
-rw-r--r--src/rpc/mining.cpp12
-rw-r--r--src/txmempool.cpp4
-rw-r--r--src/txmempool.h4
-rw-r--r--src/wallet/wallet.cpp5
-rw-r--r--src/wallet/wallet.h3
20 files changed, 546 insertions, 79 deletions
diff --git a/doc/release-notes.md b/doc/release-notes.md
index 09b3d47cba..240e132a83 100644
--- a/doc/release-notes.md
+++ b/doc/release-notes.md
@@ -142,6 +142,8 @@ You can't disable HD key generation once you have created a HD wallet.
There is no distinction between internal (change) and external keys.
+HD wallets are incompatible with older versions of Bitcoin Core.
+
[Pull request](https://github.com/bitcoin/bitcoin/pull/8035/files), [BIP 32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
Removal of internal miner
@@ -236,31 +238,492 @@ behavior, not code moves, refactors and string updates. For convenience in locat
the code changes and accompanying discussion, both the pull request and
git merge commit are mentioned.
-### RPC and REST
-
-### ZMQ
-
-### Configuration and command-line options
+### RPC and other APIs
+
+- #7156 `9ee02cf` Remove cs_main lock from `createrawtransaction` (laanwj)
+- #7326 `2cd004b` Fix typo, wrong information in gettxout help text (paveljanik)
+- #7222 `82429d0` Indicate which transactions are signaling opt-in RBF (sdaftuar)
+- #7480 `b49a623` Changed getnetworkhps value to double to avoid overflow (instagibbs)
+- #7550 `8b958ab` Input-from-stdin mode for bitcoin-cli (laanwj)
+- #7670 `c9a1265` Use cached block hash in blockToJSON() (rat4)
+- #7726 `9af69fa` Correct importaddress help reference to importpubkey (CypherGrue)
+- #7766 `16555b6` Register calls where they are defined (laanwj)
+- #7797 `e662a76` Fix generatetoaddress failing to parse address (mruddy)
+- #7774 `916b15a` Add versionHex in getblock and getblockheader JSON results (mruddy)
+- #7863 `72c54e3` Getblockchaininfo: make bip9_softforks an object, not an array (rustyrussell)
+- #7842 `d97101e` Do not print minping time in getpeerinfo when no ping received yet (paveljanik)
+- #7518 `be14ca5` Add multiple options to fundrawtransaction (promag)
+- #7756 `9e47fce` Add cursor to iterate over utxo set, use this in `gettxoutsetinfo` (laanwj)
+- #7848 `88616d2` Divergence between 32- and 64-bit when hashing >4GB affects `gettxoutsetinfo` (laanwj)
+- #7827 `4205ad7` Speed up `getchaintips` (mrbandrews)
+- #7762 `a1eb344` Append a message sequence number to every ZMQ notification (jonasschnelli)
+- #7688 `46880ed` List solvability in listunspent output and improve help (sipa)
+- #7926 `5725807` Push back `getaddednodeinfo` dead value (instagibbs)
+- #7953 `0630353` Create `signmessagewithprivkey` rpc (achow101)
+- #8049 `c028c7b` Expose information on whether transaction relay is enabled in `getnetworkinfo` (laanwj)
+- #7967 `8c1e49b` Add feerate option to `fundrawtransaction` (jonasschnelli)
+- #8118 `9b6a48c` Reduce unnecessary hashing in `signrawtransaction` (jonasnick)
+- #7957 `79004d4` Add support for transaction sequence number (jonasschnelli)
+- #8153 `75ec320` `fundrawtransaction` feeRate: Use BTC/kB (MarcoFalke)
+- #7292 `7ce9ac5` Expose ancestor/descendant information over RPC (sdaftuar)
+- #8171 `62fcf27` Fix createrawtx sequence number unsigned int parsing (jonasschnelli)
+- #7892 `9c3d0fa` Add full UTF-8 support to RPC (laanwj)
+- #8317 `304eff3` Don't use floating point in rpcwallet (MarcoFalke)
+- #8258 `5a06ebb` Hide softfork in `getblockchaininfo` if timeout is 0 (jl2012)
+- #8244 `1922e5a` Remove unnecessary LOCK(cs_main) in getrawmempool (dcousens)
### Block and transaction handling
+- #7056 `6a07208` Save last db read (morcos)
+- #6842 `0192806` Limitfreerelay edge case bugfix (ptschip)
+- #7084 `11d74f6` Replace maxFeeRate of 10000*minRelayTxFee with maxTxFee in mempool (MarcoFalke)
+- #7539 `9f33dba` Add tags to mempool's mapTx indices (sdaftuar)
+- #7592 `26a2a72` Re-remove ERROR logging for mempool rejects (laanwj)
+- #7187 `14d6324` Keep reorgs fast for SequenceLocks checks (morcos)
+- #7594 `01f4267` Mempool: Add tracking of ancestor packages (sdaftuar)
+- #7904 `fc9e334` Txdb: Fix assert crash in new UTXO set cursor (laanwj)
+- #7927 `f9c2ac7` Minor changes to dbwrapper to simplify support for other databases (laanwj)
+- #7933 `e26b620` Fix OOM when deserializing UTXO entries with invalid length (sipa)
+- #8020 `5e374f7` Use SipHash-2-4 for various non-cryptographic hashes (sipa)
+- #8076 `d720980` VerifyDB: don't check blocks that have been pruned (sdaftuar)
+- #8080 `862fd24` Do not use mempool for GETDATA for tx accepted after the last mempool req (gmaxwell)
+- #7997 `a82f033` Replace mapNextTx with slimmer setSpends (kazcw)
+- #8220 `1f86d64` Stop trimming when mapTx is empty (sipa)
+- #8273 `396f9d6` Bump `-dbcache` default to 300MiB (laanwj)
+- #7225 `eb33179` Eliminate unnecessary call to CheckBlock (sdaftuar)
+- #7907 `006cdf6` Optimize and Cleanup CScript::FindAndDelete (pstratem)
+- #7917 `239d419` Optimize reindex (sipa)
+- #7763 `3081fb9` Put hex-encoded version in UpdateTip (sipa)
+- #8149 `d612837` Testnet-only segregated witness (sipa)
+- #8305 `3730393` Improve handling of unconnecting headers (sdaftuar)
+- #8363 `fca1a41` Rename "block cost" to "block weight" (sdaftuar)
+
### P2P protocol and network code
-### Validation
+- #6589 `dc0305d` Log bytes recv/sent per command (jonasschnelli)
+- #7164 `3b43cad` Do not download transactions during initial blockchain sync (ptschip)
+- #7458 `898fedf` peers.dat, banlist.dat recreated when missing (kirkalx)
+- #7637 `3da5d1b` Fix memleak in TorController (laanwj, jonasschnelli)
+- #7553 `9f14e5a` Remove vfReachable and modify IsReachable to only use vfLimited (pstratem)
+- #7708 `9426632` De-neuter NODE_BLOOM (pstratem)
+- #7692 `29b2be6` Remove P2P alert system (btcdrak)
+- #7542 `c946a15` Implement "feefilter" P2P message (morcos)
+- #7573 `352fd57` Add `-maxtimeadjustment` command line option (mruddy)
+- #7570 `232592a` Add IPv6 Link-Local Address Support (mruddy)
+- #7874 `e6a4d48` Improve AlreadyHave (morcos)
+- #7856 `64e71b3` Only send one GetAddr response per connection (gmaxwell)
+- #7868 `7daa3ad` Split DNS resolving functionality out of net structures (theuni)
+- #7919 `7617682` Fix headers announcements edge case (sdaftuar)
+- #7514 `d9594bf` Fix IsInitialBlockDownload for testnet (jmacwhyte)
+- #7959 `03cf6e8` fix race that could fail to persist a ban (kazcw)
+- #7840 `3b9a0bf` Several performance and privacy improvements to inv/mempool handling (sipa)
+- #8011 `65aecda` Don't run ThreadMessageHandler at lowered priority (kazcw)
+- #7696 `5c3f8dd` Fix de-serialization bug where AddrMan is left corrupted (EthanHeilman)
+- #7932 `ed749bd` CAddrMan::Deserialize handle corrupt serializations better (pstratem)
+- #7906 `83121cc` Prerequisites for p2p encapsulation changes (theuni)
+- #8033 `18436d8` Fix Socks5() connect failures to be less noisy and less unnecessarily scary (wtogami)
+- #8082 `01d8359` Defer inserting into maprelay until just before relaying (gmaxwell)
+- #7960 `6a22373` Only use AddInventoryKnown for transactions (sdaftuar)
+- #8078 `2156fa2` Disable the mempool P2P command when bloom filters disabled (petertodd)
+- #8065 `67c91f8` Addrman offline attempts (gmaxwell)
+- #7703 `761cddb` Tor: Change auth order to only use password auth if -torpassword (laanwj)
+- #8083 `cd0c513` Add support for dnsseeds with option to filter by servicebits (jonasschnelli)
+- #8173 `4286f43` Use SipHash for node eviction (sipa)
+- #8154 `1445835` Drop vAddrToSend after sending big addr message (kazcw)
+- #7749 `be9711e` Enforce expected outbound services (sipa)
+- #8208 `0a64777` Do not set extra flags for unfiltered DNS seed results (sipa)
+- #8084 `e4bb4a8` Add recently accepted blocks and txn to AttemptToEvictConnection (gmaxwell)
+- #8113 `3f89a53` Rework addnode behaviour (sipa)
+- #8179 `94ab58b` Evict orphans which are included or precluded by accepted blocks (gmaxwell)
+- #8068 `e9d76a1` Compact Blocks (TheBlueMatt)
+- #8204 `0833894` Update petertodd's testnet seed (petertodd)
+- #8247 `5cd35d3` Mark my dnsseed as supporting filtering (sipa)
+- #8275 `042c323` Remove bad chain alert partition check (btcdrak)
+- #8271 `1bc9c80` Do not send witnesses in cmpctblock (sipa)
+- #8312 `ca40ef6` Fix mempool DoS vulnerability from malleated transactions (sdaftuar)
+- #7180 `16ccb74` Account for `sendheaders` `verack` messages (laanwj)
+- #8102 `425278d` Bugfix: use global ::fRelayTxes instead of CNode in version send (sipa)
### Build system
-### Wallet
+- #7302 `41f1a3e` C++11 build/runtime fixes (theuni)
+- #7322 `fd9356b` c++11: add scoped enum fallbacks to CPPFLAGS rather than defining them locally (theuni)
+- #7441 `a6771fc` Use Debian 8.3 in gitian build guide (fanquake)
+- #7349 `152a821` Build against system UniValue when available (luke-jr)
+- #7520 `621940e` LibreSSL doesn't define OPENSSL_VERSION, use LIBRESSL_VERSION_TEXT instead (paveljanik)
+- #7528 `9b9bfce` autogen.sh: warn about needing autoconf if autoreconf is not found (knocte)
+- #7504 `19324cf` Crystal clean make clean (paveljanik)
+- #7619 `18b3f1b` Add missing sudo entry in gitian VM setup (btcdrak)
+- #7616 `639ec58` [depends] Delete unused patches (MarcoFalke)
+- #7658 `c15eb28` Add curl to Gitian setup instructions (btcdrak)
+- #7710 `909b72b` [Depends] Bump miniupnpc and config.guess+sub (fanquake)
+- #7723 `5131005` build: python 3 compatibility (laanwj)
+- #7477 `28ad4d9` Fix quoting of copyright holders in configure.ac (domob1812)
+- #7711 `a67bc5e` [build-aux] Update Boost & check macros to latest serials (fanquake)
+- #7788 `4dc1b3a` Use relative paths instead of absolute paths in protoc calls (paveljanik)
+- #7809 `bbd210d` depends: some base fixes/changes (theuni)
+- #7603 `73fc922` Build System: Use PACKAGE_TARNAME in NSIS script (JeremyRand)
+- #7905 `187186b` test: move accounting_tests and rpc_wallet_tests to wallet/test (laanwj)
+- #7911 `351abf9` leveldb: integrate leveldb into our buildsystem (theuni)
+- #7944 `a407807` Re-instate TARGET_OS=linux in configure.ac. Removed by 351abf9e035 (randy-waterhouse)
+- #7920 `c3e3cfb` Switch Travis to Trusty (theuni)
+- #7954 `08b37c5` build: quiet annoying warnings without adding new ones (theuni)
+- #7165 `06162f1` build: Enable C++11 in build, require C++11 compiler (laanwj)
+- #7982 `559fbae` build: No need to check for leveldb atomics (theuni)
+- #8002 `f9b4582` [depends] Add -stdlib=libc++ to darwin CXX flags (fanquake)
+- #7993 `6a034ed` [depends] Bump Freetype, ccache, ZeroMQ, miniupnpc, expat (fanquake)
+- #8167 `19ea173` Ship debug tarballs/zips with debug symbols (theuni)
+- #8175 `f0299d8` Add --disable-bench to config flags for windows (laanwj)
+- #7283 `fd9881a` [gitian] Default reference_datetime to commit author date (MarcoFalke)
+- #8181 `9201ce8` Get rid of `CLIENT_DATE` (laanwj)
+- #8133 `fde0ac4` Finish up out-of-tree changes (theuni)
+- #8188 `65a9d7d` Add armhf/aarch64 gitian builds (theuni)
+- #8194 `cca1c8c` [gitian] set correct PATH for wrappers (MarcoFalke)
+- #8198 `5201614` Sync ax_pthread with upstream draft4 (fanquake)
+- #8210 `12a541e` [Qt] Bump to Qt5.6.1 (jonasschnelli)
+- #8285 `da50997` windows: Add testnet link to installer (laanwj)
+- #8304 `0cca2fe` [travis] Update SDK_URL (MarcoFalke)
+- #8310 `6ae20df` Require boost for bench (theuni)
+- #8315 `2e51590` Don't require sudo for Linux (theuni)
+- #8314 `67caef6` Fix pkg-config issues for 0.13 (theuni)
### GUI
-### Tests
+- #7154 `00b4b8d` Add InMempool() info to transaction details (jonasschnelli)
+- #7068 `5f3c670` [RPC-Tests] add simple way to run rpc test over QT clients (jonasschnelli)
+- #7218 `a1c185b` Fix misleading translation (MarcoFalke)
+- #7214 `be9a9a3` qt5: Use the fixed font the system recommends (MarcoFalke)
+- #7256 `08ab906` Add note to coin control dialog QT5 workaround (fanquake)
+- #7255 `e289807` Replace some instances of formatWithUnit with formatHtmlWithUnit (fanquake)
+- #7317 `3b57e9c` Fix RPCTimerInterface ordering issue (jonasschnelli)
+- #7327 `c079d79` Transaction View: LastMonth calculation fixed (crowning-)
+- #7334 `e1060c5` coincontrol workaround is still needed in qt5.4 (fixed in qt5.5) (MarcoFalke)
+- #7383 `ae2db67` Rename "amount" to "requested amount" in receive coins table (jonasschnelli)
+- #7396 `cdcbc59` Add option to increase/decrease font size in the console window (jonasschnelli)
+- #7437 `9645218` Disable tab navigation for peers tables (Kefkius)
+- #7604 `354b03d` build: Remove spurious dollar sign. Fixes #7189 (dooglus)
+- #7605 `7f001bd` Remove openssl info from init/log and from Qt debug window (jonasschnelli)
+- #7628 `87d6562` Add 'copy full transaction details' option (ericshawlinux)
+- #7613 `3798e5d` Add autocomplete to bitcoin-qt's console window (GamerSg)
+- #7668 `b24266c` Fix history deletion bug after font size change (achow101)
+- #7680 `41d2dfa` Remove reflection from `about` icon (laanwj)
+- #7686 `f034bce` Remove 0-fee from send dialog (MarcoFalke)
+- #7506 `b88e0b0` Use CCoinControl selection in CWallet::FundTransaction (promag)
+- #7732 `0b98dd7` Debug window: replace "Build date" with "Datadir" (jonasschnelli)
+- #7761 `60db51d` remove trailing output-index from transaction-id (jonasschnelli)
+- #7772 `6383268` Clear the input line after activating autocomplete (paveljanik)
+- #7925 `f604bf6` Fix out-of-tree GUI builds (laanwj)
+- #7939 `574ddc6` Make it possible to show details for multiple transactions (laanwj)
+- #8012 `b33824b` Delay user confirmation of send (Tyler-Hardin)
+- #8006 `7c8558d` Add option to disable the system tray icon (Tyler-Hardin)
+- #8046 `169d379` Fix Cmd-Q / Menu Quit shutdown on OSX (jonasschnelli)
+- #8042 `6929711` Don't allow to open the debug window during splashscreen & verification state (jonasschnelli)
+- #8014 `77b49ac` Sort transactions by date (Tyler-Hardin)
+- #8073 `eb2f6f7` askpassphrasedialog: Clear pass fields on accept (rat4)
+- #8129 `ee1533e` Fix RPC console auto completer (UdjinM6)
+- #7636 `fb0ac48` Add bitcoin address label to request payment QR code (makevoid)
+- #8231 `760a6c7` Fix a bug where the SplashScreen will not be hidden during startup (jonasschnelli)
+- #8256 `af2421c` BUG: bitcoin-qt crash (fsb4000)
+- #8257 `ff03c50` Do not ask a UI question from bitcoind (sipa)
+- #8288 `91abb77` Network-specific example address (laanwj)
+- #7707 `a914968` UI support for abandoned transactions (jonasschnelli)
+- #8207 `f7a403b` Add a link to the Bitcoin-Core repository and website to the About Dialog (MarcoFalke)
+- #8281 `6a87eb0` Remove client name from debug window (laanwj)
+
+### Wallet
-### Miscellaneous
+- #7262 `fc08994` Reduce inefficiency of GetAccountAddress() (dooglus)
+- #7537 `78e81b0` Warn on unexpected EOF while salvaging wallet (laanwj)
+- #7521 `3368895` Don't resend wallet txs that aren't in our own mempool (morcos)
+- #7576 `86a1ec5` Move wallet help string creation to CWallet (jonasschnelli)
+- #7577 `5b3b5a7` Move "load wallet phase" to CWallet (jonasschnelli)
+- #7608 `0735c0c` Move hardcoded file name out of log messages (MarcoFalke)
+- #7649 `4900641` Prevent multiple calls to CWallet::AvailableCoins (promag)
+- #7646 `e5c3511` Fix lockunspent help message (promag)
+- #7558 `b35a591` Add import/removeprunedfunds rpc call (instagibbs)
+- #7691 `30c2dd8` Refactor wallet/init interaction (jonasschnelli)
+- #6215 `48c5adf` add bip32 pub key serialization (jonasschnelli)
+- #7913 `bafd075` Fix for incorrect locking in GetPubKey() (keystore.cpp) (yurizhykin)
+- #7816 `0c95ebc` Slighly refactor GetOldestKeyPoolTime() (jonasschnelli)
+- #8036 `41138f9` init: Move berkeleydb version reporting to wallet (laanwj)
+- #8028 `373b50d` Fix insanity of CWalletDB::WriteTx and CWalletTx::WriteToDisk (pstratem)
+- #8061 `f6b7df3` Improve Wallet encapsulation (pstratem)
+- #7891 `950be19` Always require OS randomness when generating secret keys (sipa)
+- #7689 `b89ef13` Replace OpenSSL AES with ctaes-based version (sipa)
+- #7825 `f972b04` Prevent multiple calls to ExtractDestination (pedrobranco)
+- #8137 `243ac0c` Improve CWallet API with new AccountMove function (pstratem)
+- #8142 `52c3f34` Improve CWallet API with new GetAccountPubkey function (pstratem)
+- #8035 `b67a472` Add simplest BIP32/deterministic key generation implementation (jonasschnelli)
+- #7687 `a6ddb19` Stop treating importaddress'ed scripts as change (sipa)
+- #8298 `aef3811` wallet: Revert input selection post-pruning (laanwj)
+- #8324 `bc94b87` Keep HD seed during salvagewallet (jonasschnelli)
+- #8323 `238300b` Add HD keypath to CKeyMetadata, report metadata in validateaddress (jonasschnelli)
+- #8367 `3b38a6a` Ensure <0.13 clients can't open HD wallets (jonasschnelli)
+
+### Tests and QA
+
+- #7320 `d3dfc6d` Test walletpassphrase timeout (MarcoFalke)
+- #7208 `47c5ed1` Make max tip age an option instead of chainparam (laanwj)
+- #7372 `21376af` Trivial: [qa] wallet: Print maintenance (MarcoFalke)
+- #7280 `668906f` [travis] Fail when documentation is outdated (MarcoFalke)
+- #7177 `93b0576` [qa] Change default block priority size to 0 (MarcoFalke)
+- #7236 `02676c5` Use createrawtx locktime parm in txn_clone (dgenr8)
+- #7212 `326ffed` Adds unittests for CAddrMan and CAddrinfo, removes source of non-determinism (EthanHeilman)
+- #7490 `d007511` tests: Remove May15 test (laanwj)
+- #7531 `18cb2d5` Add bip68-sequence.py to extended rpc tests (btcdrak)
+- #7536 `ce5fc02` test: test leading spaces for ParseHex (laanwj)
+- #7620 `1b68de3` [travis] Only run check-doc.py once (MarcoFalke)
+- #7455 `7f96671` [travis] Exit early when check-doc.py fails (MarcoFalke)
+- #7667 `56d2c4e` Move GetTempPath() to testutil (musalbas)
+- #7517 `f1ca891` test: script_error checking in script_invalid tests (laanwj)
+- #7684 `3d0dfdb` Extend tests (MarcoFalke)
+- #7697 `622fe6c` Tests: make prioritise_transaction.py more robust (sdaftuar)
+- #7709 `efde86b` Tests: fix missing import in mempool_packages (sdaftuar)
+- #7702 `29e1131` Add tests verifychain, lockunspent, getbalance, listsinceblock (MarcoFalke)
+- #7720 `3b4324b` rpc-test: Normalize assert() (MarcoFalke)
+- #7757 `26794d4` wallet: Wait for reindex to catch up (MarcoFalke)
+- #7764 `a65b36c` Don't run pruning.py twice (MarcoFalke)
+- #7773 `7c80e72` Fix comments in tests (btcdrak)
+- #7489 `e9723cb` tests: Make proxy_test work on travis servers without IPv6 (laanwj)
+- #7778 `ff5874b` Bug fixes and refactor (MarcoFalke)
+- #7801 `70ac71b` Remove misleading "errorString syntax" (MarcoFalke)
+- #7803 `401c65c` maxblocksinflight: Actually enable test (MarcoFalke)
+- #7802 `3bc71e1` httpbasics: Actually test second connection (MarcoFalke)
+- #7818 `3911a0a` Refactor script tests (sipa)
+- #7849 `ab8586e` tests: add varints_bitpatterns test (laanwj)
+- #7846 `491171f` Clean up lockorder data of destroyed mutexes (sipa)
+- #7853 `6ef5e00` py2: Unfiddle strings into bytes explicitly (MarcoFalke)
+- #7878 `53adc83` [test] bctest.py: Revert faa41ee (MarcoFalke)
+- #7798 `cabba24` [travis] Print the commit which was evaluated (MarcoFalke)
+- #7833 `b1bf511` tests: Check Content-Type header returned from RPC server (laanwj)
+- #7851 `fa9d86f` pull-tester: Don't mute zmq ImportError (MarcoFalke)
+- #7822 `0e6fd5e` Add listunspent() test for spendable/unspendable UTXO (jpdffonseca)
+- #7912 `59ad568` Tests: Fix deserialization of reject messages (sdaftuar)
+- #7941 `0ea3941` Fixing comment in script_test.json test case (Christewart)
+- #7807 `0ad1041` Fixed miner test values, gave constants for less error-prone values (instagibbs)
+- #7980 `88b77c7` Smartfees: Properly use ordered dict (MarcoFalke)
+- #7814 `77b637f` Switch to py3 (MarcoFalke)
+- #8030 `409a8a1` Revert fatal-ness of missing python-zmq (laanwj)
+- #8018 `3e90fe6` Autofind rpc tests --srcdir (jonasschnelli)
+- #7971 `4e14afe` Refactor test_framework and pull tester (MarcoFalke)
+- #8016 `5767e80` Fix multithread CScheduler and reenable test (paveljanik)
+- #7972 `423ca30` pull-tester: Run rpc test in parallel (MarcoFalke)
+- #8039 `69b3a6d` Bench: Add crypto hash benchmarks (laanwj)
+- #8041 `5b736dd` Fix bip9-softforks blockstore issue (MarcoFalke)
+- #7994 `1f01443` Add op csv tests to script_tests.json (Christewart)
+- #8038 `e2bf830` Various minor fixes (MarcoFalke)
+- #8072 `1b87e5b` Travis: 'make check' in parallel and verbose (MarcoFalke)
+- #8056 `8844ef1` Remove hardcoded "4 nodes" from test_framework (MarcoFalke)
+- #8047 `37f9a1f` Test_framework: Set wait-timeout for bitcoind procs (MarcoFalke)
+- #8095 `6700cc9` Test framework: only cleanup on successful test runs (sdaftuar)
+- #8098 `06bd4f6` Test_framework: Append portseed to tmpdir (MarcoFalke)
+- #8104 `6ff2c8d` Add timeout to sync_blocks() and sync_mempools() (sdaftuar)
+- #8111 `61b8684` Benchmark SipHash (sipa)
+- #8107 `52b803e` Bench: Added base58 encoding/decoding benchmarks (yurizhykin)
+- #8115 `0026e0e` Avoid integer division in the benchmark inner-most loop (gmaxwell)
+- #8090 `a2df115` Adding P2SH(p2pkh) script test case (Christewart)
+- #7992 `ec45cc5` Extend #7956 with one more test (TheBlueMatt)
+- #8139 `ae5575b` Fix interrupted HTTP RPC connection workaround for Python 3.5+ (sipa)
+- #8164 `0f24eaf` [Bitcoin-Tx] fix missing test fixtures, fix 32bit atoi issue (jonasschnelli)
+- #8166 `0b5279f` Src/test: Do not shadow local variables (paveljanik)
+- #8141 `44c1b1c` Continuing port of java comparison tool (mrbandrews)
+- #8201 `36b7400` fundrawtransaction: Fix race, assert amounts (MarcoFalke)
+- #8214 `ed2cd59` Mininode: fail on send_message instead of silent return (MarcoFalke)
+- #8215 `a072d1a` Don't use floating point in wallet tests (MarcoFalke)
+- #8066 `65c2058` Test_framework: Use different rpc_auth_pair for each node (MarcoFalke)
+- #8216 `0d41d70` Assert 'changePosition out of bounds' (MarcoFalke)
+- #8222 `961893f` Enable mempool consistency checks in unit tests (sipa)
+- #7751 `84370d5` test_framework: python3.4 authproxy compat (laanwj)
+- #7744 `d8e862a` test_framework: detect failure of bitcoind startup (laanwj)
+- #8280 `115735d` Increase sync_blocks() timeouts in pruning.py (MarcoFalke)
+- #8340 `af9b7a9` Solve trivial merge conflict in p2p-segwit.py (MarcoFalke)
+- #8067 `3e4cf8f` Travis: use slim generic image, and some fixups (theuni)
+- #7951 `5c7df70` Test_framework: Properly print exception (MarcoFalke)
+- #8070 `7771aa5` Remove non-determinism which is breaking net_tests #8069 (EthanHeilman)
+- #8309 `bb2646a` Add wallet-hd test (MarcoFalke)
+
+### Mining
+
+- #7507 `11c7699` Remove internal miner (Leviathn)
+- #7663 `c87f51e` Make the generate RPC call function for non-regtest (sipa)
+- #7671 `e2ebd25` Add generatetoaddress RPC to mine to an address (achow101)
+- #7935 `66ed450` Versionbits: GBT support (luke-jr)
+- #7598 `e1486eb` Refactor CreateNewBlock to be a method of the BlockAssembler class (morcos)
+- #7600 `66db2d6` Select transactions using feerate-with-ancestors (sdaftuar)
+- #8295 `f5660d3` Mining-related fixups for 0.13.0 (sdaftuar)
+- #7796 `536b75e` Add support for negative fee rates, fixes `prioritizetransaction` (MarcoFalke)
+
+### Documentation and miscellaneous
+
+- #7423 `69e2a40` Add example for building with constrained resources (jarret)
+- #8254 `c2c69ed` Add OSX ZMQ requirement to QA readme (fanquake)
+- #8203 `377d131` Clarify documentation for running a tor node (nathaniel-mahieu)
+- #7428 `4b12266` Add example for listing ./configure flags (nathaniel-mahieu)
+- #7847 `3eae681` Add arch linux build example (mruddy)
+- #7968 `ff69aaf` Fedora build requirements (wtogami)
+- #8013 `fbedc09` Fedora build requirements, add gcc-c++ and fix typo (wtogami)
+- #8009 `fbd8478` Fixed invalid example paths in gitian-building.md (JeremyRand)
+- #8240 `63fbdbc` Mention Windows XP end of support in release notes (laanwj)
+- #8303 `5077d2c` Update bips.md for CSV softfork (fanquake)
+- #7789 `e0b3e19` Add note about using the Qt official binary installer (paveljanik)
+- #7791 `e30a5b0` Change Precise to Trusty in gitian-building.md (JeremyRand)
+- #7838 `8bb5d3d` Update gitian build guide to debian 8.4.0 (fanquake)
+- #7855 `b778e59` Replace precise with trusty (MarcoFalke)
+- #7975 `fc23fee` Update bitcoin-core GitHub links (MarcoFalke)
+- #8034 `e3a8207` Add basic git squash workflow (fanquake)
+- #7813 `214ec0b` Update port in tor.md (MarcoFalke)
+- #8193 `37c9830` Use Debian 8.5 in the gitian-build guide (fanquake)
+- #8261 `3685e0c` Clarify help for `getblockchaininfo` (paveljanik)
+- #7185 `ea0f5a2` Note that reviewers should mention the id of the commits they reviewed (pstratem)
+- #7290 `c851d8d` [init] Add missing help for args (MarcoFalke)
+- #7281 `f9fd4c2` Improve CheckInputs() comment about sig verification (petertodd)
+- #7417 `1e06bab` Minor improvements to the release process (PRabahy)
+- #7444 `4cdbd42` Improve block validity/ConnectBlock() comments (petertodd)
+- #7527 `db2e1c0` Fix and cleanup listreceivedbyX documentation (instagibbs)
+- #7541 `b6e00af` Clarify description of blockindex (pinheadmz)
+- #7590 `f06af57` Improving wording related to Boost library requirements [updated] (jonathancross)
+- #7635 `0fa88ef` Add dependency info to test docs (elliotolds)
+- #7609 `3ba07bd` RPM spec file project (AliceWonderMiscreations)
+- #7850 `229a17c` Removed call to `TryCreateDirectory` from `GetDefaultDataDir` in `src/util.cpp` (alexreg)
+- #7888 `ec870e1` Prevector: fix 2 bugs in currently unreached code paths (kazcw)
+- #7922 `90653bc` CBase58Data::SetString: cleanse the full vector (kazcw)
+- #7881 `c4e8390` Update release process (laanwj)
+- #7952 `a9c8b74` Log invalid block hash to make debugging easier (paveljanik)
+- #7974 `8206835` More comments on the design of AttemptToEvictConnection (gmaxwell)
+- #7795 `47a7cfb` UpdateTip: log only one line at most per block (laanwj)
+- #8110 `e7e25ea` Add benchmarking notes (fanquake)
+- #8121 `58f0c92` Update implemented BIPs list (fanquake)
+- #8029 `58725ba` Simplify OS X build notes (fanquake)
+- #8143 `d46b8b5` comment nit: miners don't vote (instagibbs)
+- #8136 `22e0b35` Log/report in 10% steps during VerifyDB (jonasschnelli)
+- #8168 `d366185` util: Add ParseUInt32 and ParseUInt64 (laanwj)
+- #8178 `f7b1bfc` Add git and github tips and tricks to developer notes (sipa)
+- #8177 `67db011` developer notes: updates for C++11 (kazcw)
+- #8229 `8ccdac1` [Doc] Update OS X build notes for 10.11 SDK (fanquake)
+- #8233 `9f1807a` Mention Linux ARM executables in release process and notes (laanwj)
+- #7540 `ff46dd4` Rename OP_NOP3 to OP_CHECKSEQUENCEVERIFY (btcdrak)
+- #8289 `26316ff` bash-completion: Adapt for 0.12 and 0.13 (roques)
+- #7453 `3dc3149` Missing patches from 0.12 (MarcoFalke)
+- #7113 `54a550b` Switch to a more efficient rolling Bloom filter (sipa)
+- #7257 `de9e5ea` Combine common error strings for different options so translations can be shared and reused (luke-jr)
+- #7304 `b8f485c` [contrib] Add clang-format-diff.py (MarcoFalke)
+- #7378 `e6f97ef` devtools: replace github-merge with python version (laanwj)
+- #7395 `0893705` devtools: show pull and commit information in github-merge (laanwj)
+- #7402 `6a5932b` devtools: github-merge get toplevel dir without extra whitespace (achow101)
+- #7425 `20a408c` devtools: Fix utf-8 support in messages for github-merge (laanwj)
+- #7632 `409f843` Delete outdated test-patches reference (Lewuathe)
+- #7662 `386f438` remove unused NOBLKS_VERSION_{START,END} constants (rat4)
+- #7737 `aa0d2b2` devtools: make github-merge.py use py3 (laanwj)
+- #7781 `55db5f0` devtools: Auto-set branch to merge to in github-merge (laanwj)
+- #7934 `f17032f` Improve rolling bloom filter performance and benchmark (sipa)
+- #8004 `2efe38b` signal handling: fReopenDebugLog and fRequestShutdown should be type sig_atomic_t (catilac)
+- #7713 `f6598df` Fixes for verify-commits script (petertodd)
Credits
=======
Thanks to everyone who directly contributed to this release:
+- 21E14
+- accraze
+- Adam Brown
+- Alexander Regueiro
+- Alex Morcos
+- Alfie John
+- Alice Wonder
+- AlSzacrel
+- Andrew Chow
+- Andrés G. Aragoneses
+- Bob McElrath
+- BtcDrak
+- calebogden
+- Cédric Félizard
+- Chirag Davé
+- Chris Moore
+- Chris Stewart
+- Christian von Roques
+- Chris Wheeler
+- Cory Fields
+- crowning-
+- Daniel Cousens
+- Daniel Kraft
+- Denis Lukianov
+- Elias Rohrer
+- Elliot Olds
+- Eric Shaw
+- error10
+- Ethan Heilman
+- face
+- fanquake
+- Francesco 'makevoid' Canessa
+- fsb4000
+- Gavin Andresen
+- gladoscc
+- Gregory Maxwell
+- Gregory Sanders
+- instagibbs
+- James O'Beirne
+- Jarret Dyrbye
+- Jeremy Rand
+- jl2012
+- jloughry
+- jmacwhyte
+- Joao Fonseca
+- Johnson Lau
+- Jonas Nick
+- Jonas Schnelli
+- Jonathan Cross
+- João Barbosa
+- Jorge Timón
+- Kaz Wesley
+- Kefkius
+- kirkalx
+- Krzysztof Jurewicz
+- Leviathn
+- lewuathe
+- Luke Dashjr
+- Luv Khemani
+- Marcel Krüger
+- Marco Falke
+- Mark Friedenbach
+- Matt
+- Matt Bogosian
+- Matt Corallo
+- Matthew English
+- Matthew Zipkin
+- mb300sd
+- Mitchell Cash
+- mrbandrews
+- mruddy
+- Murch
+- Mustafa
+- Nathaniel Mahieu
+- Nicolas Dorier
+- Patrick Strateman
+- Paul Rabahy
+- paveljanik
+- Pavel Janík
+- Pavel Vasin
+- Pedro Branco
+- Peter Todd
+- Philip Kaufmann
+- Pieter Wuille
+- Prayag Verma
+- ptschip
+- Puru
+- randy-waterhouse
+- R E Broadley
+- Rusty Russell
+- Suhas Daftuar
+- Suriyaa Kudo
+- TheLazieR Yip
+- Thomas Kerin
+- Tom Harding
+- Tyler Hardin
+- UdjinM6
+- Warren Togami
+- Will Binns
+- Wladimir J. van der Laan
+- Yuri Zhykin
+
As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/bitcoin/).
diff --git a/qa/rpc-tests/p2p-segwit.py b/qa/rpc-tests/p2p-segwit.py
index b30d41af92..fa2c5d1f05 100755
--- a/qa/rpc-tests/p2p-segwit.py
+++ b/qa/rpc-tests/p2p-segwit.py
@@ -1065,12 +1065,12 @@ class SegWitTest(BitcoinTestFramework):
assert_equal(wit_block.serialize(False), non_wit_block.serialize())
assert_equal(wit_block.serialize(True), block.serialize(True))
- # Test size, vsize, cost
+ # Test size, vsize, weight
rpc_details = self.nodes[0].getblock(block.hash, True)
assert_equal(rpc_details["size"], len(block.serialize(True)))
assert_equal(rpc_details["strippedsize"], len(block.serialize(False)))
- cost = 3*len(block.serialize(False)) + len(block.serialize(True))
- assert_equal(rpc_details["cost"], cost)
+ weight = 3*len(block.serialize(False)) + len(block.serialize(True))
+ assert_equal(rpc_details["weight"], weight)
# Upgraded node should not ask for blocks from unupgraded
block4 = self.build_next_block(nVersion=4)
diff --git a/src/consensus/consensus.h b/src/consensus/consensus.h
index 81f40593b2..6908565866 100644
--- a/src/consensus/consensus.h
+++ b/src/consensus/consensus.h
@@ -10,8 +10,8 @@
/** The maximum allowed size for a serialized block, in bytes (only for buffer size limits) */
static const unsigned int MAX_BLOCK_SERIALIZED_SIZE = 4000000;
-/** The maximum allowed cost for a block, see BIP 141 (network rule) */
-static const unsigned int MAX_BLOCK_COST = 4000000;
+/** The maximum allowed weight for a block, see BIP 141 (network rule) */
+static const unsigned int MAX_BLOCK_WEIGHT = 4000000;
/** The maximum allowed size for a block excluding witness data, in bytes (network rule) */
static const unsigned int MAX_BLOCK_BASE_SIZE = 1000000;
/** The maximum allowed number of signature check operations in a block (network rule) */
diff --git a/src/init.cpp b/src/init.cpp
index 509bc45f51..312dfe1699 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -452,7 +452,7 @@ std::string HelpMessage(HelpMessageMode mode)
strUsage += HelpMessageOpt("-mempoolreplacement", strprintf(_("Enable transaction replacement in the memory pool (default: %u)"), DEFAULT_ENABLE_REPLACEMENT));
strUsage += HelpMessageGroup(_("Block creation options:"));
- strUsage += HelpMessageOpt("-blockmaxcost=<n>", strprintf(_("Set maximum BIP141 block cost (default: %d)"), DEFAULT_BLOCK_MAX_COST));
+ strUsage += HelpMessageOpt("-blockmaxweight=<n>", strprintf(_("Set maximum BIP141 block weight (default: %d)"), DEFAULT_BLOCK_MAX_WEIGHT));
strUsage += HelpMessageOpt("-blockmaxsize=<n>", strprintf(_("Set maximum block size in bytes (default: %d)"), DEFAULT_BLOCK_MAX_SIZE));
strUsage += HelpMessageOpt("-blockprioritysize=<n>", strprintf(_("Set maximum size of high-priority/low-fee transactions in bytes (default: %d)"), DEFAULT_BLOCK_PRIORITY_SIZE));
if (showDebug)
diff --git a/src/main.cpp b/src/main.cpp
index 73fbe53afb..fe19895f5f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -694,8 +694,8 @@ bool AddOrphanTx(const CTransaction& tx, NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(c
// have been mined or received.
// 100 orphans, each of which is at most 99,999 bytes big is
// at most 10 megabytes of orphans and somewhat more byprev index (in the worst case):
- unsigned int sz = GetTransactionCost(tx);
- if (sz >= MAX_STANDARD_TX_COST)
+ unsigned int sz = GetTransactionWeight(tx);
+ if (sz >= MAX_STANDARD_TX_WEIGHT)
{
LogPrint("mempool", "ignoring large orphan tx (size: %u, hash: %s)\n", sz, hash.ToString());
return false;
@@ -3596,13 +3596,13 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIn
}
// After the coinbase witness nonce and commitment are verified,
- // we can check if the block cost passes (before we've checked the
- // coinbase witness, it would be possible for the cost to be too
+ // we can check if the block weight passes (before we've checked the
+ // coinbase witness, it would be possible for the weight to be too
// large by filling up the coinbase witness, which doesn't change
// the block hash, so we couldn't mark the block as permanently
// failed).
- if (GetBlockCost(block) > MAX_BLOCK_COST) {
- return state.DoS(100, error("ContextualCheckBlock(): cost limit failed"), REJECT_INVALID, "bad-blk-cost");
+ if (GetBlockWeight(block) > MAX_BLOCK_WEIGHT) {
+ return state.DoS(100, error("ContextualCheckBlock(): weight limit failed"), REJECT_INVALID, "bad-blk-weight");
}
return true;
diff --git a/src/main.h b/src/main.h
index 65ae2488f9..27121890f6 100644
--- a/src/main.h
+++ b/src/main.h
@@ -155,7 +155,7 @@ typedef boost::unordered_map<uint256, CBlockIndex*, BlockHasher> BlockMap;
extern BlockMap mapBlockIndex;
extern uint64_t nLastBlockTx;
extern uint64_t nLastBlockSize;
-extern uint64_t nLastBlockCost;
+extern uint64_t nLastBlockWeight;
extern const std::string strMessageMagic;
extern CWaitableCriticalSection csBestBlock;
extern CConditionVariable cvBlockChange;
diff --git a/src/miner.cpp b/src/miner.cpp
index 8153fb9f9e..25a5becf93 100644
--- a/src/miner.cpp
+++ b/src/miner.cpp
@@ -45,7 +45,7 @@ using namespace std;
uint64_t nLastBlockTx = 0;
uint64_t nLastBlockSize = 0;
-uint64_t nLastBlockCost = 0;
+uint64_t nLastBlockWeight = 0;
class ScoreCompare
{
@@ -77,30 +77,30 @@ BlockAssembler::BlockAssembler(const CChainParams& _chainparams)
: chainparams(_chainparams)
{
// Block resource limits
- // If neither -blockmaxsize or -blockmaxcost is given, limit to DEFAULT_BLOCK_MAX_*
+ // If neither -blockmaxsize or -blockmaxweight is given, limit to DEFAULT_BLOCK_MAX_*
// If only one is given, only restrict the specified resource.
// If both are given, restrict both.
- nBlockMaxCost = DEFAULT_BLOCK_MAX_COST;
+ nBlockMaxWeight = DEFAULT_BLOCK_MAX_WEIGHT;
nBlockMaxSize = DEFAULT_BLOCK_MAX_SIZE;
- bool fCostSet = false;
- if (mapArgs.count("-blockmaxcost")) {
- nBlockMaxCost = GetArg("-blockmaxcost", DEFAULT_BLOCK_MAX_COST);
+ bool fWeightSet = false;
+ if (mapArgs.count("-blockmaxweight")) {
+ nBlockMaxWeight = GetArg("-blockmaxweight", DEFAULT_BLOCK_MAX_WEIGHT);
nBlockMaxSize = MAX_BLOCK_SERIALIZED_SIZE;
- fCostSet = true;
+ fWeightSet = true;
}
if (mapArgs.count("-blockmaxsize")) {
nBlockMaxSize = GetArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE);
- if (!fCostSet) {
- nBlockMaxCost = nBlockMaxSize * WITNESS_SCALE_FACTOR;
+ if (!fWeightSet) {
+ nBlockMaxWeight = nBlockMaxSize * WITNESS_SCALE_FACTOR;
}
}
- // Limit cost to between 4K and MAX_BLOCK_COST-4K for sanity:
- nBlockMaxCost = std::max((unsigned int)4000, std::min((unsigned int)(MAX_BLOCK_COST-4000), nBlockMaxCost));
+ // Limit weight to between 4K and MAX_BLOCK_WEIGHT-4K for sanity:
+ nBlockMaxWeight = std::max((unsigned int)4000, std::min((unsigned int)(MAX_BLOCK_WEIGHT-4000), nBlockMaxWeight));
// Limit size to between 1K and MAX_BLOCK_SERIALIZED_SIZE-1K for sanity:
nBlockMaxSize = std::max((unsigned int)1000, std::min((unsigned int)(MAX_BLOCK_SERIALIZED_SIZE-1000), nBlockMaxSize));
- // Whether we need to account for byte usage (in addition to cost usage)
+ // Whether we need to account for byte usage (in addition to weight usage)
fNeedSizeAccounting = (nBlockMaxSize < MAX_BLOCK_SERIALIZED_SIZE-1000);
}
@@ -110,7 +110,7 @@ void BlockAssembler::resetBlock()
// Reserve space for coinbase tx
nBlockSize = 1000;
- nBlockCost = 4000;
+ nBlockWeight = 4000;
nBlockSigOpsCost = 400;
fIncludeWitness = false;
@@ -167,7 +167,7 @@ CBlockTemplate* BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn)
nLastBlockTx = nBlockTx;
nLastBlockSize = nBlockSize;
- nLastBlockCost = nBlockCost;
+ nLastBlockWeight = nBlockWeight;
LogPrintf("CreateNewBlock(): total size %u txs: %u fees: %ld sigops %d\n", nBlockSize, nBlockTx, nFees, nBlockSigOpsCost);
// Create coinbase transaction.
@@ -223,8 +223,8 @@ void BlockAssembler::onlyUnconfirmed(CTxMemPool::setEntries& testSet)
bool BlockAssembler::TestPackage(uint64_t packageSize, int64_t packageSigOpsCost)
{
- // TODO: switch to cost-based accounting for packages instead of vsize-based accounting.
- if (nBlockCost + WITNESS_SCALE_FACTOR * packageSize >= nBlockMaxCost)
+ // TODO: switch to weight-based accounting for packages instead of vsize-based accounting.
+ if (nBlockWeight + WITNESS_SCALE_FACTOR * packageSize >= nBlockMaxWeight)
return false;
if (nBlockSigOpsCost + packageSigOpsCost >= MAX_BLOCK_SIGOPS_COST)
return false;
@@ -257,17 +257,17 @@ bool BlockAssembler::TestPackageTransactions(const CTxMemPool::setEntries& packa
bool BlockAssembler::TestForBlock(CTxMemPool::txiter iter)
{
- if (nBlockCost + iter->GetTxCost() >= nBlockMaxCost) {
+ if (nBlockWeight + iter->GetTxWeight() >= nBlockMaxWeight) {
// If the block is so close to full that no more txs will fit
// or if we've tried more than 50 times to fill remaining space
// then flag that the block is finished
- if (nBlockCost > nBlockMaxCost - 400 || lastFewTxs > 50) {
+ if (nBlockWeight > nBlockMaxWeight - 400 || lastFewTxs > 50) {
blockFinished = true;
return false;
}
- // Once we're within 4000 cost of a full block, only look at 50 more txs
+ // Once we're within 4000 weight of a full block, only look at 50 more txs
// to try to fill the remaining space.
- if (nBlockCost > nBlockMaxCost - 4000) {
+ if (nBlockWeight > nBlockMaxWeight - 4000) {
lastFewTxs++;
}
return false;
@@ -315,7 +315,7 @@ void BlockAssembler::AddToBlock(CTxMemPool::txiter iter)
if (fNeedSizeAccounting) {
nBlockSize += ::GetSerializeSize(iter->GetTx(), SER_NETWORK, PROTOCOL_VERSION);
}
- nBlockCost += iter->GetTxCost();
+ nBlockWeight += iter->GetTxWeight();
++nBlockTx;
nBlockSigOpsCost += iter->GetSigOpCost();
nFees += iter->GetFee();
diff --git a/src/miner.h b/src/miner.h
index d16e37bb59..11753f5e43 100644
--- a/src/miner.h
+++ b/src/miner.h
@@ -141,11 +141,11 @@ private:
// Configuration parameters for the block size
bool fIncludeWitness;
- unsigned int nBlockMaxCost, nBlockMaxSize;
+ unsigned int nBlockMaxWeight, nBlockMaxSize;
bool fNeedSizeAccounting;
// Information on the current status of the block
- uint64_t nBlockCost;
+ uint64_t nBlockWeight;
uint64_t nBlockSize;
uint64_t nBlockTx;
uint64_t nBlockSigOpsCost;
diff --git a/src/policy/policy.cpp b/src/policy/policy.cpp
index f2148bfe10..8617db00c8 100644
--- a/src/policy/policy.cpp
+++ b/src/policy/policy.cpp
@@ -64,8 +64,8 @@ bool IsStandardTx(const CTransaction& tx, std::string& reason)
// almost as much to process as they cost the sender in fees, because
// computing signature hashes is O(ninputs*txsize). Limiting transactions
// to MAX_STANDARD_TX_SIZE mitigates CPU exhaustion attacks.
- unsigned int sz = GetTransactionCost(tx);
- if (sz >= MAX_STANDARD_TX_COST) {
+ unsigned int sz = GetTransactionWeight(tx);
+ if (sz >= MAX_STANDARD_TX_WEIGHT) {
reason = "tx-size";
return false;
}
@@ -151,12 +151,12 @@ bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs)
return true;
}
-int64_t GetVirtualTransactionSize(int64_t nCost)
+int64_t GetVirtualTransactionSize(int64_t nWeight)
{
- return (nCost + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR;
+ return (nWeight + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR;
}
int64_t GetVirtualTransactionSize(const CTransaction& tx)
{
- return GetVirtualTransactionSize(GetTransactionCost(tx));
+ return GetVirtualTransactionSize(GetTransactionWeight(tx));
}
diff --git a/src/policy/policy.h b/src/policy/policy.h
index 29a8cc57c2..f5f8652fb5 100644
--- a/src/policy/policy.h
+++ b/src/policy/policy.h
@@ -18,10 +18,10 @@ class CCoinsViewCache;
static const unsigned int DEFAULT_BLOCK_MAX_SIZE = 750000;
/** Default for -blockprioritysize, maximum space for zero/low-fee transactions **/
static const unsigned int DEFAULT_BLOCK_PRIORITY_SIZE = 0;
-/** Default for -blockmaxcost, which control the range of block costs the mining code will create **/
-static const unsigned int DEFAULT_BLOCK_MAX_COST = 3000000;
-/** The maximum size for transactions we're willing to relay/mine */
-static const unsigned int MAX_STANDARD_TX_COST = 400000;
+/** Default for -blockmaxweight, which controls the range of block weights the mining code will create **/
+static const unsigned int DEFAULT_BLOCK_MAX_WEIGHT = 3000000;
+/** The maximum weight for transactions we're willing to relay/mine */
+static const unsigned int MAX_STANDARD_TX_WEIGHT = 400000;
/** Maximum number of signature check operations in an IsStandard() P2SH script */
static const unsigned int MAX_P2SH_SIGOPS = 15;
/** The maximum number of sigops we're willing to relay/mine in a single tx */
@@ -66,8 +66,8 @@ bool IsStandardTx(const CTransaction& tx, std::string& reason);
*/
bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs);
-/** Compute the virtual transaction size (cost reinterpreted as bytes). */
-int64_t GetVirtualTransactionSize(int64_t nCost);
+/** Compute the virtual transaction size (weight reinterpreted as bytes). */
+int64_t GetVirtualTransactionSize(int64_t nWeight);
int64_t GetVirtualTransactionSize(const CTransaction& tx);
#endif // BITCOIN_POLICY_POLICY_H
diff --git a/src/primitives/block.cpp b/src/primitives/block.cpp
index df900388f2..0e6ab4dd71 100644
--- a/src/primitives/block.cpp
+++ b/src/primitives/block.cpp
@@ -32,11 +32,11 @@ std::string CBlock::ToString() const
return s.str();
}
-int64_t GetBlockCost(const CBlock& block)
+int64_t GetBlockWeight(const CBlock& block)
{
- // This implements the cost = (stripped_size * 4) + witness_size formula,
+ // This implements the weight = (stripped_size * 4) + witness_size formula,
// using only serialization with and without witness data. As witness_size
// is equal to total_size - stripped_size, this formula is identical to:
- // cost = (stripped_size * 3) + total_size.
+ // weight = (stripped_size * 3) + total_size.
return ::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) * (WITNESS_SCALE_FACTOR - 1) + ::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION);
}
diff --git a/src/primitives/block.h b/src/primitives/block.h
index e2a309e63d..72dfed985a 100644
--- a/src/primitives/block.h
+++ b/src/primitives/block.h
@@ -154,7 +154,7 @@ struct CBlockLocator
}
};
-/** Compute the consensus-critical block cost (see BIP 141). */
-int64_t GetBlockCost(const CBlock& tx);
+/** Compute the consensus-critical block weight (see BIP 141). */
+int64_t GetBlockWeight(const CBlock& tx);
#endif // BITCOIN_PRIMITIVES_BLOCK_H
diff --git a/src/primitives/transaction.cpp b/src/primitives/transaction.cpp
index 7f10409c05..8d63805643 100644
--- a/src/primitives/transaction.cpp
+++ b/src/primitives/transaction.cpp
@@ -121,7 +121,7 @@ unsigned int CTransaction::CalculateModifiedSize(unsigned int nTxSize) const
// Providing any more cleanup incentive than making additional inputs free would
// risk encouraging people to create junk outputs to redeem later.
if (nTxSize == 0)
- nTxSize = (GetTransactionCost(*this) + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR;
+ nTxSize = (GetTransactionWeight(*this) + WITNESS_SCALE_FACTOR - 1) / WITNESS_SCALE_FACTOR;
for (std::vector<CTxIn>::const_iterator it(vin.begin()); it != vin.end(); ++it)
{
unsigned int offset = 41U + std::min(110U, (unsigned int)it->scriptSig.size());
@@ -149,7 +149,7 @@ std::string CTransaction::ToString() const
return str;
}
-int64_t GetTransactionCost(const CTransaction& tx)
+int64_t GetTransactionWeight(const CTransaction& tx)
{
return ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) * (WITNESS_SCALE_FACTOR -1) + ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION);
}
diff --git a/src/primitives/transaction.h b/src/primitives/transaction.h
index 8a2d5dd22c..d37890667f 100644
--- a/src/primitives/transaction.h
+++ b/src/primitives/transaction.h
@@ -459,7 +459,7 @@ struct CMutableTransaction
uint256 GetHash() const;
};
-/** Compute the cost of a transaction, as defined by BIP 141 */
-int64_t GetTransactionCost(const CTransaction &tx);
+/** Compute the weight of a transaction, as defined by BIP 141 */
+int64_t GetTransactionWeight(const CTransaction &tx);
#endif // BITCOIN_PRIMITIVES_TRANSACTION_H
diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp
index 20eefa1c57..9dc896b7af 100644
--- a/src/rpc/blockchain.cpp
+++ b/src/rpc/blockchain.cpp
@@ -101,7 +101,7 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool tx
result.push_back(Pair("confirmations", confirmations));
result.push_back(Pair("strippedsize", (int)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS)));
result.push_back(Pair("size", (int)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION)));
- result.push_back(Pair("cost", (int)::GetBlockCost(block)));
+ result.push_back(Pair("weight", (int)::GetBlockWeight(block)));
result.push_back(Pair("height", blockindex->nHeight));
result.push_back(Pair("version", block.nVersion));
result.push_back(Pair("versionHex", strprintf("%08x", block.nVersion)));
@@ -559,7 +559,7 @@ UniValue getblock(const UniValue& params, bool fHelp)
" \"confirmations\" : n, (numeric) The number of confirmations, or -1 if the block is not on the main chain\n"
" \"size\" : n, (numeric) The block size\n"
" \"strippedsize\" : n, (numeric) The block size excluding witness data\n"
- " \"cost\" : n (numeric) The block cost\n"
+ " \"weight\" : n (numeric) The block weight (BIP 141)\n"
" \"height\" : n, (numeric) The block height or index\n"
" \"version\" : n, (numeric) The block version\n"
" \"versionHex\" : \"00000000\", (string) The block version formatted in hexadecimal\n"
diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp
index 4c4e599781..92ca4bab6b 100644
--- a/src/rpc/mining.cpp
+++ b/src/rpc/mining.cpp
@@ -224,7 +224,7 @@ UniValue getmininginfo(const UniValue& params, bool fHelp)
"{\n"
" \"blocks\": nnn, (numeric) The current block\n"
" \"currentblocksize\": nnn, (numeric) The last block size\n"
- " \"currentblockcost\": nnn, (numeric) The last block cost\n"
+ " \"currentblockweight\": nnn, (numeric) The last block weight\n"
" \"currentblocktx\": nnn, (numeric) The last block transaction\n"
" \"difficulty\": xxx.xxxxx (numeric) The current difficulty\n"
" \"errors\": \"...\" (string) Current errors\n"
@@ -243,7 +243,7 @@ UniValue getmininginfo(const UniValue& params, bool fHelp)
UniValue obj(UniValue::VOBJ);
obj.push_back(Pair("blocks", (int)chainActive.Height()));
obj.push_back(Pair("currentblocksize", (uint64_t)nLastBlockSize));
- obj.push_back(Pair("currentblockcost", (uint64_t)nLastBlockCost));
+ obj.push_back(Pair("currentblockweight", (uint64_t)nLastBlockWeight));
obj.push_back(Pair("currentblocktx", (uint64_t)nLastBlockTx));
obj.push_back(Pair("difficulty", (double)GetDifficulty()));
obj.push_back(Pair("errors", GetWarnings("statusbar")));
@@ -358,7 +358,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
" ],\n"
" \"fee\": n, (numeric) difference in value between transaction inputs and outputs (in Satoshis); for coinbase transactions, this is a negative Number of the total collected block fees (ie, not including the block subsidy); if key is not present, fee is unknown and clients MUST NOT assume there isn't one\n"
" \"sigops\" : n, (numeric) total SigOps cost, as counted for purposes of block limits; if key is not present, sigop cost is unknown and clients MUST NOT assume it is zero\n"
- " \"cost\" : n, (numeric) total transaction size cost, as counted for purposes of block limits\n"
+ " \"weight\" : n, (numeric) total transaction weight, as counted for purposes of block limits\n"
" \"required\" : true|false (boolean) if provided and true, this transaction must be in the final block\n"
" }\n"
" ,...\n"
@@ -377,7 +377,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
" \"noncerange\" : \"00000000ffffffff\", (string) A range of valid nonces\n"
" \"sigoplimit\" : n, (numeric) cost limit of sigops in blocks\n"
" \"sizelimit\" : n, (numeric) limit of block size\n"
- " \"costlimit\" : n, (numeric) limit of block cost\n"
+ " \"weightlimit\" : n, (numeric) limit of block weight\n"
" \"curtime\" : ttt, (numeric) current timestamp in seconds since epoch (Jan 1 1970 GMT)\n"
" \"bits\" : \"xxx\", (string) compressed target of next block\n"
" \"height\" : n (numeric) The height of the next block\n"
@@ -575,7 +575,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
int index_in_template = i - 1;
entry.push_back(Pair("fee", pblocktemplate->vTxFees[index_in_template]));
entry.push_back(Pair("sigops", pblocktemplate->vTxSigOpsCost[index_in_template]));
- entry.push_back(Pair("cost", GetTransactionCost(tx)));
+ entry.push_back(Pair("weight", GetTransactionWeight(tx)));
transactions.push_back(entry);
}
@@ -659,7 +659,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
result.push_back(Pair("noncerange", "00000000ffffffff"));
result.push_back(Pair("sigoplimit", (int64_t)MAX_BLOCK_SIGOPS_COST));
result.push_back(Pair("sizelimit", (int64_t)MAX_BLOCK_SERIALIZED_SIZE));
- result.push_back(Pair("costlimit", (int64_t)MAX_BLOCK_COST));
+ result.push_back(Pair("weightlimit", (int64_t)MAX_BLOCK_WEIGHT));
result.push_back(Pair("curtime", pblock->GetBlockTime()));
result.push_back(Pair("bits", strprintf("%08x", pblock->nBits)));
result.push_back(Pair("height", (int64_t)(pindexPrev->nHeight+1)));
diff --git a/src/txmempool.cpp b/src/txmempool.cpp
index a48a6d9465..691baa6744 100644
--- a/src/txmempool.cpp
+++ b/src/txmempool.cpp
@@ -28,7 +28,7 @@ CTxMemPoolEntry::CTxMemPoolEntry(const CTransaction& _tx, const CAmount& _nFee,
hadNoDependencies(poolHasNoInputsOf), inChainInputValue(_inChainInputValue),
spendsCoinbase(_spendsCoinbase), sigOpCost(_sigOpsCost), lockPoints(lp)
{
- nTxCost = GetTransactionCost(_tx);
+ nTxWeight = GetTransactionWeight(_tx);
nModSize = _tx.CalculateModifiedSize(GetTxSize());
nUsageSize = RecursiveDynamicUsage(*tx) + memusage::DynamicUsage(tx);
@@ -75,7 +75,7 @@ void CTxMemPoolEntry::UpdateLockPoints(const LockPoints& lp)
size_t CTxMemPoolEntry::GetTxSize() const
{
- return GetVirtualTransactionSize(nTxCost);
+ return GetVirtualTransactionSize(nTxWeight);
}
// Update the given tx for any in-mempool descendants.
diff --git a/src/txmempool.h b/src/txmempool.h
index e5a500e19d..2c2127f326 100644
--- a/src/txmempool.h
+++ b/src/txmempool.h
@@ -78,7 +78,7 @@ class CTxMemPoolEntry
private:
std::shared_ptr<const CTransaction> tx;
CAmount nFee; //!< Cached to avoid expensive parent-transaction lookups
- size_t nTxCost; //!< ... and avoid recomputing tx cost (also used for GetTxSize())
+ size_t nTxWeight; //!< ... and avoid recomputing tx weight (also used for GetTxSize())
size_t nModSize; //!< ... and modified size for priority
size_t nUsageSize; //!< ... and total memory usage
int64_t nTime; //!< Local time when entering the mempool
@@ -122,7 +122,7 @@ public:
double GetPriority(unsigned int currentHeight) const;
const CAmount& GetFee() const { return nFee; }
size_t GetTxSize() const;
- size_t GetTxCost() const { return nTxCost; }
+ size_t GetTxWeight() const { return nTxWeight; }
int64_t GetTime() const { return nTime; }
unsigned int GetHeight() const { return entryHeight; }
bool WasClearAtEntry() const { return hadNoDependencies; }
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index 46ed542158..a76085de30 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -2356,7 +2356,7 @@ bool CWallet::CreateTransaction(const vector<CRecipient>& vecSend, CWalletTx& wt
*static_cast<CTransaction*>(&wtxNew) = CTransaction(txNew);
// Limit size
- if (GetTransactionCost(txNew) >= MAX_STANDARD_TX_COST)
+ if (GetTransactionWeight(txNew) >= MAX_STANDARD_TX_WEIGHT)
{
strFailReason = _("Transaction too large");
return false;
@@ -3299,6 +3299,9 @@ bool CWallet::InitLoadWallet()
key.MakeNewKey(true);
if (!walletInstance->SetHDMasterKey(key))
throw std::runtime_error("CWallet::GenerateNewKey(): Storing master key failed");
+
+ // ensure this wallet.dat can only be opened by clients supporting HD
+ walletInstance->SetMinVersion(FEATURE_HD);
}
CPubKey newDefaultKey;
if (walletInstance->GetKeyFromPool(newDefaultKey)) {
diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h
index e9d669a7d1..3a3cb6d851 100644
--- a/src/wallet/wallet.h
+++ b/src/wallet/wallet.h
@@ -78,7 +78,8 @@ enum WalletFeature
FEATURE_WALLETCRYPT = 40000, // wallet encryption
FEATURE_COMPRPUBKEY = 60000, // compressed public keys
- FEATURE_LATEST = 60000
+ FEATURE_HD = 130000, // Hierarchical key derivation after BIP32 (HD Wallet)
+ FEATURE_LATEST = FEATURE_COMPRPUBKEY // HD is optional, use FEATURE_COMPRPUBKEY as latest version
};