Research/Bitcoin

Testnet4 vs Signet: Choosing the Right Bitcoin Test Network for Development

Bitcoin developers can test on Testnet4 or Signet. Each has different trade-offs for reliability, realism, and tooling.

bcMaoJun 29, 2026

Every Bitcoin application needs testing before it touches real money. For over a decade, Testnet3 served as the default public test environment, but chronic reliability problems finally forced the community to move on. BIP 94 introduced Testnet4 as a replacement, while BIP 325 introduced Signet as a fundamentally different approach to test networks. Developers building on Bitcoin now have a choice between these two public networks, plus Regtest for purely local work. Picking the right one depends on what you are testing.

Why Testnet3 Had to Go

Testnet3 launched in 2012 and accumulated problems over its 13-year lifespan. The most damaging was a difficulty adjustment edge case: a special rule allowed the difficulty to reset to 1 whenever a block took more than 20 minutes. Miners exploited this by waiting just past the threshold, then blasting through thousands of blocks at minimum difficulty. These "block storms" made the chain erratic and unpredictable for developers who needed steady block production.

In April 2024, Jameson Lopp demonstrated how trivial griefing had become. With roughly 20 lines of code and about $1 in electricity, he mined over 165,000 blocks in a single week: approximately three years of normal production. His writeup showed that anyone with a consumer GPU could destabilize the network at negligible cost.

Beyond block storms, Testnet3 coins had developed real market value. People were buying and selling them, which violated the foundational principle that test coins should be worthless. Faucets ran dry as speculators hoarded coins, and developers struggled to obtain the test funds they needed. The network was no longer serving its purpose.

The core failure: Testnet3's difficulty reset rule, originally meant to keep CPU mining viable for developers, became an attack vector. Any mechanism that allows artificial difficulty drops on a public network with free coins will eventually be exploited.

Testnet4: A Fixed Public Testnet

Testnet4 shipped in Bitcoin Core 28.0 (October 2024), specified by BIP 94. It starts from a fresh genesis block, wiping out Testnet3's accumulated history and the speculative value attached to its coins. The flag to use it is -testnet4, and Testnet3 support is scheduled for full removal in Bitcoin Core 30.0.

Difficulty Adjustment Fixes

The primary technical change targets the block storm vulnerability. Testnet4 modifies the difficulty adjustment calculation to reference the first block of the previous difficulty period rather than the last. This prevents a single manipulated minimum-difficulty block from constraining how the next period adjusts, eliminating the feedback loop that enabled storms.

Testnet4 also adds a time warp mitigation: blocks at difficulty period boundaries must have timestamps no earlier than 600 seconds before the prior block. This prevents miners from manipulating timestamps to game the difficulty algorithm, a technique known as a time warp attack.

The 20-minute exception rule is preserved: if a block's timestamp is more than 20 minutes after the previous block, it can use minimum difficulty. This keeps CPU mining accessible for individual developers who don't have dedicated proof-of-work hardware, without creating the cascade failures that plagued Testnet3.

Consensus Rules

Testnet4 activates all soft forks from block 1, including SegWit and Taproot. Developers don't need to mine past specific activation heights to test features that depend on these upgrades. The network otherwise mirrors mainnet consensus rules as closely as possible, which is the entire point: if your transaction works on Testnet4, the consensus logic will accept it on mainnet too.

Signet: Signed Blocks for Predictable Testing

Signet takes a fundamentally different approach to test network design. Instead of using proof-of-work to produce blocks, a designated authority signs each block with a cryptographic key. This was introduced in BIP 325 and shipped in Bitcoin Core 0.21.0 (January 2021).

The block "challenge" is a Bitcoin script that each block must satisfy. For the default Signet, this is a simple signing key. But the challenge can be anything valid in Script: a multisig, a timelock, or any other condition. The solution (signature) is embedded in the coinbase witness commitment with the header 0xecc7daa2.

Predictable Block Times

Because a single authority controls block production, the default Signet produces blocks at a steady 10-minute interval. There are no block storms, no sudden difficulty spikes, and no periods where no blocks appear for hours. For integration testing, CI pipelines, and any scenario where you need to predict when the next block arrives, this consistency is extremely valuable.

The default Signet also enables controlled network events. The operator can simulate chain reorganizations, deliberately create fee spikes, or pause block production to test how applications handle delays. These conditions are difficult or impossible to trigger reliably on a PoW-based test network.

Custom Signets

Any team can launch a private Signet by generating a key pair and passing the challenge script via -signetchallenge=<hex>. Each custom Signet gets a unique network magic (derived from the challenge script hash), ensuring nodes don't accidentally connect to the wrong network.

Custom Signets are useful for organizations that need isolated test environments with specific properties: controlled block intervals, private transaction history, or custom consensus behavior. A company running a Bitcoin payment integration can operate its own Signet with 1-minute blocks for fast iteration, then validate on the default Signet or Testnet4 before going to mainnet.

Signet vs. Testnet trust model: Signet introduces centralized block production by design. This is a feature, not a bug: the entire purpose is to eliminate the chaos of permissionless mining on a network with free coins. The tradeoff is that you cannot test how your application behaves under adversarial mining conditions.

