infrastructure: public OFF testnet — seed + chainparams entry + miner-onboarding doc #38

Closed
opened 2026-06-15 23:59:08 +00:00 by dobbscoin · 1 comment
dobbscoin commented 2026-06-15 23:59:08 +00:00

Goal

Stand up a public, joinable OFF testnet so consensus-rule rcs (see #32, #33, #34) can be live-tested by external contributors, not just by maintainers in isolation. Closes the gap between "test plan promises testnet validation" and "testnet validation is structurally possible for anyone outside the Conclave."

Flagged by @9019x on 2026-06-14 as the missing piece behind his "run consensus changes on testnet first" process note.

Why this is needed

Each consensus issue in the v2.0.x-rc-bipsoft bundle (#32, #33, #34) commits in its test-plan to:

  1. Regtest scenario for the boundary case.
  2. Testnet activation at h=100 in the rc binary.
  3. ~3 days of live-test on testnet before promoting to a mainnet activation tag.

Item (2) is already in the source — every fork constant has a _TESTNET_OFF=100 form, so a rc binary running with -testnet activates the new rules within minutes of genesis. But item (3) requires more than a single isolated daemon:

  • A shared testnet chainstate that everyone joining agrees on.
  • A way for external testers to find peers.
  • Documentation that explains how to participate.

None of those exist today. src/chainparams.cpp:247-248 literally clears vFixedSeeds and vSeeds for testnet — a daemon launched with -testnet today has zero peers and stays disconnected.

This issue closes that gap.

What changes

1. Pin testnet genesis

The current CTestNetParams constructor (src/chainparams.cpp:228-255) sets genesis.nTime = 1373481000 and genesis.nNonce = 905523645 but the genesis-hash assert is commented out:

//assert(hashGenesisBlock == uint256("0x00000e5e37c42d6b67d0934399adfb0fa48b59138abb1a8842c88f4ca3d4ec96"));

Before standing up a seed, boot a daemon with the current testnet params, capture the actual computed genesis hash, and uncomment / re-pin the assert. This ensures everyone joining the testnet starts on the same chain — one of the silent ways testnets bifurcate is unverified genesis parameters drifting across builds.

2. Stand up the testnet seed

  • One node, public-internet-reachable, runs Offeringsd -testnet.
  • Bind on the testnet P2P port (21973, from src/chainparams.cpp:237).
  • DNS A record at testnet-seed.23skidoo.info pointing at the seed.

3. Wire the seed into chainparams

Update the CTestNetParams constructor in src/chainparams.cpp:247-248:

vFixedSeeds.clear();
vSeeds.clear();
vSeeds.push_back(CDNSSeedData("testnet-seed.23skidoo.info", "testnet-seed.23skidoo.info"));

One entry is enough to bootstrap. A second seed can be added later if uptime warrants.

4. Document "how to be a testnet miner"

New page at https://23skidoo.info/testnet/ plus doc/testnet.md in-repo (linked from the README). Covers:

  • What and why. Testnet is for testing consensus rcs without risking mainnet. Testnet coins are not real; the testnet can be re-genesis'd at any time; no SLA.
  • Install. Pull the latest v2.0.x-rc-bipsoft tag binary; same build, testnet activated by command-line flag.
  • Launch:
    Offeringsd -testnet -daemon
    
  • Confirm you're peered:
    Offerings-cli -testnet getconnectioncount
    Offerings-cli -testnet getpeerinfo
    
  • Mine. Testnet difficulty is intentionally low; CPU mining gets blocks in seconds:
    Offerings-cli -testnet setgenerate true 2
    
  • Fund a testnet wallet. Mine into it; no faucet in v1.
  • Confirm consensus rules are active:
    Offerings-cli -testnet getblockchaininfo
    Offerings-cli -testnet getinfo
    
  • Pointer to whichever rc is being tested. Each consensus issue's test-plan section lists the specific behaviors to exercise (e.g., "to test BIP66, see #33's test plan: hand-craft a non-strict-DER signature, send it, observe rejection past h=100").

Scope this issue is NOT taking on

  • Testnet faucet. Mine your own coins for v1. Faucet is a follow-on if external participation grows.
  • Testnet block explorer. Daemon RPC is sufficient. Public explorer is a follow-on.
  • Multiple testnet seeds for redundancy. One seed is enough to bootstrap. Add more after observing actual traffic.
  • A docker-compose one-shot testnet setup script. Useful but secondary.
  • A new "testnet4" genesis wiping existing testnet state. The current testnet genesis parameters are preserved — anyone with prior testnet wallets keeps them. Purely additive.

Why this isn't in the v2.0.x consensus-fork bundle

Non-consensus infrastructure. No fork-height, no chain-split risk. Independent release cadence — the seed-list chainparams patch is a one-line addition that can ship as a quick hot release on top of the rc binary.

That said, this issue's deliverable should land before the v2.0.x-rc-bipsoft testnet activation phase begins. Otherwise the test-plan promise of "3 days live-test on testnet" remains unfulfilled.

References

  • src/chainparams.cpp:226-258 — current CTestNetParams
  • src/chainparams.cpp:247-248 — empty seed lists
  • src/chainparams.cpp:245 — commented-out genesis assert
  • Issue #32 — COINBASE_MATURITY (testnet activation at h=100)
  • Issue #33 — BIP66 DERSIG (testnet activation at h=100)
  • Issue #34 — BIP65 CLTV (testnet activation at h=100)
  • Issue #36 — Electrum-server epic (mentions testnet but doesn't depend on it)

Community chat: https://23skidoo.info/discord

## Goal Stand up a public, joinable OFF testnet so consensus-rule rcs (see #32, #33, #34) can be live-tested by external contributors, not just by maintainers in isolation. Closes the gap between "test plan promises testnet validation" and "testnet validation is structurally possible for anyone outside the Conclave." Flagged by @9019x on 2026-06-14 as the missing piece behind his "run consensus changes on testnet first" process note. ## Why this is needed Each consensus issue in the `v2.0.x-rc-bipsoft` bundle (#32, #33, #34) commits in its test-plan to: 1. Regtest scenario for the boundary case. 2. Testnet activation at h=100 in the rc binary. 3. ~3 days of live-test on testnet before promoting to a mainnet activation tag. Item (2) is already in the source — every fork constant has a `_TESTNET_OFF=100` form, so a rc binary running with `-testnet` activates the new rules within minutes of genesis. But item (3) requires more than a single isolated daemon: - A shared testnet chainstate that everyone joining agrees on. - A way for external testers to find peers. - Documentation that explains how to participate. None of those exist today. `src/chainparams.cpp:247-248` literally clears `vFixedSeeds` and `vSeeds` for testnet — a daemon launched with `-testnet` today has zero peers and stays disconnected. This issue closes that gap. ## What changes ### 1. Pin testnet genesis The current `CTestNetParams` constructor (`src/chainparams.cpp:228-255`) sets `genesis.nTime = 1373481000` and `genesis.nNonce = 905523645` but the genesis-hash assert is commented out: ```cpp //assert(hashGenesisBlock == uint256("0x00000e5e37c42d6b67d0934399adfb0fa48b59138abb1a8842c88f4ca3d4ec96")); ``` Before standing up a seed, boot a daemon with the current testnet params, capture the actual computed genesis hash, and uncomment / re-pin the assert. This ensures everyone joining the testnet starts on the same chain — one of the silent ways testnets bifurcate is unverified genesis parameters drifting across builds. ### 2. Stand up the testnet seed - One node, public-internet-reachable, runs `Offeringsd -testnet`. - Bind on the testnet P2P port (21973, from `src/chainparams.cpp:237`). - DNS A record at `testnet-seed.23skidoo.info` pointing at the seed. ### 3. Wire the seed into chainparams Update the `CTestNetParams` constructor in `src/chainparams.cpp:247-248`: ```cpp vFixedSeeds.clear(); vSeeds.clear(); vSeeds.push_back(CDNSSeedData("testnet-seed.23skidoo.info", "testnet-seed.23skidoo.info")); ``` One entry is enough to bootstrap. A second seed can be added later if uptime warrants. ### 4. Document "how to be a testnet miner" New page at `https://23skidoo.info/testnet/` plus `doc/testnet.md` in-repo (linked from the README). Covers: - **What and why.** Testnet is for testing consensus rcs without risking mainnet. Testnet coins are not real; the testnet can be re-genesis'd at any time; no SLA. - **Install.** Pull the latest `v2.0.x-rc-bipsoft` tag binary; same build, testnet activated by command-line flag. - **Launch:** ``` Offeringsd -testnet -daemon ``` - **Confirm you're peered:** ``` Offerings-cli -testnet getconnectioncount Offerings-cli -testnet getpeerinfo ``` - **Mine.** Testnet difficulty is intentionally low; CPU mining gets blocks in seconds: ``` Offerings-cli -testnet setgenerate true 2 ``` - **Fund a testnet wallet.** Mine into it; no faucet in v1. - **Confirm consensus rules are active:** ``` Offerings-cli -testnet getblockchaininfo Offerings-cli -testnet getinfo ``` - **Pointer to whichever rc is being tested.** Each consensus issue's test-plan section lists the specific behaviors to exercise (e.g., "to test BIP66, see #33's test plan: hand-craft a non-strict-DER signature, send it, observe rejection past h=100"). ## Scope this issue is NOT taking on - **Testnet faucet.** Mine your own coins for v1. Faucet is a follow-on if external participation grows. - **Testnet block explorer.** Daemon RPC is sufficient. Public explorer is a follow-on. - **Multiple testnet seeds for redundancy.** One seed is enough to bootstrap. Add more after observing actual traffic. - **A docker-compose one-shot testnet setup script.** Useful but secondary. - **A new "testnet4" genesis wiping existing testnet state.** The current testnet genesis parameters are preserved — anyone with prior testnet wallets keeps them. Purely additive. ## Why this isn't in the v2.0.x consensus-fork bundle Non-consensus infrastructure. No fork-height, no chain-split risk. Independent release cadence — the seed-list chainparams patch is a one-line addition that can ship as a quick hot release on top of the rc binary. **That said, this issue's deliverable should land before the `v2.0.x-rc-bipsoft` testnet activation phase begins.** Otherwise the test-plan promise of "3 days live-test on testnet" remains unfulfilled. ## References - `src/chainparams.cpp:226-258` — current `CTestNetParams` - `src/chainparams.cpp:247-248` — empty seed lists - `src/chainparams.cpp:245` — commented-out genesis assert - Issue #32 — COINBASE_MATURITY (testnet activation at h=100) - Issue #33 — BIP66 DERSIG (testnet activation at h=100) - Issue #34 — BIP65 CLTV (testnet activation at h=100) - Issue #36 — Electrum-server epic (mentions testnet but doesn't depend on it) Community chat: https://23skidoo.info/discord
dobbscoin commented 2026-06-22 15:03:21 +00:00

Delivered in v2.0.9-Eldersign.

The public OFF testnet is live and rode the release tag: seed entry, a re-anchored testnet genesis, an h=0 testnet checkpoint, and testnet/regtest mining without peers. A cross-version soak (prior build ↔ release candidate) ran an end-to-end public testnet through the bipsoft consensus activation, so contributors can now stand up a node and live-test consensus RCs independently rather than relying on a single operator.

Release: https://github.com/SubGeniusFinance/Offerings-to-Cthulhu/releases/tag/v2.0.9-Eldersign

Closing as shipped. Onboarding steps are captured in the release notes' testnet section; if anything in the join flow is rough, open a fresh issue scoped to the doc.

Delivered in **v2.0.9-Eldersign**. The public OFF testnet is live and rode the release tag: seed entry, a re-anchored testnet genesis, an h=0 testnet checkpoint, and testnet/regtest mining without peers. A cross-version soak (prior build ↔ release candidate) ran an end-to-end public testnet through the bipsoft consensus activation, so contributors can now stand up a node and live-test consensus RCs independently rather than relying on a single operator. Release: https://github.com/SubGeniusFinance/Offerings-to-Cthulhu/releases/tag/v2.0.9-Eldersign Closing as shipped. Onboarding steps are captured in the release notes' testnet section; if anything in the join flow is rough, open a fresh issue scoped to the doc.
dobbscoin closed this issue 2026-06-22 15:03:23 +00:00
Sign in to join this conversation.
No labels
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
SubGeniusFinance/Offerings-to-Cthulhu#38
No description provided.