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.
1Bitcoin Core version 0.17.0 is now available from:3<https://bitcoincore.org/bin/bitcoin-core-0.17.0/>5This is a new major version release, including new features, various bugfixes6and performance improvements, as well as updated translations.8Please report bugs using the issue tracker at GitHub:10<https://github.com/bitcoin/bitcoin/issues>12To receive security and update notifications, please subscribe to:14<https://bitcoincore.org/en/list/announcements/join/>16How to Upgrade17==============19If you are running an older version, shut it down. Wait until it has completely20shut down (which might take a few minutes for older versions), then run the21installer (on Windows) or just copy over `/Applications/Bitcoin-Qt` (on Mac)22or `bitcoind`/`bitcoin-qt` (on Linux).24If your node has a txindex, the txindex db will be migrated the first time you run 0.17.0 or newer, which may take up to a few hours. Your node will not be functional until this migration completes.26The first time you run version 0.15.0 or newer, your chainstate database will be converted to a27new format, which will take anywhere from a few minutes to half an hour,28depending on the speed of your machine.30Note that the block database format also changed in version 0.8.0 and there is no31automatic upgrade code from before version 0.8 to version 0.15.0. Upgrading32directly from 0.7.x and earlier without redownloading the blockchain is not supported.33However, as usual, old wallet versions are still supported.35Downgrading warning36-------------------38The chainstate database for this release is not compatible with previous39releases, so if you run 0.15 and then decide to switch back to any40older version, you will need to run the old release with the `-reindex-chainstate`41option to rebuild the chainstate data structures in the old format.43If your node has pruning enabled, this will entail re-downloading and44processing the entire blockchain.46Compatibility47==============49Bitcoin Core is extensively tested on multiple operating systems using50the Linux kernel, macOS 10.10+, and Windows 7 and newer (Windows XP is not supported).52Bitcoin Core should also work on most other Unix-like systems but is not53frequently tested on them.55From 0.17.0 onwards macOS <10.10 is no longer supported. 0.17.0 is built using Qt 5.9.x, which doesn't56support versions of macOS older than 10.10.58Known issues59============61- Upgrading from 0.13.0 or older currently results in memory blow-up during the roll-back of blocks to the SegWit activation point. In these cases, a full `-reindex` is necessary.63- The GUI suffers from visual glitches in the new MacOS dark mode. This has to do with our Qt theme handling and is not a new problem in 0.17.0, but is expected to be resolved in 0.17.1.65Notable changes66===============68Changed configuration options69-----------------------------71- `-includeconf=<file>` can be used to include additional configuration files.72Only works inside the `bitcoin.conf` file, not inside included files or from73command-line. Multiple files may be included. Can be disabled from command-74line via `-noincludeconf`. Note that multi-argument commands like75`-includeconf` will override preceding `-noincludeconf`, i.e.76```77noincludeconf=178includeconf=relative.conf79```81as bitcoin.conf will still include `relative.conf`.83GUI changes84-----------86- Block storage can be limited under Preferences, in the Main tab. Undoing this setting requires downloading the full blockchain again. This mode is incompatible with -txindex and -rescan.88External wallet files89---------------------91The `-wallet=<path>` option now accepts full paths instead of requiring wallets92to be located in the -walletdir directory.94Newly created wallet format95---------------------------97If `-wallet=<path>` is specified with a path that does not exist, it will now98create a wallet directory at the specified location (containing a wallet.dat99data file, a db.log file, and database/log.?????????? files) instead of just100creating a data file at the path and storing log files in the parent101directory. This should make backing up wallets more straightforward than102before because the specified wallet path can just be directly archived without103having to look in the parent directory for transaction log files.105For backwards compatibility, wallet paths that are names of existing data files106in the `-walletdir` directory will continue to be accepted and interpreted the107same as before.109Dynamic loading and creation of wallets110---------------------------------------112Previously, wallets could only be loaded or created at startup, by specifying `-wallet` parameters on the command line or in the bitcoin.conf file. It is now possible to load, create and unload wallets dynamically at runtime:114- Existing wallets can be loaded by calling the `loadwallet` RPC. The wallet can be specified as file/directory basename (which must be located in the `walletdir` directory), or as an absolute path to a file/directory.115- New wallets can be created (and loaded) by calling the `createwallet` RPC. The provided name must not match a wallet file in the `walletdir` directory or the name of a wallet that is currently loaded.116- Loaded wallets can be unloaded by calling the `unloadwallet` RPC.118This feature is currently only available through the RPC interface.120Coin selection121--------------123### Partial spend avoidance125When an address is paid multiple times the coins from those separate payments can be spent separately which hurts privacy due to linking otherwise separate addresses. A new `-avoidpartialspends` flag has been added (default=false). If enabled, the wallet will always spend existing UTXO to the same address together even if it results in higher fees. If someone were to send coins to an address after it was used, those coins will still be included in future coin selections.127Configuration sections for testnet and regtest128----------------------------------------------130It is now possible for a single configuration file to set different131options for different networks. This is done by using sections or by132prefixing the option with the network, such as:134main.uacomment=bitcoin135test.uacomment=bitcoin-testnet136regtest.uacomment=regtest137[main]138mempoolsize=300139[test]140mempoolsize=100141[regtest]142mempoolsize=20144If the following options are not in a section, they will only apply to mainnet:145`addnode=`, `connect=`, `port=`, `bind=`, `rpcport=`, `rpcbind=` and `wallet=`.146The options to choose a network (`regtest=` and `testnet=`) must be specified147outside of sections.149'label' and 'account' APIs for wallet150-------------------------------------152A new 'label' API has been introduced for the wallet. This is intended as a153replacement for the deprecated 'account' API. The 'account' can continue to154be used in V0.17 by starting bitcoind with the '-deprecatedrpc=accounts'155argument, and will be fully removed in V0.18.157The label RPC methods mirror the account functionality, with the following functional differences:159- Labels can be set on any address, not just receiving addresses. This functionality was previously only available through the GUI.160- Labels can be deleted by reassigning all addresses using the `setlabel` RPC method.161- There isn't support for sending transactions _from_ a label, or for determining which label a transaction was sent from.162- Labels do not have a balance.164Here are the changes to RPC methods:166| Deprecated Method | New Method | Notes |167| :---------------------- | :-------------------- | :-----------|168| `getaccount` | `getaddressinfo` | `getaddressinfo` returns a json object with address information instead of just the name of the account as a string. |169| `getaccountaddress` | n/a | There is no replacement for `getaccountaddress` since labels do not have an associated receive address. |170| `getaddressesbyaccount` | `getaddressesbylabel` | `getaddressesbylabel` returns a json object with the addresses as keys, instead of a list of strings. |171| `getreceivedbyaccount` | `getreceivedbylabel` | _no change in behavior_ |172| `listaccounts` | `listlabels` | `listlabels` does not return a balance or accept `minconf` and `watchonly` arguments. |173| `listreceivedbyaccount` | `listreceivedbylabel` | Both methods return new `label` fields, along with `account` fields for backward compatibility. |174| `move` | n/a | _no replacement_ |175| `sendfrom` | n/a | _no replacement_ |176| `setaccount` | `setlabel` | Both methods now: <ul><li>allow assigning labels to any address, instead of raising an error if the address is not receiving address.<li>delete the previous label associated with an address when the final address using that label is reassigned to a different label, instead of making an implicit `getaccountaddress` call to ensure the previous label still has a receiving address. |178| Changed Method | Notes |179| :--------------------- | :------ |180| `addmultisigaddress` | Renamed `account` named parameter to `label`. Still accepts `account` for backward compatibility if running with '-deprecatedrpc=accounts'. |181| `getnewaddress` | Renamed `account` named parameter to `label`. Still accepts `account` for backward compatibility. if running with '-deprecatedrpc=accounts' |182| `listunspent` | Returns new `label` fields. `account` field will be returned for backward compatibility if running with '-deprecatedrpc=accounts' |183| `sendmany` | The `account` named parameter has been renamed to `dummy`. If provided, the `dummy` parameter must be set to the empty string, unless running with the `-deprecatedrpc=accounts` argument (in which case functionality is unchanged). |184| `listtransactions` | The `account` named parameter has been renamed to `dummy`. If provided, the `dummy` parameter must be set to the string `*`, unless running with the `-deprecatedrpc=accounts` argument (in which case functionality is unchanged). |185| `getbalance` | `account`, `minconf` and `include_watchonly` parameters are deprecated, and can only be used if running with '-deprecatedrpc=accounts' |187BIP 174 Partially Signed Bitcoin Transactions support188-----------------------------------------------------190[BIP 174 PSBT](https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki) is an interchange format for Bitcoin transactions that are not fully signed191yet, together with relevant metadata to help entities work towards signing it.192It is intended to simplify workflows where multiple parties need to cooperate to193produce a transaction. Examples include hardware wallets, multisig setups, and194[CoinJoin](https://bitcointalk.org/?topic=279249) transactions.196### Overall workflow198Overall, the construction of a fully signed Bitcoin transaction goes through the199following steps:201- A **Creator** proposes a particular transaction to be created. He constructs202a PSBT that contains certain inputs and outputs, but no additional metadata.203- For each input, an **Updater** adds information about the UTXOs being spent by204the transaction to the PSBT.205- A potentially other Updater adds information about the scripts and public keys206involved in each of the inputs (and possibly outputs) of the PSBT.207- **Signers** inspect the transaction and its metadata to decide whether they208agree with the transaction. They can use amount information from the UTXOs209to assess the values and fees involved. If they agree, they produce a210partial signature for the inputs for which they have relevant key(s).211- A **Finalizer** is run for each input to convert the partial signatures and212possibly script information into a final `scriptSig` and/or `scriptWitness`.213- An **Extractor** produces a valid Bitcoin transaction (in network format)214from a PSBT for which all inputs are finalized.216Generally, each of the above (excluding Creator and Extractor) will simply217add more and more data to a particular PSBT. In a naive workflow, they all have218to operate sequentially, passing the PSBT from one to the next, until the219Extractor can convert it to a real transaction. In order to permit parallel220operation, **Combiners** can be employed which merge metadata from different221PSBTs for the same unsigned transaction.223The names above in bold are the names of the roles defined in BIP174. They're224useful in understanding the underlying steps, but in practice, software and225hardware implementations will typically implement multiple roles simultaneously.227### RPCs229- **`converttopsbt` (Creator)** is a utility RPC that converts an230unsigned raw transaction to PSBT format. It ignores existing signatures.231- **`createpsbt` (Creator)** is a utility RPC that takes a list of inputs and232outputs and converts them to a PSBT with no additional information. It is233equivalent to calling `createrawtransaction` followed by `converttopsbt`.234- **`walletcreatefundedpsbt` (Creator, Updater)** is a wallet RPC that creates a235PSBT with the specified inputs and outputs, adds additional inputs and change236to it to balance it out, and adds relevant metadata. In particular, for inputs237that the wallet knows about (counting towards its normal or watch-only238balance), UTXO information will be added. For outputs and inputs with UTXO239information present, key and script information will be added which the wallet240knows about. It is equivalent to running `createrawtransaction`, followed by241`fundrawtransaction`, and `converttopsbt`.242- **`walletprocesspsbt` (Updater, Signer, Finalizer)** is a wallet RPC that takes as243input a PSBT, adds UTXO, key, and script data to inputs and outputs that miss244it, and optionally signs inputs. Where possible it also finalizes the partial245signatures.246- **`finalizepsbt` (Finalizer, Extractor)** is a utility RPC that finalizes any247partial signatures, and if all inputs are finalized, converts the result to a248fully signed transaction which can be broadcast with `sendrawtransaction`.249- **`combinepsbt` (Combiner)** is a utility RPC that implements a Combiner. It250can be used at any point in the workflow to merge information added to
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.