Earning on Bazaar

Three permissionless ways to earn from the protocol's operation, ordered by how much infrastructure they demand. (Building a frontend? That's its own page: Integrators.)

Insurance LP

What it is: deposit USDC into a specific market's insurance fund and hold shares of it. You are selling crash insurance on that one market — steady fee income against tail risk.

You earn a pro-rata slice of everything the fund collects: insurance fees on every fill, all collateral seized from liquidated traders, the vault's liquidation-unwind profits, slashed sequencer bonds, and forfeited governance bonds.

You risk the fund's payouts: liquidation-unwind losses, ADL winner credits, keeper rewards — and in a market collapse, the fund is the last cushion before trader haircuts, so it can be drained. Share price = fund ÷ shares; it floats both ways.

The terms (full detail: Insurance Fund):

RuleValue
Minimum deposit$5 — per market, choose which books you back
Exitrequest → 20-day cooldown → 3-day execution window
Exit rate limitsslower when the fund is below target — you cannot stampede out of a thinning backstop
Crisis lockwithdrawals blocked while ADL is pending, a termination is scheduled, or the 48 h settlement window is open (bad debt is charged to the fund at finalize — LPs cannot exit ahead of it)
Governancematured shares (7 days) vote on shutting the market down (60% threshold)

The honest framing: you get paid because your capital is locked in exactly the moments you'd want it out. Size accordingly.

Keeper bounties

What it is: run a bot that calls permissionless maintenance functions and collects the bounty attached to each. No bond, no stake — just gas and uptime. All bounties pay in USDC, immediately, from the pair's insurance fund or the offender's bond.

OpportunityCallBountyWhat your bot watches
Liquidationsliquidate(users[], priceUpdate)max($0.10, 2 bp of notional) per positionposition health vs. lagged MMR (checkBucketSolvency on the lens)
ADL executionexecuteAdl(winners[], priceUpdate)0.1% of averted bad debtisAdlPending; rank winners by getAdlScore on the lens, descending — it reproduces the on-chain ranking exactly, and a mis-sorted batch reverts
Censorship proofschallengeOmission(...)1% of the censored notional (min ~$3 of the $20 floor)BatchRecorded events vs. your own view of the resting book
Stale-flag proofschallengeStaleBatch(...)0.5% of batch notionalbatches flagged isStale vs. Pyth's actual publish times
Dead-market cleanupterminateStalePair, terminateScheduledPair, UMA settlement pokes0.1% (10 bp) of the fund, capped $100 (proposals)oracle silence > 21 days; passed cessation timestamps
Terminal settlementliquidate (settlement mode) during the 48 h window, then finalizeTerminationmax($0.10, 2 bp of notional) per position, from that position's own remaining collateral (getTerminalSettlementBounty on the lens quotes it per position)a pair whose settlement price is fixed; needs no priceUpdate and no ETH

Practical notes: every price-touching call takes a priceUpdate — your bot pushes the Pyth update and acts on it atomically (Pyth's fee is paid in ETH, refunded when unused). Bounty payments use non-reverting transfers: use a clean address that can receive USDC. Liquidation and challenge markets are competitive — latency matters; ADL and termination cleanup are sleepier niches.

Sequencing

What it is: run the off-chain matcher for one or more markets. You watch resting orders, sort them, and submit matchBatch a few times per second. This is the protocol's most demanding — and most rewarded — role.

You earn, per fill you match: the dynamic taker fee (0.75 bp → 3.75 bp, priced by how utilized global sequencer capacity is), 0.25 bp from the maker, and $0.03 flat from each side. On thin-order flow the flats dominate; at scale the basis points do.

You stake:$1,000 bond in BazaarSequencer, which caps your throughput at 14× bond per rolling 30 minutes — more volume requires more skin. Withdrawal respects the same window.

You're slashed for exactly two provable offenses (see Sequencers & Fraud Proofs):

  • Censoring an order that should have matched: 7% of the notional. The operational discipline this imposes: include every live in-range order you saw at your observation block — the engine auto-cancels the ones that can't pay, and witnesses the ones it skips, so honest inclusion is always safe.
  • Mislabeling a batch as price-stale when a fresh Pyth tick existed: 1%.

There is no slashing for downtime, for matching slowly, or for someone else matching first — competition is by fee capture, not liveness obligations.

Minimum viable setup: an Arbitrum node or reliable RPC, a Pyth Hermes price stream, an indexer of the pair's OrderUpdated/BatchRecorded events to maintain the resting book, sort logic per the matching invariants, and a funded relayer key. Start on one quiet market with the minimum bond; capacity and fee revenue scale with the bond as you grow.