SECTOR 05 · ACCOUNTS

The payroll,
with the panel off.

Every figure below is read from the contract on a poll, or summed across a full scan of the floor. Nothing is estimated. Where a number could not be read it prints an em-dash, and where a number rests on an assumption the assumption is on screen next to it.

PROTOCOL READNO SOURCEThe feed window could not be read — showing the SPEC default for layout only.READ —
$PONS paid out, lifetime
—$PONSNo contract-side total exists. Summing it needs the whole floor, and the census is still counting.
$PONS credited, unclaimed
—$PONSAlready owed to monsters by weight; waiting on their owners to claim.
$PONS unbanked
—$PONSIn the contract, not yet in the accumulator. No pending() can see it.
$PONSTRO burned
—$PONSTROMint burns plus feed burns, read as the balance at 0x…dEaD.
SECTOR 05 · VAULT

Where a swap fee ends up

Every $PONSTRO swap pays a fee. A harvest claims it and splits it three ways, in equal parts: one leg buys $PONS and deposits it in the NFT contract for the monsters, one buys $PONSTRO and burns it, and one mints a full-range liquidity position and hands it to whoever is on overtime. There is no fourth destination and no dev leg. The burn and liquidity legs are each wrapped in try/catch so a failure there can never roll back the reward leg — that exact coupling is what broke harvests in the earlier project.

  • $PONS LEG—
  • BURN LEG—
  • LIQUIDITY LEG—

The owner sets the reward and liquidity legs directly and the burn leg is what is left, so the three always make up the whole fee — raising one is always taking from another, and there is no destination outside these three. A change applies immediately. An earlier project froze its split as a constant and then could not fix it, which is most of why this board exists.

Harvests run

No harvest counter exists on the contracts, and inventing one from an unindexed log would be a guess. The vault figures above are the cumulative effect of every harvest so far.

—
$PONS in the building

Credited plus unbanked. What a harvest has delivered and nobody has taken out yet.

—
Claimed by owners

Still counting the floor — partial.

—
SECTOR 05 · WEIGHTS

Who the next deposit goes to

Total weight
—Sum of every monster's STORED weight. It counts lapsing monsters at their old, too-high weight until somebody pokes them.
Fed at least once
—Never-fed monsters are the 0.01x rung. Everybody else is somewhere on the ladder.
One streak level gets
—Of every $PONS deposit. A monster ten days running takes ten of these — —.
One intern gets
—A hundredth of a single streak level, and a thousandth of a maxed monster. That is the spread.
Why unbanked is shown apart
pending() deliberately excludes $PONS that has landed but has not been folded into the accumulator. Folding it into a monster's payable balance on this site would promise money that claim() will not transfer. It is a separate figure until someone turns the crank.
Total weight is deliberately stale
Decay is only realised when a monster is touched, so the denominator above counts lapsed monsters at the weight they had before they lapsed. That direction is the safe one — an over-counted denominator pays out LESS per unit than it could, never more, and the remainder stays in the contract until somebody calls poke. The shift board lists who is holding it up.
FLOOR CENSUSNO SOURCE0 of — monsters readREAD —
SECTOR 05 · FURNACE

Everything burned, by which burn

Burned by feeding
—$PONSTROSum of every monster's tenure. The recurring burn.
Burned by everything else
—$PONSTROSwept mint ETH, harvest buybacks, and direct sends. Indistinguishable on chain.
Burned, all in
—$PONSTRObalanceOf(0x…dEaD). Read directly, never as a supply delta.
Monsters hired
—MAX_SUPPLY is a constant. There is no setter that adds a desk.
  • FEEDING—
  • EVERYTHING ELSE—
Split still counting
The feeding leg is summed from every monster's tenure, and the census has read 0 of — so far. The split stays blank until the count is complete — a partial sum would understate feeding and hand the difference to the other leg.
SECTOR 05 · RATE

Burn per round, against what is left

