github bitcoinknots/bitcoin v29.4.3.knots20260508
Bitcoin Knots v29.4.3.knots20260508

2 hours ago

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, getdeploymentinfo describes long_coinbase_maturity for the next block. Before block 979919 it reports the rule from 973440 (maturity 6480, height_end 979919). From block 979919 it reports the 180-day rule: height is 979919, maturity is 25920, and coinbase_expiry_time replaces height_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_ENDIF envelope; it now also covers OP_1 OP_NOTIF ... OP_ENDIF, guards computed from constants, and the dead part of an OP_ELSE. Scripts that branch on witness data or a signature check are unaffected. The new -rejectdeadbranches option (default: 1, reset by -corepolicy) turns this off. knots#400

  • Runs of pushes dropped with OP_DROP/OP_2DROP now count as data carrier bytes, as <data> OP_DROP already 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 -rejectbpub option (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_BLAKE2B service 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

  • dumptxoutset with rollback now works on a copy of the UTXO set instead of invalidating blocks, so the node stays online, and takes a new in_memory option. bitcoin#33477

  • bitcoin-cli dumptxoutset now takes the snapshot type positionally, as in bitcoin-cli dumptxoutset utxo.dat latest, and a named format works with rollback. 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: MigrateToDescriptor no longer calls CanSupportFeature
  • bitcoin#35989 wallet: fix crash on importdescriptors with a range ending at 2^31-1

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.

Don't miss a new bitcoin release

NewReleases is sending notifications on new releases.