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.
251-------------------------253Bitcoind can now (optionally) asynchronously notify clients through a254ZMQ-based PUB socket of the arrival of new transactions and blocks.255This feature requires installation of the ZMQ C API library 4.x and256configuring its use through the command line or configuration file.257Please see [docs/zmq.md](/doc/zmq.md) for details of operation.259Wallet: Transaction fees260------------------------262Various improvements have been made to how the wallet calculates263transaction fees.265Users can decide to pay a predefined fee rate by setting `-paytxfee=<n>`266(or `settxfee <n>` rpc during runtime). A value of `n=0` signals Bitcoin267Core to use floating fees. By default, Bitcoin Core will use floating268fees.270Based on past transaction data, floating fees approximate the fees271required to get into the `m`th block from now. This is configurable272with `-txconfirmtarget=<m>` (default: `2`).274Sometimes, it is not possible to give good estimates, or an estimate275at all. Therefore, a fallback value can be set with `-fallbackfee=<f>`276(default: `0.0002` BTC/kB).278At all times, Bitcoin Core will cap fees at `-maxtxfee=<x>` (default:2790.10) BTC.280Furthermore, Bitcoin Core will never create transactions paying less than281the current minimum relay fee.282Finally, a user can set the minimum fee rate for all transactions with283`-mintxfee=<i>`, which defaults to 1000 satoshis per kB.285Wallet: Negative confirmations and conflict detection286-----------------------------------------------------288The wallet will now report a negative number for confirmations that indicates289how deep in the block chain the conflict is found. For example, if a transaction290A has 5 confirmations and spends the same input as a wallet transaction B, B291will be reported as having -5 confirmations. If another wallet transaction C292spends an output from B, it will also be reported as having -5 confirmations.293To detect conflicts with historical transactions in the chain a one-time294`-rescan` may be needed.296Unlike earlier versions, unconfirmed but non-conflicting transactions will never297get a negative confirmation count. They are not treated as spendable unless298they're coming from ourself (change) and accepted into our local mempool,299however. The new "trusted" field in the `listtransactions` RPC output300indicates whether outputs of an unconfirmed transaction are considered301spendable.303Wallet: Merkle branches removed304-------------------------------306Previously, every wallet transaction stored a Merkle branch to prove its307presence in blocks. This wasn't being used for more than an expensive308sanity check. Since 0.12, these are no longer stored. When loading a3090.12 wallet into an older version, it will automatically rescan to avoid310failed checks.312Wallet: Pruning313---------------315With 0.12 it is possible to use wallet functionality in pruned mode.316This can reduce the disk usage from currently around 60 GB to317around 2 GB.319However, rescans as well as the RPCs `importwallet`, `importaddress`,320`importprivkey` are disabled.322To enable block pruning set `prune=<N>` on the command line or in323`bitcoin.conf`, where `N` is the number of MiB to allot for324raw block & undo data.326A value of 0 disables pruning. The minimal value above 0 is 550. Your327wallet is as secure with high values as it is with low ones. Higher328values merely ensure that your node will not shut down upon blockchain329reorganizations of more than 2 days - which are unlikely to happen in330practice. In future releases, a higher value may also help the network331as a whole: stored blocks could be served to other nodes.333For further information about pruning, you may also consult the [release334notes of v0.11.0](https://github.com/bitcoin/bitcoin/blob/v0.11.0/doc/release-notes.md#block-file-pruning).336`NODE_BLOOM` service bit337------------------------339Support for the `NODE_BLOOM` service bit, as described in [BIP340111](https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki), has been341added to the P2P protocol code.343BIP 111 defines a service bit to allow peers to advertise that they support344bloom filters (such as used by SPV clients) explicitly. It also bumps the protocol345version to allow peers to identify old nodes which allow bloom filtering of the346connection despite lacking the new service bit.348In this version, it is only enforced for peers that send protocol versions349`>=70011`. For the next major version it is planned that this restriction will be350removed. It is recommended to update SPV clients to check for the `NODE_BLOOM`351service bit for nodes that report versions newer than 70011.353Option parsing behavior354-----------------------356Command line options are now parsed strictly in the order in which they are357specified. It used to be the case that `-X -noX` ends up, unintuitively, with X358set, as `-X` had precedence over `-noX`. This is no longer the case. Like for359other software, the last specified value for an option will hold.361RPC: Low-level API changes362--------------------------364- Monetary amounts can be provided as strings. This means that for example the365argument to sendtoaddress can be "0.0001" instead of 0.0001. This can be an366advantage if a JSON library insists on using a lossy floating point type for367numbers, which would be dangerous for monetary amounts.369* The `asm` property of each scriptSig now contains the decoded signature hash370type for each signature that provides a valid defined hash type.372* OP_NOP2 has been renamed to OP_CHECKLOCKTIMEVERIFY by [BIP 65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki)374The following items contain assembly representations of scriptSig signatures375and are affected by this change:377- RPC `getrawtransaction`378- RPC `decoderawtransaction`379- RPC `decodescript`380- REST `/rest/tx/` (JSON format)381- REST `/rest/block/` (JSON format when including extended tx details)382- `bitcoin-tx -json`384For example, the `scriptSig.asm` property of a transaction input that385previously showed an assembly representation of:387304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c509001 400000 OP_NOP2389now shows as:391304502207fa7a6d1e0ee81132a269ad84e68d695483745cde8b541e3bf630749894e342a022100c1f7ab20e13e22fb95281a870f3dcf38d782e53023ee313d741ad0cfbc0c5090[ALL] 400000 OP_CHECKLOCKTIMEVERIFY393Note that the output of the RPC `decodescript` did not change because it is394configured specifically to process scriptPubKey and not scriptSig scripts.396RPC: SSL support dropped397------------------------399SSL support for RPC, previously enabled by the option `rpcssl` has been dropped400from both the client and the server. This was done in preparation for removing401the dependency on OpenSSL for the daemon completely.403Trying to use `rpcssl` will result in an error:405Error: SSL mode for RPC (-rpcssl) is no longer supported.407If you are one of the few people that relies on this feature, a flexible408migration path is to use `stunnel`. This is an utility that can tunnel409arbitrary TCP connections inside SSL. On e.g. Ubuntu it can be installed with:411sudo apt-get install stunnel4413Then, to tunnel a SSL connection on 28332 to a RPC server bound on localhost on port 18332 do:415stunnel -d 28332 -r 127.0.0.1:18332 -p stunnel.pem -P ''417It can also be set up system-wide in inetd style.419Another way to re-attain SSL would be to setup a httpd reverse proxy. This solution420would allow the use of different authentication, loadbalancing, on-the-fly compression and421caching. A sample config for apache2 could look like:423Listen 443425NameVirtualHost *:443426<VirtualHost *:443>428SSLEngine On429SSLCertificateFile /etc/apache2/ssl/server.crt430SSLCertificateKeyFile /etc/apache2/ssl/server.key432<Location /bitcoinrpc>433ProxyPass http://127.0.0.1:8332/434ProxyPassReverse http://127.0.0.1:8332/435# optional enable digest auth436# AuthType Digest437# ...439# optional bypass bitcoind rpc basic auth440# RequestHeader set Authorization "Basic <hash>"441# get the <hash> from the shell with: base64 <<< bitcoinrpc:<password>442</Location>444# Or, balance the load:445# ProxyPass / balancer://balancer_cluster_name447</VirtualHost>449Mining Code Changes450-------------------452The mining code in 0.12 has been optimized to be significantly faster and use less453memory. As part of these changes, consensus critical calculations are cached on a454transaction's acceptance into the mempool and the mining code now relies on the455consistency of the mempool to assemble blocks. However all blocks are still tested456for validity after assembly.458Other P2P Changes459-----------------461The list of banned peers is now stored on disk rather than in memory.462Restarting bitcoind will no longer clear out the list of banned peers; instead463a new RPC call (`clearbanned`) can be used to manually clear the list. The new464`setban` RPC call can also be used to manually ban or unban a peer.4660.12.0 Change log467=================469Detailed release notes follow. This overview includes changes that affect470behavior, not code moves, refactors and string updates. For convenience in locating471the code changes and accompanying discussion, both the pull request and472git merge commit are mentioned.474### RPC and REST476- #6121 `466f0ea` Convert entire source tree from json_spirit to UniValue (Jonas Schnelli)477- #6234 `d38cd47` fix rpcmining/getblocktemplate univalue transition logic error (Jonas Schnelli)478- #6239 `643114f` Don't go through double in AmountFromValue and ValueFromAmount (Wladimir J. van der Laan)479- #6266 `ebab5d3` Fix univalue handling of \u0000 characters. (Daniel Kraft)480- #6276 `f3d4dbb` Fix getbalance * 0 (Tom Harding)481- #6257 `5ebe7db` Add `paytxfee` and `errors` JSON fields where appropriate (Stephen)482- #6271 `754aae5` New RPC command disconnectnode (Alex van der Peet)483- #6158 `0abfa8a` Add setban/listbanned RPC commands (Jonas Schnelli)484- #6307 `7ecdcd9` rpcban fixes (Jonas Schnelli)485- #6290 `5753988` rpc: make `gettxoutsettinfo` run lock-free (Wladimir J. van der Laan)486- #6262 `247b914` Return all available information via RPC call "validateaddress" (dexX7)487- #6339 `c3f0490` UniValue: don't escape solidus, keep espacing of reverse solidus (Jonas Schnelli)488- #6353 `6bcb0a2` Show softfork status in getblockchaininfo (Wladimir J. van der Laan)489- #6247 `726e286` Add getblockheader RPC call (Peter Todd)490- #6362 `d6db115` Fix null id in RPC response during startup (Forrest Voight)491- #5486 `943b322` [REST] JSON support for /rest/headers (Jonas Schnelli)492- #6379 `c52e8b3` rpc: Accept scientific notation for monetary amounts in JSON (Wladimir J. van der Laan)493- #6388 `fd5dfda` rpc: Implement random-cookie based authentication (Wladimir J. van der Laan)494- #6457 `3c923e8` Include pruned state in chaininfo.json (Simon Males)495- #6456 `bfd807f` rpc: Avoid unnecessary parsing roundtrip in number formatting, fix locale issue (Wladimir J. van der Laan)496- #6380 `240b30e` rpc: Accept strings in AmountFromValue (Wladimir J. van der Laan)497- #6346 `6bb2805` Add OP_RETURN support in createrawtransaction RPC call, add tests. (paveljanik)498- #6013 `6feeec1` [REST] Add memory pool API (paveljanik)499- #6576 `da9beb2` Stop parsing JSON after first finished construct. (Daniel Kraft)500- #5677 `9aa9099` libevent-based http server (Wladimir J. van der Laan)
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.