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.
502- The GUI Peers window no longer displays a "Ban Score" field. This is part of503changes in 0.20.1 and in this release to the handling of misbehaving504peers. Refer to "Changes regarding misbehaving peers" in the 0.20.1 release505notes for details. (#19512)507Low-level changes508=================510RPC511---513- To make RPC `sendtoaddress` more consistent with `sendmany` the following error514`sendtoaddress` codes were changed from `-4` to `-6`:515- Insufficient funds516- Fee estimation failed517- Transaction has too long of a mempool chain519- The `sendrawtransaction` error code for exceeding `maxfeerate` has been changed from520`-26` to `-25`. The error string has been changed from "absurdly-high-fee" to521"Fee exceeds maximum configured by user (e.g. -maxtxfee, maxfeerate)." The522`testmempoolaccept` RPC returns `max-fee-exceeded` rather than `absurdly-high-fee`523as the `reject-reason`. (#19339)525- To make wallet and rawtransaction RPCs more consistent, the error message for526exceeding maximum feerate has been changed to "Fee exceeds maximum configured by user527(e.g. -maxtxfee, maxfeerate)." (#19339)529Tests530-----532- The BIP 325 default signet can be enabled by the `-chain=signet` or `-signet`533setting. The settings `-signetchallenge` and `-signetseednode` allow534enabling a custom signet.536- The `generateblock` RPC allows testers using regtest mode to537generate blocks that consist of a custom set of transactions. (#17693)5390.21.0 change log540=================542### Consensus543- #18267 BIP-325: Signet (kallewoof)544- #20016 uint256: 1 is a constant (ajtowns)545- #20006 Fix misleading error message: Clean stack rule (sanket1729)546- #19953 Implement BIP 340-342 validation (Schnorr/taproot/tapscript) (sipa)547- #20169 Taproot follow-up: Make ComputeEntrySchnorr and ComputeEntryECDSA const to clarify contract (practicalswift)549### Policy550- #18766 Disable fee estimation in blocksonly mode (darosior)551- #19630 Cleanup fee estimation code (darosior)552- #20165 Only relay Taproot spends if next block has it active (sipa)554### Mining555- #17946 Fix GBT: Restore "!segwit" and "csv" to "rules" key (luke-jr)557### Privacy558- #16432 Add privacy to the Overview page (hebasto)559- #18861 Do not answer GETDATA for to-be-announced tx (sipa)560- #18038 Mempool tracks locally submitted transactions to improve wallet privacy (amitiuttarwar)561- #19109 Only allow getdata of recently announced invs (sipa)563### Block and transaction handling564- #17737 Add ChainstateManager, remove BlockManager global (jamesob)565- #18960 indexes: Add compact block filter headers cache (jnewbery)566- #13204 Faster sigcache nonce (JeremyRubin)567- #19088 Use std::chrono throughout some validation functions (fanquake)568- #19142 Make VerifyDB level 4 interruptible (MarcoFalke)569- #17994 Flush undo files after last block write (kallewoof)570- #18990 log: Properly log txs rejected from mempool (MarcoFalke)571- #18984 Remove unnecessary input blockfile SetPos (dgenr8)572- #19526 log: Avoid treating remote misbehvior as local system error (MarcoFalke)573- #18044 Use wtxid for transaction relay (sdaftuar)574- #18637 coins: allow cache resize after init (jamesob)575- #19854 Avoid locking CTxMemPool::cs recursively in simple cases (hebasto)576- #19478 Remove CTxMempool::mapLinks data structure member (JeremyRubin)577- #19927 Reduce direct `g_chainman` usage (dongcarl)578- #19898 log: print unexpected version warning in validation log category (n-thumann)579- #20036 signet: Add assumed values for default signet (MarcoFalke)580- #20048 chainparams: do not log signet startup messages for other chains (jonatack)581- #19339 re-delegate absurd fee checking from mempool to clients (glozow)582- #20035 signet: Fix uninitialized read in validation (MarcoFalke)583- #20157 Bugfix: chainparams: Add missing (always enabled) Taproot deployment for Signet (luke-jr)584- #20263 Update assumed chain params (MarcoFalke)585- #20372 Avoid signed integer overflow when loading a mempool.dat file with a malformed time field (practicalswift)586- #18621 script: Disallow silent bool -> cscript conversion (MarcoFalke)587- #18612, #18732 script: Remove undocumented and unused operator+ (MarcoFalke)588- #19317 Add a left-justified width field to `log2_work` component for a uniform debug.log output (jamesgmorgan)590### P2P protocol and network code591- #18544 Limit BIP37 filter lifespan (active between `filterload`..`filterclear`) (theStack)592- #18806 Remove is{Empty,Full} flags from CBloomFilter, clarify CVE fix (theStack)593- #18512 Improve asmap checks and add sanity check (sipa)594- #18877 Serve cfcheckpt requests (jnewbery)595- #18895 Unbroadcast followups: rpcs, nLastResend, mempool sanity check (gzhao408)596- #19010 net processing: Add support for `getcfheaders` (jnewbery)597- #16939 Delay querying DNS seeds (ajtowns)598- #18807 Unbroadcast follow-ups (amitiuttarwar)599- #19044 Add support for getcfilters (jnewbery)600- #19084 improve code documentation for dns seed behaviour (ajtowns)601- #19260 disconnect peers that send filterclear + update existing filter msg disconnect logic (gzhao408)602- #19284 Add seed.bitcoin.wiz.biz to DNS seeds (wiz)603- #19322 split PushInventory() (jnewbery)604- #19204 Reduce inv traffic during IBD (MarcoFalke)605- #19470 banlist: log post-swept banlist size at startup (fanquake)606- #19191 Extract download permission from noban (MarcoFalke)607- #14033 Drop `CADDR_TIME_VERSION` checks now that `MIN_PEER_PROTO_VERSION` is greater (Empact)608- #19464 net, rpc: remove -banscore option, deprecate banscore in getpeerinfo (jonatack)609- #19514 [net/net processing] check banman pointer before dereferencing (jnewbery)610- #19512 banscore updates to gui, tests, release notes (jonatack)611- #19360 improve encapsulation of CNetAddr (vasild)612- #19217 disambiguate block-relay-only variable names from blocksonly variables (glowang)613- #19473 Add -networkactive option (hebasto)614- #19472 [net processing] Reduce `cs_main` scope in MaybeDiscourageAndDisconnect() (jnewbery)615- #19583 clean up Misbehaving() (jnewbery)616- #19534 save the network type explicitly in CNetAddr (vasild)617- #19569 Enable fetching of orphan parents from wtxid peers (sipa)618- #18991 Cache responses to GETADDR to prevent topology leaks (naumenkogs)619- #19596 Deduplicate parent txid loop of requested transactions and missing parents of orphan transactions (sdaftuar)620- #19316 Cleanup logic around connection types (amitiuttarwar)621- #19070 Signal support for compact block filters with `NODE_COMPACT_FILTERS` (jnewbery)622- #19705 Shrink CAddress from 48 to 40 bytes on x64 (vasild)623- #19704 Move ProcessMessage() to PeerLogicValidation (jnewbery)624- #19628 Change CNetAddr::ip to have flexible size (vasild)625- #19797 Remove old check for 3-byte shifted IP addresses from pre-0.2.9 nodes (#19797)626- #19607 Add Peer struct for per-peer data in net processing (jnewbery)627- #19857 improve nLastBlockTime and nLastTXTime documentation (jonatack)628- #19724 Cleanup connection types- followups (amitiuttarwar)629- #19670 Protect localhost and block-relay-only peers from eviction (sdaftuar)630- #19728 Increase the ip address relay branching factor for unreachable networks (sipa)631- #19879 Miscellaneous wtxid followups (amitiuttarwar)632- #19697 Improvements on ADDR caching (naumenkogs)633- #17785 Unify Send and Receive protocol versions (hebasto)634- #19845 CNetAddr: add support to (un)serialize as ADDRv2 (vasild)635- #19107 Move all header verification into the network layer, extend logging (troygiorshev)636- #20003 Exit with error message if -proxy is specified without arguments (instead of continuing without proxy server) (practicalswift)637- #19991 Use alternative port for incoming Tor connections (hebasto)638- #19723 Ignore unknown messages before VERACK (sdaftuar)639- #19954 Complete the BIP155 implementation and upgrade to TORv3 (vasild)640- #20119 BIP155 follow-ups (sipa)641- #19988 Overhaul transaction request logic (sipa)642- #17428 Try to preserve outbound block-relay-only connections during restart (hebasto)643- #19911 Guard `vRecvGetData` with `cs_vRecv` and `orphan_work_set` with `g_cs_orphans` (narula)644- #19753 Don't add AlreadyHave transactions to recentRejects (troygiorshev)645- #20187 Test-before-evict bugfix and improvements for block-relay-only peers (sdaftuar)646- #20237 Hardcoded seeds update for 0.21 (laanwj)647- #20212 Fix output of peer address in version message (vasild)648- #20284 Ensure old versions don't parse peers.dat (vasild)649- #20405 Avoid calculating onion address checksum when version is not 3 (lontivero)650- #20564 Don't send 'sendaddrv2' to pre-70016 software, and send before 'verack' (sipa)651- #20660 Move signet onion seed from v2 to v3 (Sjors)653### Wallet654- #18262 Exit selection when `best_waste` is 0 (achow101)655- #17824 Prefer full destination groups in coin selection (fjahr)656- #17219 Allow transaction without change if keypool is empty (Sjors)657- #15761 Replace -upgradewallet startup option with upgradewallet RPC (achow101)658- #18671 Add BlockUntilSyncedToCurrentChain to dumpwallet (MarcoFalke)659- #16528 Native Descriptor Wallets using DescriptorScriptPubKeyMan (achow101)660- #18777 Recommend absolute path for dumpwallet (MarcoFalke)661- #16426 Reverse `cs_main`, `cs_wallet` lock order and reduce `cs_main` locking (ariard)662- #18699 Avoid translating RPC errors (MarcoFalke)663- #18782 Make sure no DescriptorScriptPubKeyMan or WalletDescriptor members are left uninitialized after construction (practicalswift)664- #9381 Remove CWalletTx merging logic from AddToWallet (ryanofsky)665- #16946 Include a checksum of encrypted private keys (achow101)666- #17681 Keep inactive seeds after sethdseed and derive keys from them as needed (achow101)667- #18918 Move salvagewallet into wallettool (achow101)668- #14988 Fix for confirmed column in csv export for payment to self transactions (benthecarman)669- #18275 Error if an explicit fee rate was given but the needed fee rate differed (kallewoof)670- #19054 Skip hdKeypath of 'm' when determining inactive hd seeds (achow101)671- #17938 Disallow automatic conversion between disparate hash types (Empact)672- #19237 Check size after unserializing a pubkey (elichai)673- #11413 sendtoaddress/sendmany: Add explicit feerate option (kallewoof)674- #18850 Fix ZapSelectTx to sync wallet spends (bvbfan)675- #18923 Never schedule MaybeCompactWalletDB when `-flushwallet` is off (MarcoFalke)676- #19441 walletdb: Don't reinitialize desc cache with multiple cache entries (achow101)677- #18907 walletdb: Don't remove database transaction logs and instead error (achow101)678- #19334 Introduce WalletDatabase abstract class (achow101)679- #19335 Cleanup and separate BerkeleyDatabase and BerkeleyBatch (achow101)680- #19102 Introduce and use DummyDatabase instead of dummy BerkeleyDatabase (achow101)681- #19568 Wallet should not override signing errors (fjahr)682- #17204 Do not turn `OP_1NEGATE` in scriptSig into `0x0181` in signing code (sipa) (meshcollider)683- #19457 Cleanup wallettool salvage and walletdb extraneous declarations (achow101)684- #15937 Add loadwallet and createwallet `load_on_startup` options (ryanofsky)685- #16841 Replace GetScriptForWitness with GetScriptForDestination (meshcollider)686- #14582 always do avoid partial spends if fees are within a specified range (kallewoof)687- #19743 -maxapsfee follow-up (kallewoof)688- #19289 GetWalletTx and IsMine require `cs_wallet` lock (promag)689- #19671 Remove -zapwallettxes (achow101)690- #19805 Avoid deserializing unused records when salvaging (achow101)691- #19754 wallet, gui: Reload previously loaded wallets on startup (achow101)692- #19738 Avoid multiple BerkeleyBatch in DelAddressBook (promag)693- #19919 bugfix: make LoadWallet assigns status always (AkioNak)694- #16378 The ultimate send RPC (Sjors)695- #15454 Remove the automatic creation and loading of the default wallet (achow101)696- #19501 `send*` RPCs in the wallet returns the "fee reason" (stackman27)697- #20130 Remove db mode string (S3RK)698- #19077 Add sqlite as an alternative wallet database and use it for new descriptor wallets (achow101)699- #20125 Expose database format in getwalletinfo (promag)700- #20198 Show name, format and if uses descriptors in bitcoin-wallet tool (jonasschnelli)701- #20216 Fix buffer over-read in SQLite file magic check (theStack)702- #20186 Make -wallet setting not create wallets (ryanofsky)703- #20230 Fix bug when just created encrypted wallet cannot get address (hebasto)704- #20282 Change `upgradewallet` return type to be an object (jnewbery)705- #20220 Explicit fee rate follow-ups/fixes for 0.21 (jonatack)706- #20199 Ignore (but warn) on duplicate -wallet parameters (jonasschnelli)707- #20324 Set DatabaseStatus::SUCCESS in MakeSQLiteDatabase (MarcoFalke)708- #20266 Fix change detection of imported internal descriptors (achow101)709- #20153 Do not import a descriptor with hardened derivations into a watch-only wallet (S3RK)710- #20344 Fix scanning progress calculation for single block range (theStack)711- #19502 Bugfix: Wallet: Soft-fail exceptions within ListWalletDir file checks (luke-jr)712- #20378 Fix potential division by 0 in WalletLogPrintf (jonasschnelli)713- #18836 Upgradewallet fixes and additional tests (achow101)714- #20139 Do not return warnings from UpgradeWallet() (stackman27)715- #20305 Introduce `fee_rate` sat/vB param/option (jonatack)716- #20426 Allow zero-fee fundrawtransaction/walletcreatefundedpsbt and other fixes (jonatack)717- #20573 wallet, bugfix: allow send with string `fee_rate` amounts (jonatack)719### RPC and other APIs720- #18574 cli: Call getbalances.ismine.trusted instead of getwalletinfo.balance (jonatack)721- #17693 Add `generateblock` to mine a custom set of transactions (andrewtoth)722- #18495 Remove deprecated migration code (vasild)723- #18493 Remove deprecated "size" from mempool txs (vasild)724- #18467 Improve documentation and return value of settxfee (fjahr)725- #18607 Fix named arguments in documentation (MarcoFalke)726- #17831 doc: Fix and extend getblockstats examples (asoltys)727- #18785 Prevent valgrind false positive in `rest_blockhash_by_height` (ryanofsky)728- #18999 log: Remove "No rpcpassword set" from logs (MarcoFalke)729- #19006 Avoid crash when `g_thread_http` was never started (MarcoFalke)730- #18594 cli: Display multiwallet balances in -getinfo (jonatack)731- #19056 Make gettxoutsetinfo/GetUTXOStats interruptible (MarcoFalke)732- #19112 Remove special case for unknown service flags (MarcoFalke)733- #18826 Expose txinwitness for coinbase in JSON form from RPC (rvagg)734- #19282 Rephrase generatetoaddress help, and use `PACKAGE_NAME` (luke-jr)735- #16377 don't automatically append inputs in walletcreatefundedpsbt (Sjors)736- #19200 Remove deprecated getaddressinfo fields (jonatack)737- #19133 rpc, cli, test: add bitcoin-cli -generate command (jonatack)738- #19469 Deprecate banscore field in getpeerinfo (jonatack)739- #16525 Dump transaction version as an unsigned integer in RPC/TxToUniv (TheBlueMatt)740- #19555 Deduplicate WriteHDKeypath() used in decodepsbt (theStack)741- #19589 Avoid useless mempool query in gettxoutproof (MarcoFalke)742- #19585 RPCResult Type of MempoolEntryDescription should be OBJ (stylesuxx)743- #19634 Document getwalletinfo's `unlocked_until` field as optional (justinmoon)744- #19658 Allow RPC to fetch all addrman records and add records to addrman (jnewbery)745- #19696 Fix addnode remove command error (fjahr)746- #18654 Separate bumpfee's psbt creation function into psbtbumpfee (achow101)747- #19655 Catch listsinceblock `target_confirmations` exceeding block count (adaminsky)748- #19644 Document returned error fields as optional if applicable (theStack)749- #19455 rpc generate: print useful help and error message (jonatack)750- #19550 Add listindices RPC (fjahr)
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.