ONE ASSUMPTION
Burned per round
—$PONSTROMonsters on a streak × the flat feed cost. Needs the full census.
Share of remaining supply
—/ roundOne round = one feed window = —.
Compounded per day
—/ 24hSame rate, expressed over a day.
Supply still outstanding
—$PONSTROAssumed total supply, less what is already burned.
What that implies

Half-life cannot be computed until the burn per round and the outstanding supply are both known. Both are shown above; whichever is an em-dash is the one missing.

Feeding only. Mint burns are one-off and excluded, and the burner leg — which spends swap fees buying $PONSTRO to burn — is excluded too, because this page cannot read it. Both make the real rate faster, so this figure is a floor, not a forecast. The one thing assumed is that the next round looks like the last one: — monsters were actually fed inside the last window, out of — that have ever been fed at all. When feeding drops the burn slows and the redistribution on the shift board speeds up.

Supply is an assumption, not a reading
$PONSTRO is an external token, and the NFT has not named it yet — or its supply could not be read just now. Everything else on this panel is read; the denominator is whatever you set here until the token answers, and this switches to the real reading on its own.
= 1.00B total
SECTOR 05 · MAINTENANCE

Anyone can turn the crank

PERMISSIONLESS

Nothing here waits on an operator. The fee harvest is callable by anyone through the relay, and notifyReward() — the call that credits $PONS already sitting in the vault to the monsters, by weight — is callable by anyone, always, with no arguments. Whoever presses it pays gas and receives nothing extra. That is what makes it safe to leave open.

Unbanked $PONS, waiting

In the contract, not yet in the accumulator. Every monster's pending balance understates its earnings by its share of this.

—
Call

No arguments. No permissions. No reward for the caller.

notifyReward()
To

PonstroNFT

—
Calldata

The pinned selector, never a guessed one.

0x5d54bda4
Harvest relay

harvest(minRewardOut, minBurnOut) — also open to anyone, but it takes slippage bounds, so it belongs in a script rather than behind a button.

—
Why the button is off
Resolving the deployment…
What it changes
The $PONS moves from unbanked into accRewardPerWeight, which credits it to every monster in proportion to its weight — 1.00 for a fed one, 0.01 for an intern. It does not transfer anything to anybody's wallet, and it cannot be aimed at a particular token.
SECTOR 05 · PARAMETER CAGE

What the owner can change

SUNSET — UNREAD

Every number on this board is a plain owner setter. The owner can set it at any time, and the new value applies in the same transaction — each change is logged on chain with the old value and the new one. What you see here is the value the contract holds right now, re-read every 20 seconds. There is no admin withdrawal.

ParameterContractSet withNow
FEED COST

What one feed burns, per monster, flat. Raising it burns supply faster and prices out small holders; lowering it makes tenure cheaper to buy. The contract refuses only zero.

PonstroNFT
IMMEDIATE

setFeedCost()

—
MINT PRICE

What hiring one monster costs, in ETH. The ETH it collects is not a treasury; the only function that can move it sends all of it to the burner.

PonstroNFT
IMMEDIATE

setMintPriceWei()

—
FEED WINDOW

A feed gains at most one streak level per window, and decay is counted in windows. The contract refuses only zero.

PonstroNFT
IMMEDIATE

setFeedWindow()

—
GRACE

The slack on the decay deadline. A streak holds while its monster is fed within feed window + grace; after that a level is lost, and the late feed does not buy it back.

PonstroNFT
IMMEDIATE

setGraceWindow()

—
POKE BOUNTY

What a stranger is paid for settling somebody else's lapsed monster, out of what the settle releases. At zero nobody is paid to clear the backlog, and everyone still feeding is paid slightly less than they earned until somebody does.

PonstroNFT
IMMEDIATE

setPokeBountyBps()

—
WALLET LIMIT

Lifetime mints per wallet. A fairness signal, not a security control — it is bypassable with more wallets and the contract's own natspec says so.

PonstroNFT
IMMEDIATE

setWalletLimit()

—
REWARD LEG

Share of each harvest that buys $PONS for the monsters. With the liquidity leg it must fit inside the whole harvest; the burn leg is whatever is left. There is no destination outside the three legs.

PonstroFeeRouter
IMMEDIATE

