InviaInviaDocs
GitHubLaunch app
Trading/Partial fills

Partial fills

A maker can list a large size and let multiple takers fill it in chunks. Every fill takes a slice of the remaining size at the offer's fixed price. This is the mechanic that makes Invia practical for whale-sized positions.

The rule

Each take must satisfy fill_amount >= min_fill, with one exception: when fill_amount == remaining_size (the final slice), the program always allows it regardless of min_fill. This guarantees an offer can always be cleared to zero without leaving stranded dust.

The min fill is set by the maker at offer creation. It exists for two reasons:

  1. Protect against dust grief. Without it, a hostile taker could fill 1 token at a time and force the maker to pay rent and gas on a long tail of tiny fills.
  2. Keep settlements economical. Each fill is a Solana transaction with a small fee. Setting a min fill rules out fills where the fee outweighs the trade.

A reasonable default is 5% of total size. The app sets that as the default in the Create Offer modal but the maker can adjust it.

Worked example

A maker lists 1,000,000 MEME at 0.0001 SOL per token, min fill 5% (50,000 MEME).

Initial statevault holds 1,000,000 MEME · remaining = 1,000,000
Taker A fills 200,000pays 20 SOL (19.96 to maker, 0.04 to treasury) · remaining = 800,000
Taker B fills 500,000pays 50 SOL (49.90 to maker, 0.10 to treasury) · remaining = 300,000
Taker C fills 300,000pays 30 SOL (29.94 to maker, 0.06 to treasury) · remaining = 0 → offer closes, rent refunded to maker

Why this matters

A maker holding 1M tokens can quote one price for the whole bag and let the market come to them in pieces. They do not need to manage partial cancels, re-list at smaller sizes, or worry about which buyer sees the offer first.

A buyer who only wants 100k of that million can take exactly that, at the exact same price the next buyer will pay. There is no priority queue, no rebate ladder, and no slippage by size.

Setting a useful min fill

Setting min fill too low invites dust grief. Setting it too high makes the offer unappetizing, small takers won't bother. For a 1M token offer, anywhere between 1% and 10% is usually right. The app default (5%) is a sensible starting point.