Testnet4 vs Signet: Feature Comparison

The two networks serve different testing needs. The choice depends on whether you value realism or reliability more for your specific use case.

PropertyTestnet4Signet (Default)
Block productionProof-of-work (permissionless mining)Signed by designated authority
Block interval~10 min average, variable in practiceConsistent ~10 min
Difficulty adjustmentReal (with storm fixes)Not applicable
Fee marketOrganic (can spike with spam)Minimal (controlled environment)
Chain reorgsPossible (realistic)Only if operator triggers them
Coin supplyAnyone can mineFaucet-distributed
BIPBIP 94BIP 325
Bitcoin Core version28.0+ (October 2024)0.21.0+ (January 2021)
Custom networksNo (single global network)Yes (any team can run their own)
Mainnet similarityHigh (real PoW dynamics)Moderate (same rules, different block production)

When to Use Each Network

Choose Testnet4 When You Need Realism

Testnet4 is the better choice when your application needs to handle real-world Bitcoin network conditions. Because it uses actual proof-of-work, the mempool behaves organically: transactions compete for block space, fees fluctuate, and blocks sometimes arrive late. This matters for:

  • Testing fee estimation algorithms that need realistic mempool data
  • Validating RBF and CPFP fee-bumping logic under contention
  • Stress-testing applications against variable block times and occasional reorganizations
  • Confirming that mining-related infrastructure (pool software, block template construction) works correctly
  • End-to-end integration tests that should mirror mainnet as closely as possible

Choose Signet When You Need Predictability

Signet's controlled environment makes it ideal for scenarios where flaky block times would waste developer time or break automated workflows:

  • CI/CD pipelines that need deterministic block confirmation timing
  • Protocol development where you need to trigger specific network conditions (reorgs, fee spikes) on demand
  • Testing multi-party protocols that require coordinated confirmation sequences
  • Education and demonstrations where unpredictable delays would be disruptive
  • Custom Signets for private, isolated testing environments with configurable block intervals

Choose Regtest for Local Development

Regtest (regression test mode) creates a completely private, local blockchain. You generate blocks on demand with a single RPC call, and there is no networking involved. This is the right choice for:

  • Unit tests and integration test suites that run in CI
  • Rapid prototyping where waiting for any block interval is unacceptable
  • Testing Script logic and transaction construction in isolation
  • Simulating specific chain states (exact block heights, UTXO sets, timelock expirations)

Decision Matrix

This table maps common development scenarios to the recommended test network:

ScenarioRecommended NetworkReason
Unit testing transaction constructionRegtestInstant blocks, no external dependencies
CI pipeline: automated test suiteRegtest or custom SignetDeterministic timing required for reliability
Fee estimation algorithm testingTestnet4Needs organic fee market behavior
Wallet UX testing with real confirmationsSignetPredictable 10-min blocks, consistent experience
Lightning or Layer 2 integrationSignet or Testnet4Depends on whether you need stable or adversarial conditions
Multi-party protocol testingCustom SignetFull control over block timing and network conditions
Pre-mainnet stagingTestnet4Closest approximation of mainnet conditions
Demo or presentationSignet or RegtestNo risk of embarrassing block delays

Tooling and Faucet Availability

Both networks have growing ecosystem support, though Signet has a head start given its 2021 launch.

Block Explorers

mempool.space supports both Testnet4 and Signet with full mempool visualization, fee estimation, and transaction tracking. This is the most reliable explorer for both networks. Several other explorers have added Testnet4 support since Bitcoin Core 28.0.

Faucets

Testnet4 faucets include mempool.space's built-in faucet and coinfaucet.eu. Because anyone can mine on Testnet4, obtaining coins through mining is also feasible (though less practical than it was on exploited Testnet3).

Signet coins come primarily from the signetfaucet.com faucet. Bitcoin Core also includes a built-in faucet script at contrib/signet/getcoins.sh that can request coins programmatically. For custom Signets, you control the coinbase and can distribute coins however you like.

SDK and Library Support

Most major Bitcoin libraries support both networks. Bitcoin Core itself is the reference implementation for both, using -testnet4 and -signet flags respectively. Bitcoin Dev Kit (BDK) and rust-bitcoin have added Testnet4 network parameters. Libraries in other languages (bitcoinjs-lib, python-bitcoinlib, btcd) have followed or are in the process of adding support.

Migration note: If your application hardcodes Testnet3 network parameters (magic bytes, default ports, genesis block hash), you will need to update these for Testnet4. The address prefix for Testnet4 remains tb1 for bech32 addresses, but the genesis block and network magic differ.

Regtest: The Third Option for Local Development

Neither Testnet4 nor Signet replaces Regtest for local development. Regtest creates a private blockchain on your machine with no network connectivity. You mine blocks instantly via the generatetoaddress RPC command, giving you complete control over the chain state.