setRewardLegBps()

—
LIQUIDITY LEG

Share of each harvest that mints liquidity for the overtime crew. The same one check as the reward leg, from the other side.

PonstroFeeRouter
IMMEDIATE

setLiquidityLegBps()

—
ETH PER HARVEST

The most fresh ETH one harvest splits, and the most any one leg's swap may spend. A larger balance simply takes several harvests.

PonstroFeeRouter
IMMEDIATE

setMaxEthPerHarvest()

—
SLIPPAGE

How far below the reference price the reward leg's $PONS buy may settle.

PonstroFeeRouter
IMMEDIATE

setMaxSlippageBps()

—
REWARD VENUE TIER

The Uniswap V3 fee tier the reward leg buys $PONS in.

PonstroFeeRouter
IMMEDIATE

setPonsPoolFee()

—
PRICE REFERENCE TIER

The fee tier of the pool the reward leg's price floor is read from.

PonstroFeeRouter
IMMEDIATE

setRefPoolFee()

—
TWAP WINDOW

The averaging window the price band is measured against. The contract refuses only zero.

PonstroFeeRouter
IMMEDIATE

setTwapWindow()

—
PRICE BAND

How far the reference pool's spot price may sit from its TWAP before a harvest with a reward leg refuses to run.

PonstroFeeRouter
IMMEDIATE

setMaxTickDeviation()

—

The owner sets each of these immediately. The only values a setter refuses are the ones that would break the contract's own arithmetic.

Switches and addresses

Not numbers, and also immediate: a gate, an artwork URL, the NFT's burner, two slots that can only be written once, the router's venue addresses until each is frozen, and who has priority on work anybody can already do.

mintOpen

A gate, not a price. It can stop hiring and restart it; it cannot move anybody's money. After sunsetSetters() it can only be closed, never reopened.

bool
baseURI

Artwork location. setBaseURI() moves it immediately — the fix for a metadata directory that stops resolving — until freezeMetadata() ends it for good. metadataFrozen() on the NFT says which side of that line the collection is on.

string, settable until frozen
burner (NFT)

Where sweepMintProceeds() sends the mint ETH and where the marketplace sends its burn share. setBurner() on the NFT moves it immediately and checks nothing about the address. The handbook's address plate reads burner() live. sunsetSetters() on the NFT ends it.

address, settable
ponstroToken · overtime

Set once at wiring time and never again — the mint runs before the token and the farm exist, so both slots have to be fillable later. A second call reverts.

address, set-once
burner · swap venue · farm (router)

Where the router's burn leg, reward-leg swap and liquidity leg are sent. Each moves immediately and cannot be pointed at an address with no code; each has its own one-way freeze (freezeBurner, freezeSwapVenue, freezeOvertime) after which it can never move again. sunsetSetters() does not freeze them.

address, settable until frozen
keeper

Who has priority to call harvest. Harvesting stays permissionless whatever this is set to, so the worst an owner can do here is fail to stop somebody else doing the work.

address

Not settable by anyone

  • There is no admin withdrawal of user funds anywhere in the codebase. The function does not exist.
  • The mint takes ETH and holds it as mintProceedsWei. The only function that can move it is sweepMintProceeds(), which anybody may call, which takes no destination argument, and which can only reach the NFT's burner() — an address the owner sets with setBurner(), listed beside this.
  • Feeding burns $PONSTRO to 0x…dEaD directly. It is a burn, not a deposit: there is no withdrawal because there was never a balance. The burn address is checked in the constructor against the one canonical dead address.
  • rescueToken() reverts for the reward token and for $PONSTRO. It can only move genuinely stray tokens.
  • renounceOwnership() is disabled and reverts, so ownership cannot be dropped into a hole with the setters still live.
  • Every numeric setter emits the old value and the new one, so the whole history of every number is readable from the chain's logs.
  • sunsetSetters() is one-way. After it, every numeric setter on that contract reverts forever.
READ-ONLY

This page sends nothing except the crank, which is permissionless and pays its caller nothing. Every other figure is a view call.