Why
Users think in their currency; chains settle in theirs. Between the price shown and the payment settling, the rate moves — so every fiat-priced crypto checkout is silently running a tiny FX desk, whether its designers noticed or not. Ignore it and either the merchant leaks margin on every dip or the buyer gets surprise-charged on every spike; both discoveries arrive as support tickets.
The deliberate version has three knobs: how long a quote is honored (TTL), what happens at expiry (re-quote UX, not a silent failure), and who eats movement inside the window. None of these is an oracle question — the oracle only tells you the rate; the product decides what to promise about it. Stablecoin settlement makes the window narrow, not zero, and the structure identical.
How it works
One checkout, a scripted price feed, three drift policies, and the ledger of who paid for movement.
PoC
A checkout against anvil: item priced 5 USD, paid in a mock token whose USD price a script walks ±3% per minute. Quote endpoint returns { tokenAmount, quoteId, expiresAt(+30s) }; payment submits quoteId; the server accepts, re-quotes, or rejects per policy. Run the same 100 purchases with prices replayed under each policy: (A) honor expired quotes — measure merchant loss; (B) reject at settlement if moved — measure buyer failures; (C) 30s TTL with visible countdown and one-click re-quote — measure both. Print the three-row table.
What it proves
The quote is a short-dated option the product writes for free, and TTL is its expiry. Policy A prices the option at the merchant's expense, B at the buyer's UX, C bounds both — which is why every serious crypto checkout (and every FX-touching commerce API) converges on C. The interesting output is not the code but the table: drift cost as a product decision made visible.
Where it lands in Jayverse
- Verex: give every fiat-priced order or Stripe onboarding quote a TTL and a visible re-quote flow. Decide the drift policy explicitly (merchant absorbs, buyer absorbs, or a band with re-quote) instead of letting it fall out of whichever code path shipped first.
- Wallet/Bridge: any displayed amount that can move before settlement needs an expiresAt. A bridge conversion or a balance shown mid-transfer is the same short-dated option as the checkout — show the countdown and a one-click re-quote rather than a silently stale number.
- Token/Exchange (mini-AMM): pick one of the three drift policies for slippage and document it. The AMM already has this decision implicitly in its slippage tolerance; make it an explicit product choice (who eats movement inside the quote window) rather than a default parameter nobody chose on purpose.
Key expressions
| Expression | 뜻 · 쓰이는 자리 |
|---|---|
| wearing a ... costume | 겉으로만 ~인, ~의 탈을 쓴(비유) · "product design wearing an exchange-rate costume" |
| leak margin | 마진(이윤)이 새어나가다, 손해를 보다 · "the merchant leaks margin on every dip" |
| surprise-charged | 예상 못 한 금액을 청구당하는 · "the buyer gets surprise-charged on every spike" |
| eat (a cost) | (손실·비용을) 떠안다 · "who eats movement inside the window" |
| short-dated option | 만기가 짧은 옵션(금융 용어) · "The quote is a short-dated option the product writes for free" |
| write (an option) | 옵션을 발행하다(매도하다) · "the product writes for free" |
| converges on | (여러 사례가) 한 방향으로 수렴한다 · "every serious crypto checkout ... converges on C" |
| bound (verb) | 상한을 씌워 제한하다 · "C bounds both" |
| drift cost | 가격 변동으로 인한 손실 비용 · "drift cost as a product decision made visible" |
| silently running | 아무도 모르게 뒤에서 운영되고 있는 · "silently running a tiny FX desk" |
| TTL | 유효시간(Time To Live) · 견적이 유효한 시간 길이, 이 카드가 다루는 첫 번째 설계 변수. "needs a quote TTL, a re-quote flow" |