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.10.0 is now available from:3https://bitcoin.org/bin/0.10.0/5This is a new major version release, bringing both new features and6bug fixes.8Please report bugs using the issue tracker at github:10https://github.com/bitcoin/bitcoin/issues12Upgrading and downgrading13=========================15How to Upgrade16--------------18If you are running an older version, shut it down. Wait until it has completely19shut down (which might take a few minutes for older versions), then run the20installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on Mac) or21bitcoind/bitcoin-qt (on Linux).23Downgrading warning24---------------------26Because release 0.10.0 makes use of headers-first synchronization and parallel27block download (see further), the block files and databases are not28backwards-compatible with older versions of Bitcoin Core or other software:30* Blocks will be stored on disk out of order (in the order they are31received, really), which makes it incompatible with some tools or32other programs. Reindexing using earlier versions will also not work33anymore as a result of this.35* The block index database will now hold headers for which no block is36stored on disk, which earlier versions won't support.38If you want to be able to downgrade smoothly, make a backup of your entire data39directory. Without this your node will need start syncing (or importing from40bootstrap.dat) anew afterwards. It is possible that the data from a completely41synchronised 0.10 node may be usable in older versions as-is, but this is not42supported and may break as soon as the older version attempts to reindex.44This does not affect wallet forward or backward compatibility.47Notable changes48===============50Faster synchronization51----------------------53Bitcoin Core now uses 'headers-first synchronization'. This means that we first54ask peers for block headers (a total of 27 megabytes, as of December 2014) and55validate those. In a second stage, when the headers have been discovered, we56download the blocks. However, as we already know about the whole chain in57advance, the blocks can be downloaded in parallel from all available peers.59In practice, this means a much faster and more robust synchronization. On60recent hardware with a decent network link, it can be as little as 3 hours61for an initial full synchronization. You may notice a slower progress in the62very first few minutes, when headers are still being fetched and verified, but63it should gain speed afterwards.65A few RPCs were added/updated as a result of this:66- `getblockchaininfo` now returns the number of validated headers in addition to67the number of validated blocks.68- `getpeerinfo` lists both the number of blocks and headers we know we have in69common with each peer. While synchronizing, the heights of the blocks that we70have requested from peers (but haven't received yet) are also listed as71'inflight'.72- A new RPC `getchaintips` lists all known branches of the block chain,73including those we only have headers for.75Transaction fee changes76-----------------------78This release automatically estimates how high a transaction fee (or how79high a priority) transactions require to be confirmed quickly. The default80settings will create transactions that confirm quickly; see the new81'txconfirmtarget' setting to control the tradeoff between fees and82confirmation times. Fees are added by default unless the 'sendfreetransactions'83setting is enabled.85Prior releases used hard-coded fees (and priorities), and would86sometimes create transactions that took a very long time to confirm.88Statistics used to estimate fees and priorities are saved in the89data directory in the `fee_estimates.dat` file just before90program shutdown, and are read in at startup.92New command line options for transaction fee changes:93- `-txconfirmtarget=n` : create transactions that have enough fees (or priority)94so they are likely to begin confirmation within n blocks (default: 1). This setting95is over-ridden by the -paytxfee option.96- `-sendfreetransactions` : Send transactions as zero-fee transactions if possible97(default: 0)99New RPC commands for fee estimation:100- `estimatefee nblocks` : Returns approximate fee-per-1,000-bytes needed for101a transaction to begin confirmation within nblocks. Returns -1 if not enough102transactions have been observed to compute a good estimate.103- `estimatepriority nblocks` : Returns approximate priority needed for104a zero-fee transaction to begin confirmation within nblocks. Returns -1 if not105enough free transactions have been observed to compute a good106estimate.108RPC access control changes109--------------------------111Subnet matching for the purpose of access control is now done112by matching the binary network address, instead of with string wildcard matching.113For the user this means that `-rpcallowip` takes a subnet specification, which can be115- a single IP address (e.g. `1.2.3.4` or `fe80::0012:3456:789a:bcde`)116- a network/CIDR (e.g. `1.2.3.0/24` or `fe80::0000/64`)117- a network/netmask (e.g. `1.2.3.4/255.255.255.0` or `fe80::0012:3456:789a:bcde/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff`)119An arbitrary number of `-rpcallow` arguments can be given. An incoming connection will be accepted if its origin address120matches one of them.122For example:124| 0.9.x and before | 0.10.x |125|--------------------------------------------|---------------------------------------|126| `-rpcallowip=192.168.1.1` | `-rpcallowip=192.168.1.1` (unchanged) |127| `-rpcallowip=192.168.1.*` | `-rpcallowip=192.168.1.0/24` |128| `-rpcallowip=192.168.*` | `-rpcallowip=192.168.0.0/16` |129| `-rpcallowip=*` (dangerous!) | `-rpcallowip=::/0` (still dangerous!) |131Using wildcards will result in the rule being rejected with the following error in debug.log:133Error: Invalid -rpcallowip subnet specification: *. Valid are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24).136REST interface137--------------139A new HTTP API is exposed when running with the `-rest` flag, which allows140unauthenticated access to public node data.142It is served on the same port as RPC, but does not need a password, and uses143plain HTTP instead of JSON-RPC.145Assuming a local RPC server running on port 8332, it is possible to request:146- Blocks: http://localhost:8332/rest/block/*HASH*.*EXT*147- Blocks without transactions: http://localhost:8332/rest/block/notxdetails/*HASH*.*EXT*148- Transactions (requires `-txindex`): http://localhost:8332/rest/tx/*HASH*.*EXT*150In every case, *EXT* can be `bin` (for raw binary data), `hex` (for hex-encoded151binary) or `json`.153For more details, see the `doc/REST-interface.md` document in the repository.155RPC Server "Warm-Up" Mode156-------------------------158The RPC server is started earlier now, before most of the expensive159intialisations like loading the block index. It is available now almost160immediately after starting the process. However, until all initialisations161are done, it always returns an immediate error with code -28 to all calls.163This new behaviour can be useful for clients to know that a server is already164started and will be available soon (for instance, so that they do not165have to start it themselves).167Improved signing security168-------------------------170For 0.10 the security of signing against unusual attacks has been171improved by making the signatures constant time and deterministic.173This change is a result of switching signing to use libsecp256k1174instead of OpenSSL. Libsecp256k1 is a cryptographic library175optimized for the curve Bitcoin uses which was created by Bitcoin176Core developer Pieter Wuille.178There exist attacks[1] against most ECC implementations where an179attacker on shared virtual machine hardware could extract a private180key if they could cause a target to sign using the same key hundreds181of times. While using shared hosts and reusing keys are inadvisable182for other reasons, it's a better practice to avoid the exposure.184OpenSSL has code in their source repository for derandomization185and reduction in timing leaks that we've eagerly wanted to use for a186long time, but this functionality has still not made its187way into a released version of OpenSSL. Libsecp256k1 achieves188significantly stronger protection: As far as we're aware this is189the only deployed implementation of constant time signing for190the curve Bitcoin uses and we have reason to believe that191libsecp256k1 is better tested and more thoroughly reviewed192than the implementation in OpenSSL.194[1] https://eprint.iacr.org/2014/161.pdf196Watch-only wallet support197-------------------------199The wallet can now track transactions to and from wallets for which you know200all addresses (or scripts), even without the private keys.202This can be used to track payments without needing the private keys online on a203possibly vulnerable system. In addition, it can help for (manual) construction204of multisig transactions where you are only one of the signers.206One new RPC, `importaddress`, is added which functions similarly to207`importprivkey`, but instead takes an address or script (in hexadecimal) as208argument. After using it, outputs credited to this address or script are209considered to be received, and transactions consuming these outputs will be210considered to be sent.212The following RPCs have optional support for watch-only:213`getbalance`, `listreceivedbyaddress`, `listreceivedbyaccount`,214`listtransactions`, `listaccounts`, `listsinceblock`, `gettransaction`. See the215RPC documentation for those methods for more information.217Compared to using `getrawtransaction`, this mechanism does not require218`-txindex`, scales better, integrates better with the wallet, and is compatible219with future block chain pruning functionality. It does mean that all relevant220addresses need to added to the wallet before the payment, though.222Consensus library223-----------------225Starting from 0.10.0, the Bitcoin Core distribution includes a consensus library.227The purpose of this library is to make the verification functionality that is228critical to Bitcoin's consensus available to other applications, e.g. to language229bindings such as [python-bitcoinlib](https://pypi.python.org/pypi/python-bitcoinlib) or230alternative node implementations.232This library is called `libbitcoinconsensus.so` (or, `.dll` for Windows).233Its interface is defined in the C header [bitcoinconsensus.h](https://github.com/bitcoin/bitcoin/blob/0.10/src/script/bitcoinconsensus.h).235In its initial version the API includes two functions:237- `bitcoinconsensus_verify_script` verifies a script. It returns whether the indicated input of the provided serialized transaction238correctly spends the passed scriptPubKey under additional constraints indicated by flags239- `bitcoinconsensus_version` returns the API version, currently at an experimental `0`241The functionality is planned to be extended to e.g. UTXO management in upcoming releases, but the interface242for existing methods should remain stable.244Standard script rules relaxed for P2SH addresses245------------------------------------------------247The IsStandard() rules have been almost completely removed for P2SH248redemption scripts, allowing applications to make use of any valid249script type, such as "n-of-m OR y", hash-locked oracle addresses, etc.250While the Bitcoin protocol has always supported these types of script,
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.