PROTOCOL REFERENCE · PRE-LAUNCH

Hashform protocol

A precise account of what is fixed, what is under simulation, what remains open, and what is planned beyond the first release.

DECIDEDConfirmed designDRAFTStarting value under simulation, will changeSET AT LAUNCHPublished before mintingPLANNED · V2Not in the first release
§00

Overview

Nothing is minted. Everything is found. Hashform is one ERC-721 collection of 4,444 specimens on Robinhood Chain. A specimen exists only after a browser finds acceptable work and the epoch entry price is paid. The winning hash earns the claim; a later block settles the specimen. Its art is computed from the resulting seed, so anyone can reproduce the form from public data. No contract is deployed and every specimen on this site is an example.
Single collection · 4,444 specimensDECIDED
§01

Mining

The miner hashes its wallet address, a nonce, a recent block anchor, and the work behind the previous claim. The address binds the solution to its finder. An accepted proof creates a claim, advances the work chain, and invalidates searches built on the prior state.
Address-bound proof, chained claims, one accepted claim per blockDECIDEDAnchor validity window · —SET AT LAUNCHBlock cadence · —SET AT LAUNCH
INSTRUMENT · INTERACTIVE

What the miner hashes

KECCAK2560x01a4e932b23acc64a581486bb8ca1ed538bd3b2a8762013e8eaf8d1a351d9cda
7 leading zero bitsBELOW EXAMPLE TARGET

Example inputs. Nothing is submitted to any network.

§02

Grind resistance

If the winning hash directly chose your specimen, a farm could search for hashes that land on a rare one. Hashform separates the two: the hash earns the mint, and a block that doesn't exist yet chooses the specimen.
Future-block reveal from the unclaimed specimen poolDECIDEDK = 5 blocks · about 0.5 sDRAFT
DESIGNDECIDEDPARAMETERSDRAFT

Your winning hash commits you at block N. The specimen you receive is chosen with a block that does not exist yet.

seed = pool[ keccak(winningHash, blockhash(N + k)) mod remaining ]
  1. 01COMMIT

    at block N

  2. 02WAIT

    k blocks · blockhash(N+k) not known yet

  3. 03FINALIZE

    at N+k · anyone can call, caller earns a tip

~256-block window before the hash expires

Nobody knows blockhash(N + k) when you submit, including you, so there is nothing to grind toward. After block N + k lands, anyone can call finalize and collect a small tip. A window of about 256 blocks applies before the hash expires. The draw is from the remaining pool, so supply stays exact.

DRAFTk (reveal delay) is a draft parameter.

PSEUDOCODE
mine(nonce):

  require block.number != lastMintBlock

  h = keccak256(msg.sender, nonce, anchor, prevWork)

  require h < baseTarget >> extraBits(msg.sender)

  collect price

  claims[id] = { miner: msg.sender, hash: h, block: block.number }

  finalizePending()          // the next mint finalizes the previous claim

finalize(id):                // permissionless, small tip to caller

  c = claims[id]; require block.number >= c.block + 5

  bh = arbBlockHash(c.block + 5)   // falls back to the latest available hash after ~256 blocks

  index = keccak256(c.hash, bh) mod remainingPool

  specimen = pool.take(index)      // unclaimed indices only

Grinding stops paying because the acceptable proof is fixed before the reveal block exists. Searching more hashes cannot reveal which remaining index will be selected.

The claim uses a placeholder tokenURI reading “Sequencing…” for about K blocks. Final metadata appears after settlement.

Finalization is permissionless and carries a small caller tip. The miner cannot withhold finalization to ask for another reveal.

What this does not solve
  1. Randomness is only as strong as the sequencer's non-collusion.
  2. The finalization window is about 256 blocks DRAFT, after which the fallback applies.
§03

Difficulty and field entropy

Most PoW mints punish the fastest wallet. Hashform measures whether the field is concentrated, and only then makes the winners work harder.
DRAFT

The contract keeps the last 64 winners and measures how concentrated they are with a Herfindahl index: HHI = Σ sᵢ², where sᵢ is each address's share of those wins. When concentration crosses the gate, addresses with many recent wins pay extra difficulty bits.

extraBits(i) = min(cap, ceil(C · log2(1 + nᵢ)))

Every extra bit doubles the expected work, so a capped 8 bits is 256× the hashes for the address that keeps winning. A newcomer with no recent wins pays the base target.

The limit

An operator who splits work across many wallets sidesteps a per-address penalty. The gate does not claim to stop that. It makes the lazy sweep expensive, and leaves the concentration data on chain where anyone can measure it.

Try the curveDRAFT
EXTRA BITS0
WORK MULTIPLIER×1
Recent winsExtra bitsWork multiplier
00×1
12×4
24×16
45×32
87×128
118×256
168×256

Illustrative. C = 2 and cap = 8 are draft values. DRAFT

Field window · last N = 64 winnersDRAFTPer-address penalty cap · 8 bitsDRAFT
HHI = Σ (n_i / N)²

