Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
251should be more likely to get confirmed quickly.253HTTP REST Changes254-----------------256- UTXO set query (`GET /rest/getutxos/<checkmempool>/<txid>-<n>/<txid>-<n>257/.../<txid>-<n>.<bin|hex|json>`) responses were changed to return status258code `HTTP_BAD_REQUEST` (400) instead of `HTTP_INTERNAL_SERVER_ERROR` (500)259when requests contain invalid parameters.261Minimum Fee Rate Policies262-------------------------264Since the changes in 0.12 to automatically limit the size of the mempool and improve the performance of block creation in mining code it has not been important for relay nodes or miners to set `-minrelaytxfee`. With this release the following concepts that were tied to this option have been separated out:265- incremental relay fee used for calculating BIP 125 replacement and mempool limiting. (1000 satoshis/kB)266- calculation of threshold for a dust output. (effectively 3 * 1000 satoshis/kB)267- minimum fee rate of a package of transactions to be included in a block created by the mining code. If miners wish to set this minimum they can use the new `-blockmintxfee` option. (defaults to 1000 satoshis/kB)269The `-minrelaytxfee` option continues to exist but is recommended to be left unset.271Fee Estimation Changes272----------------------274- Since 0.13.2 fee estimation for a confirmation target of 1 block has been275disabled. The fee slider will no longer be able to choose a target of 1 block.276This is only a minor behavior change as there was often insufficient277data for this target anyway. `estimatefee 1` will now always return -1 and278`estimatesmartfee 1` will start searching at a target of 2.280- The default target for fee estimation is changed to 6 blocks in both the GUI281(previously 25) and for RPC calls (previously 2).283Removal of Priority Estimation284------------------------------286- Estimation of "priority" needed for a transaction to be included within a target287number of blocks has been removed. The RPC calls are deprecated and will either288return -1 or 1e24 appropriately. The format for `fee_estimates.dat` has also289changed to no longer save these priority estimates. It will automatically be290converted to the new format which is not readable by prior versions of the291software.293- Support for "priority" (coin age) transaction sorting for mining is294considered deprecated in Core and will be removed in the next major version.295This is not to be confused with the `prioritisetransaction` RPC which will remain296supported by Core for adding fee deltas to transactions.298P2P connection management299--------------------------301- Peers manually added through the `-addnode` option or `addnode` RPC now have their own302limit of eight connections which does not compete with other inbound or outbound303connection usage and is not subject to the limitation imposed by the `-maxconnections`304option.306- New connections to manually added peers are performed more quickly.308Introduction of assumed-valid blocks309-------------------------------------311- A significant portion of the initial block download time is spent verifying312scripts/signatures. Although the verification must pass to ensure the security313of the system, no other result from this verification is needed: If the node314knew the history of a given block were valid it could skip checking scripts315for its ancestors.317- A new configuration option 'assumevalid' is provided to express this knowledge318to the software. Unlike the 'checkpoints' in the past this setting does not319force the use of a particular chain: chains that are consistent with it are320processed quicker, but other chains are still accepted if they'd otherwise321be chosen as best. Also unlike 'checkpoints' the user can configure which322block history is assumed true, this means that even outdated software can323sync more quickly if the setting is updated by the user.325- Because the validity of a chain history is a simple objective fact it is much326easier to review this setting. As a result the software ships with a default327value adjusted to match the current chain shortly before release. The use328of this default value can be disabled by setting -assumevalid=0330Fundrawtransaction change address reuse331----------------------------------------333- Before 0.14, `fundrawtransaction` was by default wallet stateless. In334almost all cases `fundrawtransaction` does add a change-output to the335outputs of the funded transaction. Before 0.14, the used keypool key was336never marked as change-address key and directly returned to the keypool337(leading to address reuse). Before 0.14, calling `getnewaddress`338directly after `fundrawtransaction` did generate the same address as339the change-output address.341- Since 0.14, fundrawtransaction does reserve the change-output-key from342the keypool by default (optional by setting `reserveChangeKey`, default =343`true`)345- Users should also consider using `getrawchangeaddress()` in conjunction346with `fundrawtransaction`'s `changeAddress` option.348Unused mempool memory used by coincache349----------------------------------------351- Before 0.14, memory reserved for mempool (using the `-maxmempool` option)352went unused during initial block download, or IBD. In 0.14, the UTXO DB cache353(controlled with the `-dbcache` option) borrows memory from the mempool354when there is extra memory available. This may result in an increase in355memory usage during IBD for those previously relying on only the `-dbcache`356option to limit memory during that time.3580.14.0 Change log359=================361Detailed release notes follow. This overview includes changes that affect362behavior, not code moves, minor refactors and string updates. For convenience363in locating the code changes and accompanying discussion, both the pull request364and git merge commit are mentioned.366### RPC and other APIs367- #8421 `b77bb95` httpserver: drop boost dependency (theuni)368- #8638 `f061415` rest.cpp: change `HTTP_INTERNAL_SERVER_ERROR` to `HTTP_BAD_REQUEST` (djpnewton)369- #8272 `91990ee` Make the dummy argument to getaddednodeinfo optional (sipa)370- #8722 `bb843ad` bitcoin-cli: More detailed error reporting (laanwj)371- #6996 `7f71a3c` Add preciousblock RPC (sipa)372- #8788 `97c7f73` Give RPC commands more information about the RPC request (jonasschnelli)373- #7948 `5d2c8e5` Augment getblockchaininfo bip9\_softforks data (mruddy)374- #8980 `0e22855` importmulti: Avoid using boost::variant::operator!=, which is only in newer boost versions (luke-jr)375- #9025 `4d8558a` Getrawtransaction should take a bool for verbose (jnewbery)376- #8811 `5754e03` Add support for JSON-RPC named arguments (laanwj)377- #9520 `2456a83` Deprecate non-txindex getrawtransaction and better warning (sipa)378- #9518 `a65ced1` Return height of last block pruned by pruneblockchain RPC (ryanofsky)379- #9222 `7cb024e` Add 'subtractFeeFromAmount' option to 'fundrawtransaction' (dooglus)380- #8456 `2ef52d3` Simplified `bumpfee` command (mrbandrews)381- #9516 `727a798` Bug-fix: listsinceblock: use fork point as reference for blocks in reorg'd chains (kallewoof)382- #9640 `7bfb770` Bumpfee: bugfixes for error handling and feerate calculation (sdaftuar)383- #9673 `8d6447e` Set correct metadata on bumpfee wallet transactions (ryanofsky)384- #9650 `40f7e27` Better handle invalid parameters to signrawtransaction (TheBlueMatt)385- #9682 `edc9e63` Require timestamps for importmulti keys (ryanofsky)386- #9108 `d8e8b06` Use importmulti timestamp when importing watch only keys (on top of #9682) (ryanofsky)387- #9756 `7a93af8` Return error when importmulti called with invalid address (ryanofsky)388- #9778 `ad168ef` Add two hour buffer to manual pruning (morcos)389- #9761 `9828f9a` Use 2 hour grace period for key timestamps in importmulti rescans (ryanofsky)390- #9474 `48d7e0d` Mark the minconf parameter to move as ignored (sipa)391- #9619 `861cb0c` Bugfix: RPC/Mining: GBT should return 1 MB sizelimit before segwit activates (luke-jr)392- #9773 `9072395` Return errors from importmulti if complete rescans are not successful (ryanofsky)394### Block and transaction handling395- #8391 `37d83bb` Consensus: Remove ISM (NicolasDorier)396- #8365 `618c9dd` Treat high-sigop transactions as larger rather than rejecting them (sipa)397- #8814 `14b7b3f` wallet, policy: ParameterInteraction: Don't allow 0 fee (MarcoFalke)398- #8515 `9bdf526` A few mempool removal optimizations (sipa)399- #8448 `101c642` Store mempool and prioritization data to disk (sipa)400- #7730 `3c03dc2` Remove priority estimation (morcos)401- #9111 `fb15610` Remove unused variable `UNLIKELY_PCT` from fees.h (fanquake)402- #9133 `434e683` Unset fImporting for loading mempool (morcos)403- #9179 `b9a87b4` Set `DEFAULT_LIMITFREERELAY` = 0 kB/minute (MarcoFalke)404- #9239 `3fbf079` Disable fee estimates for 1-block target (morcos)405- #7562 `1eef038` Bump transaction version default to 2 (btcdrak)406- #9313,#9367 If we don't allow free txs, always send a fee filter (morcos)407- #9346 `b99a093` Batch construct batches (sipa)408- #9262 `5a70572` Prefer coins that have fewer ancestors, sanity check txn before ATMP (instagibbs)409- #9288 `1ce7ede` Fix a bug if the min fee is 0 for FeeFilterRounder (morcos)410- #9395 `0fc1c31` Add test for `-walletrejectlongchains` (morcos)411- #9107 `7dac1e5` Safer modify new coins (morcos)412- #9312 `a72f76c` Increase mempool expiry time to 2 weeks (morcos)413- #8610 `c252685` Share unused mempool memory with coincache (sipa)414- #9138 `f646275` Improve fee estimation (morcos)415- #9408 `46b249e` Allow shutdown during LoadMempool, dump only when necessary (jonasschnelli)416- #9310 `8c87f17` Assert FRESH validity in CCoinsViewCache::BatchWrite (ryanofsky)417- #7871 `e2e624d` Manual block file pruning (mrbandrews)418- #9507 `0595042` Fix use-after-free in CTxMemPool::removeConflicts() (sdaftuar)419- #9380 `dd98f04` Separate different uses of minimum fees (morcos)420- #9596 `71148b8` bugfix save feeDelta instead of priorityDelta in DumpMempool (morcos)421- #9371 `4a1dc35` Notify on removal (morcos)422- #9519 `9b4d267` Exclude RBF replacement txs from fee estimation (morcos)423- #8606 `e2a1a1e` Fix some locks (sipa)424- #8681 `6898213` Performance Regression Fix: Pre-Allocate txChanged vector (JeremyRubin)425- #8223 `744d265` c++11: Use std::unique\_ptr for block creation (domob1812)426- #9125 `7490ae8` Make CBlock a vector of shared\_ptr of CTransactions (sipa)427- #8930 `93566e0` Move orphan processing to ActivateBestChain (TheBlueMatt)428- #8580 `46904ee` Make CTransaction actually immutable (sipa)429- #9240 `a1dcf2e` Remove txConflicted (morcos)430- #8589 `e8cfe1e` Inline CTxInWitness inside CTxIn (sipa)431- #9349 `2db4cbc` Make CScript (and prevector) c++11 movable (sipa)432- #9252 `ce5c1f4` Release cs\_main before calling ProcessNewBlock, or processing headers (cmpctblock handling) (sdaftuar)433- #9283 `869781c` A few more CTransactionRef optimizations (sipa)434- #9499 `9c9af5a` Use recent-rejects, orphans, and recently-replaced txn for compact-block-reconstruction (TheBlueMatt)435- #9813 `3972a8e` Read/write mempool.dat as a binary (paveljanik)437### P2P protocol and network code438- #8128 `1030fa7` Turn net structures into dumb storage classes (theuni)439- #8282 `026c6ed` Feeler connections to increase online addrs in the tried table (EthanHeilman)440- #8462 `53f8f22` Move AdvertiseLocal debug output to net category (Mirobit)441- #8612 `84decb5` Check for compatibility with download in FindNextBlocksToDownload (sipa)442- #8594 `5b2ea29` Do not add random inbound peers to addrman (gmaxwell)443- #8085 `6423116` Begin encapsulation (theuni)444- #8715 `881d7ea` only delete CConnman if it's been created (theuni)445- #8707 `f07424a` Fix maxuploadtarget setting (theuni)446- #8661 `d2e4655` Do not set an addr time penalty when a peer advertises itself (gmaxwell)447- #8822 `9bc6a6b` Consistent checksum handling (laanwj)448- #8936 `1230890` Report NodeId in misbehaving debug (rebroad)449- #8968 `3cf496d` Don't hold cs\_main when calling ProcessNewBlock from a cmpctblock (TheBlueMatt)450- #9002 `e1d1f57` Make connect=0 disable automatic outbound connections (gmaxwell)451- #9050 `fcf61b8` Make a few values immutable, and use deterministic randomness for the localnonce (theuni)452- #8969 `3665483` Decouple peer-processing-logic from block-connection-logic (#2) (TheBlueMatt)453- #8708 `c8c572f` have CConnman handle message sending (theuni)454- #8709 `1e50d22` Allow filterclear messages for enabling TX relay only (rebroad)455- #9045 `9f554e0` Hash P2P messages as they are received instead of at process-time (TheBlueMatt)456- #9026 `dc6b940` Fix handling of invalid compact blocks (sdaftuar)457- #8996 `ab914a6` Network activity toggle (luke-jr)458- #9131 `62af164` fNetworkActive is not protected by a lock, use an atomic (jonasschnelli)459- #8872 `0c577f2` Remove block-request logic from INV message processing (TheBlueMatt)460- #8690 `791b58d` Do not fully sort all nodes for addr relay (sipa)461- #9128 `76fec09` Decouple CConnman and message serialization (theuni)462- #9226 `3bf06e9` Remove fNetworkNode and pnodeLocalHost (gmaxwell)463- #9352 `a7f7651` Attempt reconstruction from all compact block announcements (sdaftuar)464- #9319 `a55716a` Break addnode out from the outbound connection limits (gmaxwell)465- #9261 `2742568` Add unstored orphans with rejected parents to recentRejects (morcos)466- #9441 `8b66bf7` Massive speedup. Net locks overhaul (theuni)467- #9375 `3908fc4` Relay compact block messages prior to full block connection (TheBlueMatt)468- #9400 `8a445c5` Set peers as HB peers upon full block validation (instagibbs)469- #9561 `6696b46` Wake message handling thread when we receive a new block (TheBlueMatt)470- #9535 `82274c0` Split CNode::cs\_vSend: message processing and message sending (TheBlueMatt)471- #9606 `3f9f962` Consistently use GetTimeMicros() for inactivity checks (sdaftuar)472- #9594 `fd70211` Send final alert message to older peers after connecting (gmaxwell)473- #9626 `36966a1` Clean up a few CConnman cs\_vNodes/CNode things (TheBlueMatt)474- #9609 `4966917` Fix remaining net assertions (theuni)475- #9671 `7821db3` Fix super-unlikely race introduced in 236618061a445d2cb11e72 (TheBlueMatt)476- #9730 `33f3b21` Remove bitseed.xf2.org form the dns seed list (jonasschnelli)477- #9698 `2447c10` Fix socket close race (theuni)478- #9708 `a06ede9` Clean up all known races/platform-specific UB at the time PR was opened (TheBlueMatt)479- #9715 `b08656e` Disconnect peers which we do not receive VERACKs from within 60 sec (TheBlueMatt)480- #9720 `e87ce95` Fix banning and disallow sending messages before receiving verack (theuni)481- #9268 `09c4fd1` Fix rounding privacy leak introduced in #9260 (TheBlueMatt)482- #9075 `9346f84` Decouple peer-processing-logic from block-connection-logic (#3) (TheBlueMatt)483- #8688 `047ded0` Move static global randomizer seeds into CConnman (sipa)484- #9289 `d9ae1ce` net: drop boost::thread\_group (theuni)486### Validation487- #9014 `d04aeba` Fix block-connection performance regression (TheBlueMatt)488- #9299 `d52ce89` Remove no longer needed check for premature v2 txs (morcos)489- #9273 `b68685a` Remove unused `CDiskBlockPos*` argument from ProcessNewBlock (TheBlueMatt)490- #8895 `b83264d` Better SigCache Implementation (JeremyRubin)491- #9490 `e126d0c` Replace FindLatestBefore used by importmulti with FindEarliestAtLeast (gmaxwell)492- #9484 `812714f` Introduce assumevalid setting to skip validation presumed valid scripts (gmaxwell)493- #9511 `7884956` Don't overwrite validation state with corruption check (morcos)494- #9765 `1e92e04` Harden against mistakes handling invalid blocks (sdaftuar)495- #9779 `3c02b95` Update nMinimumChainWork and defaultAssumeValid (gmaxwell)496- #8524 `19b0f33` Precompute sighashes (sipa)497- #9791 `1825a03` Avoid VLA in hash.h (sipa)499### Build system500- #8238 `6caf3ee` ZeroMQ 4.1.5 && ZMQ on Windows (fanquake)
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.