Difficulty
There is no way back down.
Every proof-of-work chain that has shipped can get easier. This one cannot: after initialize, the only assignment to target anywhere in the file subtracts from it.
Nothing is deployed. No address exists on any chain.
There is no factory address, no vault address and no mine address, on mainnet or on any testnet. No transaction has been broadcast. What exists is source, a test suite, the measurements on these pages — and a deploy script that has not been run.
There is no way back down.
Every proof-of-work chain that has shipped can get easier. A two-sided retarget means that when rigs leave, the seam they abandoned becomes cheap again; difficulty oscillates around a mean, and the mine never empties.
This contract has no retarget. After initialize, the only assignment to target anywhere in the file subtracts from it. No function raises it — not owner-only, not Guardian-only, not a scheduled one. Difficulty is monotone for the life of the contract.
The climb stops at exactly one place, and it is not zero: once target < difficultyStep the quotient rounds to zero and the subtraction stops. That fixed point is what keeps the mine from bricking itself at an unmineable target of zero.
Difficulty — schematic. Rises and falls.
Hashes per solution — simulated, 1× to 16×. Never falls.
Design A is the shape every shipped proof-of-work difficulty rule has: a retarget that moves in both directions, so the seam abandoned by one rig is cheap for the next. Design B is this file. The left-hand line is schematic and plots no measured series; the right-hand line is sampled from target -= target / difficultyStep run for 277,260 blocks cut.
What halves is the difficulty target, not a block reward — there is no reward in these contracts to halve. Sampled from target -= target / difficultyStep run for real at the minimum step of 100,000, not from a closed form: it halves every 69,315 blocks cut, a constant count, and each halving still takes longer in wall clock than the one before because nothing retargets.
The only assignment to target subtracts.
Every proof-of-work difficulty rule that has shipped retargets, and that retarget is two-sided: when rigs leave, difficulty falls and the seam they abandoned becomes cheap again. It oscillates around a mean, which is why “harder every time” has never been true of one.
There is no function in this contract that raises target. Not owner-only, not Guardian-only, not a retarget of any kind. After initialize, the only assignment to target anywhere in the file is the subtraction above. Difficulty is monotone for the life of the contract, so the mine depletes rather than cycles.
It has one fixed point, and it is not zero. Once target < difficultyStep, the quotient rounds to zero and the subtraction stops having an effect. That is what keeps the mine from bricking itself at an unmineable target == 0, and it sits far beyond any reachable difficulty.
The one thing that could reach these values is a Guardian beacon upgrade. Both contracts run behind BeaconProxies, so periodBlocks and epochZeroBlock are storage written in initialize rather than Solidity immutables — and initialize is guarded by an _initialized flag in both. The Guardian’s reach is stated, not hidden.
Widths are exact. The three states are the contract’s own target after 0, 69,315 and 138,630 accepted blocks at the minimum difficultyStep, and the hash counts are its difficulty() view, type(uint256).max / target. The magnification is not decoration: it is 1,048,576, the same number as the hashes one solution costs at this genesis target.