Skip to main content
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

  1. Quote the cost with calculateBuyCost(token, amount).
  2. Approve the payment token to the Market for at least totalCost.
  3. Buy with a maxCost guard.

Selling

  1. Quote the proceeds with calculateSellPayout(token, amount).
  2. Approve the RWA token to the Market for amount.
  3. 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:
  1. Sell on the Market at any time, at the accreted price less the asset’s fee.
  2. 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.