Skip to Content
How It WorksOverview

How It Works

SellPolia is a set of on-chain contracts plus an off-chain indexer that watches them. The contracts hold funds and emit events; the indexer turns those events into a queue, matches buyers to sellers, and drives deliveries and payouts.

The lifecycle at a glance

SELLER SELLPOLIA BUYER ------ --------- ----- deposit SETH ─────────▶ SethVault (Sepolia) emits SethReceived indexer creates a FIFO queue order pays via PaymentCollector ◀── buy() / buyWithToken() emits SethPurchased (payment chain) indexer matches the buy against the queue (FIFO), then the reserve backstop ├─ delivers SETH to buyer ──────────▶ SETH on Sepolia │ (vault.sendSeth on Sepolia) └─ seller accrues USD-owed daily Payout batch on Base paid in ETH ◀───────────── Payout (Base)

The three contracts

  • SethVault (Sepolia) — receives seller deposits (each becomes a queue order), holds the house reserve separately, and delivers sold SETH to buyers.
  • PaymentCollector (payment chains) — takes buyer payments in native coin or stablecoins, prices them on-chain via Chainlink, and emits the purchase event.
  • Payout (Base) — pays sellers in ETH, converting the USD they’re owed to ETH at the Chainlink ETH/USD price at payout time.

Two matching sources

Every buy is filled from two sources, in this order:

  1. The live seller queue — open seller orders, oldest first (FIFO).
  2. The SellPolia reserve — an owner-funded backstop inside the vault. When the queue can’t cover a buy, the remainder is filled from the reserve so buys never fail for lack of inventory.

Reserve liquidity is funded through a separate contract path (fundReserve()), so it never becomes a seller queue order and never competes with real sellers for payouts.

Read the details in Selling & the Queue and Buying & Fills.

Last updated on