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.
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.
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.
Credited plus unbanked. What a harvest has delivered and nobody has taken out yet.
Still counting the floor — partial.
Who the next deposit goes to
Everything burned, by which burn
- FEEDING—
- EVERYTHING ELSE—
Burn per round, against what is left
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.
Anyone can turn the crank
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.
In the contract, not yet in the accumulator. Every monster's pending balance understates its earnings by its share of this.
No arguments. No permissions. No reward for the caller.
PonstroNFT
The pinned selector, never a guessed one.
harvest(minRewardOut, minBurnOut) — also open to anyone, but it takes slippage bounds, so it belongs in a script rather than behind a button.
What the owner can change
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.
| Parameter | Contract | Set with | Now |
|---|---|---|---|
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.
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.
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.
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.
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.
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.
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.
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.