01 Consensus identity
The values that make Spearmint a distinct network rather than a Bitcoin clone that talks to Bitcoin nodes.
| Parameter | Mainnet | Testnet | Regtest |
|---|---|---|---|
| Bech32 HRP | spmtc | tsmc | smcrt |
| P2P port | 9333 | 19333 | 19444 |
| Magic bytes | fabfb0dc | fabfb0dd | fabfb0de |
Genesis texts
- Main: “Spearmint 25/Oct/2025: From code we trust, not fiat we must.”
- Test: “Spearmint Testnet 25/Oct/2025: Trial by code, not fiat.”
- Regtest: “Spearmint Regtest 25/Oct/2025: Proof in code, not paper.”
02 Genesis mining: failure and fix
The automation run — contrib/spearmint/spearmintify.sh, which mines three genesis blocks
and patches src/chainparams.cpp — failed. The traceback is recorded here because a build
log containing only successes is not evidence of anything.
The error
# while mining genesis
binascii.Error: Odd-length string
Cause: a truncated heredoc had corrupted genesis_pubkey, which must be
exactly 130 hex characters. An odd-length string cannot be decoded as bytes, so the miner aborted
before producing a block.
The fix
cd ~/spearmint
cat > contrib/spearmint/genesis_miner.py <<'PY'
# clean script written — includes the full 130-hex pubkey
PY
chmod +x contrib/spearmint/genesis_miner.py
bash contrib/spearmint/spearmintify.sh
03 Source build, Bitcoin Core v29.0
Built on an Ubuntu 22.04 VPS with the wallet enabled. bitcoind installed to /usr/local/bin.
# dependencies sudo apt-get update sudo apt-get install -y build-essential cmake pkg-config libevent-dev \ libboost-all-dev libsqlite3-dev # source git clone https://github.com/bitcoin/bitcoin.git cd bitcoin git fetch --tags git checkout v29.0 # configure and build cmake -B build cmake --build build -j"$(nproc)" # install the daemon sudo cmake --install build --component bitcoind ls -l build/bin ./build/bin/bitcoind -version
bitcoin-cli was missing from /usr/local/bin at first, because only the
bitcoind component had been installed. The remaining tools were installed separately:
sudo cmake --install build --component bitcoin-cli sudo cmake --install build --component bitcoin-wallet sudo cmake --install build --component bitcoin-tx sudo cmake --install build --component bitcoin-util
04 Fork scaffolding
A fork directory was created to begin renaming and branding work without touching consensus yet.
cd ~ rm -rf spearmint cp -r bitcoin spearmint cd spearmint rm -rf .git git init git add . git commit -m "Spearmint: forked from Bitcoin Core v29.0"
Branding sets the CMake project name and the output binary names, leaving internal targets intact:
# top-level CMakeLists.txt project(SpearmintCore LANGUAGES C CXX) # src/CMakeLists.txt — after each add_executable(...) set_target_properties(bitcoind PROPERTIES OUTPUT_NAME "spearmintd") set_target_properties(bitcoin-cli PROPERTIES OUTPUT_NAME "spearmint-cli") set_target_properties(bitcoin-wallet PROPERTIES OUTPUT_NAME "spearmint-wallet") set_target_properties(bitcoin-tx PROPERTIES OUTPUT_NAME "spearmint-tx")
Rebuilding then produces spearmintd and spearmint-cli in build/bin.
05 Wallet and mining plan
Two clients
Spearmint Core as full node plus desktop wallet, and a lighter Spearmint Electrum for everyday use.
- Bech32 addresses:
spmtc1…,tsmc1…,smcrt1… - BIP-21 style URI scheme
- SLIP-44 coin type registered after mainnet
Stratum in front of the node
Miners speak Stratum; the node exposes getblocktemplate. A Stratum server bridges the two.
- Bring-up: ckpool in solo mode
- Community test: P2Pool, non-custodial sharechain
- Public: full pool stack with payouts
- Stratum V2 evaluated alongside V1
Operational guidance agreed
- Node RPC stays on
localhost; miners connect to Stratum, never to the node directly. - Public downloads ship as signed, reproducible releases after the fork.
- A minimal “get wallet” page will carry verify-before-run instructions.
06 Status and next steps
- Core v29.0 builds with wallet enabled
bitcoindinstalled to/usr/local/bin- Fork directory created and committed
- Chain identity chosen
- Pool path: ckpool solo → P2Pool → full stack
- Wallet path: Core first, Electrum later
- Addresses: Bech32 throughout
- Finish genesis mining with the repaired script
- Patch
chainparams.cppwith mined values - Boot regtest, then mainnet, on new chain IDs
- Stand up ckpool-solo against
getblocktemplate