Skip to content

Integrations for developers

ContractRoleStandard
NoteCoreSeries registry, escrow, matching, observation, settlementINoteCore + INoteCoreViews
NoteLegsCOUPON and SHIELD unitsERC-1155 with transfer hook into NoteCore
OracleAdapterOfficial-close price readsIOracleAdapter
MarketCalendarOfficial close validationIMarketCalendar
RevenueRouterFee sink, buyback auctionIFeeSink
NOTEGovernance tokenERC-20 + Permit + Votes
sNOTEStaking vaultERC-4626 + IRewardSink
TreasuryReserves and floor redemption
BondDepositoryBond markets
DeskCOUPON buyer vaultERC-4626 + ERC-1155 holder

Deployed addresses: Addresses (TBD).

fact

QuantityUnit
Prices (s0, lastPrice, feed answers)1e8 (Chainlink convention), uiMultiplier already applied by the feed
Quote (USDG) amountsToken decimals (6 for USDG); read quote() and its decimals()
Stock Token amounts18 decimals, raw ERC-20 balances (not balanceOfUI)
Leg units1 unit = 1 quote unit of matched notional (so 6 decimals for USDG)
couponIndexWAD (1e18) net quote per unit
Basis points1e4 = 100%
quote = stock × price / 1e8 / 10^(18 − quoteDecimals) stock = quote × 10^(18 − quoteDecimals) × 1e8 / price (rounded up at strike)
INoteCoreViews.SeriesView memory v = core.getSeries(seriesId);
// v.status, v.observations, v.s0, v.couponBps, v.matchedNotional, v.couponIndex, v.nextObs, v.breached
bool holding = core.barrierHolding(seriesId); // lastPrice * 1e4 >= s0 * barrierBps
uint256 owed = core.accruedCoupon(seriesId, account); // claimable now
(uint256 q, uint256 s) = core.previewRedeem(seriesId, 0, units); // COUPON redemption preview
usdg.approve(address(core), amount);
core.depositCoupon(seriesId, amount); // amount >= minTicket; before subscriptionEnd
uint256 prefund = core.requiredPrefund(seriesId, stockAmount); // at provisional price
stock.approve(address(core), stockAmount);
usdg.approve(address(core), prefund);
core.depositShield(seriesId, stockAmount, prefund);
core.settle(seriesId, account); // permissionless: mints legs to account, books refunds
core.claim(seriesId); // COUPON coupons
core.redeem(seriesId, units); // COUPON principal (USDG or stock)
core.redeemShield(seriesId, units);
core.refund(seriesId); // unmatched deposits

claim, redeem, redeemShield and refund settle the caller first if needed.

Your contract must implement IERC1155Receiver (or inherit ERC1155Holder). Coupons accrue to the holding contract; call claim from it. The transfer hook settles accrued coupons into claimableQuote on both sides of every transfer, so a vault can safely accept and hand out COUPON units without tracking coupon snapshots itself.

ABIs are produced by forge build from contracts/ in the repository. Interfaces on these pages are copied from contracts/src/interfaces/ and the contract sources; the sources are authoritative.