How it works

Hashbits is one ERC-721 contract that mints Hashbits Monsters. Nothing here is sold ready made: the only way a Monster comes into existence is a hash below the current target, paid for at the entry price of the current epoch, and it is always the next one in line.

Every moving part is below, and the instruments are real — keccak256 in your browser, the live chain, and the same formulas the contract uses.

01Mining

What your browser
actually computes

Open the miner

Four values, one hash, one comparison — and you can run them right here. Everything else on this page is a consequence of them.

A miner picks a nonce and hashes four values together: their own address, the nonce, the work behind the previous Monster, and an anchor — the hash of a recent block. 20 + 32 + 32 + 32 bytes, keccak256, 32 bytes out. If the result has at least as many leading zero bits as the target asks for, the contract accepts it, takes the entry price of the current epoch and mints the next Monster in line.

Every Monster is chained to the one before it. The work of the last Monster goes into the next one, so nothing can be mined ahead of time, and the moment somebody else mints, every solution being held becomes worthless.

The address is part of the work. That is what makes a solution untradeable: the same nonce and anchor produce a different hash for anybody else.

The miner runs on processor cores, or on the graphics card. On the cores, one Web Worker per core, minus one so the page keeps drawing; each worker walks its own stride of nonces with the same keccak256 the contract uses, changing only the 32 nonce bytes of a reused 116-byte buffer. On the card, the same round of keccak runs as a WebGPU compute shader, in waves short enough that the page keeps drawing. The card returns candidates, not results: every promising attempt is recomputed on the processor before it can become a transaction, and a card that miscounts is dropped at the first disagreement.

A solution is checked before it costs anything. The worker reports it, the page hashes it again, then asks the contract's own checkSolution view against the chain as it stands. Only then is mine(nonce, anchorBlock) sent, with the entry price attached. The contract recomputes the whole thing itself; the browser's hash is a preview, never a claim.

Stealing a solution
impossible
The address is inside the hash, so a copied transaction computes to something else. The anchor and the previous work are public; your address is what makes them yours.
One per block
1 Monster
The contract mints at most once per block. Two valid solutions in the same block: the first one included wins, the second reverts — and its work was void anyway, because the previous work moved.
Measured on one desktop
1.2 GH/s
One GeForce (RTX 50-series) through WebGPU, against 1.9 MH/s on 13 cores of the same machine — roughly six hundred times. At 32 bits that is a few seconds per Monster on the card, about forty minutes on the cores.
What the miner hashesLive
The four values that go into the hash
Miner0x0000…0000

No wallet connected, so the zero address stands in. Connect one and this row — and every hash below — becomes yours.

Nonce4 815 162 342

The only free value of the four — this is what the workers spin, hundreds of thousands of times a second per core.

Previous work

The work behind the Monster before yours. Every mint replaces it, and everything found under the old one is spent.

0x································································
Anchor

A recent block hash, read from the live chain. The contract accepts any of the last 250 blocks — about 500 seconds on Base Sepolia.


Keccak256 of the four / zero bits
································································
Target right nowreading…
0 bits found · target 0
Waiting for the chain: previous work, anchor and target arrive within a few seconds.

The hash does not pick the picture. Monsters are numbered, and the next number in line goes to whoever mints next: your hash is the proof of work behind Monster #n, recorded with it for ever, but #n was drawn long before you found it. Spare hashrate buys zero bits, and nothing else.

What a zero bit costsInteractive
target 20
Engine
1.9 MH/s
Hashes per Monster
1M
One browser tab
<1s
Chance in a minute
100%

At 1.9 MH/s — thirteen workers of an ordinary desktop, pure JavaScript keccak, no GPU. Every extra bit doubles all three numbers; there is no shortcut, and that is the whole point.

A solution dies with the next mint, or when its anchor leaves the window — whichever comes first. The anchor is the hash of a recent block, and the contract accepts one of the last 250 of them. At the planned pace the next Monster usually arrives first; the anchor is the backstop for a quiet hour.

Anchor windowLive
Block
0 / 250

One cell is 5 blocks of the 250-block window — about 8m 20s at Base Sepolia's 2 s blocks. A solution found against this anchor is sent with its block number; when the window runs out the solution is dead and the search starts again against a fresh anchor. The next mint usually ends it sooner: every mint replaces the previous work, which is inside the preimage too.

