wizz is an agent attached to one coin. The coin was launched on pump.fun, and pump.fun pays a creator fee on every trade. That fee does not go to a person. It goes to an account owned by the wizz program, and the program pays it out to the people holding the coin.
What decides your share is not how long you have held. It is how much falling price you have held through. The program keeps a running total of every drop the coin has ever taken, and each wallet is measured by how much of that total happened while it sat there and did not sell.
Nothing in the system runs on a clock. There are no epochs, no daily snapshots and no timers. Trades cause strikes, fees cause blocks, and cumulative fees cause halvings. If nobody trades, nothing happens, and nothing is owed.
The only money in the system is the coin's creator fee. Nothing is minted to fund payouts and nobody tops the vault up. If the coin does no volume, miners earn nothing, and that is the correct result.
The fee is routed with pump.fun's own fee sharing config. The config names one shareholder, the wizz vault, at the full share. It can be set once, and the right to change it is revoked when it is set. From then on, paying the vault is a public instruction on the pump program that anyone can call.
After the coin leaves the bonding curve and trades on the pump AMM, the same route still applies. The AMM's creator fees are swept back into the same creator vault by another public instruction, and distributed the same way.
The program stores one number called the index. It starts at zero and only ever goes up. It is the sum of every price drop recorded between one strike and the next, measured in basis points of the price before the drop.
If the price falls from one strike to the next by two percent, the index rises by 200 bp. If the price rises, the index does not move. A coin that has bled slowly for a week and a coin that fell off a cliff once can have the same index. The index does not care about shape, only about the total.
The price is read by the program itself from the pool's own reserve accounts at the moment of the strike. On the bonding curve that is the curve account's virtual reserves. On the AMM it is the two pool vault balances. No oracle and no off chain feed is involved.
A strike is a single instruction that tells the program to look at the price now. It costs the caller a transaction fee and pays nothing. wizz sends one after every sell it sees. Anyone else may send one at any moment.
Because strikes sample the price, a dip that fully recovers between two strikes is never recorded. That is why wizz strikes on every sell rather than in batches. A holder who wants a drop on the record can also strike for themselves, since they are the one who benefits from it being counted.
The last 64 strikes are kept in a ring account and shown on the front page and the live page with the slot, the price, the size of the drop and the index afterwards.
A wallet's hashrate is its enlisted balance multiplied by the drawdown it has held through, which is the current index minus the wallet's entry mark. That is the whole definition.
Some consequences are worth stating plainly. A wallet that bought one strike ago has a hashrate of zero no matter how large it is. A wallet cannot buy in just before a block settles and take a share of it. Splitting a position across wallets changes nothing, because hashrate is linear in balance. Two wallets with the same balance and the same entry mark always earn the same.
Hashrate is not stored anywhere. It moves for every wallet on every strike, so the program never writes it down. It is always computed from the balance, the entry mark and the index.
When a wallet is enlisted for the first time, the program records the index at that moment as the wallet's entry mark. Drops that happened before then belong to other people.
Enlisting is public. The instruction takes a wallet's token account, reads the balance and writes the miner account. wizz calls it for every buyer it sees. A holder who wants to be sure can call it for themselves, but no holder has to do anything.
When an enlisted wallet buys more and is enlisted again, the program first banks everything the wallet has earned so far. Then it blends the entry mark by size. The old tokens keep their old mark, the new tokens enter at the current index, and the wallet's single entry mark becomes the weighted average of the two.
This is exact, not an approximation. A wallet with a blended mark earns precisely what two separate wallets would have earned, one holding the old tokens and one holding the new.
The program records a balance for each miner. If the live balance of the wallet's token account is ever lower than the recorded one, the wallet has sold or moved tokens, and it can be slashed.
Slashing is a public instruction. It resets the wallet's entry mark to the current index, sets the recorded balance to the live balance, and returns whatever the wallet had earned and not yet been paid to the current block, where it is shared out to everyone who stayed. The caller keeps a fixed cut of the forfeit as a bounty. The size of that cut is in the parameters table at the end of this page.
Selling part of a position costs the whole wallet its history, not just the part sold. Moving tokens to another wallet counts the same as selling. wizz slashes every seller it sees, and anyone watching the chain can beat it to the bounty.
Fees arriving in the vault fill the current block. When the fill reaches the difficulty, anyone can settle it. Settling splits the block in two: the miner share, which is credited to every enlisted wallet by hashrate, and the burn share, which is set aside.
Forfeits from slashed wallets are added to the current block too, so they go to the wallets that are still holding.
If the total hashrate is zero when a block is due, which can only happen if no enlisted wallet has held through any drop at all, the block does not settle and keeps filling.
Difficulty is the amount of SOL a block needs before it can settle. After each block it is adjusted the way bitcoin adjusts its own, with one change: the yardstick is strikes, not seconds.
The program has a target number of strikes per block. If a block filled in fewer strikes than the target, fees are arriving quickly relative to selling, and the difficulty rises in proportion. If it took more strikes, the difficulty falls. A single adjustment is capped at four times up or four times down.
The effect is that block size follows the market. When volume is heavy, blocks are large and each one is worth settling. When volume is thin, blocks shrink so holders are not left waiting on a number that will never be reached.
The miner share of each block depends on the era. In era zero miners receive the whole block. In era one they receive half, in era two a quarter, and so on. The rest of every block is burn share.
Eras advance on cumulative fees harvested. The first era lasts until a base amount of SOL has been harvested. Each era after it lasts for twice as much as the one before.
Put those together and something tidy falls out. An era that is twice as long and pays half the share hands miners exactly the same total as the era before it. Every era pays miners one base amount of SOL. What changes is how much trading it takes to get through the era, and everything above the miners' part is burned.
The burn share of each block is held in the vault under its own counter. wizz spends it by buying the coin from the pool and burning what it bought, in the same transaction. The SOL spent, the tokens destroyed and the price paid are written to a ring account and listed on the live page.
Early in the coin's life the burn is nothing, because era zero pays miners everything. As volume accumulates the burn takes over. A coin that does enough trading ends up sending most of its creator fee into permanent supply reduction, while still paying holders the same amount per era as it always did.
Paying thousands of wallets by a weight that changes on every strike sounds like it needs a loop over every wallet. It does not. Because hashrate is linear in the index, two running totals are enough.
On each settlement, with F the miner share in lamports, D the index and W the total hashrate, the program adds F divided by W to a total called C, and F times D divided by W to a total called A. Both are kept as 256 bit fixed point numbers.
A wallet records the values of A and C when it enters. What it has earned since is its balance times the quantity: the change in A, minus its entry mark times the change in C. That is one subtraction, one multiplication and another subtraction, whatever the number of blocks or wallets in between.
Total hashrate is also kept without a loop. It is the index times the total enlisted balance, minus the sum over all wallets of balance times entry mark. The program maintains that sum as wallets enter, add, and get slashed.
| step | value |
|---|---|
| wallet | |
| balance, raw units | |
| entry mark | |
| index now | |
| drawdown held | |
| change in A | |
| change in C | |
| entry mark times change in C | |
| bracket | |
| bracket times balance, divided by scale | |
| owed from before | |
| pending, lamports | |
| pending, SOL |
The table above is computed in your browser from the account bytes of the wallet currently ranked first. It is the same arithmetic the program runs when it pays that wallet.
Holders do not claim. Paying a wallet is a public instruction that moves what the wallet has earned from the vault to the wallet's own address. wizz calls it for wallets whose pending amount is worth the transaction fee. A holder in a hurry can call it for themselves, or for anyone else.
Earnings that have been credited and not yet sent are safe from everything except the holder's own sale. They sit in the vault under the wallet's name until someone pays them out, or until the wallet is slashed.
wizz is a process that watches the pool and sends the public instructions at the right moments. It strikes after every sell. It enlists every buyer. It slashes every seller. It moves fees from pump into the vault and records them. It settles blocks when they are due. It pays wallets. It spends the burn share.
It holds one ordinary key, used only to pay transaction fees and the rent for new miner accounts. That key has no special rights in the program. There is no admin instruction, no pause and no way to change a parameter after the program is initialised.
| instruction | who can call it | what it does |
|---|---|---|
| strike | anyone | Reads the pool price. If it is lower than at the last strike, adds the drop to the index. Writes the strike to the ring. |
| enlist | anyone | Creates or updates a wallet's miner account from its live token balance. Banks earnings first, then blends the entry mark. |
| slash | anyone | If a wallet's live balance is under its recorded balance, resets it, forfeits its unpaid earnings to the current block and pays the caller a bounty. |
| harvest | anyone | Counts any new SOL in the vault into the current block and the era total. |
| settle | anyone | When the block is full, splits it into miner share and burn share, updates the two running totals, writes the block account and retargets the difficulty. |
| pay | anyone | Sends a wallet what it has earned, to the wallet's own address. |
| burn | anyone | Spends SOL set aside for burning on a buy from the pool and burns the tokens received in the same transaction. |
Every instruction wizz sends can be sent by anyone. If wizz goes offline, the money keeps arriving in pump's creator vault, because that part is pump's. Any holder can harvest it, strike, settle and pay. The slash bounty exists so that strangers have a reason to keep doing the unfriendly part as well.
The worst case is a stretch with nobody striking. Drops that recover in that stretch go unrecorded, and nobody's funds are at risk. When someone strikes again, the index picks up from the price it finds.
The program owns six kinds of account. State holds every global number. Each wallet has one Miner account. Each settled block has one Block account. Three ring accounts hold the recent strikes, slashes and burns. The vault is a plain account that holds the SOL.
The map below is the State account, byte by byte, with the live contents of each byte once the program is deployed. Every figure on this site that is not market data is decoded from these bytes or from the other five account kinds.
| parameter | value |
|---|---|
| slash bounty | |
| target strikes per block | |
| era base | |
| current difficulty | |
| program | |
| state account | |
| vault | |
| price source | |
| mint |
Index and drawdown figures are in basis points, written bp. One hundred bp is one percent. An index of 25,000 bp means the coin's recorded drops add up to 250 percent of price, which is entirely possible for a coin that has gone up and down many times.
Hashrate is shown in token bp, which is tokens held multiplied by bp held through. On its own the figure means little. The share columns are what matter.
Events are labelled with Solana slot numbers. You will not find a date or a time anywhere on this site, because nothing in wizz depends on one.
Market figures on the front page come from Birdeye and are the only numbers here that do not come from the program's own accounts.