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 (e.g. 150 bps per fortnightly observation, illustrative)
couponFloorBps, couponCapBpsBounds; the cap (default 400 bps) 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.

illustrative refBps = 150, couponFloorBps = 100, couponCapBps = 400, notionalCap = 1,000,000.

D (COUPON)S (SHIELD @ s0)N matchedrefBps × S / DcouponBpsFill
100 000100 000100 000150150 (1.50%)Both sides 100%
100 000150 000100 000225225 (2.25%)SHIELD filled 66.7%
150 000100 000100 000100100 (1.00%, floor)COUPON filled 66.7%
100 000400 000100 000600400 (4.00%, cap)SHIELD filled 25%
100 00050 00050 00075100 (floor)COUPON filled 50%
2 000 0002 000 0001 000 000150150Both filled 50% (cap 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 27-timestamp series: 100,000 × 400 × 26 / 10,000 = 104,000 USDG of coupon capacity, plus the 0.25% notional fee (250 USDG) which the implementation also draws from the prefund at strike, for a required prefund of 104,250 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. See Desk.