Where you are. You have a pool that will trade any size at a price it computes, and you have measured what it charges for size: about the percentage of the pool you are taking. For a trade worth half the pool, that was fifty percent.
Nobody trades that way. So what does an institution actually do when it wants to move something large?
The obvious answer is the one module 4 already built: an order book, with resting orders and price-time priority. On a shared ledger that answer runs into an awkward fact immediately. Every order, every amendment and every cancellation is a change to the ledger’s state, and changing state costs something. A market maker updating quotes thousands of times a day is a market maker paying for each one.
The idea in one paragraph
Where a pool answers everybody with the same formula, a request-for-quote engine asks a short list of vetted firms what they will do for this specific trade, and lets the buyer take the best answer. Nothing rests on a book, so nothing has to be cancelled and no state changes until a trade actually happens. The makers can price the trade knowing who is asking and how large it is, which is exactly the information a pool does not have and cannot use. The cost of the arrangement is that it is not open: you have to be a member to ask, and the makers have to be vetted to answer.
Wider than the screen; scroll it sideways.
The auction against the formula
The exercise runs a trade worth half the pool through both venues.
The pool charges fifty percent over the mid, exactly as lesson 2 predicted. The auction returns four quotes, and the best of them is twelve basis points over the mid. On this trade, that difference is over sixteen million.
The reason is not that the makers are generous. It is that a maker pricing a fifty million trade can hedge it, work it over a day, or match it against another client’s opposite interest; the pool cannot do any of those things, because it is a function of two numbers with no memory and no other clients.
| venue | price | over mid |
|---|---|---|
| constant-product pool | 150.00 | 50.00% |
| best of four quotes | 100.12 | 0.12% |
n = 5 trials · one trade worth half the pool, both venues
Why the membership gate is not incidental
It is tempting to read the vetting as regulatory overhead bolted onto a trading mechanism. It is closer to being the mechanism.
A maker gives a fine price partly because it knows who is asking. If anonymous parties could request quotes, the makers would have to price for the possibility that the requester knows something they do not, which is module 4’s adverse selection arriving in a new venue. The gate is what lets the price be good.
That has a consequence worth carrying to lesson 14: an arrangement of vetted counterparties, quoting each other prices, settling atomically, is most of what a clearing rail is. This lesson has quietly built a third of one.
Check yourself
1. Why is an on-chain order book awkward in a way an off-chain one is not?
Because every order, amendment and cancellation is a change to the ledger’s state, and state changes cost something. A market maker updating quotes constantly pays for every update, which is a cost structure that does not suit the activity.
2. Why does the auction beat the pool by so much on a large trade?
Because a maker can hedge the trade, work it over time or match it against another client’s opposite interest. The pool has no memory, no other clients and no ability to do any of that; it can only quote what its own two balances imply, which for a trade of that size is a very bad number.
3. The keenest maker in the exercise did not quote. Why does that matter?
Because no auction can show you the price you were not offered. A public book at least displays the resting orders; a quote-based venue shows only what somebody chose to send, so the absence of the best price is invisible in the result.
4. Why is the membership gate part of the mechanism rather than overhead on it?
Because knowing who is asking is part of why the price is good. Quoting to anonymous requesters means pricing for the chance that the requester is better informed, which is adverse selection, and it widens every quote. The gate is what makes the tight price possible.
Do this
Run the auction and compare.
python3 code/rfq.py
The starter provides the pool’s pricing and the five makers, one of whom declines, and leaves you best_quote: run the auction and return the name and price of the best answer actually shown. The assertions check that four makers quote, that the auction beats the pool for this size, and that the finest price in the room belonged to the maker who stayed silent.
The completed version is in solutions/rfq.py.
What you can now do. You can run a quote auction against a pool, explain why size does not trade against a formula, and see why the vetting is part of the pricing. The next lesson goes further along the same spectrum, to venues that show nothing at all.