Quoting
A quoter runs one book on a slice of the vault. You bring a pricing model and a USDC bond; the program gives your book an allocation of SOL and USDC, fills takers against your quotes inside its limits, and credits 40% of your positive excess to your bond at every settlement.
Before you register
- A cold wallet — the owner of the seat. It posts and withdraws the bond, sets hot keys and pauses the book. Keep it offline from your quoting process.
- A USDC bond. The bond is first-loss capital and sets your allocation: up to 1× the bond at tier 0, 5× at tier 1, 15× at tier 2. The deployment sets the minimum bond.
- A quoting process that can send a transaction every slot or two. It holds only a hot key.
The v0 vault has five seats on SOL/USDC. The Books page lists every registered book, so you can see whether one is free.
Register
- Open the Quoter desk with your cold wallet connected.
- Enter the bond in USDC and select Register and post bond. Your wallet signs one transaction that creates your quoter, book and quote accounts and moves the bond into the program's bond account.
Your book starts at tier 0 with no allocation. 10% of the deployable vault is set aside for tier-0 books, so the next settlement can give a new quoter an allocation to build a record with.
Hot keys
Your quoting process signs update_quote with a hot key. A hot key can write your book's quote and nothing else: it cannot move tokens, change the bond or touch the book's limits.
- On the desk, select Create a quote key (Replace the quote key once one is set). The desk generates a keypair in your browser.
- Approve the transaction in your cold wallet. Adding a key is signed by both the cold owner and the new hot key, so no one can enroll a key they do not hold.
- Download the hot key file and move it to your quoting host. The desk keeps no copy after you leave.
A seat can hold up to three hot keys. Changing the list takes effect at once: the quote's generation counter moves on, so nothing signed by a removed key can land.
Streaming quotes
Each quote is a mid price in USDC per SOL and up to five levels per side, each an offset from the mid in basis points and a size in lamports. update_quote replaces the whole ladder in one write; its measured cost is 178 CU, so a quote every slot costs little more than the base fee.
The Quoter SDK, openprop-quoter-sdk in Rust, does the mechanical parts:
- reads your book's state, the reference price and the configured limits from the chain;
- builds a ladder with a reference engine — spread, inventory bias, level sizes, retail delta and refresh cadence are your parameters, and a hook lets your model change them on the fly;
- signs with the hot key and keeps the quote sequence strictly increasing in a local sequence file, so a restarted process never replays an older ladder;
- sends each signed update down the landing paths you plug in, in order: it includes an adapter for BAM's Maker Priority Plugin and takes a Block Engine client or plain RPC. The reference quoter sends through RPC.
The SDK expects exactly one hot key on the seat. It reads the program, the mints and the cluster from the API, and the reference price and the configured limits from the chain; nothing is hard-coded.
Run the reference quoter
Fund the hot key with a little SOL — it pays the fee for every quote it signs — then, from the backend folder of the OpenProp repository:
export QUOTER_API_URL=https://api.openprop.trade
export QUOTER_RPC_URL=<your RPC endpoint>
export QUOTER_OWNER=<your cold wallet address>
export QUOTER_HOT_KEY_FILE=<path to the downloaded hot key file>
export QUOTER_SEQUENCE_DIR=.local/quoter-sequences
cargo run --manifest-path crates/quoter-sdk/Cargo.toml --locked --example local-quoter -- --stream
QUOTER_ENGINE_PARAMETERS_FILE points the engine at your own strategy values — spread, inventory bias, level sizes, retail delta, refresh cadence. Your RPC endpoint may carry a provider key; the quoter never logs it. Run one engine per seat: the sequence file holds a lock, so a second process on the same quote stops before it can post.
What the program enforces on your book
| Limit | Value | Effect |
|---|---|---|
| Quote age | 2 slots | No fills until you quote again |
| Band | Mid within the band around the reference | No fills outside it |
| Skew | Inventory skew within its limit | Fills stop at the limit |
| Hourly loss | 0.5% of allocation | No fills until the window rolls |
| Epoch loss | 2% of allocation | No fills for the rest of the epoch |
| Repeated trips | 2 epoch-loss trips in 7 epochs | Down one tier |
The desk shows your bond, available bond, tier, allocation cap, completed epochs and score. A book's swap preview shows every check against its current quote.
Score, tiers and allocation
At each checkpoint, about every 1,500 slots, the program records your excess return per unit of allocation. Your score is the EWMA mean over the EWMA standard deviation of those returns, with a 7-day half-life, shrunk toward zero while your record is short. Swaps signed by your own keys count in your profit and loss but not in your score.
| Tier | Allocation up to | Requirement |
|---|---|---|
| 0 | 1× bond | Registered |
| 1 | 5× bond | 14 epochs, positive score, no loss trips in the last 7 epochs |
| 2 | 15× bond | 45 epochs, score above the tier-2 threshold, guardian review |
At every settlement, books with a positive score share the deployable vault by score, capped at 35% of the vault per quoter and at a 25% change per epoch.
Pause, unbond and leave
- Pause book stops fills on your book at once and keeps your bond and history. Resume book when you are ready; allocation returns at the next settlement.
- Add bond at any time; it raises your capacity from the next settlement.
- Request unbond to withdraw bond. It waits at least two epochs, and only the part not backing your allocation or a profit lock can leave. Claim it on the desk when it is ready.
Earnings
At each settlement, 40% of your book's positive excess above its high-water mark is credited to your bond in USDC. Credited profit matures in tranches before it can be unbonded. A losing epoch is charged to your bond before it reaches liquidity providers. Fees and settlement works through an example.