Private USDC orders for one buyer wallet.
Private mode restricts a deposit to one buyer wallet and gives you one link to share. Use it when you already know the buyer and do not want the order open to everyone.
How a private order is created
- 1The app creates a normal Base contract deposit for your amount, payment method, and currency.
- 2It adds the buyer's wallet to the WhitelistPreIntentHook.
- 3It attaches that hook to the deposit, so the contract rejects every other wallet.
- 4You get a link at otc.usdctofiat.xyz/d/<escrow>/<depositId> to send the approved buyer.
Why it takes more than one transaction
EscrowV2's createDeposit does not take a whitelist parameter, so the app attaches the hook in a follow-up transaction after the deposit exists. The restriction is enforced onchain, not in the UI.
| Contract | Address |
|---|---|
| EscrowV2 | 0x777777779d229cdF3110e9de47943791c26300Ef |
| WhitelistPreIntentHook | 0xda023Ea0d789A41BcF5866F7B6BBd2CaDF9b79B8 |
Cost model on a private fill
A private order has the same seller cost model as a public delegated deposit: no platform fee to create the order, Base gas for onchain actions, and no deduction from the fiat you receive in the payment app. Buyer-side fee configuration can vary by route.
One wallet can fill it. Every other wallet is rejected.
A private order is a Base contract deposit with a whitelist hook attached. The contract rejects any wallet that is not the approved buyer.
createDeposit takes no whitelist parameter, so the hook is attached in a follow-up transaction.
Common questions
What is USDCtoFiat?
USDCtoFiat lets you sell USDC on Base for money in Venmo, Cash App, Chime, Revolut, Wise, Zelle, PayPal, Monzo, N26, and Luxon. You keep control of your wallet, and trades settle through non-custodial ZKP2P smart contracts on Base.
Does USDCtoFiat hold my funds?
No. You sign every transaction from your own wallet. Your USDC is locked in a public Base contract and releases to the buyer only after their payment is proven. You can withdraw any unfilled deposit at any time.
What does it cost to sell?
Creating and managing a seller deposit is free, though Base gas applies to onchain actions. The offramp SDK is free to integrate. On delegated fills, Delegate's 0.10% manager fee comes from the USDC released to the buyer, not from your fiat proceeds or your quoted rate. Peerlytics analytics, webhooks, and API credits are priced separately.
Do I need a centralized exchange account?
No exchange account is required to use USDCtoFiat. You need a wallet holding USDC on Base and an account on the payment app you want to be paid in. The payment app's own account rules and limits still apply.
Do I need to complete KYC?
USDCtoFiat does not collect identity documents, hold your fiat, or hold your keys. The payment app you use still controls its own verification, limits, and account rules. USDC settlement happens through Base smart contracts, and we cannot change what Venmo, PayPal, Wise, Zelle, or your bank requires.
Can anyone else fill a private OTC order?
No. The deposit is restricted to the approved buyer wallet through the whitelist hook, enforced by the Base contract. Any other wallet is rejected onchain.