Skip to main content
Every RWA asset can have a venue: a market-making pool where approved market makers trade with the asset’s vault and quote investors a two-way price. It complements the Market, where investors buy from and sell to the vault at one price. A venue is a meeting place, not a counterparty. It holds no balances of its own and issues nothing: every trade moves tokens directly between the maker, the vault and the investor.
Testnets only today. Venues are deployed on Base Sepolia and Solana devnet. They are not deployed on either mainnet yet, and no market maker is approved anywhere.

Two markets in one venue

Every price in the venue is the asset’s live accrued price, the same one the Market uses (EVM: Market.currentPriceScaled(token); see yield and accrual).

Create

create(cashIn, minStockOut): the maker pays cNGN and receives existing vault stock at the live price. Nothing is minted. A creation fee and a protocol fee come off cashIn; the rest buys stock. Creation is capped per firm per day (reset at 00:00 UTC); a create that would cross the cap reverts with DailyCapExceeded (no partial fills).

Redeem

A redemption returns stock to the vault in exchange for cNGN. The stock moves to the vault at request, and the price and fees are locked then.
1

Request

requestRedeem(amount, minPayout, deadline). Reverts with SlippageExceeded if the locked payout is under minPayout, and DeadlineExpired past deadline (0 is not allowed). A maker can have one redemption outstanding at a time (AlreadyQueued); the slot frees when that redemption is resolved.
2

Paid now, or queued

On Base, the request pays at once when the queue is empty and the vault’s available cash covers it. Otherwise it joins a strict first-in-first-out queue. On Solana, requests always queue; clients send request_redeem and claim_redeem together when the pair would succeed.
3

Claim

claimRedeem(id) pays the redemption at the head of the queue (NotAtQueueHead otherwise) from the vault’s available cash (InsufficientFloat if short). Before the auto-return window anyone may claim; after it, only the maker.
4

Resolve, after the force-resolve window

claimRedeem now reverts with UseResolve. Anyone may call resolveRedeem(id) (TooEarlyToResolve before the window). The vault’s cash decides the outcome: the maker is paid at the locked price if it can be covered, otherwise the stock is returned. If the price has risen since the request, the stock returned is capped at amount × lockedPrice ÷ livePrice, so a delayed redemption is never worth more than the payout it replaced. There is no compensation for waiting.
5

Withdraw what is owed

resolveRedeem only records the outcome. withdrawOwed(maker) delivers it (or withdrawOwedStock / withdrawOwedCash separately). Anyone may call it; it always pays the maker.
Available cash (“float”) = the vault’s cNGN minus a fixed retail reserve (kept for investors selling on the Market), capped by the vault’s allowance to the venue. Pause. When a venue is paused, creates and new redemption requests stop, but queued redemptions can still be claimed and resolved.

Secondary trading

A maker quotes a spread around the live price, not a price:
  • setQuote(bidSpreadBps, askSpreadBps, validUntil): each spread must be within the venue’s maximum (QuoteTooWide), and validUntil within its validity cap (ValidityTooLong).
  • Investors trade with a named maker: buyFrom(maker, amount, maxCost) and sellTo(maker, amount, minPayout). Trades against an expired quote revert with QuoteExpired. Both legs move directly between investor and maker.
  • A maker’s depth on each side is the smaller of its balance and its allowance to the venue, so the maker controls depth through its token approvals.
A newly created venue has every secondary-trading limit at zero until GetEquity sets them.

Makers trade through the venue

An approved maker cannot sell on the Market: the Market reverts with MakersMustUseTheVenue (Solana: rwa_market error 6025) and the maker redeems through the venue instead. This keeps maker flow out of the retail book. The restriction lifts if the maker is stood down.

Parameters

Each venue’s parameters are set by GetEquity’s multisig and can be read on chain. The pilot values intended for mainnet: On the testnets the windows are much shorter (300 s and 900 s) so the full redemption lifecycle can be exercised in minutes.

Errors

Solana’s rwa_venue program uses the same names (error codes 6000–6023 in its IDL).

Next

Become a market maker

Approval, setup and every maker call on both chains.

Venue addresses

Base Sepolia venues by asset; Solana venue derivation.