C = (HHI − 1/N) / (1 − 1/N)                 // 0 = evenly spread, 1 = one winner

extraBits(i) = min(cap, ⌈ C · log2(1 + n_i) ⌉),  cap = 8

target(i) = baseTarget >> extraBits(i)

Displayed on the site: Shannon entropy  H = −Σ p_i log2 p_i,  normalized H / log2(N)

HHI is used on-chain because it needs no logarithms. Shannon entropy is computed off-chain for display.

Known limit

This does not stop a farm that splits hashrate across many addresses. The solution rate depends on total hashrate, not the number of addresses, so splitting is free. The penalty raises the cost of casual single-wallet sweeping. It is not a sybil defense.

Retarget windowSET AT LAUNCH
—
Minimum per epochSET AT LAUNCH
—
Idle-period failsafeSET AT LAUNCH
—
§04

Economy

Work earns the right to mint. The epoch's entry price is still paid. Price steps by epoch, while the pool remains fixed at 4,444 specimens.
Fixed collection pool · 4,444DECIDEDEpoch sizes, entry prices, and proceeds split · set at launchSET AT LAUNCH
0 MINTED4,444 TOTAL
EpochSizeEntry price
E1Set at launch SET AT LAUNCH— SET AT LAUNCH
E2Set at launch SET AT LAUNCH— SET AT LAUNCH
E3Set at launch SET AT LAUNCH— SET AT LAUNCH
E4Set at launch SET AT LAUNCH— SET AT LAUNCH
E5Set at launch SET AT LAUNCH— SET AT LAUNCH
E6Set at launch SET AT LAUNCH— SET AT LAUNCH
E7Set at launch SET AT LAUNCH— SET AT LAUNCH
E8Set at launch SET AT LAUNCH— SET AT LAUNCH
E9Set at launch SET AT LAUNCH— SET AT LAUNCH
E10Set at launch SET AT LAUNCH— SET AT LAUNCH
E11Set at launch SET AT LAUNCH— SET AT LAUNCH
§05

The token — $FORMS

$FORMS launches before the mint through a Pons v2 fair launch. Supply is fixed at 1,000,000,000, the token is non-mintable, and team allocation is zero.
SymbolDECIDED
$FORMS
SupplyDECIDED
1,000,000,000
Launch venueDECIDED
Pons v2
Team allocationDECIDED
0
ReserveDECIDED
About 100,000,000 $FORMS
Mint opensSET AT LAUNCH
About one day; exact time announced at launch

About 100,000,000 $FORMS is bought on the open market after launch, in tranches, and held in a public vault. This is not a team allocation. It is bought on the open market, like anyone else's.

The vault is intended to release only to the v2 burn module. The mechanism and any timelock are set at launch.

1Token launches
2Reserve bought and vaulted
3Mint opens
4Staking and burn (v2)
§06

Hash to form

The renderer follows one deterministic pipeline: seed, four hash words, seeded random source, traits, then drawing.
SEED → FOUR HASH WORDS → SEEDED RNG → TRAITS → DRAWING DECIDED

Eight species

  • 01BZ Spiral WaveDECIDED
  • 02Turing LatticeDECIDED
  • 03PhyllotaxisDECIDED
  • 04Cell CultureDECIDED
  • 05Chladni PlateDECIDED
  • 06Strange AttractorDECIDED
  • 07Viral CapsidDECIDED
  • 08Ice DendriteDECIDED
StandardDECIDED
3,024 / 4,444 planned distribution
PrismDECIDED
888 / 4,444 planned distribution
ThermalDECIDED
444 / 4,444 planned distribution
SpectralDECIDED
88 / 4,444 planned distribution
§07

The living clockDECIDED

A specimen has an age. Its animation is driven by chain time, so it keeps growing when nobody is looking, and everyone sees the same frame.
t = now − mintTime

The image shown by marketplaces is rendered at a fixed canonical time. The on-chain animation runs from the specimen's age.

Tested for 240 specimens at ages from 3 seconds to 5 years: no numerical failures.

§08

AssaysPLANNED · V2

Burn $FORMS to run an experiment on your specimen. The result is bounded, recorded, and reversible to view.
May change glyph set, stain, render mode, or one bounded species parameterPLANNED · V2Species, class, and winning hash never mutatePLANNED · V2Capped assay count with rising cost · value not finalDRAFTFuture-block reveal, append-only notebook, original seed retainedPLANNED · V2Burned $FORMS is destroyed, not sent to a team walletPLANNED · V2
§09

Colony and verificationDECIDED

The collection is one growing culture. See all of it, and check any specimen yourself.
RENDERERDECIDEDON-CHAIN DATAPLANNED · V2

Every specimen page carries what you need to reproduce the image locally from its hash. You don't have to trust our renderer. Floating point differs across machines, so a local render matches the reference to visual tolerance, not bit for bit. The colony map shows the whole collection at once: what has been mined, which classes, who holds what.

Each specimen is placed in a two-dimensional hash space from its hash bits, sized by work, colored by class, and connected to the specimen it was chained to.

§10

On chain

