OTC Trading
Trade tokens directly with other users, across any blockchain. Set your own prices, accept multiple payment options, and trade on your terms.

What is OTC Trading?
Think of it like a crypto marketplace. Instead of selling to a liquidity pool and getting whatever price the algorithm gives you, you:
- Set your own price — You decide what's fair
- Choose your payment — Accept ETH, USDC, or any token you want
- Trade across chains — Sell on Base Sepo, get paid on OP Sepo
- No price swings — The price you see is what you get
How It Works
Same-Chain Trade Flow
When you're both on the same blockchain, it's simple:
You List Your Tokens
Your tokens are held safely while you wait for a buyer.
Buyer Clicks Buy
They send payment in one of the tokens you accept.
Everyone Gets Paid
You get their payment, they get your tokens. Instant.
Time: Instant (happens in one transaction)
Order States
Orders progress through the following states:
| State | Description |
|---|---|
| Open | Order is active and accepting fills |
| AwaitingConfirmation | Fill initiated, seller tokens locked |
| AwaitingFinalization | Confirmation sent, waiting for finalization |
| Completed | Trade successfully completed |
| Cancelled | Order cancelled by seller |
Creating Orders
As a seller, you have complete flexibility:
What You're Selling
- Pick any token in your wallet
- Set the amount you want to sell
What You'll Accept
Here's where it gets interesting — you can accept up to 10 different payment options. For example:
- Option 1: 1,000 USDC on OP Sepo
- Option 2: 0.5 ETH on OP Sepo
- Option 3: 1,000 DAI on Base
Buyers pick whichever payment works for them.
Pro Tip: More payment options = more buyers. Give people choices and your listing fills faster.
Example Order
Offering: 1,000 USDC on Base
Accepting:
Option 1: 1,000 USDC on OP Sepo
Option 2: 0.5 ETH on Monad Testnet
Option 3: 1,020 USDC on Base (same-chain premium)Filling Orders
As a buyer, you can fill any open order:
- Browse the marketplace
- Find an order with tokens you want
- Choose from available payment options
- Confirm the fill transaction
For cross-chain fills, you'll need to send enough native tokens (ETH) to cover gas on both chains. The UI calculates this automatically.
Fees
Simple pricing. We only charge when trades complete:
| Who Pays | How Much | What It's On |
|---|---|---|
| Seller | 0.5% | Your tokens |
| Buyer | 0.3% | Their payment |
That's it. 0.8% total.
Example
Let's say you're selling 1,000 USDC for 1,000 DAI:
- You receive: 997 DAI (they pay 1,000 DAI minus 0.3% fee)
- Buyer receives: 995 USDC (you list 1,000 USDC minus 0.5% fee)
Free to list, free to cancel. You only pay when someone buys from you.
Cancellation
Sellers can cancel their orders at any time while in the Open state:
- Full token amount is returned (no fees)
- Cancelled orders cannot be filled
- You can create a new order with different terms
Orders in AwaitingConfirmation or AwaitingFinalization states cannot be cancelled as a trade is in progress.
Recovery & Edge Cases
Cross-chain trades have built-in recovery mechanisms for edge cases:
Message Failures
If a LayerZero message fails to deliver:
- After 30 minutes, recovery functions become available
- Buyers can refund escrowed tokens
- Sellers can have tokens returned via admin recovery
Stuck Orders
For orders stuck in intermediate states:
- Emergency Finalize — Admin can complete if buyer paid
- Emergency Refund — Admin can return tokens if trade failed
Recovery functions have a 30-minute timeout to prevent race conditions with in-flight messages.
Tips for Success
- Start simple — Try trading on the same chain first to get the hang of it
- Check your tokens — Make sure you're selecting the right token before listing
- Price it right — Check current market prices. Too high and no one buys
- Have some ETH — You need a bit of ETH for transaction fees (especially cross-chain)
- Give it time — Cross-chain trades take a few minutes to complete