Epoch 1 Open Seals in 0d 00h 00m Miners 0 Start mining

Documentation

Everything the mine exposes, and what each part promises.

The proof

A nonce counts when this digest is at or below the seam target:

keccak256(abi.encodePacked(
  uint256 block.chainid,
  address mine,
  uint64  epoch,
  uint256 seamId,
  address miner,
  uint256 nonce
))

The target is type(uint256).max / difficulty. Because the miner address is inside the preimage, a nonce copied out of the mempool is worthless to anyone else. Because the epoch is inside it, work cannot be banked for a future epoch. Because the chain id is inside it, nothing carries to another chain.

Each digest can be spent once. A second submission of the same nonce reverts.

The contract

FunctionWhat it does
submit(seamId, nonce)Records a proof and credits the sender with that seam's difficulty as work.
claim()Pays everything settled so far and moves the cursor. Reverts until the reward token is set.
pending(address)What that address can claim right now, walking at most 32 epochs.
stats()Epoch, seal time, miners, proofs, sealed blocks, minted, seam count.
seamInfo(seamId)Difficulty, slice in basis points, proofs, distinct miners on that seam, open.
projected(address)What that address would take from the open epoch if it sealed now.
seamWork(epoch, seamId)Work proved on a seam in an epoch, the denominator of that seam's split.
currentTarget(seamId)The value a digest has to come in at or below.
digest(seamId, miner, nonce)The same hash submit computes, so a rig can be checked against the chain.
epochMinted(epoch)How much of an epoch's block was carried by seams somebody worked.

Rewards

Each epoch mints one block, 1,000,000 PONM at the start, halving every 26 epochs. Every seam carries a fixed slice of it in basis points. When an epoch seals, an address takes, for each seam it worked, block * seamSlice / 10000 * yourWorkOnSeam / seamWork.

A seam nobody worked mints nothing that epoch, and slices are capped so the seams that can take work in an epoch never add up to more than 100%.

Claims are pull based and never expire. A claim follows your own list of the epochs you worked, so a break of any length costs nothing: idle epochs are never walked. One call pays up to 32 of your worked epochs; call again for more. A claim is all or nothing: if the mine holds less than you are owed it reverts with MineUnderfunded, takes nothing, and pays in full once the mine is topped up.

The rig

The rig is a module worker running a 32-bit Keccak-256 built for the loop: the 144-byte preimage is allocated once and only the nonce moves. It yields between slices so the page stays responsive, reports its real rate rather than an estimate, and stops when the tab goes away.

Nothing is uploaded while it runs. The first thing that leaves your machine is the transaction you sign.