ABC REWARDS
Fees go back to holders.
30% of every trading fee accrues to holders of that token, weighted by how much they held and for how long. Distributions are computed offchain, verified onchain, and capped at what was actually collected. They depend on trading activity, so some epochs pay little or nothing.
Fee split
Active configEvery trading fee is split in basis points. The parts always add up to the full fee: 10,000 bps.
- Holders
- HolderRewardVault per token, distributed each epoch by Merkle claims.
- 3,000 bps
- Creator
- CreatorFeeVault. Locked by ABC LOCK for the first 24 hours, then claimable.
- 3,000 bps
- Liquidity
- Added to the pool's real SOL reserve. The price does not move, real backing grows.
- 2,500 bps
- Protocol
- Protocol operations vault. Also receives rounding remainders.
- 1,500 bps
Program parameters
- Spot fee
- 1%
- 100 bps of each ABC curve trade
- FLOW fee
- 0.3%
- 30 bps of each FLOW fill, both sides
- Epoch length
- 10 min
- Demo cadence. Production default is 24 h.
- Minimum eligible balance
- 100,000 tokens
- Time-weighted average for the epoch, per token
Never eligible
- ABC curve pool
- ABC LOCK vault
- FLOW and auction escrows
- Fee vaults
Tokens sitting in a program account are not counted, so a FLOW sell order pauses eligibility for the tokens it escrows until they come back.
Your rewards
Demo dataComputed from your demo trades and simulated market volume, with the production allocation and proof code.
How an epoch is calculated
Offchain computation, onchain verification. The math is the same code that runs on this page.
Retained authority
The rewards publisher key is a retained authority. It decides what goes into each root. The program caps every root at what the vault accrued, so it cannot pay out more than the fees collected, but an incorrect or missing root would delay or misallocate a distribution until it is corrected. All authorities
Fees accrue per token
The holders share of each fee lands in that token's HolderRewardVault. The program records how much each epoch accrued.
Balances are averaged over time
Each wallet's weight is its time-weighted average balance across the epoch. Buying a minute before the epoch ends earns about one minute's worth.
Holding counts, volume does not
Trading volume earns nothing, so wash trading only pays fees. Splitting a balance across wallets earns nothing extra, because the share is linear in balance.
The publisher posts a root
An offchain publisher computes every allocation, builds a Merkle tree, and posts the root with the epoch total. The program rejects any root whose total exceeds what the vault accrued.
Anyone can recompute it
The inputs and the script are published, so anyone can rebuild the tree and check the root. Claims verify a Merkle proof onchain, and a claim bitmap blocks double claims.
Leaf and node hashing (sha256, mirrored in the program)
leaf = sha256(0x00 || epoch u64 LE || mint || wallet || amount u64 LE) node = sha256(0x01 || min(a, b) || max(a, b))