Everything you need to trade lives on two contracts: Market (quotes + buy/sell)
and the RWA token itself (ERC-20 balance/approve + payouts). The functions below are
the trader-facing subset — admin/governance functions are intentionally omitted.
Market — quotes & trading
RWA token — balances, approvals & terms
The token is a standard ERC-20 (18 decimals) plus a few reads for the asset terms.
There are no coupon payments. Yield accrues into the Market price instead — see
How yield accrues. hasPeriodicPayouts() still exists on the
contract and returns payoutFrequency != NONE, but no payment happens on any
schedule; treat it as a descriptive label, not as behaviour. The former
calculatePayout() and claimPayout() functions have been removed.
payoutToken() also tells you which ERC-20 you’ll spend when buying and receive when
selling — it’s the asset’s settlement currency.
Buying
- Quote the cost with
calculateBuyCost(token, amount).
- Approve the payment token to the
Market for at least totalCost.
- Buy with a
maxCost guard.
Selling
- Quote the proceeds with
calculateSellPayout(token, amount).
- Approve the RWA token to the
Market for amount.
- Sell with a
minPayout guard.
How yield accrues
Your balance never changes, and nothing is ever pushed to you. Interest is carried by
the asset’s price on the Market, which rises every second at the contractual rate:
So a holding is worth balance x price, and that figure grows continuously without any
transaction. Accrual stops at maturity — a matured note does not keep earning.
Read the value with the Market, not the token:
currentPrice() is rounded down to whole hundredths of the payout token. On a
low-priced asset that figure can sit unchanged for weeks while the value genuinely
accrues — a 1.00 note at 16.5% takes about 22 days to move by one hundredth. The
underlying accrual is carried at far finer precision and is paid in full; only this
display value is rounded. Use calculateSellPayout when the number matters.
There are two ways to realise the accrued value:
- Sell on the Market at any time, at the accreted price less the asset’s fee.
- Redeem at maturity, if the asset has one.
Redemption at maturity
Redemption is self-service — you must call it yourself. Nothing is pushed to you
automatically. It pays principal plus all accrued interest in one transfer, gross, with no
fee charged at maturity:
redeemPrincipal() returns 0 and does nothing if the asset has no maturity — funds and
equity are perpetual, so for those, selling on the Market is the only exit.
Separately, the issuer may wind an asset down before maturity. That path burns every
holder and pays out at a single snapshot price; you do not need to call anything for it,
and trading is halted when it begins.