DocumentationBuild on Note

Distribute Notes

Documentation snapshot 28 October 2026. Deployment · Audit Status
On this page

fact Every call on this page exists on NoteCore and RollPolicy as deployed on Robinhood Chain testnet (deployment 12). The full developer reference is under Developers; this page is the shortest path for a distribution surface such as a wallet stock page.

The Pattern

A note appears where the user already is: the stock page. Three screens, four contract calls.

fact The Pattern
ScreenCallWhat it shows
Discoverroll.openSeriesOf(underlying)The live series for the stock on screen, with coupon and barrier
Termscore.getSeries(seriesId)Barrier, coupon, observations, fees, exactly as enforced
Subscribecore.depositCoupon(seriesId, amount)One signature after the USDG approval. The wallet holds the ERC-1155 leg
Holdcore.accruedCoupon(seriesId, owner)Coupons paid so far; claim any time, redeem at maturity

The Build on Note page shows this pattern in its integration workbench, under Notes.

Discover

// series in subscription for one stock
uint256[] memory ids = roll.openSeriesOf(underlying);
INoteCore.SeriesView memory v = core.getSeries(ids[0]);
// v.barrierBps, v.autocallBps, v.couponFloorBps, v.couponCapBps, v.refBps,
// v.observations, v.subscriptionEnd,
// v.minTicket, v.status; after strike also v.s0, v.couponBps, v.lastPrice,
// v.couponIndex, v.breached

A series is worth surfacing when status is subscription and subscriptionEnd is in the future. Before strike the coupon is a range: couponFloorBps to couponCapBps, with refBps as the reference the desk quotes around. At strike couponBps is discovered and s0 is set; from then on show those. Everything shown is what the contract enforces, not a projection.

Quote the Terms

Amounts passed to the contracts are raw quote units. With six-decimal USDG, 1 USDG of matched notional is represented by 1,000,000 raw COUPON units. What the user needs to see before signing:

fact Quote the Terms Reference
FieldSource
Coupon per observationv.couponFloorBps to v.couponCapBps before strike (v.refBps reference); v.couponBps after
Barrierv.barrierBps of s0; the strike price v.s0 is set at strike from the feed
Observation datesv.observations, an array of timestamps
Autocall levelv.autocallBps of s0
Feesv.couponFeeBps on coupons, v.notionalFeeBps on matched notional
If breached at maturityStock delivered at s0: previewRedeem(seriesId, 0, units) reports the stock payout in raw units

Minimum ticket (v.minTicket) and the deadline (v.subscriptionEnd) come from the series; a deposit after the deadline or below the minimum reverts.

Subscribe

usdg.approve(address(core), amount);
core.depositCoupon(seriesId, amount);

The deposit sits in escrow until strike. If the series is under-matched the unmatched part is refunded (core.refund(seriesId)); the matched part becomes COUPON units in NoteLegs, id (seriesId << 1) | 0. A wallet that wants the user to hold the leg directly simply lets the user’s address be the depositor.

Hold

// claimable now
uint256 owed = core.accruedCoupon(seriesId, owner);
// pays coupons to the caller
core.claim(seriesId);
// principal at autocall or maturity, USDG or stock
core.redeem(seriesId, units);

claim and redeem settle the caller’s position first if strike has happened but settlement has not run for them. Already accrued coupons remain claimable by the sender on transfer. The recipient receives future accrual on the transferred units, not the sender’s past coupons.

For a position card, the three numbers users care about are accruedCoupon, the next observation date and the distance to the barrier (lastPrice ÷ barrierPrice − 1).

SHIELD

SHIELD holders escrow Stock Tokens and prefund the coupons and the notional fee in USDG. COUPON holders deposit USDG notional and receive the net coupons. At a maturity barrier breach, SHIELD receives the USDG notional and delivers stock to COUPON at the strike price; without a breach, SHIELD receives its stock back plus unused prefund. See Subscribe SHIELD for requiredPrefund and depositShield.

Indexing

Events for every step are listed under Events. A stock page needs none of them: the reads above are enough and are bounded per stock.

A little more clarity?

Keep exploring, or revisit this topic from the navigation.