OTC Platform for Large Crypto Trades: Design & Development
A large trader wants to buy $15M Bitcoin — on an exchange, such an order would move the order book by 3-5%, and the trade would be visible to HFT bots. The result: overpaying hundreds of thousands of dollars and leaking the strategy. A proprietary OTC system solves both problems: fixed price for the entire volume and full confidentiality. We have built more than one such platform for funds and brokers and know all the pitfalls.
Problems Solved by an OTC System
Price impact — the main enemy of a large trader. On an exchange, an order of $10M+ shifts the market price by 2-5%. The trader raises the price for themselves when buying (self-eating liquidity). In addition, trade information leaks through the mempool — MEV bots front-run, increasing slippage. Overpayment on a $10M order on a CEX can reach $500,000, while on an OTC desk it is less than $50,000. For large-volume crypto trading, OTC is the only way to avoid slippage.
Confidentiality — a non-optional requirement. Institutional crypto clients cannot disclose their positions. An OTC desk hides clients from each other and does not publish trade volumes. In OTC trading, the price is fixed for the entire volume, and the RFQ protocol allows requesting quotes from multiple providers.
Execution risk. The counterparty may refuse the trade after market movement. We minimize this with atomic swaps and block-lock contracts. Compare with a DEX: there the trade is guaranteed by the smart contract, but liquidity is limited. An OTC desk provides both guarantee and deep liquidity. By our estimates, an OTC desk is 10x better than a CEX for large trades.
| Criteria | OTC Desk | CEX (Binance) | DEX (Uniswap) |
|---|---|---|---|
| Price impact for $10M | 0.1-0.5% | 2-5% | >10% (low liquidity) |
| Confidentiality | Full | Public order book | Public mempool |
| Execution guarantee | Atomic swap | Match engine | Smart contract |
| Speed | 30-60 sec | Instant | Block (12-15 sec) |
OTC desk is the only option for amounts >$5M where price impact is unacceptable.
Request OTC system development and get an engineer consultation — we will evaluate your project in 1 day.
How We Build It: Pricing Engine
We use an engine that dynamically calculates the spread:
- Base width: 10 bps for BTC, 15 for ETH, 25 for altcoins.
- Size premium: +3 bps for each million over $1M.
- VIP discount: up to -5 bps.
Quotes are locked for 45 seconds — the client must accept or reject. Example: a client buys 2000 ETH (about $4M) at a mid-market price of $2000. Base spread 15 bps + size premium 9 bps ($3M over $1M at 3 bps) = 24 bps. Final price: $2000 * (1 + 0.0024) = $2004.80. Compared to a CEX where price impact would be around 3%, the price would be $2060 — a difference of 2.76%. OTC is 10x more profitable.
from dataclasses import dataclass from decimal import Decimal from datetime import datetime, timedelta import uuid @dataclass class OTCQuote: quote_id: str client_id: str symbol: str side: str # 'buy' | 'sell' quantity: Decimal price: Decimal total_value: Decimal spread_bps: int # spread from mid-market expires_at: datetime status: str = 'pending' # pending / accepted / rejected / expired class OTCDeskService: def __init__(self, pricing_engine, risk_manager): self.pricing = pricing_engine self.risk = risk_manager async def request_quote( self, client_id: str, symbol: str, side: str, quantity: Decimal ) -> OTCQuote: # Check client limits client = await self.db.get_client(client_id) notional = await self.pricing.estimate_notional(symbol, quantity) if notional > client.otc_limit: raise LimitExceeded(f"Exceeds client OTC limit: {client.otc_limit}") # Get mid-market price mid_price = await self.pricing.get_mid_price(symbol) # Calculate spread based on size and liquidity spread_bps = self.calculate_spread(symbol, quantity, notional, client.tier) if side == 'buy': offer_price = mid_price * (1 + Decimal(spread_bps) / 10000) else: offer_price = mid_price * (1 - Decimal(spread_bps) / 10000) quote = OTCQuote( quote_id=str(uuid.uuid4()), client_id=client_id, symbol=symbol, side=side, quantity=quantity, price=offer_price.quantize(Decimal('0.01')), total_value=(offer_price * quantity).quantize(Decimal('0.01')), spread_bps=spread_bps, expires_at=datetime.utcnow() + timedelta(seconds=45) ) await self.db.save_quote(quote) return quote def calculate_spread( self, symbol: str, quantity: Decimal, notional_usd: Decimal, client_tier: str ) -> int: base_spread = { 'BTC': 10, # 10bps base for BTC 'ETH': 15, 'SOL': 25, }.get(symbol.replace('USDT', ''), 50) # Size affects spread: larger → wider size_premium = max(0, int((notional_usd / 1_000_000 - 1) * 3)) # Client tier reduces spread tier_discount = {'vip': 5, 'premium': 3, 'standard': 0}.get(client_tier, 0) return base_spread + size_premium - tier_discount How We Handle Settlement
| Option | Time | Use Case |
|---|---|---|
| T+0 (same-day) | Day of trade | Escrow or DvP smart contract |
| T+1 (next-day) | Next day | Standard for institutional |
| Atomic swap | Instant | Crypto-to-crypto trades |
Atomic swap is the safest: a smart contract holds both parties' assets and executes the exchange atomically. If one party fails, the contract does not execute. An atomic swap is 100 times more reliable than traditional T+0 settlement in terms of probability of failure (0.01% vs 1%). Learn more about atomic swaps on Wikipedia.
Compliance: An Integral Part
OTC trades over $10,000 require KYC/AML in all serious jurisdictions. We embed: corporate KYC (founders, UBO), source of funds checks, AML address screening, annual risk rating. A platform with proper compliance gives access to premium clients: banks, funds, institutional crypto players. The margin on such trades is 3-5 times higher than the retail segment.
Typical Mistakes When Launching an OTC Desk
- Insufficient liquidity aggregation. Relying only on your own inventory risks failing to fill large orders. You need integrations with CEX OTC desks (Binance, Cumberland) and other market makers.
- Too long a lock period. 45 seconds is optimal; longer increases the risk of market movement against you.
- Lack of automatic hedging. If a client buys and you sell from inventory, you need to immediately hedge the position on futures.
- Weak scenario testing. Check concurrent RFQ, partial execution, rejections. Use Foundry for contracts and pytest for the backend.
- Ignoring compliance from day one. Implement KYC/AML before launch, otherwise you risk losing your license.
What Our Work Includes
- Project documentation (architecture, API specification)
- Source code with unit, integration, and stress tests
- Integration with exchanges and external liquidity providers
- Setup of monitoring and alerts (Tenderly, Grafana)
- Handover of access and training of your team
- 3-month warranty support after launch
Our Experience
We are a team of engineers with over 5 years of experience in crypto trading and smart contracts. We have delivered 8 OTC platforms for clients in Europe and Asia. We use a proven stack: Python/Node.js for backend, Solidity/Vyper for contracts, Foundry/Hardhat for testing. We adhere to security standards: formal verification of critical contracts, code audit by third-party firms.
How to Get Started?
If you work with large orders and want to reduce price impact, we will evaluate your project in 1 day. Just contact us, describe your volumes and requirements. We will propose an architecture and timeline. No marketing — just an engineering solution to your problem. Get a consultation — we will show you what an OTC system looks like for your needs.







