2 min read

Blackcoin Testnet Taproot (BIP-9)

TL;DR

Taproot has been scheduled for activation on Blackcoin testnet via BIP-9 at timestamp 1780300000 (June 1, 2026). The deployment is currently in DEFINED state and will begin miner signaling at the next activation window boundary (~block 2,835,000).


What Was Done

The DEPLOYMENT_TAPROOT BIP-9 parameters have been configured in src/kernel/chainparams.cpp for the testnet network:

// Deployment of Taproot (BIPs 340-342)
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].bit = 2;
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = 1780300000; // June 1, 2026
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0;

This follows the same pattern used by Bitcoin and enables the Schnorr signatures, Taproot scripts, and Tapscript validation rules.


BIP-9 State Machine

Per BIP-9, a deployment moves through these states:

State Meaning
DEFINED Deployment is known but has not yet started.
STARTED MTP >= starttime. Miners begin signaling with the deployment bit.
LOCKED_IN 75% threshold reached in a single window. Rules not yet enforced.
ACTIVE Rules are enforced. Terminal state.
FAILED Timeout reached without lock-in. Terminal state.

Current Testnet Status

"taproot": {
  "type": "bip9",
  "active": false,
  "bip9": {
    "start_time": 1780300000,
    "timeout": 9223372036854775807,
    "min_activation_height": 0,
    "status": "defined",
    "since": 0,
    "status_next": "defined"
  }
}

How Blackcoin BIP-9 Differs from Bitcoin

There are two important differences in how Blackcoin More implements BIP-9 compared to upstream Bitcoin Core:

1. Activation Window Size

  • Bitcoin: 2,016 blocks (~2 weeks)
  • Blackcoin: 15,000 blocks (~11 days at 64s target)

2. Median Time Past (MTP)

  • Bitcoin: Median of the last 11 block timestamps
  • Blackcoin: Since ProtocolV2 (2014), GetMedianTimePast() returns the current block's own timestamp. This effectively means block time itself drives the state transitions, not a smoothed median.

This is why getdeploymentinfo can show defined even when your local clock is past June 1st — the chain's own timestamps at period boundaries control the transition.


Expected Timeline on Testnet

Event Approximate Block Height Status
Now ~2,821,800 DEFINED
Next Window Start 2,835,000 STARTED (signaling begins)
Potential LOCKED_IN 2,850,000 If 75% (11,250) of period 189 signal
Potential ACTIVE 2,865,000 Taproot rules enforced

The Math

  • Current height: ~2,821,800
  • Current period: 188 (2,820,000 – 2,834,999)
  • Next boundary: 2,835,000 (~13,200 blocks away)
  • At ~64s block time: ~9–10 days until signaling begins

What Miners/Stakers Should Know

Once the deployment enters STARTED (at block 2,835,000), the block nVersion will automatically have bit 2 set via ComputeBlockVersion():

pblock->nVersion = m_chainstate.m_chainman.m_versionbitscache.ComputeBlockVersion(pindexPrev, chainparams.GetConsensus());

This happens automatically in the staker/miner — no manual intervention is required. As long as your node runs v28-CORE or later, you will signal support.

To verify your node is signaling once STARTED:

./blackmore-cli -testnet getblockheader $(./blackmore-cli -testnet getbestblockhash)

Check that version has bit 2 set (e.g., 0x20000004 or similar with VERSIONBITS_TOP_BITS).


Mainnet Outlook

For mainnet, Taproot is currently configured as NEVER_ACTIVE:

consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE;

Testnet activation will serve as the proving ground. If signaling succeeds and the softfork activates without issues, a mainnet deployment can be proposed with a future nStartTime via a subsequent update.


References


Feel free to share this with anyone running testnet nodes or interested in Blackcoin's upgrade path.