SPEARMINT SPMTC

Engineering record

spearmint@build:~/spearmint$ cat src/chainparams.cpp | grep pszTimestamp

"Spearmint 25/Oct/2025: From code we trust, not fiat we must."

Build log

What has actually been built, in the order it happened — including the parts that failed. Every command here is the command that was run, so the bootstrap can be reproduced rather than believed.

last entry 25 Oct 2025 base Bitcoin Core v29.0 host Ubuntu 22.04 Core builds · wallet on

01 Consensus identity

The values that make Spearmint a distinct network rather than a Bitcoin clone that talks to Bitcoin nodes.

Chain identity by network
ParameterMainnetTestnetRegtest
Bech32 HRPspmtctsmcsmcrt
P2P port93331933319444
Magic bytesfabfb0dcfabfb0ddfabfb0de

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
Why this is published Missteps and fixes both go in the log, so anyone can audit the bootstrap process as it happens rather than reconstructing it afterwards from a clean history.

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

Wallet

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
Mining

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

Done
  • Core v29.0 builds with wallet enabled
  • bitcoind installed to /usr/local/bin
  • Fork directory created and committed
  • Chain identity chosen
Decided
  • Pool path: ckpool solo → P2Pool → full stack
  • Wallet path: Core first, Electrum later
  • Addresses: Bech32 throughout
Next
  • Finish genesis mining with the repaired script
  • Patch chainparams.cpp with mined values
  • Boot regtest, then mainnet, on new chain IDs
  • Stand up ckpool-solo against getblocktemplate