One mint, end to end
  1. Your browser reads the current target, the anchor, the work behind the last Monster and the entry price.
  2. Web Workers hash nonces until one lands below the target.
  3. The candidate is dry-run through checkSolution, then sent to the contract with the entry price attached.
  4. The contract recomputes the hash from your address and checks it itself — against the target for your address in that block, the price, the anchor and the one-per-block rule.
  5. The next Monster in line is minted to you, and its work becomes the previous work of everyone else’s search.
  6. The entry price stays in the contract until the owner withdraws it to the treasury. No rent, no hook, no token.
02 Difficulty · Six rules that set the target · A retarget every eight mints · One Monster per block
02Difficulty

Six rules that
set the target

Difficulty is not one number drifting upward: a floor that rises with the epoch, a retarget every eight mints, and a streak that doubles the work for every recent mint.

Epoch floor and streakInteractive
Epoch floor
14bits
With the streak
14bits
16.4K hashes
Entry price
0.000069ETH

Every bit doubles the search, so the two sliders multiply: the epoch sets the floor (14 + epoch on this chain), the streak stacks on top of it, and the price of that epoch moves alongside — money and work grow together. The floor is only the lowest the base can sit; the retarget can hold it higher.

  • Epoch floor
    floorBase + epoch

    Work doubles every epoch, and the retarget may never go below that line. Measured on the base difficulty, before the streak is added.

  • Base difficulty
    read from the chain

    What the retarget works on. The first Monster was mined at the number the deployment set; from there the pace alone moves it, and it never goes below the epoch floor.

  • Retarget
    every 8 mints

    Compares the real pace of the last eight mints with the plan of 10 seconds each and moves the base: up to 4× harder in one window (+2 bits), at most 2× easier (−1), and never below the floor.

  • Streak
    ×2 per recent mint

    Adds one bit for every recent mint and cools one step at a time, every 10 seconds, counted per network and per address. Twelve mints in a row cost 4 096× the work of one; the doubling stops after 16 steps.

  • Failsafe
    5 min, one bit

    After that much silence the target is one bit easier — never more. The first mint switches it off again.

  • One Monster per block
    1 per block

    A hard ceiling, counted by the chain’s own block number. On a 2-second chain that is 30 Monsters a minute at the very most; the rules above keep the real pace near one every 10 seconds.

Every epoch doubles three things at once: the floor's work, the size of the epoch and the price step — and halves what a burn returns. The last epoch, #2 0413 333, is cut short by the cap: 3 333 Monsters, then the contract refuses every solution.

Numbers
constantvaluenote
baseBitsreading…
floorBasereading…
TARGET_INTERVAL10 sone mint every ten seconds is the plan
RETARGET_WINDOW8 mints— / 8 into the current window
STREAK_COOLDOWN10 s per stepcap 16
FAILSAFE_IDLE5 min, one bitnever deeper
ANCHOR_WINDOW250 blocks · 8m 20sBase Sepolia
BLOCK_CEILING1 per block · 2 scounted by the chain, not by the clock
What runs today
03Price

What the price is,
and where it goes

The entry price is the number of Monsters that already exist times a fixed step. It is derived, not chosen.

Epochs double. The first is 8 Monsters, each next one twice as large: 8, 16, 32 … up to the last, which the 3 333 cap cuts short. The price is constant inside an epoch and changes only at its border.

The price is derived, not chosen. It equals the number of Monsters minted before the epoch began times 0.00002 ETH. Epoch 3 starts after 56 Monsters, so every Monster in it costs 56 × 0.00002 = 0.00112 ETH. There is no list of prices in the contract, only that one line.

The first 8 Monsters are the exception. Nobody exists before them, so they cost a flat 0.000069 ETH. From the second epoch on, the formula above is the whole story.

Where it goes. Every entry price stays in the contract until the owner calls withdraw(), which sends the balance to the treasury address. There is no rent to earlier Monsters, no hook, no buyback and no token to buy back: what a Monster costs is the work behind it, and the price is the ticket.

The cheap band
504 Monsters up to 0.00496 ETH
The first six epochs together. The price is flat inside an epoch, so a whole epoch is entered at one number — and these are pocket change. The work is what you pay.
The wall
#3 333
The last epoch would run to #4 088; the cap stops it at #3 333. After that mine() reverts with SoldOut whatever the hash.
Price by epoch
Entry price now
ETH
reading…
Mined
Next price change
EpochMonstersSizeBefore itPrice (ETH)
0#18800.000069
1#9241680.00016
2#255632240.00048
3#5712064560.00112
4#1212481281200.0024
5#2495042562480.00496
6#5051 0165125040.01008
7#1 0172 0401 0241 0160.02032
8#2 0413 3331 2932 0400.0408
monsters before the epoch × 0.00002 = entry price

