Secondary Market Trading Guide
A complete guide to buying and selling property tokens on the SecondaryDAO marketplace.
What is Secondary Trading?
After a property's initial token sale is complete, token holders can buy and sell their tokens with other investors on the secondary market. This works like a stock exchange:
-
Sellers list tokens they want to sell at their asking price
-
Buyers place orders for tokens they want to buy at their bid price
-
When prices match, trades execute automatically
How the CLOB Engine Works
SecondaryDAO runs a central limit order book (CLOB) for each property token. "Central" means everyone sees the same book; "limit order" means every order has a price you're willing to accept (not a market order that executes at any price). Both sides — buy and sell — rest on chain in the property's PropertySaleEscrowTrading contract.
- Sell orders — when you post one, your tokens move into the contract's escrow until either a buyer matches you, you cancel, or the order expires.
- Buy orders — when you post one, your USDC moves into the contract's escrow at your bid price (with a small headroom buffer for the trading fee).
- One active order per side per wallet — a wallet can have one open sell order and one open buy order at a time. Posting a new order on the same side overwrites the previous one (refunding the previous escrow back to your wallet).
- Settlement at the seller's price — when a buyer's bid lines up with a seller's ask, the contract atomically pays the seller, transfers tokens to the buyer, routes the platform fee to the SecondaryDAO treasury, and refunds the buyer any leftover escrow.
- KYC at execute time — the contract re-verifies each party is on the property's compliance pack right before settlement.
This is different from a "marketplace" where you list items and wait for a buyer to message you. The CLOB is fully autonomous — once your order is in the book, the matching engine handles everything else.
How the Order Book Works
The order book shows all active buy and sell orders for a property:
| Sell Orders (Red) | Buy Orders (Green) |
|---|---|
| Lowest prices at top | Highest prices at top |
| These are "asks" | These are "bids" |
| Sellers waiting for buyers | Buyers waiting for sellers |
The Spread: The gap between the lowest sell price and highest buy price. When these prices overlap (buyer willing to pay more than seller is asking), trades happen automatically.
How to Sell Your Tokens
Step 1: Navigate to Secondary Trading
Go to the property page and select the "Secondary Trading" or "Order Book" section.
Step 2: Enter Your Sell Order
-
Token Amount: How many tokens you want to sell
-
Price per Token: Your asking price in USD
-
Duration: How long the order stays in the order book before expiring. Default 30 days, you can lower it to as little as 1 day. The contract caps at 30 days. When the order expires we'll email you so you can re-post or cancel.
Step 3: Approve the Transaction
Your wallet will ask you to approve the transaction. This is a one-time security step per property that allows the system to transfer tokens when your order is filled.
Step 4: Your Order is Live
Your sell order now appears in the order book (red side). Other traders can see it and buy from you. Your tokens are now in the contract's escrow until the order resolves.
Step 5: Wait for a Match
When a buyer's price meets or exceeds your asking price: - The trade executes automatically at YOUR price - You receive USDC (minus any trading fees) - The buyer receives your tokens
Step 6: Order Expiration
If your order isn't filled within the duration you set (default 30 days), it stops matching. Your escrowed tokens stay in the contract until you cancel or post a fresh order — and we'll send you an email when it expires so you don't forget. See "Why orders expire" below.
How to Buy Tokens
Step 1: Navigate to Secondary Trading
Go to the property page and select the "Secondary Trading" or "Order Book" section.
Step 2: Enter Your Buy Order
-
Token Amount: How many tokens you want to buy
-
Price per Token: The maximum price you're willing to pay
Buy orders placed via the order book use a fixed 30-day expiration. (Buy orders are typically created tactically to match a specific sell order, so the duration picker lives on the sell side only.) If a buy order isn't matched within 30 days, we'll email you and you can re-post or cancel.
Step 3: Approve USDC Spending
Your wallet will ask you to approve USDC spending. This allows the system to transfer payment when your order is filled.
Step 4: Your Order is Live
Your buy order now appears in the order book (green side). Sellers can see your bid. Your USDC is now in the contract's escrow until the order resolves.
Step 5: Wait for a Match
When a seller's price is at or below your bid: - The trade executes automatically at the seller's price - You receive the property tokens - The seller receives your USDC payment - Any leftover escrow (the difference between your bid and the seller's lower price) is refunded to your wallet
Step 6: Order Expiration
If your order isn't filled within 30 days, it stops matching. Your escrowed USDC stays in the contract until you cancel or post a fresh order — and we'll email you when it expires.
Understanding the Order Book Display
SELL ORDERS (Asks) BUY ORDERS (Bids)
Price Tokens Total Price Tokens Total
$52.00 100 $5,200 $48.00 150 $7,200 ← Best bid
$51.50 200 $10,300 $47.50 100 $4,750
$51.00 50 $2,550 $47.00 200 $9,400
$50.50 75 $3,788 ← $46.50 125 $5,813
Best ask (lowest)
Spread: $2.50 ($50.50 - $48.00)
Reading the order book: - Best Ask: The lowest price someone is willing to sell at ($50.50 in example) - Best Bid: The highest price someone is willing to pay ($48.00 in example) - Spread: The gap between best bid and best ask ($2.50 in example) - When spread is zero or negative: Orders will match and trades execute
When Orders Match
Orders match when a buyer is willing to pay at least what a seller is asking.
Example: - You place a buy order at $50.00 - A seller has an order at $48.00 - Result: Trade executes at $48.00 (seller's price) - You pay less than your maximum!
The rule: Trades always execute at the seller's price, which benefits buyers who bid higher.
Why Orders Expire (and What to Do About It)
Sell orders default to 30 days (you can lower this when you place them; minimum 1 day, maximum 30). Buy orders placed through the web app are always 30 days. After expiration, the order can no longer match — but the funds you escrowed (tokens if you were selling, USDC if you were buying) stay in the contract until you either cancel or post a fresh order on the same side. You'll get an email when your order expires so you can re-post or cancel — your money is never trapped; the matching engine just stops trying.
Five reasons we expire orders:
- Stale-price protection. Real estate prices drift over months. An order at last year's price is a free option for whoever catches it later. Expiration forces makers to re-affirm their price periodically — a safety feature for the order maker, not a penalty.
- No locked funds forever. Without expiration, escrowed tokens or USDC sit in the contract indefinitely if the maker forgets, loses access, or moves on. The 30-day window guarantees a known maximum.
- Clean order book. Without expiration the book accumulates indefinite ghost orders. Expiration keeps the book tractable for everyone.
- Compliance freshness. KYC, AML, and Reg D / Reg S accreditation can change. Re-posting an order means re-running the compliance check.
- Signature alignment. Buyer trade authorizations have their own short deadlines for security reasons; aligning order and authorization expiration windows keeps the dance simple.
What to do when your order expires:
- You're the maker — re-post the order if you still want to trade. The new post automatically reclaims the previous escrow. Or use the cancel button if you no longer want the position.
- You see an expired order in someone else's book — ignore it; the contract won't let you match it. The platform interface should already hide expired orders.
Cancelling Your Own Order
You can cancel your order at any time before it's matched. Hit the cancel button next to your order in the trading panel — your escrowed tokens (or USDC) come back to your wallet immediately.
- Partial fills are possible. If part of your order has already executed, cancellation refunds the unfilled remainder.
- There's no penalty for cancellation, no fees, no cool-down.
Emergency / Platform-Wide Cancellation
In rare emergencies, SecondaryDAO may halt trading or cancel all open orders on a property. This is governed by the property's compliance officer wallet and used only when one of these is true:
- A critical bug is discovered post-deploy and matching needs to pause while it's fixed.
- A regulator requires a compliance freeze (e.g. updated KYC requirements that need to propagate).
- An infrastructure outage (RPC, oracle, etc.) is producing wrong prices or stuck trades.
- Any other situation where continued trading creates a material risk to user funds.
When we use this power:
- Every cancellation emits an on-chain event with a reason code — fully auditable.
- Your escrowed funds are returned automatically to your wallet. No action required from you.
- We publish a notice on this Help Center within 24 hours explaining what happened and the timeline to resume.
We don't take this lightly. The default expectation is the market runs autonomously, and emergency power is a break-glass control.
Top 10 Frequently Asked Questions
1. How long are my orders valid?
Sell orders default to 30 days; you can pick anywhere from 1 to 30 days when placing the order via the Duration field on the sell modal. Buy orders placed via the order book are always 30 days. We'll email you when your order expires so you can re-post or cancel. After expiration, the order stops matching but your escrowed funds remain in the contract until you cancel or post a fresh order. See "Why Orders Expire" above for the reasoning.
2. What fees do I pay?
Trading fees vary by property and are set by the property administrator. Check the property details page for the current fee rate. Fees are deducted automatically when trades execute.
3. Why do I need to approve transactions in my wallet?
This is a standard blockchain security measure. You're giving permission for the trading system to move tokens or USDC on your behalf when orders match. It's a one-time approval per property.
4. Do I need to be verified to trade?
Yes, your wallet must be verified (KYC/AML approved) before you can participate in secondary trading. This ensures compliance with regulations. Verification is re-checked at trade execution time, not just at order creation, so be sure your KYC stays current.
5. How does price matching work?
When your buy price is equal to or higher than a sell price, the trade executes at the seller's price. This means buyers may pay less than their maximum bid.
6. Can I have multiple orders at once?
You can have one active buy order and one active sell order per wallet, per property. Creating a new order of the same type will replace your existing order (and refund the previous escrow).
7. What happens if I don't have enough funds?
If your balance drops below what's needed for your order, the order will simply fail to execute when it tries to match. There's no penalty, no fee, no negative-balance state. Your other orders are unaffected.
8. Can I cancel my order?
Yes! You can cancel any open order at any time before it's filled. Just click the cancel button next to your order. Your escrowed funds come straight back to your wallet.
9. What is the spread?
The spread is the difference between the highest buy price (best bid) and lowest sell price (best ask). A smaller spread means a more liquid market. When the spread is zero or negative, trades execute immediately.
10. What if SecondaryDAO cancels my order?
That only happens in emergencies (see "Emergency / Platform-Wide Cancellation" above). Your escrowed funds are returned automatically and we publish an explanation within 24 hours. Outside emergencies, your orders are entirely under your control.
Troubleshooting
"Insufficient Balance" Error
For sellers: Make sure you have enough tokens to cover your sell order. For buyers: Make sure you have enough USDC to cover the purchase price plus fees.
"Approval Required" Message
Click "Approve" in your wallet to allow the trading system to access your tokens or USDC. This is a one-time step per property.
"Verification Required" Error
Your wallet needs to be KYC verified before trading. Contact support if you believe you should be verified.
Order Not Showing Up
-
Refresh the page
-
Check that your wallet is connected
-
Verify the transaction completed in your wallet
Trade Didn't Execute
Even if prices overlap, trades may not execute if: - Either party's balance changed - Either party isn't verified - The order expired between matching and execution - The property entered an emergency halt
InvalidExpiration Error
You tried to match an order that's already past its lifetime (default 30 days, configurable down to 1 day on sell orders). The order's funds are still safe in the contract — the maker just needs to re-post or cancel. Refresh the order book; the platform usually filters expired orders out.
Glossary
Term Definition
Ask A sell order; the price a seller wants
Bid A buy order; the price a buyer offers
Spread The gap between the best bid and best ask
Order Book The list of all open buy and sell orders
CLOB Central Limit Order Book — the matching engine that holds bids and asks on chain and settles trades when they cross
Limit Order An order at a specific price (all SecondaryDAO orders are limit orders)
Fill When an order is matched and executes
Partial Fill When only part of an order executes
Expiration The 30-day-max lifetime after which an order stops matching
Escrow Tokens or USDC held in the trading contract while an order is active
USDC The stablecoin used for payments (1 USDC = $1 USD)
Token A digital share representing ownership in a property
KYC "Know Your Customer" - identity verification
Need Help?
If you have questions not covered in this guide: - Check our other Help Center articles - Contact support through the chat widget - Email [email protected]
Last updated: May 25, 2026