
A complete, beginner-friendly guide. No prior blockchain experience needed. Mining runs on your own computer and submits proofs to the $WHOLE contract on the Base network (mainnet).
Mining uses a small Python program. If you don't have Python yet, download and install it (version 3.10 or newer). During installation on Windows, make sure to tick "Add Python to PATH".
Download PythonTo check it worked, open your terminal (Command Prompt on Windows, Terminal on Mac/Linux) and run:
python --versionEach scan costs a small fee of 0.0005 ETH on the Base network. You need real ETH on Base to mine. The easiest way is to bridge ETH from Ethereum mainnet using the official Base Bridge.
Open Base BridgeThe easiest path. Download the ready-to-use miner file. The contract address and network are already filled in — you only add your wallet key.
Download whole-miner.pya.Put whole-miner.py in a new folder, e.g. whole-mining.
b.Install the one dependency by running:
pip install web3c.In the same folder, create a file named exactly .env with this content (paste your own private key):
# .env -> save this file next to whole-miner.py
# Replace the value below with YOUR wallet private key.
PRIVATE_KEY=0xyour_wallet_private_key_here
# Optional (already filled in - only change if you know what you are doing):
# RPC_URL=https://mainnet.base.org
# CONTRACT=0x2f8A1A11Ab90Eb03D83ad3250956A537ec9037D9
# DRY_RUN=falsed.Start mining:
python whole-miner.pyThat's it. The miner connects, searches for valid proofs and submits them automatically. Leave it running. Press Ctrl + C to stop.
Want to test without spending any fee first? Set DRY_RUN=true in your .env — it generates a proof but does not submit it on-chain.
If you'd rather not download a file, you can create the miner yourself — everything is fully transparent. Just do the following:
a.Create a new empty file called whole-miner.py and paste in all of the code below (use the Copy button):
Loading source...b.Create the .env file (same as Step 3c) and install the dependency with pip install web3.
c.Run python whole-miner.py. Done — identical to the downloaded version, just typed by you.
$WHOLE uses a memory-hard proof. Your computer builds a large chained array in memory, forms a Merkle tree from it, and searches for a number (a "nonce") that produces a hash with enough leading zeros. When it finds one, it submits that proof on-chain and earns rewards.
There are two types of valid proof, depending on how many leading-zero nibbles the hash has:
Requires half the difficulty (e.g. 1 nibble when full difficulty is 2). Much easier to find — it often takes just a few attempts.
15% of the ETH in the Cosmic Reservoir
100 $WHOLE (from the 50,000 Hawking reserve)
10 $GRAV points (makes future mining easier)
Cooldown: ~24 hours (43,200 blocks) between Hawking emissions. After you find one, the next Hawking won't be accepted for about a day — but Singularity still works.
Requires the full difficulty (e.g. 2 nibbles in Era 1). Harder to find, but the miner tries up to 50 million nonces per round — at 2 nibbles (1 in 256 chance) it typically finds one quickly.
100% of the ETH in the Cosmic Reservoir
Full episode reward (e.g. 500 $WHOLE in Era 1)
Advances the protocol to the next episode
Cooldown: 300 blocks (~10 min) between Singularities. The miner handles this automatically.
Every Hawking you find earns 10 $GRAV points. These are soulbound (non-transferable) and give you a difficulty tolerance of up to −20% on your Singularity threshold. In practice, this means the more you mine, the easier future Singularities become for your wallet.
The bonus follows a logarithmic curve: it ramps up fast at first, then flattens. With just 3 Hawkings (30 GRAV) you already hit the maximum 20% reduction.