Mining Pearl on Apple Silicon (and other CPU hosts)¶
OpenJarvis can mine the Pearl chain
on Apple Silicon Macs (M1/M2/M3/M4) using the cpu-pearl provider. This is
v1: decoupled CPU mining. Your existing local LLM workflow (Ollama, MLX-LM,
llama.cpp, vLLM) is untouched; mining runs in the background as a separate
process.
Honest expectations¶
Hashrate on Apple Silicon CPU is far below what an H100 produces with
Pearl's vllm-miner. A rough rule of thumb (subject to network difficulty):
- M2 Max / M4 Max: ≪ 1 share per second at typical mainnet difficulty
- H100 with
vllm-miner: meaningfully higher, plus the mining work is amortized over real LLM inference
If you want to mine for yield, this isn't the path. If you want to participate in the network from the hardware you own, with no special hardware purchase, this is the path.
An experimental apple-mps-pearl provider is available for developers. It
uses PyTorch MPS for the NoisyGEMM matmuls, while transcript hashing and proof
construction still run on CPU. This proves the Apple-GPU path can produce
validator-accepted PlainProofs, but it is not yet the high-performance Metal
kernel path.
Prerequisites¶
- macOS arm64 (M1, M2, M3, M4) — or Linux x86_64 / aarch64
- Python 3.12 (
brew install python@3.12or useuv venv --python 3.12) - Rust toolchain (
brew install rustorcurl https://sh.rustup.rs -sSf | sh) - Your own running
pearldnode, RPC reachable onhttp://localhost:44107 - A Pearl Taproot wallet address from
oyster(Pearl's wallet CLI) - ~1 GB free disk for the Pearl source clone and build artifacts
Install¶
If Pearl wheels are not yet on PyPI (still true as of 2026-05-05), uv sync
succeeds but doesn't install the actual Pearl Python packages. Build/install
them from a local Pearl checkout:
cd /path/to/pearl/py-pearl-mining
maturin build --release
uv pip install target/wheels/py_pearl_mining-*.whl
uv pip install ../miner/miner-utils ../miner/pearl-gateway ../miner/miner-base
Configure¶
Create a Pearl wallet and start a synced pearld separately using Pearl's
README. Then write OpenJarvis' mining config:
export PEARLD_RPC_PASSWORD="rpcpass"
jarvis mine init \
--provider cpu-pearl \
--wallet-address "<your-prl1...address>" \
--pearld-rpc-url http://127.0.0.1:44107 \
--pearld-rpc-user rpcuser \
--pearld-rpc-password-env PEARLD_RPC_PASSWORD
On Apple Silicon, --provider auto chooses apple-mps-pearl; use
--provider cpu-pearl for the conservative CPU path. The MPS path is
experimental and currently useful for validation/profiling, not revenue.
This writes:
[mining]
provider = "cpu-pearl"
wallet_address = "prl1..."
submit_target = "solo"
fee_bps = 0
[mining.extra]
pearld_rpc_url = "http://127.0.0.1:44107"
pearld_rpc_user = "rpcuser"
pearld_rpc_password_env = "PEARLD_RPC_PASSWORD"
gateway_host = "127.0.0.1"
gateway_port = 8337
metrics_port = 9109
Run¶
jarvis mine doctor # capability matrix
jarvis mine start # launch gateway + miner-loop subprocesses
jarvis mine status # check sidecar + gateway metrics
jarvis mine logs -n 120 # print recent logs
jarvis mine stop # stop mining subprocesses
Reading mine doctor¶
Each row is one check. ✓ means the check passed; ✗ shows the actionable fix.
$ jarvis mine doctor
Hardware
GPU vendor apple ✓
Apple chip M2 Max ✓
Pearl install
py-pearl-mining 0.1.0 (cp312-abi3-macos-arm64) ✓
miner-base 0.1.0 ✓
pearl-gateway 0.1.0 ✓
Pearl node
RPC http://localhost:44107 ✓
Block height 442107 (synced) ✓
Wallet
Address format prl1q... ✓
Provider capability
cpu-pearl SUPPORTED (calibrated 0.X share/h on M2 Max)
Notes
- This is decoupled mining: your normal LLM inference is unaffected
- Hashrate is far below H100 mining; see this doc above
- MPS mining: available as experimental apple-mps-pearl
Session
Sidecar absent (not running)
Limitations¶
- Windows is not supported in v1. Pearl's pure-Rust miner builds on Windows in principle but the cross-platform install path is untested. Use WSL2 if you must.
- No coupling to inference yet. v1 is a separate process; your CPU does mining, your GPU does inference. They don't share work. v2 changes this.
- Experimental PyTorch-MPS only.
apple-mps-pearlmoves the NoisyGEMM matmuls to MPS but still has CPU readbacks for transcript hashing and proof construction. Use it for validation and profiling, not revenue expectations. - No multi-host pool. Solo mining only. The pool work is a separate spec.
Troubleshooting¶
| Symptom | Likely cause | Fix |
|---|---|---|
mine doctor says Pearl Python packages not installed |
Wheels not built yet | Run jarvis mine init |
pearl-gateway log shows connection refused to http://localhost:44107 |
pearld not running |
Start pearld per Pearl's README |
mine status shows last_error: gateway metrics unreachable |
pearl-gateway crashed |
Check ~/.openjarvis/logs/mining/pearl-gateway.log |
Build fails with error: linker 'cc' not found |
Xcode CLT not installed | xcode-select --install |
maturin build complains about tikv-jemallocator |
macOS SDK too old | Update macOS / Xcode |
For anything not on this list, capture ~/.openjarvis/logs/mining/ and open
an issue at https://github.com/open-jarvis/OpenJarvis/issues.
What changes in v2 / v3¶
- v2: Optimize the current
apple-mps-pearlpath, then optionally plug it into MLX-LM orllama-cpp-pythonso inference matmuls become mining work. - v3 (only if v2 perf is insufficient): Native Metal kernel as a Pearl upstream contribution. No user-visible change other than higher hashrate.