Preview vs. locked
Two shapes, two jobs:- Preview —
pulse.rates.preview()returns{ rate, youSend, youReceive, expiresAt, quoteId }for display. No order is created. - Locked on the order — the order’s
quotecarries{ rate, asset_amount, locked_until }. This is the binding price the deposit is measured against.
The rate is all-in — there are no separate fees
Pulse’s margin is embedded in the rate. There are no separate fees, no line items, and nothing added on top at settlement:youSend and youReceive already reflect
the final figures. Quote the rate and that is the price — you never have to
reconstruct a total from a base amount plus charges.
Quote lifetime
A locked quote is valid until its expiry —locked_until on an order, expiresAt
on a preview. Past that point the quote is stale and must not be reused. Transact
only against a live lock; a preview shown in the UI should be refreshed before it
lapses.
Re-locking an expired quote
When an order’s quote expires, re-lock it in place withpulse.collectionOrders.refreshQuote(orderId) rather than creating a new order.
The order and its deposit context are preserved; only the price is renewed.
Where to go next
- Amounts and precision — how amounts are represented
- Order lifecycle — where the quote sits in the flow
- Preview a rate — the backend call and its client proxy