Economics
Where a period’s trading tax goes, and what the project actually takes.
The split constants have no setter. What varies is which of them the project address collects on — and that is why its take is a range rather than a single number.
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.
2% on each side — the figures we would fix at launch.
No token exists and nothing has traded. These are the values we would write into the launch payload if we launched: a 2% buy tax and a 2% sell tax, mktBps at 10,000 so the entire non-Flap part of the tax would go to the vault, dividendBps at 0 so there would be no dividend leg, and commissionReceiver left at address(0). They are our intent, not a live configuration.
Flap’s own fee is 1,000 bps — measured on chain from a launch the fork suite really executes, and now pinned to that number by an assertion, so the day Flap changes it the suite goes red instead of quietly invalidating every figure below. At 1,000 bps, every 100 units of trading tax would leave 90 for the vault.
Naming any commissionReceiver drops the vault’s share from 9,000 bps to 8,700, and those 300 bps come out of the vault’s own share — the wage bill — not out of Flap’s fee and not out of anyone else’s slice. The mainnet-fork test asserts that as the identity zeroShare − namedShare == namedBps rather than as a comparison.
Launch parameters we would set — not a deployed configuration
The two bps figures are measured on a BSC mainnet fork in Commission.mainnet.t.sol; the rows marked intended are launch parameters nothing has yet been launched with. Source: FACTORY.md
commissionReceiver is a field of the launch payload supplied to Flap’s VaultPortal by whoever launches. It is not a property of this factory, and the factory cannot constrain it: newVault is never given it, and neither is the normalised payload the launch hook validates. There is no hook on the factory side where it could be rejected, so any launcher through this factory can name a receiver, and pay for it out of the wage bill.
Our own launch will pass address(0). That is a promise about the transaction we send, not a constraint the code enforces, and it is stated that way on purpose.
Source: FACTORY.md — Commission
Flap’s 1,000 bps is measured on a BSC mainnet fork and pinned by an assertion; the four constants have no setter. The share-of-trade column is a derivation from those two facts and the 2% buy and sell tax we would set at launch — not an observation. No token exists and nothing has traded.
Four constants, no setter, and a snapshot taken at funding time.
The vault’s share splits on hardcoded constants: WAGE 6000, PROJECT 3000, REFERRAL 800, BOUNTY 200. There is no function that changes them.
Tax arriving in period N funds period N+1, so nobody can cut a block and then dispatch a backlog of tax into the period they just proved work in. The project address, the referrer and the integer remainder all resolve from a snapshot taken when that period was first funded, so changing the project later cannot redirect a period that is already funded.
The 2% settlement bounty is paid on the spot to whoever calls settle, which is why payday never waits on us: settlement is a permissionless public call.
| Slice | Share | Goes to |
|---|---|---|
| WAGE | 60% | across the blocks cut in that period |
| PROJECT | 30% | the project address snapshotted at first funding |
| REFERRAL | 8% | referrers, carved from the pot, not from a wage |
| BOUNTY | 2% | whoever calls settle, paid immediately |
| Integer dust | — | the funding-time project, never a later period |
Constants: WAGE 6000 / PROJECT 3000 / REFERRAL 800 / BOUNTY 200. No setter. Source: FACTORY.md, README.md
WAGE 6000 · PROJECT 3000 · REFERRAL 800 · BOUNTY 200 bps, and no function changes them. What varies is which slices have a payee: an unreferred miner’s 8% and the integer remainder fall to the same project address, and a period nobody cut has neither a wage nor a referral to pay. Rising difficulty makes that last state more common over time, not less.
The pot is 60% of what the trading tax paid into that period. It does not grow with the number of miners and it does not shrink when they leave — _settle divides it by however many blocks were cut. So the wage per block is a hyperbola, and the steep end is the one rising difficulty walks toward. Nothing is minted at any point on this curve; every unit on the vertical axis is BNB the token’s own trading tax already paid in.