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.
251different versions of the same PSBT. In particular it is useful to combine the252output of multiple Updaters or Signers.253- **`decodepsbt`** is a diagnostic utility RPC which will show all information in254a PSBT in human-readable form, as well as compute its eventual fee if known.256Upgrading non-HD wallets to HD wallets257--------------------------------------259Since Bitcoin Core 0.13.0, creating new BIP 32 Hierarchical Deterministic wallets has been supported by Bitcoin Core but old non-HD wallets could not be upgraded to HD. Now non-HD wallets can be upgraded to HD using the `-upgradewallet` command line option. This upgrade will result in the all keys in the keypool being marked as used and a new keypool generated. **A new backup must be made when this upgrade is performed.**261Additionally, `-upgradewallet` can be used to upgraded from a non-split HD chain (all keys generated with `m/0'/0'/i'`) to a split HD chain (receiving keys generated with `'m/0'/0'/i'` and change keys generated with `m'/0'/1'/i'`). When this upgrade occurs, all keys already in the keypool will remain in the keypool to be used until all keys from before the upgrade are exhausted. This is to avoid issues with backups and downgrades when some keys may come from the change key keypool. Users can begin using the new split HD chain keypools by using the `newkeypool` RPC to mark all keys in the keypool as used and begin using a new keypool generated from the split HD chain.263HD Master key rotation264----------------------266A new RPC, `sethdseed`, has been introduced which allows users to set a new HD seed or set their own HD seed. This allows for a new HD seed to be used. **A new backup must be made when a new HD seed is set.**268Low-level RPC changes269---------------------271- The new RPC `scantxoutset` can be used to scan the UTXO set for entries272that match certain output descriptors. Refer to the [output descriptors273reference documentation](/doc/descriptors.md) for more details. This call274is similar to `listunspent` but does not use a wallet, meaning that the275wallet can be disabled at compile or run time. This call is experimental,276as such, is subject to changes or removal in future releases.278- The `createrawtransaction` RPC will now accept an array or dictionary (kept for compatibility) for the `outputs` parameter. This means the order of transaction outputs can be specified by the client.279- The `fundrawtransaction` RPC will reject the previously deprecated `reserveChangeKey` option.280- `sendmany` now shuffles outputs to improve privacy, so any previously expected behavior with regards to output ordering can no longer be relied upon.281- The new RPC `testmempoolaccept` can be used to test acceptance of a transaction to the mempool without adding it.282- JSON transaction decomposition now includes a `weight` field which provides283the transaction's exact weight. This is included in REST /rest/tx/ and284/rest/block/ endpoints when in json mode. This is also included in `getblock`285(with verbosity=2), `listsinceblock`, `listtransactions`, and286`getrawtransaction` RPC commands.287- New `fees` field introduced in `getrawmempool`, `getmempoolancestors`, `getmempooldescendants` and288`getmempoolentry` when verbosity is set to `true` with sub-fields `ancestor`, `base`, `modified`289and `descendant` denominated in BTC. This new field deprecates previous fee fields, such as290`fee`, `modifiedfee`, `ancestorfee` and `descendantfee`.291- The new RPC `getzmqnotifications` returns information about active ZMQ292notifications.293- When bitcoin is not started with any `-wallet=<path>` options, the name of294the default wallet returned by `getwalletinfo` and `listwallets` RPCs is295now the empty string `""` instead of `"wallet.dat"`. If bitcoin is started296with any `-wallet=<path>` options, there is no change in behavior, and the297name of any wallet is just its `<path>` string.298- Passing an empty string (`""`) as the `address_type` parameter to299`getnewaddress`, `getrawchangeaddress`, `addmultisigaddress`,300`fundrawtransaction` RPCs is now an error. Previously, this would fall back301to using the default address type. It is still possible to pass null or leave302the parameter unset to use the default address type.304- Bare multisig outputs to our keys are no longer automatically treated as305incoming payments. As this feature was only available for multisig outputs for306which you had all private keys in your wallet, there was generally no use for307them compared to single-key schemes. Furthermore, no address format for such308outputs is defined, and wallet software can't easily send to it. These outputs309will no longer show up in `listtransactions`, `listunspent`, or contribute to310your balance, unless they are explicitly watched (using `importaddress` or311`importmulti` with hex script argument). `signrawtransaction*` also still312works for them.314- The `getwalletinfo` RPC method now returns an `hdseedid` value, which is always the same as the incorrectly-named `hdmasterkeyid` value. `hdmasterkeyid` will be removed in V0.18.315- The `getaddressinfo` RPC method now returns an `hdseedid` value, which is always the same as the incorrectly-named `hdmasterkeyid` value. `hdmasterkeyid` will be removed in V0.18.317- Parts of the `validateaddress` RPC method have been deprecated and moved to318`getaddressinfo`. Clients must transition to using `getaddressinfo` to access319this information before upgrading to v0.18. The following deprecated fields320have moved to `getaddressinfo` and will only be shown with321`-deprecatedrpc=validateaddress`: `ismine`, `iswatchonly`, `script`, `hex`,322`pubkeys`, `sigsrequired`, `pubkey`, `addresses`, `embedded`, `iscompressed`,323`account`, `timestamp`, `hdkeypath`, `hdmasterkeyid`.324- `signrawtransaction` is deprecated and will be fully removed in v0.18. To use325`signrawtransaction` in v0.17, restart bitcoind with326`-deprecatedrpc=signrawtransaction`. Projects should transition to using327`signrawtransactionwithkey` and `signrawtransactionwithwallet` before328upgrading to v0.18.330Other API changes331-----------------333- The `inactivehdmaster` property in the `dumpwallet` output has been corrected to `inactivehdseed`335### Logging337- The log timestamp format is now ISO 8601 (e.g. "2018-02-28T12:34:56Z").339- When running bitcoind with `-debug` but without `-daemon`, logging to stdout340is now the default behavior. Setting `-printtoconsole=1` no longer implicitly341disables logging to debug.log. Instead, logging to file can be explicitly disabled342by setting `-debuglogfile=0`.344Transaction index changes345-------------------------347The transaction index is now built separately from the main node procedure,348meaning the `-txindex` flag can be toggled without a full reindex. If bitcoind349is run with `-txindex` on a node that is already partially or fully synced350without one, the transaction index will be built in the background and become351available once caught up. When switching from running `-txindex` to running352without the flag, the transaction index database will *not* be deleted353automatically, meaning it could be turned back on at a later time without a full354resync.356Miner block size removed357------------------------359The `-blockmaxsize` option for miners to limit their blocks' sizes was360deprecated in V0.15.1, and has now been removed. Miners should use the361`-blockmaxweight` option if they want to limit the weight of their blocks.363Python Support364--------------366Support for Python 2 has been discontinued for all test files and tools.3680.17.0 change log369=================371### Consensus372- #12204 `3fa24bb` Fix overly eager BIP30 bypass (morcos)374### Policy375- #12568 `ed6ae80` Allow dustrelayfee to be set to zero (luke-jr)376- #13120 `ca2a233` Treat segwit as always active (MarcoFalke)377- #13096 `062738c` Fix `MAX_STANDARD_TX_WEIGHT` check (jl2012)379### Mining380- #12693 `df529dc` Remove unused variable in SortForBlock (drewx2)381- #12448 `84efa9a` Interrupt block generation on shutdown request (promag)383### Block and transaction handling384- #12225 `67447ba` Mempool cleanups (sdaftuar)385- #12356 `fd65937` Fix 'mempool min fee not met' debug output (Empact)386- #12287 `bf3353d` Optimise lock behaviour for GuessVerificationProgress() (jonasschnelli)387- #11889 `47a7666` Drop extra script variable in ProduceSignature (ryanofsky)388- #11880 `d59b8d6` Stop special-casing phashBlock handling in validation for TBV (TheBlueMatt)389- #12431 `947c25e` Only call NotifyBlockTip when chainActive changes (jamesob)390- #12653 `534b8fa` Allow to optional specify the directory for the blocks storage (jonasschnelli)391- #12172 `3b62a91` Bugfix: RPC: savemempool: Don't save until LoadMempool() is finished (jtimon)392- #12167 `88430cb` Make segwit failure due to `CLEANSTACK` violation return a `SCRIPT_ERR_CLEANSTACK` error code (maaku)393- #12561 `24133b1` Check for block corruption in ConnectBlock() (sdaftuar)394- #11617 `1b5723e` Avoid lock: Call FlushStateToDisk(…) regardless of fCheckForPruning (practicalswift)395- #11739 `0a8b7b4` Enforce `SCRIPT_VERIFY_P2SH` and `SCRIPT_VERIFY_WITNESS` from genesis (sdaftuar)396- #12885 `a49381d` Reduce implementation code inside CScript (sipa)397- #13032 `34dd1a6` Output values for "min relay fee not met" error (kristapsk)398- #13033 `a07e8ca` Build txindex in parallel with validation (jimpo)399- #13080 `66cc47b` Add compile time checking for ::mempool.cs runtime locking assertions (practicalswift)400- #13185 `08c1caf` Bugfix: the end of a reorged chain is invalid when connect fails (sipa)401- #11689 `0264836` Fix missing locking in CTxMemPool::check(…) and CTxMemPool::setSanityCheck(…) (practicalswift)402- #13011 `3c2a41a` Cache witness hash in CTransaction (MarcoFalke)403- #13191 `0de7cc8` Specialized double-SHA256 with 64 byte inputs with SSE4.1 and AVX2 (sipa)404- #13243 `ea263e1` Make reusable base class for auxiliary indices (jimpo)405- #13393 `a607d23` Enable double-SHA256-for-64-byte code on 32-bit x86 (sipa)406- #13428 `caabdea` validation: check the specified number of blocks (off-by-one) (kallewoof)407- #13438 `450055b` Improve coverage of SHA256 SelfTest code (sipa)408- #13431 `954f4a9` validation: count blocks correctly for check level < 3 (kallewoof)409- #13386 `3a3eabe` SHA256 implementations based on Intel SHA Extensions (sipa)410- #11658 `9a1ad2c` During IBD, when doing pruning, prune 10% extra to avoid pruning again soon after (luke-jr)411- #13794 `8ce55df` chainparams: Update with data from assumed valid chain (MarcoFalke)412- #13527 `e7ea858` Remove promiscuousmempoolflags (MarcoFalke)414### P2P protocol and network code415- #12342 `eaeaa2d` Extend #11583 ("Do not make it trivial for inbound peers to generate log entries") to include "version handshake timeout" message (clemtaylor)416- #12218 `9a32114` Move misbehaving logging to net logging category (laanwj)417- #10387 `5c2aff8` Eventually connect to `NODE_NETWORK_LIMITED` peers (jonasschnelli)418- #9037 `a36834f` Add test-before-evict discipline to addrman (EthanHeilman)419- #12622 `e1d6e2a` Correct addrman logging (laanwj)420- #11962 `0a01843` add seed.bitcoin.sprovoost.nl to DNS seeds (Sjors)421- #12569 `23e7fe8` Increase signal-to-noise ratio in debug.log by adjusting log level when logging failed non-manual connect():s (practicalswift)422- #12855 `c199869` Minor accumulated cleanups (tjps)423- #13153 `ef46c99` Add missing newlines to debug logging (laanwj)424- #13162 `a174702` Don't incorrectly log that REJECT messages are unknown (jnewbery)425- #13151 `7f4db9a` Serve blocks directly from disk when possible (laanwj)426- #13134 `70d3541` Add option `-enablebip61` to configure sending of BIP61 notifications (laanwj)427- #13532 `7209fec` Log warning when deprecated network name 'tor' is used (wodry)428- #13615 `172f984` Remove unused interrupt from SendMessages (fanquake)429- #13417 `1e90862` Tighten scope in `net_processing` (skeees)430- #13298 `f8d470e` Bucketing INV delays (1 bucket) for incoming connections to hide tx time (naumenkogs)431- #13672 `0d8d6be` Modified `in_addr6` cast in CConman class to work with msvc (sipsorcery)432- #11637 `c575260` Remove dead service bits code (MarcoFalke)433- #13212 `a6f00ce` Fixed a race condition when disabling the network (lmanners)434- #13656 `1211b15` Remove the boost/algorithm/string/predicate.hpp dependency (251Labs)435- #13423 `f58674a` Thread safety annotations in `net_processing` (skeees)436- #13776 `7d36237` Add missing verification of IPv6 address in CNetAddr::GetIn6Addr(…) (practicalswift)437- #13907 `48bf8ff` Introduce a maximum size for locators (gmaxwell)438- #13951 `8a9ffec` Hardcoded seeds update pre-0.17 branch (laanwj)440### Wallet441- #12330 `2a30e67` Reduce scope of `cs_main` and `cs_wallet` locks in listtransactions (promag)442- #12298 `a1ffddb` Refactor HaveKeys to early return on false result (promag)443- #12282 `663911e` Disallow abandon of conflicted txes (MarcoFalke)444- #12333 `d405bee` Make CWallet::ListCoins atomic (promag)445- #12296 `8e6f9f4` Only fee-bump non-conflicted/non-confirmed txes (MarcoFalke)446- #11866 `6bb9c13` Do not un-mark fInMempool on wallet txn if ATMP fails (TheBlueMatt)447- #11882 `987a809` Disable default fallbackfee on mainnet (jonasschnelli)448- #9991 `4ca7c1e` listreceivedbyaddress Filter Address (NicolasDorier)449- #11687 `98bc27f` External wallet files (ryanofsky)450- #12658 `af88094` Sanitize some wallet serialization (sipa)451- #9680 `6acd870` Unify CWalletTx construction (ryanofsky)452- #10637 `e057589` Coin Selection with Murch's algorithm (achow101, Xekyo)453- #12408 `c39dd2e` Change output type globals to members (MarcoFalke)454- #12694 `9552dfb` Actually disable BnB when there are preset inputs (achow101)455- #11536 `cead84b` Rename account to label where appropriate (ryanofsky)456- #12709 `02b7e83` shuffle sendmany recipients ordering (instagibbs)457- #12699 `c948dc8` Shuffle transaction inputs before signing (instagibbs)458- #10762 `6d53663` Remove Wallet dependencies from init.cpp (jnewbery)459- #12857 `821980c` Avoid travis lint-include-guards error (ken2812221)460- #12702 `dab0d68` importprivkey: hint about importmulti (kallewoof)461- #12836 `9abdb7c` Make WalletInitInterface and DummyWalletInit private, fix nullptr deref (promag)462- #12785 `215158a` Initialize `m_last_block_processed` to nullptr (practicalswift)463- #12932 `8d651ae` Remove redundant lambda function arg in handleTransactionChanged (laanwj)464- #12749 `a84b056` feebumper: discard change outputs below discard rate (instagibbs)465- #12892 `9b3370d` introduce 'label' API for wallet (jnewbery)466- #12925 `6d3de17` Logprint the start of a rescan (jonasschnelli)467- #12888 `39439e5` debug log number of unknown wallet records on load (instagibbs)468- #12977 `434150a` Refactor `g_wallet_init_interface` to const reference (promag)469- #13017 `65d7083` Add wallets management functions (promag)470- #12953 `d1d54ae` Deprecate accounts (jnewbery)471- #12909 `476cb35` Make fee settings to be non-static members (MarcoFalke)472- #13002 `487dcbe` Do not treat bare multisig outputs as IsMine unless watched (sipa)473- #13028 `783bb64` Make vpwallets usage thread safe (promag)474- #12507 `2afdc29` Interrupt rescan on shutdown request (promag)475- #12729 `979150b` Get rid of ambiguous OutputType::NONE value (ryanofsky)476- #13079 `5778d44` Fix rescanblockchain rpc to properly report progress (Empact)477- #12560 `e03c0db` Upgrade path for non-HD wallets to HD (achow101)478- #13161 `7cc1bd3` Reset BerkeleyDB handle after connection fails (real-or-random)479- #13081 `0dec5b5` Add compile time checking for `cs_wallet` runtime locking assertions (practicalswift)480- #13127 `19a3a9e` Add Clang thread safety annotations for variables guarded by `cs_db` (practicalswift)481- #10740 `4cfe17c` `loadwallet` RPC - load wallet at runtime (jnewbery)482- #12924 `6738813` Fix hdmaster-key / seed-key confusion (scripted diff) (jnewbery)483- #13297 `d82c5d1` Fix incorrect comment for DeriveNewSeed (jnewbery)484- #13063 `6378eef` Use shared pointer to retain wallet instance (promag)485- #13142 `56fe3dc` Separate IsMine from solvability (sipa)486- #13194 `fd96d54` Remove template matching and pseudo opcodes (sipa)487- #13252 `c4cc8d9` Refactor ReserveKeyFromKeyPool for safety (Empact)488- #13058 `343d4e4` `createwallet` RPC - create new wallet at runtime (jnewbery)489- #13351 `2140f6c` Prevent segfault when sending to unspendable witness (MarcoFalke)490- #13060 `3f0f394` Remove getlabeladdress RPC (jnewbery)491- #13111 `000abbb` Add unloadwallet RPC (promag)492- #13160 `868cf43` Unlock spent outputs (promag)493- #13498 `f54f373` Fixups from account API deprecation (jnewbery)494- #13491 `61a044a` Improve handling of INVALID in IsMine (sipa)495- #13425 `028b0d9` Moving final scriptSig construction from CombineSignatures to ProduceSignature (PSBT signer logic) (achow101)496- #13564 `88a15eb` loadwallet shouldn't create new wallets (jnewbery)497- #12944 `619cd29` ScanforWalletTransactions should mark input txns as dirty (instagibbs)498- #13630 `d6b2235` Drop unused pindexRet arg to CMerkleTx::GetDepthInMainChain (Empact)499- #13566 `ad552a5` Fix get balance (jnewbery)500- #13500 `4a3e8c5` Decouple wallet version from client version (achow101)
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.