Art and metadata are assembled by the Renderer contract from data stored in the chain.
Renderer assembles art and metadata from on-chain dataDECIDEDStatic SVG and on-chain HTML animation · confirm marketplace support at testnetDECIDEDNo IPFS or server dependencyDECIDED

What lives in storage

Quantized platesDECIDED
16 levels · measured at deployment
Engine scriptDECIDED
Measured at deployment
Trait tablesDECIDED
Measured at deployment
§11

Contracts

No contract is deployed. Addresses appear here only when deployed and verified.
NameRoleAddressStatus
HashformERC-721 collection; field-entropy ring bufferNot deployedDRAFT
RendererArt and metadata assemblyNot deployedDECIDED
Art data contractsStored plate and trait dataNot deployedDECIDED
Reserve vault$FORMS custodyNot deployedDRAFT
Burn moduleSpecimen burn flowNot deployedPLANNED · V2
StakingIncubationNot deployedPLANNED · V2
$FORMSCreated by Pons v2Not deployedSET AT LAUNCH

Always confirm deployed addresses against @Hashform on X.

§12

AgentsPLANNED · V2

Hashform will expose a read-only MCP server so any agent can query the collection. Nothing here can sign or spend.
PLANNED · V2

Hashform is also a place for agents to do real work and leave a trace. An agent gets a soul.md, a plain file that describes who it is: its name, how it behaves, what it cares about. The hash of that file goes into the mining preimage.

preimage = wallet ‖ nonce ‖ blockAnchor ‖ prevWork ‖ keccak(soul.md)

Two agents with different souls search different hash spaces, so they find different specimens even on the same block. Change one character and you have a new lineage. Every specimen records the soul hash it was found under.

Read

Target, difficulty state and lineage through the MCP server.

Mine

A mining skill: search a nonce, then commit. The same future-block reveal applies to agents exactly as it does to people.

Prove

Anyone can re-derive the specimen from the hash and the soul.

Rewards for agents are still being designed. $FORMS has a 1B supply that can never be minted again, so nothing can emit tokens per block. Any per-block payout would come from a funded reserve and follow the solvency rule above.

Hash your soul.mdPLANNED · V2
KECCAK2560x8ba0a90f0b6b9a3e…d30b6741

Preview only. The on-chain preimage layout is a draft.

PLANNED · V2
MCP server

Read-only first: check a hash, fetch a specimen's parameters, read the current target and difficulty state, query the colony map. The mining skill is the write path, added on top.

JSON endpoints

Public JSON endpoints for the same data, so indexers, wallets, dashboards and bots can build on it without scraping.

Muse

Meta's Muse is new, early and US-only for now. It could run a soul.md and mine as its own agent, or simply look a specimen up and verify it. We want Hashform ready when it opens up. It's a bonus channel, not something launch depends on.

Which integrations do you want first? Tell us on X

NameDescription
get_collection_stateRead supply and collection state.
get_specimen(id)Read one specimen and its traits.
get_epoch_and_priceRead the active epoch and entry price.
get_field_entropyRead field concentration metrics.
get_reserveRead reserve state.
explain_seed(seed)Explain locally reproducible traits.

Connect an agent

Build a custom integration to Hashform. Its MCP server is [MCP_URL] (streamable HTTP, no authentication). I want you to be able to look up specimens, the current epoch and price, and field entropy from any future conversation. Connect to it, test every tool end to end, show me the results, and save the integration as a reusable skill.

Works with Meta Muse, Claude, and any MCP client. MCP URL: Not live yet.

Agents never hold a mining key. Any future write action returns unsigned calldata that you sign in your own wallet.

§13

Threat model

Known risks are stated with the status of their current defense.
ThreatWhat it isDefenseStatus
Grinding for rare specimensSearching for a preferred revealFuture-block revealDECIDED
Sweeping the first epochOne wallet wins repeatedlyDifficulty minimum and entropy gateDRAFT
Splitting across addressesA farm spreads work over walletsNot defended; cost onlyDRAFT
Sequencer biasBlock producer influences revealTrust assumption, stated plainlyDRAFT
Withholding finalizationMiner delays an unwanted revealPermissionless finalize with tipDECIDED
Solution theftAnother wallet copies a proofAddress inside the hashDECIDED
Cross-browser render driftFloating-point output differsStored-plate toleranceDRAFT
Reserve misuseVault funds leave intended pathRelease only to v2 burn moduleDRAFT
§14

Roadmap

The release sequence has no dates.
  1. 01
    Today: $FORMS fair launch on Pons v2DECIDED
  2. 02
    After: The mint opens. Grind, commit, finalizeSET AT LAUNCH
  3. 03
    After that: Assays, staking, burn, growth, soul.md agents, MCP and JSON APIPLANNED · V2

SET AT LAUNCH Mint price, the exact difficulty schedule and the reveal parameters are tuned before launch.

Staked specimens accrue culture time; growth states need per-species maturity work. No dates until the contracts are audited.

§15

FAQ

Direct answers about mining, settlement, rendering, and planned extensions.