This week’s newsletter includes our regular sections with the summary of a Bitcoin Core PR Review Club meeting, announcements of new releases and release candidates, and descriptions of notable changes to popular Bitcoin infrastructure software.

News

No significant news this week was found in any of our sources. For fun, you may want to check out a recent interesting transaction.

Bitcoin Core PR Review Club

In this monthly section, we summarize a recent Bitcoin Core PR Review Club meeting, highlighting some of the important questions and answers. Click on a question below to see a summary of the answer from the meeting.

Testnet4 including PoW difficulty adjustment fix is a PR by Fabian Jahr that introduces Testnet4 as a new test network to replace Testnet3 and simultaneously fixes the long-standing difficulty adjustment and time warp bugs. It is the result of a discussion on the mailing-list and is accompanied by a BIP proposal.

  • Aside from the consensus changes, what differences do you see between Testnet 4 and Testnet 3, particularly the chain params?

    The deployment heights of past soft forks are all set to 1, which means they’re active from the beginning. Testnet4 also uses a different port (48333) and messagestart, and it has a new genesis block message. 

  • How does the 20-min exception rule work in Testnet 3? How does this lead to the block storm bug?

    If a new block’s timestamp is more than 20 minutes ahead of the previous block’s timestamp, it is allowed to have minimum proof-of-work difficulty. The next block is subject to the “real” difficulty again, unless it too falls under the 20-min exception rule. This exception is made to enable the chain to make progress in an environment of highly variable hashrate. Due to a bug in the GetNextWorkRequired() implementation, the difficulty is actually reset (instead of temporarily lowered for just one block) when the last block of a difficulty period is a min-difficulty block. 

  • Why was the time warp fix included in the PR? How does the time warp fix work?

    A time warp attack allows an attacker to significantly alter the block production rate, so it makes sense to fix this alongside the min-difficulty bug. Since it is also part of the consensus cleanup soft fork, test-running the fix in Testnet4 first provides useful early feedback. This PR fixes the time warp bug by checking that the first block of a new difficulty epoch is not earlier than 2 hours before the last block of the previous epoch. 

  • What is the message in the Genesis block in Testnet 3?

    Testnet 3, as well as all other nets (preceding Testnet 4), have the same well-known genesis block message: “The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”. Testnet4 is the first network to have its own genesis block message, which includes the hash of a recent mainnet block (currently 000000000000000000001ebd58c244970b3aa9d783bb001011fbe8ea8e98e00e) to provide strong guarantees that no pre-mining on this Testnet 4 chain occurred before this mainnet block was mined. 

Releases and release candidates

New releases and release candidates for popular Bitcoin infrastructure projects. Please consider upgrading to new releases or helping to test release candidates.

  • Bitcoin Core 26.2 is a maintenance version of Bitcoin Core’s older release series. Anyone on 26.1 or earlier who is unable or unwilling to upgrade to the latest release (27.1) is encouraged to upgrade to this maintenance release.

  • LND v0.18.2-beta is a minor release to fix a bug affecting users of older versions of the btcd backend.

Notable code and documentation changes

Notable recent changes in Bitcoin Core, Core Lightning, Eclair, LDK, LND, libsecp256k1, Hardware Wallet Interface (HWI), Rust Bitcoin, BTCPay Server, BDK, Bitcoin Improvement Proposals (BIPs), Lightning BOLTs, Lightning BLIPs, Bitcoin Inquisition, and BINANAs.

  • Rust Bitcoin #2949 adds a new method is_standard_op_return() to validate OP_RETURN outputs against current standardness rules, allowing programmers to test whether OP_RETURN data exceeds the 80-byte maximum size enforced by Bitcoin Core. Programmers who aren’t worried about exceeding the current default Bitcoin Core limit can continue to use Rust Bitcoin’s existing is_op_return function.

  • BDK #1487 introduces support for custom input and output sorting functions by adding a Custom variant to the TxOrdering enum, to enhance flexibility in transaction construction. Explicit BIP69 support is removed because it may not provide the desired privacy due to its low adoption rate (see Newsletters #19 and #151), but users can still create BIP69-compliant transactions by implementing appropriate custom sorting.