The identity the price rests on: the number of Monsters that already exist, times one fixed step. Nothing is chosen per epoch; the table above is that one line evaluated nine times.

Live
04Burn & BITS points

The other exit:
burn it for points

A Monster burned in its own epoch credits 1 000 BITS points to the address that burns it. Wait an epoch and it is 500; wait two and it is 250. Burning is final.

A Monster cannot be burned the minute it is mined. Two doors stand before the burn: at least one more Monster has to exist after yours, and 10 minutes have to pass since the mint. The contract answers both separately (burnQuote), so the Monster page can tell you which one you are waiting on.

Points are a number on-chain, next to your address. points[owner] goes up, the token goes away, Burned is emitted. The site shows the balance next to the wallet button. There is no ERC-20, nothing to trade and nothing to approve: BITS points are an airdrop promise, not a token.

The supply stays 3 333 for ever. A burned id is never reissued and minted never goes down, so a burn does not make room for another mint. It makes the collection smaller.

The halving is per epoch, not per day. The clock is epoch() − monster.epoch: the epoch of the next mint, minus the one your Monster was mined in. On a quiet chain a Monster can sit in its own epoch for a long time at the full rate; a busy chain melts it faster.

Burn credit by epochs waited
1 000 · 500 · 250 · 125
Halves with every epoch waited, down to 1. Inside an epoch the rate does not move at all; it drops at the border.
WaitedPoints
own epoch1 000
1 epoch500
2 epochs250
3 epochs125
4 epochs62
5 epochs31
6 epochs15
7 epochs7
8 epochs3
Hold or burn
Paid to mint
0.000069ETH
Burn returns
1 000BITS
its own epoch
Later Monsters needed
1
one door: a later Monster exists

1 000 points if the burn lands in the same epoch the Monster was mined in, half of that for every epoch waited, never below 1. Points are credited to the burner's address on-chain and shown next to the wallet; the Monster is gone for good and its number is never reissued.

Interactive
05 The art · 3,333 monsters, drawn before the first hash · Mined, not minted
05The art

3 333 monsters,
drawn before the first hash

Browse all Monsters

Every Hashbits Monster is a 128 × 128 pixel monster, pre-rendered and scaled 8× to 1 024 px with no smoothing. The set was fixed before deployment; mining decides who gets the next one, not what it looks like.

Six speciesone specimen each — the lowest id wearing that skin
Hashbits Monster #1, a Toxic Slime#1
fig. Toxic Slime
Hashbits Monster #4, a Abyss Spawn#4
fig. Abyss Spawn
Hashbits Monster #30, a Frost Ghoul#30
fig. Frost Ghoul
Hashbits Monster #6, a Magma Fiend#6
fig. Magma Fiend
Hashbits Monster #3, a Fungal Brute#3
fig. Fungal Brute
Hashbits Monster #2, a Stone Golem#2
fig. Stone Golem
Ten scenes
  • Blood Moon
  • Toxic Sewers
  • Rotten Swamp
  • Cursed Forest
  • Slime Lab
  • Crypt Fog
  • Deep Void
  • Haunted Violet
  • Fungal Cave
  • Flesh Portal

Sequential assignment. Token id, edition and artwork number are the same integer. The next Monster in line is yours — the hash does not pick the picture, and no amount of hashrate reaches past the queue. A farm cannot grind for a rare Monster; it can only be first to the next one.

Six species. Toxic Slime, Abyss Spawn, Frost Ghoul, Magma Fiend, Fungal Brute and Stone Golem — the skin of every Monster is one of these six. Each wears one of six corrupted streetwear fits: Spiked Biker, Void Hoodie, Swamp Bomber, Graveyard Denim, Blood Varsity or Biohazard Techwear.

Ten scenes. Blood Moon, Toxic Sewers, Rotten Swamp, Cursed Forest, Slime Lab, Crypt Fog, Deep Void, Haunted Violet, Fungal Cave and Flesh Portal stand behind them; face, eyes, head and equipment are the cursed traits on top.

Seven trait types. 7 layers per Monster, 81 traits in all. Rarity is a share of the 3 333, known in advance and printed on every Monster page next to the trait.

Provenance. Every image has a SHA-256, and the SHA-256 of all 3 333 of them in order is the provenance hash below. The per-image hash is printed on the Monster's page; recompute it from the PNG and it matches, or the site is lying.

