Skip to content

COUPON

fact COUPON is leg 0 of a series in NoteLegs (ERC-1155), id (seriesId << 1) | 0. One unit is one raw quote unit of matched notional (10⁻⁶ USDG for 6-decimal USDG, so 1 USDG of notional is 1,000,000 units). Units are transferable and composable.

MomentConditionCOUPON receives
StrikematchedN_c units minted (lazily via settle); unmatched USDG refundable
Each intermediate observationP >= barrierN_c × couponBps / 1e4 × (1 − couponFeeBps / 1e4) net coupon, accrued to couponIndex
Each intermediate observationP < barriernothing; series continues
Intermediate observationP >= autocallthat coupon, and units become redeemable at 1 USDG
MaturityP >= barrierfinal coupon, units redeemable at 1 USDG
MaturityP < barrierno coupon; each 1 USDG of units (1e6 units) redeemable for 1e6 × 1e12 × 1e8 / s0 Stock Token wei

Coupons are not pushed to holders. NoteCore keeps a per-series cumulative index and a per-holder snapshot.

couponIndex[series] += netCoupon × 1e18 / N_c (WAD, on each paid observation) accrued(holder) = balance × (couponIndex − couponIndexPaid[holder]) / 1e18 claim(seriesId) → transfers accrued + claimableQuote[holder]; sets couponIndexPaid = couponIndex

fact On any ERC-1155 transfer, NoteLegs calls NoteCore.onLegTransfer(seriesId, leg, from, to, amount) before balances change. The hook settles the sender’s and receiver’s accrued coupons into claimableQuote and updates both snapshots. A buyer of COUPON units on a secondary market therefore never inherits the seller’s unclaimed coupons, and a seller never loses them.

illustrative Alice holds 60,000 units and Bob 40,000 of a 100,000-unit series. Net coupon per observation is 1,275 USDG.

EventcouponIndex (USDG per unit)Alice claimableBob claimable
Observation 1 paid0.01275765.00510.00
Observation 2 paid0.025501,530.001,020.00
Alice transfers 10,000 units to Carol0.025501,530.00 settled into claimableQuote1,020.00
Observation 3 paid0.038251,530.00 + 637.50 = 2,167.501,020.00 + 510.00 = 1,530.00
Carol (10,000 units)127.50

Alice’s claimable total 2,167.50 = 60,000 × 0.02550 + 50,000 × 0.01275. Carol earns only from observation 3 onwards.

  • Autocalled / Matured, not breached: redeem(seriesId, units) burns units, pays units raw USDG (1 USDG per 1e6 units).
  • Matured, breached: redeem(seriesId, units) burns units, pays units × 10^(18 − quoteDecimals) × 1e8 / s0 Stock Token wei.
  • previewRedeem(seriesId, 0, units) returns (quoteOut, stockOut) for the current state.

If the series was oversubscribed on the COUPON side, the unmatched share of each deposit is refundable after strike via refund(seriesId). If the series was cancelled, the full deposit is refundable. See Coupon discovery for the pro-rata rule.

  • Principal is at risk if the final observation is below the barrier: you receive stock worth S_T / s0 of your notional. See Market risk.
  • Coupons for observations below the barrier are not paid and not recovered.
  • Early autocall caps total coupons. The higher the stock at the first intermediate observation, the shorter the trade.
  • No issuer credit risk on the protocol side: the USDG you deposit is the escrow. You do bear Stock Token issuer risk upon physical settlement. See Issuer risk.