Skip to main content

Mining Math (On-chain)

All formulas below are enforced by BullionMine.sol on Robinhood Chain mainnet. Rewards mint as GOLD when you claim.

Definitions

SymbolMeaning
SSMax miners per room instance (roomSlots, default 8)
TrT_rMax miner type index for room type rr (roomMaxMinerTier, 0-based)
EEbaseEmissionPerHashPerSec (GOLD per second per hash, default 0.0001)
hih_iBase hash of miner instance ii
MroomM_{room}Room multiplier (roomMultiplierBps / 10000)
MfuelM_{fuel}Fuel multiplier for that room instance (1.0 if inactive)
cdicd_iCooldown end timestamp for miner ii

Miner display tier = on-chain type index + 1 (T1 = type 0).

Room tier gate

When equipping loadout for room type rr, each miner type tt must satisfy:

tTrt \le T_r

Default deploy values:

RoomTrT_r (0-based)Allowed display tiers
Small Garage1T1–T2
Warehouse2T1–T3
Bunker3T1–T4
Hangar4T1–T5
Space Station8T1–T9

Loadout size must also satisfy countS\text{count} \le S (default S=8S = 8).

Effective hash per miner

Each equipped miner contributes hash or zero if on claim cooldown:

hieff={hi×Mroom×Mfuelif nowcdi0if now<cdih_i^{eff} = \begin{cases} h_i \times M_{room} \times M_{fuel} & \text{if } now \ge cd_i \\ 0 & \text{if } now < cd_i \end{cases}

Total hash (all rooms)

Sum effective hash from every equipped miner in every room instance you own:

H=all equipped ihieffH = \sum_{\text{all equipped } i} h_i^{eff}

Emission rate

GOLD/sec=H×E\text{GOLD/sec} = H \times E

With default E=0.0001E = 0.0001:

GOLD/hour=H×0.36\text{GOLD/hour} = H \times 0.36 GOLD per day=H×8.64\text{GOLD per day} = H \times 8.64

Worked example — tier-gated loadout

Setup: One Small Garage (Mroom=1.0M_{room} = 1.0, Tr=1T_r = 1 → T1–T2 only, S=8S = 8).

Equip 8× Basic Drill (base hash 10 each), no fuel, no cooldowns:

H=8×10×1.0=80H = 8 \times 10 \times 1.0 = 80 GOLD per day=80×8.64=691.2 GOLD\text{GOLD per day} = 80 \times 8.64 = 691.2 \text{ GOLD}

At a 0.00317/GOLDreferenceprice:about0.00317/GOLD** reference price: about **2.19 per day (solo-mining illustration only).

Invalid: Equipping one Magma Drill (type 4, T5) in Small Garage → transaction reverts (MinerTierTooHighForRoom).

Worked example — mixed low tiers

Setup: Warehouse (Mroom=1.10M_{room} = 1.10, allows T1–T3).

MinersCountBase hashSubtotal effective
Basic Drill (T1)8108×10×1.1=888 \times 10 \times 1.1 = 88
Turbo Bore (T2)4254×25×1.1=1104 \times 25 \times 1.1 = 110
Deep Seeker (T3)4504×50×1.1=2204 \times 50 \times 1.1 = 220
H=88+110+220=418GOLD per day=418×8.64=3,611.5H = 88 + 110 + 220 = 418 \quad\Rightarrow\quad \text{GOLD per day} = 418 \times 8.64 = 3{,}611.5

Worked example — max room, max miners

Setup: Space Station (Mroom=2.0M_{room} = 2.0, all tiers, S=8S = 8), 8× Singularity (10,000 hash), no fuel:

H=8×10,000×2.0=160,000H = 8 \times 10{,}000 \times 2.0 = 160{,}000 GOLD per day=160,000×8.64=1,382,400\text{GOLD per day} = 160{,}000 \times 8.64 = 1{,}382{,}400

Multiple rooms stack

Hash adds across instances. Example:

Room instanceLoadoutEffective hash
Garage #18× T1 Basic80
Warehouse #18× T3 Deep Seeker440
Total520
GOLD per day=520×8.64=4,492.8\text{GOLD per day} = 520 \times 8.64 = 4{,}492.8

Claim cooldown

After each claim, equipped miners enter cooldown for claimCooldownSeconds (default 6 hours). While cooling down, hieff=0h_i^{eff} = 0 unless you pay GOLD to bypass (bypassCooldownPriceGold, default 500 GOLD).

Global pool cap

Total mining mint is capped at 14,700,000 GOLD (goldMiningSupply). When exhausted, claims pay nothing — your hash still sets relative share while the pool lasts, but absolute yields fall as more players join.

Default on-chain constants (deploy)

roomSlots           = [8, 8, 8, 8, 8]
roomMaxMinerTier = [1, 2, 3, 4, 8] // 0-based type index
roomMultiplierBps = [10000, 11000, 12500, 15000, 20000]
roomTierUpgradeSeconds = 5 // live mainnet (was 12h at deploy)
baseEmissionPerHashPerSec = 100_000 atoms → 0.0001 GOLD/hash/sec
claimCooldownSeconds = 6 hours
MAX_ROOM_INSTANCES = 32

Admin can adjust prices and some parameters via owner functions; tier gates and slot caps use setRooms().