This makes Regtest essential for automated testing. Your test suite can create a fresh chain, fund addresses, mine specific numbers of confirmations, and assert on results, all in seconds. There is no dependency on external infrastructure, no faucets to hit rate limits on, and no waiting for blocks. The tradeoff is that Regtest tells you nothing about how your code will behave on a real network with other participants.

A practical development workflow moves through all three environments: Regtest for fast iteration and unit tests, Signet or Testnet4 for integration testing with realistic confirmation delays, and finally mainnet deployment. Some teams insert a custom Signet stage between Regtest and the public test networks, giving them a shared but controlled environment for multi-developer testing.

How Testnet4 Fixed the Block Storm Problem

The technical details of the fix are worth understanding because they illustrate how subtle consensus rule changes can have outsized effects on network stability.

On Testnet3, the difficulty adjustment at each 2,016-block epoch used the timestamp of the last block in the previous epoch. An attacker could mine a single minimum-difficulty block (by waiting 20 minutes) at the end of an epoch, then use that artificially late timestamp to skew the adjustment calculation. The result: the next epoch would set a lower difficulty than warranted, enabling faster mining, which compounded over subsequent epochs.

Testnet4's fix (specified in Bitcoin Core PR #29775) changes the reference point to the first block of the previous epoch. This anchor cannot be manipulated by a single miner at the epoch boundary. Combined with the time warp mitigation (requiring boundary blocks to be no more than 600 seconds before the previous block's timestamp), the attack surface is substantially reduced.

Practical Considerations for Layer 2 Developers

Developers working on Bitcoin Layer 2 protocols face specific requirements that influence test network choice. Channel-based protocols need reliable on-chain confirmations for funding and closing transactions. Applications built on Spark, Lightning, or Liquid all depend on the base layer behaving predictably enough to test their off-chain logic.

Signet's predictable block times simplify Layer 2 testing because you know exactly when funding transactions will confirm. This is particularly valuable for testing timelock-dependent logic, where unpredictable block production can make tests either painfully slow or produce misleading results.

Testnet4 is more appropriate for stress-testing how your Layer 2 handles mainnet-like conditions: fee spikes, slow blocks, and reorganizations. If your protocol includes fee-bumping mechanisms or needs to handle confirmation delays gracefully, validating these on Testnet4 gives higher confidence than Signet alone.

For developers building on Spark's SDK, reliable test networks are essential for integration testing. The SDK needs to interact with the Bitcoin base layer for operations like deposits and unilateral exits. Spark's developer documentation covers the specifics of configuring test environments for these integrations.

Migrating from Testnet3

If your project still references Testnet3, migration should be straightforward. The key changes:

  • Replace -testnet (or -testnet3) with -testnet4 in your node configuration
  • Update the configuration section from [test] to [testnet4] in bitcoin.conf
  • Replace any hardcoded genesis block hashes, network magic bytes, or default port numbers
  • Obtain fresh test coins from Testnet4 faucets (Testnet3 coins are not valid)
  • Verify that your wallet library or SDK has added Testnet4 network parameters

Bitcoin Core 28.0 and 29.0 print a deprecation warning when started with -testnet3. Starting with version 30.0, the flag will produce an error, so migration is not optional for teams that want to stay on supported Bitcoin Core versions.

Chain history matters: Testnet4 starts from a new genesis block with no history from Testnet3. If your tests depend on specific historical transactions or block heights from Testnet3, you will need to recreate those conditions on the new network.

Running a Custom Signet

For teams that want full control over their test environment without the isolation of Regtest, a custom Signet offers a middle ground. Setup involves three steps:

  1. Generate a signing key pair and construct a challenge script (typically a P2WPKH or multisig script)
  2. Start bitcoind with -signet -signetchallenge=<hex of scriptPubKey>
  3. Use the contrib/signet/miner script from Bitcoin Core to produce blocks at your desired interval

Each custom Signet derives a unique network message header from the first four bytes of SHA256d(challenge_script). This prevents accidental cross-contamination between different Signet networks. Nodes on your custom Signet will not connect to the default Signet or any other custom network.

A multisig challenge script adds redundancy: if one signer's machine goes down, block production can continue with the remaining signers. This is useful for organizations that want a shared test environment without a single point of failure.

Looking Ahead

The shift from Testnet3 to Testnet4 reflects a broader maturation of Bitcoin's development infrastructure. As the ecosystem grows and more applications build on Bitcoin's Layer 2 landscape, reliable testing environments become critical infrastructure rather than nice-to-haves.

Testnet4 and Signet serve complementary roles. Testnet4 provides a realistic public sandbox where applications can prove they handle real-world conditions. Signet provides a controlled environment for building and debugging. Most serious development teams will use both, along with Regtest, at different stages of their workflow. The days of relying on a single broken test network are over.

For developers building Bitcoin applications, the building a Bitcoin payment app guide covers how test networks fit into the broader development process, and the wallet SDK comparison evaluates tooling options that support these test environments.

This article is for educational purposes only. It does not constitute financial or investment advice. Bitcoin and Layer 2 protocols involve technical and financial risk. Always do your own research and understand the tradeoffs before using any protocol.