Bitcoin Knots version 29.4.3.knots20260508 is now available from:
https://bitcoinknots.org/files/29.x/29.4.3.knots20260508/
This release extends the long coinbase maturity softfork deployed in 29.4.2. Please read below for important informed consent on this and upcoming planned changes.
Please report bugs using the issue tracker at GitHub:
https://github.com/bitcoinknots/bitcoin/issues
To receive security and update notifications, please subscribe to:
https://bitcoinknots.org/list/announcements/join/
How to Upgrade
If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes in some cases), then run the installer (on Windows) or just copy over /Applications/Bitcoin-Qt (on macOS) or bitcoind/bitcoin-qt (on Linux).
Upgrading directly from very old versions of Bitcoin Core or Knots is possible, but it might take some time if the data directory needs to be migrated. Old wallet versions of Bitcoin Knots are generally supported.
Nodes and miners should upgrade before block 979919. 29.4.2 treats bitcoins generated by block 979919 and later as mature after only 100 blocks, or 6480 blocks when mining, so from block 980019 a 29.4.2 node may accept blocks this release rejects, and from block 986399 miners still running 29.4.2 may produce them. A 29.4.2 node that upgrades after block 979919 rechecks the blocks from that height at its first start; a node coming from 29.4.1 or another implementation rechecks from block 973440. A pruned node that upgrades late may need to re-sync the blockchain from scratch. You will be asked at startup if this is necessary.
Compatibility
Bitcoin Knots is supported on operating systems using the Linux kernel, macOS 13+, and Windows 10+. It is not recommended to use Bitcoin Knots on unsupported systems.
Known Bugs
In various locations, including the GUI's transaction details dialog and the "vsize" result in many RPC results, transaction virtual sizes may not account for an unusually high number of sigops (ie, as determined by the -bytespersigop policy) or datacarrier penalties (ie, -datacarriercost). This could result in reporting a lower virtual size than is actually used for mempool or mining purposes.
Due to disruption of the shared Bitcoin Transifex repository, this release still does not include updated translations, and Bitcoin Knots may be unable to do so until/unless that is resolved.
Attack Mitigation
Due to attacks from apathetic BLAKE2b incumbents looking to exploit Bitcoin for profit, the community has decided to extend the current (since 2009) 16-hour (100 blocks) maturity lock time on newly mined bitcoins up to 350 days, and possibly make it contingent on actually mining (the attackers are blind hashing instead of mining).
This release retains the 45-day maturity time deployed in 29.4.2 for blocks during that epoch (973440-979918), and additionally delays rewards for bitcoins generated by block 979919 or any later block until RDTS expires (2027 September) for 25920 blocks (about 180 days).
If you are "mining" without running DATUM Gateway yourself, you are NOT actually mining, and are in fact attacking the network. You should expect to never get paid any rewards for that going forward. If you wish to mine properly, set up your own DATUM Gateway and use it for mining. There is volunteer tech support available on the Knots Discord #support channel. Or for basic instructions, see:
https://bitcoinknots.org/learn/mining
Please join and participate in the #strategic Discord channel if you hold any opinion or wish to discuss suggestions/plans on this matter.
https://bitcoinknots.org/social/discord
Notable changes
-
On mainnet,
getdeploymentinfodescribeslong_coinbase_maturityfor the next block. Before block 979919 it reports the rule from 973440 (maturity6480,height_end979919). From block 979919 it reports the 180-day rule:heightis 979919,maturityis 25920, andcoinbase_expiry_timereplacesheight_end. knots#468 -
Data in a conditional part that constants make unreachable now counts as data carrier bytes. This already applied to the
OP_FALSE OP_IF ... OP_ENDIFenvelope; it now also coversOP_1 OP_NOTIF ... OP_ENDIF, guards computed from constants, and the dead part of anOP_ELSE. Scripts that branch on witness data or a signature check are unaffected. The new-rejectdeadbranchesoption (default: 1, reset by-corepolicy) turns this off. knots#400 -
Runs of pushes dropped with
OP_DROP/OP_2DROPnow count as data carrier bytes, as<data> OP_DROPalready did. knots#319 -
Each multisig public key beyond ten per script that no signature in the spend can prove now counts as 33 data carrier bytes, including tapscript multisig. Other pushes in a multisig script, except numbers and hash-lock digests, now count as data too. A transaction with more than two such keys, such as a 1-of-14 or 2-of-15 multisig spend, now exceeds the default
-datacarriersize. knots#422 -
Files stored as fake public keys by the BPUB encoder are now counted as non-standard data carrier, as OLGA already is. The new
-rejectbpuboption (default: 1) turns this off. knots#463 -
Peers not advertising BLAKE2b support are no longer sent headers, blocks or block announcements above block 961631. This includes BIP37 light clients and peers that advertise no services, whitelisted or not. Compatible clients should set the
NODE_BLAKE2Bservice bit. knots#425 -
Coin-age priority selection now respects
blockmintxfee. Transactions below it can still be mined with fee-paying descendants. knots#446 -
With
-mempooltruc=enforce(also set by-corepolicy), ephemeral-dust transactions may now have a negative modified fee from the sub-dust fee penalty; the child must cover the penalty when the package is evaluated. knots#438 -
dumptxoutsetwithrollbacknow works on a copy of the UTXO set instead of invalidating blocks, so the node stays online, and takes a newin_memoryoption. bitcoin#33477 -
bitcoin-cli dumptxoutsetnow takes the snapshot type positionally, as inbitcoin-cli dumptxoutset utxo.dat latest, and a namedformatworks withrollback. knots#472 -
An assumeutxo snapshot is available at height 976000. knots#444
-
On testnet4, the RDTS expiry is extended to 2027 April 1st 00:00 UTC. A node that connected block 152963 or later under the previous expiry checks those blocks again at its first start. Mainnet is unchanged. knots#459
Validation
- knots#468 consensus: 180-day rolling coinbase maturity from height 979919 until RDTS expiry
- knots#441 validation: write the block index before the post-IBD chainstate sync
- bitcoin#33553 validation: Improve warnings in case of chain corruption
- bitcoin#35652 init: fix reindex deadlock by waking cv after interrupt
- knots#459 testnet4: Extend the RDTS expiry to 2027-04-01 and re-check the blocks mined since it lapsed
- knots#444 chainparams: add assumeutxo snapshot at height 976000
Net
- knots#425 Avoid attempting header sync from stale nodes for BLAKE2b blocks
- knots#398 net: prefer NODE_BLAKE2B for every outbound slot, and stop churning
- knots#394 net: Regenerate the mainnet fixed seeds for the BLAKE2b network
- knots#437 chainparams: add seed.thelionpool.org to mainnet vSeeds
- knots#454 net: Check an assumed onion inbound's source address under -v2onlyclearnet
- bitcoin#35691 chainparams: delete sipa's DNS seed
- knots#462 torcontrol: Stop waiting for a launched Tor process on shutdown
- knots#464 torcontrol: Stop the launched Tor process on shutdown
RPC
- bitcoin#35498 net: move cs_main up in FetchBlock to fix rpc assert crash
- bitcoin#33477 Rollback for dumptxoutset without invalidating blocks
- knots#471 rpc: Fix named-only options after a positional and a named parameter
- knots#472 rpc: Fix bitcoin-cli dumptxoutset type, and rollback with a format but no type
Mempool policy
- knots#438 policy: Allow negative modified fees for ephemeral dust
- knots#319 policy: count bare data envelopes (OP_2DROP/pushnum runs) as datacarrier
- knots#422 policy: count pubkeys no signature can prove as datacarrier bytes
- knots#463 policy: detect and count BPUB data
- knots#400 policy: Count data in a dead conditional branch
- knots#457 validation: return TX_NOT_STANDARD for datacarrier rejections
- knots#465 mempool: Saturate GetTxSize weight sum
- knots#446 mining: Apply blockmintxfee to coin-age priority selection
- knots#484 Bugfix: mempool: Only persist explicit transaction fee deltas
Wallet
- bitcoin#32977 wallet:
MigrateToDescriptorno longer callsCanSupportFeature - bitcoin#35989 wallet: fix crash on importdescriptors with a range ending at 2^31-1
Build
- bitcoin#36218 build: avoid
pipe2on Darwin (for now) - Revert bitcoin#35197 guix: add -Wl,--icf=safe to darwin build
Misc
- knots#341 bitcoind: process -help/-version before touching the datadir
Tests
- bitcoin#32624 fuzz: wallet: add target for
MigrateToDescriptor - knots#428 test: don't assume a single addpeeraddress lands in addrman
Credits
Thanks to everyone who directly contributed to this release:
- 2rdzy
- BitcoinMechanic
- brunoerg
- Chris Guida
- connorslab
- Eugene Siegel
- Fabian Jahr
- fanquake
- ismaelsadeeq
- Jason Sopko
- Kyle Santiago
- LionThunderFingers
- Luke Dashjr
- Martin Zumsande
- Pieter Wuille
- Shuvam Pandey
- woltx
As well as to the rest of the community for your patience and support as we
mitigate the biggest attack on Bitcoin in history.