Bellga 1.0.0 · base XMRig 6.26.0

The Bellga miner, inside out.

What we changed compared to ccminer and the other VerusHash miners, which processors it runs on, how much faster it got and what's coming next.

at a glance
coinsVRSC · ZEPH · XMR (+ everything XMRig mines)
algorithmsVerusHash 2.2 · RandomX · GhostRider
platformsLinux x86-64 · ARM64 · 32-bit ARMv7
phoneTermux and UserLAnd, no root
executablebellga
licenseGPL-3.0, open source

Measured results

Numbers from real devices and correctness tests, not marketing estimates. The gain on phones depends on the core — simpler processors gain more.

+30%
VerusHash hashrate on Cortex-A53, stable and with no rejects
+15%
VerusHash hashrate on Cortex-A55
~640 kH/s
Moto E7 Power, 32-bit ARMv7, 8 threads (was ~520 kH/s)
−29%
instructions per hash on ARM64 (3,658 → 2,580)
Correctness
512,000 hashes compared one by one against VerusCoin's official implementation — zero differences, on x86-64 and ARM64
bit for bit
Shares
Tests against a local pool validating every submitted share: 0 rejected, even with a new job every 0.5 s
0 rejects
Reference
Fastest ARM miner we knew of (Oink70's ccminer fork): 2,590 instructions per hash, with ~0.3% of hashes wrong. Bellga: 2,580, with none wrong
faster and exact

What we did

Bellga took the best of each project — ccminer's algorithm, XMRig's framework, the NEON idea from Oink's fork and VerusMiner's core catalog — and fixed what was wrong in each one.

01
ccminer's VerusHash inside XMRig

The VerusHash 2.2 core came from monkins1010's ccminer (the leanest version, v2.2 only). Around it, everything mature XMRig already had: huge pages, thread affinity, TLS, automatic pool failover, HTTP API and JSON config. The Stratum client speaks VerusCoin's specific dialect.

base: monkins1010/ccminer + XMRig
02
Shares checked with 64 bits, against the pool's real target

ccminer decides it found a share by looking only at the top 32 bits of the hash. When the pool difficulty goes up, it starts sending shares that do not meet the target — by our math, rejects can approach half at high difficulty. Bellga compares 64 bits against the exact target the pool sent.

fixes: ccminer (monkins and forks)
03
clhash rewritten in native NEON, without the bugs of Oink's fork

On ARM64 with the crypto extension, the heaviest part of the hash uses native instructions (PMULL, AESE, SQRDMULH) instead of translating PC instructions. The idea came from Oink70's ccminer fork — but it had two bugs: ~0.3% of hashes came out wrong (write order in the table) and a rare saturation case gave a different result. We rewrote it from the official algorithm, with both fixed, without losing speed.

idea: Oink70/CCminer-ARM-optimized · 2 bugs fixed
04
No 1,472-byte comparison on every hash

The previous version checked, on every hash, whether the pool job had changed — a 1,472-byte comparison that cost ~14% of the time. Now the miner only recomputes when new work arrives.

ours · −14% instructions
05
Key restored from a ready-made copy

VerusHash changes an 8.8 KB table on every hash and has to undo that before the next one. Instead of recording and undoing each change, Bellga keeps an intact copy of the table per thread and restores from it — and the loop was reorganized so the compiler doesn't re-read memory for nothing. This is what put Bellga ahead of Oink's fork.

ours · −14% instructions · +30% on A53
06
Compiled for your core

On phones, the install script reads /proc/cpuinfo, finds out which core you have and compiles with the right tuning for it (-mcpu). We use the 53 profiles published by VerusMiner (pangz-lab) as a reference — see the full list.

catalog: pangz-lab/verus_miner-release v6.0.0
07
Real 32-bit ARMv7

Many cheap phones run a 32-bit system, with no hardware AES/PMULL. We fixed the 64-bit types in the hash code, the memory alignment that crashed the miner with Bus error on newer clang, and a bug in the NEON HTTP parser that cut off data sent to the site. Validated on a Moto E7 Power through UserLAnd.

ours · validated on device
08
Integrated with the site

Fixed dashboard in the terminal, optional benchmark submission, machines linked to your account (profile, ranking and the "My machines" app) and a donation that goes to our pool in the same coin you are mining.

ours

Processors

The 53 ARM core profiles VerusMiner uses in its builds (version 6.0.0), where each one shows up and whether our script recognizes it on its own. A phone usually has two or three core types; the script picks the biggest.

auto termux-build.sh detects and applies it on its own manual has its own tuning, but you tell it the core generic no reliable tuning — uses the generic build

?
Which one is mine?

In Termux or UserLAnd, this command shows the device's cores. The install script does the same reading and writes the chosen profile to the log (Detected CPU: … -> tier 'ca53').

grep -E "CPU implementer|CPU part" /proc/cpuinfo | sort | uniq -c

If it guesses wrong, or if your core is listed as manual, tell it when compiling:

./termux-build.sh cortex-a76 # core name ARM_CPU=ca76 ./termux-build.sh # or the tag from the list ARM_CPU=none ./termux-build.sh # generic, no tuning
ARMv7 (32-bit)
Phones with a 32-bit system or a 32-bit userland in UserLAnd. Works, with software AES/PMULL — the profiles above are 64-bit. E.g. Moto E7 Power, ~640 kH/s on VerusHash.
supported
x86-64 PC and server
No profile to choose. VerusHash requires AES-NI + PCLMUL + SSE4.1 (almost every Intel/AMD CPU since ~2011); RandomX runs on any x86-64.
supported
x86 reference
Original ccminer on a 2-vCPU virtual Xeon: ~1.2 MH/s per thread on VerusHash — the baseline we compare against.
measured

What's next

Next steps for the miner and the site. "Testing" already exists and is being validated; "planned" has not started yet.

Telemetry and app

  • testing Temperature, CPU usage and uptime of each machine in the "My machines" app
  • planned Android app installable from the store/APK, besides the browser app

Prebuilt binaries

  • planned Prebuilt download per core (ca53, ca55, ca78…), like VerusMiner does — no compiling on the phone
  • planned Ready-made executable for Linux x86-64

More ARM optimization

  • testing Long runs on ARMv7 and automatic calibration without the fixed algo-perf
  • planned Measure Oink's compiler flags on-device (LTO, alignment, clang vs GCC — GCC emits ~9% more instructions in this code)
  • planned Dedicated profiles for the cores currently on "generic"

Account and site

  • planned Support e-mail suporte@bellga.tech
  • planned Password recovery by e-mail
  • planned Sign in with Google, Apple or Facebook
  • planned Mining proxy for people with many machines
get started
Install Bellga and build your config.json
One command on Termux/UserLAnd, or CMake on Linux.