Fee schedule
Invia charges 20 basis points (0.20%) on the taker side of every fill, paid in the offer's payment mint. Makers pay nothing. The fee rate is compiled into the program and the treasury address is hardcoded, neither can be changed after deploy.
The schedule
| Action | Who pays | Fee |
|---|---|---|
create_offer | Maker | 0 |
cancel_offer | Maker | 0 |
expire_offer | Caller | 0, caller earns the rent bounty |
take_offer | Taker | 0.20% of the payment leg, in the payment mint |
The fee is skimmed at fill time, inside the same transaction as the swap. The maker receives 99.80% of the payment, the treasury receives 0.20%, and the taker receives the asset side in full.
Why 0.20%
Existing on-chain OTC venues charge between 2.5% and 5% per trade. Invia exists in part because that is too high for spot trades where settlement is atomic and there is no operator risk to underwrite. 20 bps covers the cost of running the protocol around the program (RPC, frontend, monitoring) with margin to fund continued work.
Why payment mint, not asset mint
The fee is always taken from the payment leg (USDC, USDT, or SOL), never from the random SPL on the asset leg. Two reasons:
- Liquid treasury. Fees accumulate in stables and SOL, which the treasury can actually use. A treasury full of low-cap memecoins is illiquid and unusable.
- No taxation of the asset. Takers receive the asset side in full at the listed price. The fee does not muddy the rate the taker sees on the row.
The treasury
The fee destination is a constant in the program, TREASURY,
hardcoded at compile time. There is no fee-routing instruction, no admin
authority, no governance vote that can change it. The treasury is a Squads
multisig with multiple signers, dedicated to funding future protocol work.
Why the rate cannot change
The fee is a const in the program source. Changing it would require
publishing new program bytecode. Since the upgrade authority is renounced at
the launch deploy, no key on chain can publish new bytecode. The 20 bps you
see today is the 20 bps every fill will ever pay.
The fee constant lives in the Anchor program source under
program/programs/invia/src/lib.rs in the open repo. Same for the
treasury address. Both are visible at the program ID once deployed.