InviaInviaDocs
GitHubLaunch app
Protocol/Fee schedule

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

ActionWho paysFee
create_offerMaker0
cancel_offerMaker0
expire_offerCaller0, caller earns the rent bounty
take_offerTaker0.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.

Maker fee0, attracts liquidity, removes the disincentive to list
Cancel fee0, no penalty for changing your mind before a fill
Expire fee0, and the caller of expire_offer earns the freed rent as a bounty for cleanup
Taker fee20 bps of the payment leg, in the payment mint

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:

  1. 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.
  2. 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.

If you don't trust the docs, read the code

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.