Market Capacity#
Trader-ledger sizing, seat tiers, and the ledger-allocation prelude.
What capacity is#
Each market has a trader_ledger PDA with a fixed number of seats — the
maximum number of distinct traders who can hold a position. The seat count is
chosen at creation via the num_seats field of CreateMarket and cannot be
changed afterward.
Seat tiers#
num_seats must be one of nine on-chain values (TRADER_LEDGER_SEAT_OPTIONS):
| Tier (UI) | num_seats | Ledger size (bytes) | Refundable rent (≈) |
|---|---|---|---|
| Small (default) | 128 | 9,272 | ~0.065 SOL |
| Standard | 1,025 | 73,856 | ~0.515 SOL |
| — | 1,153 | 83,072 | ~0.58 SOL |
| — | 2,049 | 147,584 | ~1.03 SOL |
| — | 2,177 | 156,800 | ~1.09 SOL |
| Large | 4,097 | 295,040 | ~2.054 SOL |
| — | 4,225 | 304,256 | ~2.11 SOL |
| — | 8,193 | 589,952 | ~4.10 SOL |
| Max | 8,321 | 599,168 | ~4.171 SOL |
Ledger size = 56 + num_seats * 72 bytes. Rent ≈ (128 + size) * 3480 * 2
lamports (Solana rent-exempt minimum). The web/mobile/CLI surfaces expose the
four named tiers; the CLI --seats flag reaches the rest.
Refundable rent#
The creator pre-pays the ledger rent. When the market is closed after
resolution (CloseMarket), the trader_ledger rent (along with the market,
orderbook, and vault rent) is returned to the creator.
The EnsureTraderLedgerSpace prelude#
Solana caps account growth at MAX_PERMITTED_DATA_INCREASE (10,240 bytes) per
top-level instruction, so a ledger larger than ~141 seats cannot be allocated
in one shot. Before CreateMarket, callers must invoke
EnsureTraderLedgerSpace (0x2E) ceil(target_size / 10240) times to grow the
PDA in chunks, where target_size = 56 + num_seats * 72. The instruction is
idempotent and a no-op once the PDA is at target size. CreateMarket rejects a
ledger that is not fully pre-grown.
The TypeScript (@seesaw/core), Rust (sdk-rust), and Python (sdk-python)
SDKs bundle this prelude automatically — see the
SDK create-market example.