Served by this site. Images and metadata come from /api/image/[id] and /api/metadata/[id]; the contract's baseURI points here and the owner can move it. No IPFS yet — the provenance hash is what pins the set until then.

Hashbits Monster #1, the first monster in the sequence
fig. #1
TraitValuesRarest
Background10Fungal Cave · 280
Equipment15Royal Reaper · 4
Skin6Fungal Brute · 555
Clothes6Biohazard Techwear · 555
Face6Bone Tentacles · 51
Eyes11Plague Beam · 54
Head27Golden Skull · 7
Provenance hash
cfcad4baec6f6996bc590511e1dddd5592bae682dee488255088d0930d57d470

Concatenate the SHA-256 of /monsters/1.png through /monsters/3 333.png as hex, in order, hash the string once more, and this is what you get.

sha256 of 3 333 sha256s
06Contracts

The whole thing,
by address

One contract: the ERC-721, the mining rules, the price table, the burn and the points all live in MonsterMiner. The site is told its address; everything else on this page it asked the chain for.

Addresses
Addresses on Base Sepolia
01 MonsterMiner0x58b80d69a731e10a160bc93f0393d4b7489032de

The collection: mining, the target, epochs, burning, BITS points. An ERC-721 that mints to nothing but a hash below the target, paid at the entry price.

02 Treasuryreading…

Where withdraw() sends the entry prices. Set once in the constructor; the contract holds the ETH until the owner calls it.

03 ChainBase Sepolia · id 84 532

RPC https://sepolia.base.org · explorer sepolia.basescan.org. Blocks every 2 s; block numbers and hashes come from the EVM directly.

Base Sepolia
The same contract is deployed on Base Sepolia and on Robinhood Chain; the table shows the chain this site is pointed at. Robinhood Chain reads its block source through ArbSys, with a 32-bit start and a 26-bit floor.
07Questions

Things people
ask first

10 answers about getting one, mining against a farm, and the art.

Getting one

Can I just buy one?
Not from the contract. There is no mint button and no fixed-price sale: mine() refuses anything that is not a hash below the target. Somebody who already mined one can sell it on any marketplace, like any ERC-721 — that is the only way a Monster changes hands without work.
What am I paying for, then?
The entry price is a ticket, not the product. The product is the work: about 2bits hashes, done by your machine. The ETH goes to the treasury when the owner withdraws it. Nothing is rented, nothing is bought back.
Why does the price go up?
Because it is the count of Monsters that already exist, times 0.00002 ETH. Every epoch doubles the count, so every epoch doubles the price — 0.000069 for the first 8, then 0.00016, 0.00048, … up to 0.0408 ETH for the last 1 293.

The art

Can the art disappear?
The images are served by this site today, not by IPFS; if the site vanished, so would the pictures. What cannot vanish is the proof: the provenance hash and every per-image SHA-256 are published, and the contract owner can point baseURI at a new home. The tokens, the work hashes and the points live on-chain regardless.
What are BITS points?
A number in the contract, per address, that goes up when you burn a Monster: 1 000 in its own epoch, halving per epoch waited. It is shown next to your wallet. It is an airdrop promise — not a token, not transferable, not tradable. Whatever it becomes, the count is already on-chain.

Mining against a farm

Does mining in a browser stand a chance?
At 26 bits, the epoch-0 floor, a browser needs about 67 million hashes — half a minute on one desktop; every epoch adds a bit and doubles that. A farm is faster, but the streak doubles the work for every recent mint and cools only 10 seconds a step, so a farm racing itself climbs into 16 extra bits within a minute; a browser arriving in the pause pays the base rate.
Can someone steal my solution?
No. Your address is the first 20 bytes of the preimage, so your nonce hashes to something else for anyone else. Copying the transaction from the mempool changes the sender and voids the hash.
Can a farm grind for a rare Monster?
No. Ids are sequential: the next mint gets the next number, whatever the hash looks like. The only thing extra hashrate buys is arriving first — and the streak charges for that.
Does a big holder mine cheaper?
No. The target depends on the epoch, the pace and the streak; not on what an address owns. The per-address streak only ever makes it harder for whoever just minted.
What happens when all 3 333 are mined?
mine() reverts with SoldOut for ever. Burning still works — the doors only need a later Monster and ten minutes — and points keep accruing; ids are never reissued, so the supply only shrinks from there.
Where to go from here

Real keccak256 in your browser, at the current target and the current price.

Mine a Monster

Every Monster mined so far, with the work behind each one.

Browse all Monsters

The one contract that holds the rules, the ids and the points.

Contract