Skip to main content
This section shows you how to buy and sell RWA (Real-World Asset) tokens directly against the smart contracts — no backend API in the middle. The same product is deployed on two chains, Ethereum (Base) and Solana, so pick the one your wallet is on. The trading model is identical on both.
This reference is self-contained and safe to drop into another repo. You only need a wallet, the addresses on these pages, and an RPC endpoint.

How trading works

You trade against a vault, not against other users. Each asset has:
  • A token — the ERC-20 (Base) or SPL Token-2022 (Solana) representing the asset.
  • A vault — holds the payment token (for buy-backs) and unsold token inventory.
  • A market — one contract/program serving all assets, with a single admin-set price per asset.
Every trade is with the vault: you buy tokens from it and sell them back to it at a single admin-set price, minus a fee. Because this isn’t an AMM, the price is fixed per trade — it doesn’t shift with your order size or with market depth. One token or a million, you get the same per-token price with zero slippage from your own trade.

Pricing & fees

  • Price is an integer in USD cents per whole token (PRICE_PRECISION = 100). A price of 150 means $1.50 per token.
  • Fees are in basis points (100 bps = 1%), taken off your buy cost and sell proceeds.

Settlement currency

Each asset settles in its own payment token — e.g. USDC or CNGN. Always read it per asset (payoutToken() on EVM, payout_token in the token metadata on Solana) rather than assuming USDC.

Slippage protection

Every buy/sell takes a guard argument. Quote first, then pass the guard so the trade reverts if the price moved against you:
  • Buy: maxCost / max_cost — the most payment token you’re willing to spend.
  • Sell: minPayout / min_proceeds — the least payment token you’ll accept.

Payouts & redemption

Nothing is ever paid out on a schedule, and there is nothing to claim. Debt and fund tokens accrue interest into the asset’s price on the Market: your balance stays the same and each unit becomes worth more, every second, at the contractual annual rate. Accrual stops at maturity. You realise it by selling on the Market at the accreted price, or — if the asset has a maturity — by calling redeemPrincipal() yourself once it matures. See each chain’s page for how to read the price and redeem.

Ethereum (Base)

Addresses, then the Market / token surface you call to trade.

Solana

Program IDs & PDAs, then the rwa_market instructions you call to trade.