Docs
How it works
Your browser hashes keccak256(your address ‖ round challenge ‖ nonce) until the result starts with enough zero bits. Each such hash is a share. Shares go to the HashMine contract in batches of up to 64, and the contract recomputes every hash before it counts.
Rounds
A round lasts 10 minutes. When a round with at least one share ends, the contract releases 0.48% of its ETH balance and splits it between everyone who sent shares, in proportion to work. A share of difficulty D counts as 2D work. Empty rounds release nothing and never catch up.
The challenge of a round derives from the last share of the last active round, so nobody can mine a round before it opens. A round is closed by the first share of the next active round, or by the first claim after it ends.
Difficulty
The contract sets a minimum difficulty from the work of the last active round, aiming at about 4096 shares per round, and lowers it one bit for every empty round, never below 20 bits. Your miner picks its own difficulty above that minimum so that it finds about 32 shares per round and each share is worth at least twice the gas it costs to send.
Where the ETH comes from
Trading $MINEGPU on PONS pays a 3% fee: 1% PONS base fee plus 2% creator tax. The part that reaches the project, about 2.7% of every trade, lands in the treasury as ETH. Every harvest() (anyone can call it) splits it by a ratio fixed in the contract at deployment: 40% to the mining pool, 60% to the team wallet. No buyback, no swap. The pool is exactly what the fees and donations put there, and miners are the only ones who can take anything out of it.
The miner
Two engines share the search space by worker id: a WebGPU engine (a WGSL keccak-f[1600] kernel, one workgroup of 256 lanes per dispatch, dispatch size tuned to about sixty milliseconds) and a WASM engine (Rust keccak in one Web Worker per core). Every hit is recomputed on the CPU before it is buffered; an engine that reports an invalid share is disabled on the spot.
The engines work in bursts and rest at least as long as they work. The duty cycle is measured, not assumed, and capped at 50% of the machine; you can lower it to 10% while mining. Nothing leaves the tab except the shares.
Keys
The session key in this browser only pays gas. Rewards go to the beneficiary address bound inside every hash, so a stolen share is worthless to anyone else, and anyone can call claim on your behalf without being able to redirect it. Forget the key any time to get a fresh one; the old one keeps whatever ETH it held.
What you are trusting
| Thing | Who controls it |
|---|---|
| HashMine parameters | Nobody. Immutable constructor arguments; the contract has no owner. |
| The 40 / 60 split | Nobody. Immutable in PonsTreasury. |
| The fee stream | The treasury owner can move it to a successor after a 7-day timelock, executable for 3 days, visible on chain from the proposal. |
| This page | Whoever serves it. Every number is a view call; verify against the explorer. |
Contracts
- Network
- Robinhood Chain (chain id 4663)
- HashMine
- 0x03FA66D1CC28BcF7B4791A349C82aE7Dbc5bfc64
- Treasury
- 0x222ed0aDBDc272191Df52CD645a80bC06b6EEFcE
- PONS factory
- 0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e
- Source
- github.com/0xCookz/minegpu