Build & Launch Progress
🧾 Public Audit Break
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)
- Patch chainparams.cpp with mined genesis values (auto-patched by the script).
- Build and boot Spearmint-regtest for rapid validation.
- 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.