Build & Launch Progress

Forking directly from Bitcoin Core for stability and security. This page tracks concrete work done.
Updated: Saturday, October 25, 2025 (America/New_York)

🧾 Public Audit Break

Logged: Saturday, October 25, 2025 • Late evening ET

Consensus Identity Chosen

  • Bech32 HRPs ➜ spmtc (mainnet), tsmc (testnet), smcrt (regtest)
  • P2P Ports ➜ 9333 (main), 19333 (test), 19444 (reg)
  • Magic Bytes ➜ fabfb0dc (main), fabfb0dd (test), fabfb0de (reg)
  • 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.”
    • Reg: “Spearmint Regtest 25/Oct/2025: Proof in code, not paper.”

Automation Attempt

Ran contrib/spearmint/spearmintify.sh to mine three new genesis blocks and patch src/chainparams.cpp automatically.

Observed Error (Documented for Reproducibility)

Trace: binascii.Error: Odd-length string while mining genesis. Root cause: a truncated heredoc corrupted the genesis_pubkey (must be 130 hex chars).

Public Fix Applied

Replaced contrib/spearmint/genesis_miner.py with a clean copy (exact 130-char pubkey) and re-ran the tool.

Commands
cd ~/spearmint
cat > contrib/spearmint/genesis_miner.py <<'PY'
# (clean script written — includes 130-hex pubkey)
PY
chmod +x contrib/spearmint/genesis_miner.py
bash contrib/spearmint/spearmintify.sh

Transparency Note

We publish both missteps and fixes so anyone can audit Spearmint’s bootstrap process in real time.

Session Summary

Wallet & User Flow Strategy

  • Plan: Ship Spearmint Core (full node + desktop wallet) and a lightweight Spearmint Electrum for everyday users.
  • Addressing/URIs: Use Bech32 with HRP spmtc (main), tsmc (test), smcrt (reg); BIP-21-style URI scheme.
  • HD Paths: Register SLIP-44 coin type post-mainnet for ecosystem compatibility.

Mining Connectivity Plan

  • Protocol bridge: Miners speak Stratum; node exposes getblocktemplate. Add a Stratum server in front of the node.
  • Phased approach:
    • Bring-up: ckpool in solo mode (simplest path).
    • Community test: P2Pool (non-custodial, sharechain).
    • Public pool: full pool stack (ckpool fork / BTCPool-style) + payouts.
  • Future-proof: Evaluate Stratum V2 alongside V1.

Source Build (Bitcoin Core v29.0)

✅ Built successfully on Ubuntu 22.04 VPS with wallet enabled; installed bitcoind to /usr/local/bin.

Commands (exact)
# Deps
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 + Build
cmake -B build
cmake --build build -j"$(nproc)"

# Installed daemon only (initially)
sudo cmake --install build --component bitcoind

# Binaries found in build/bin/
ls -l build/bin
./build/bin/bitcoind -version

ℹ️ Note: bitcoin-cli wasn’t in /usr/local/bin at first because only the bitcoind component was installed.

Fix applied
# Install remaining tools system-wide (optional)
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

Fork Scaffolding (“Spearmint”)

Created a fork directory to begin the rename/branding work without changing consensus yet.

Commands
# Start from the directory above 'bitcoin'
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 step: set the CMake project name and change output binary names while leaving internal targets intact.

Edits planned/applied
# Top-level CMakeLists.txt
project(SpearmintCore LANGUAGES C CXX)

# src/CMakeLists.txt - place immediately 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")

Rebuild to produce spearmintd and spearmint-cli in build/bin.

Operational Guidance Agreed

  • Keep node RPC on localhost; miners will connect to Stratum, not the node.
  • Use signed, reproducible releases for public downloads post-fork.
  • Publish a minimal “Get Wallet” page with verify-before-run instructions.

What’s Next (consensus-changing)

  1. Patch chainparams.cpp with mined genesis values (auto-patched by the script).
  2. Build and boot Spearmint-regtest for rapid validation.
  3. Expose getblocktemplate; stand up ckpool (solo) for bring-up hashing.

Status

BTC v29.0 Build OK Wallet ON Params Set

Artifacts

  • /usr/local/bin/bitcoind installed
  • build/bin/bitcoin-* present (local)
  • Spearmint fork directory created

Decisions

  • Pool path: ckpool (solo) → P2Pool → full stack
  • Wallet path: Spearmint Core + Spearmint Electrum (later)
  • Address plan: Bech32 spmtc1… / tsmc1… / smcrt1…

Notes

  • We intentionally publish errors and fixes for independent verification.
  • RPC remains private; miners hit Stratum.

Short To-Do

  • Finish genesis mining with the repaired script.
  • Rebuild and boot Spearmint regtest & mainnet (new chain IDs).
  • Stand up ckpool-solo against getblocktemplate.