Skip to content

Coupon discovery

Nobody quotes the coupon. During Subscription both sides deposit; at strike, finalizeStrike reads the two totals and sets a single couponBps for the life of the series. More protection demand (SHIELD) than note demand (COUPON) pushes the coupon up toward the cap; more note demand pushes it down toward the floor. The coupon is a clearing rate, in the same spirit as a perpetual funding rate.

SymbolMeaning
DTotal COUPON USDG deposited
STotal SHIELD notional deposited, Stock Tokens valued at s0 (not at the provisional deposit-time price)
notionalCapMaximum matched notional for the series
refBpsPer-series reference coupon set at creation (50 bps per weekly observation in the standing template)
couponFloorBps, couponCapBpsBounds; the cap (125 bps in the standing template, hard maximum 400) also sizes the SHIELD prefund

fact

N = min(D, S, notionalCap) couponBps = clamp(couponFloorBps, couponCapBps, refBps × S / D) when D > 0 cancel if D == 0 or S == 0 (everything refundable)

Computed in WAD with explicit rounding down. The oversubscribed side is filled pro rata; unmatched deposits become refundable.

A reserved deposit (the Desk’s fill, posted with a coupon hurdle h = minCouponBps) enters D only as far as the book still discovers a coupon at or above h: before the clamp above, D is reduced to at most refBps × S / h by excluding part of the reserve account’s deposit, never anyone else’s. The excluded quote is refunded to the Desk at strike (ReserveExcluded). A hurdle at or below couponFloorBps excludes nothing.

illustrative refBps = 45, couponFloorBps = 15, couponCapBps = 140, notionalCap = 1,000,000 (the mNVDA standing template; other underlyings differ, see Templates).

D (COUPON)S (SHIELD @ s0)N matchedrefBps × S / DcouponBpsFill
100 000100 000100 0004545 (0.45%)Both sides 100%
100 000150 000100 0006767 (0.67%)SHIELD filled 66.7%
150 000100 000100 0003030 (0.30%)COUPON filled 66.7%
100 000400 000100 000180140 (1.40%, cap)SHIELD filled 25%
100 00025 00025 0001115 (0.15%, floor)COUPON filled 25%
2 000 0002 000 0001 000 0004545Both filled 50% (notionalCap binds)

SHIELD must prefund the maximum coupon liability at the cap because the coupon is unknown until strike:

maxCoupons = N_s × couponCapBps × (observations.length − 1) / 1e4 requiredPrefund = N_s × (couponCapBps × (observations.length − 1) + notionalFeeBps) / 1e4

For a 100,000 USDG SHIELD position on a 13-timestamp mNVDA series: 100,000 × 140 × 12 / 10,000 = 16,800 USDG of coupon capacity, plus the 0.75% notional fee (750 USDG) which the implementation also draws from the prefund at strike, for a required prefund of 17,550 USDG (INoteCoreViews.requiredPrefund). Matching is additionally capped by prefund capacity: N = min(D, S, notionalCap, totalShieldPrefund × 1e4 / prefundRateBps). Once couponBps is discovered, the difference between the cap and the discovered coupon is not immediately refunded; it is released as part of settlement, along with coupons avoided by early autocall. Unmatched stock and unmatched prefund are refundable immediately after strike. See SHIELD.

  • Deterministic. Anyone can recompute couponBps from the two on-chain totals.
  • Bounded. The floor protects SHIELD from paying nothing for protection; the cap bounds SHIELD’s prefund.
  • Manipulation surface. A large late deposit on one side moves the coupon. Mitigations: notionalCap, minTicket, a Subscription window with a fixed subscriptionEnd, and the Desk’s ability to fill only the COUPON side when S > D. Deposits are not withdrawable during Subscription (refund is available only for unmatched amounts after strike), so pushing the coupon costs capital. See Market risk.

The Desk may subscribe to the COUPON side during Subscription only when S > D, under per-series, per-underlying and total caps. This absorbs unmatched SHIELD supply and moderates the coupon toward refBps. The Desk cannot subscribe to SHIELD and cannot act after Subscription closes.

Fills are permissionless and rule based. DeskPolicy publishes one rule per underlying (barrier range, coupon floor, observation count, tenor and the lowest coupon the Desk accepts, minCouponBps). Inside the fill window (the last fillLead seconds of Subscription, 24 hours by default) anyone may call DeskPolicy.fill(seriesId); the policy sizes the fill so the discovered coupon stays at or above the hurdle and never beyond the SHIELD gap or the Desk’s caps, then pays the caller a fixed USDG bounty. The Desk is therefore a price-sensitive counterparty: SHIELD demand that would push the coupon below the hurdle stays unmatched, and because the fill is posted as a reserved deposit the matched part of a fill keeps the hurdle even if the SHIELD side changes after the fill. Desk.fillCoupon accepts calls from the policy only; the binding changes only through the protocol timelock with the published delay. See Desk and Automation.