Private orders

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.

01

How a private order is created

  1. 01Create a normal Base contract deposit in Sell for your amount, payment method, and currency.
  2. 02From Deposits, lock that deposit to the buyer's wallet: an address, ENS .eth, or PNS .peer name.
  3. 03The app attaches the WhitelistPreIntentHook onchain, so the contract rejects every other wallet.
  4. 04You get a link at usdctofiat.xyz/d/<escrow>/<depositId> to send the approved buyer.
02

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.

ContractAddress
EscrowV20x777777779d229cdF3110e9de47943791c26300Ef
WhitelistPreIntentHook0xda023Ea0d789A41BcF5866F7B6BBd2CaDF9b79B8
03

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.

Restricted onchain

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.

EscrowV2
0x777777779d229cdF3110e9de47943791c26300Efdeposit and hook attach
WhitelistPreIntentHook
0xda023Ea0d789A41BcF5866F7B6BBd2CaDF9b79B8gates buyer trades
Share link
usdctofiat.xyz/d/<escrow>/<depositId>one buyer, one URL

Common questions

What is USDCtoFiat?

USDCtoFiat coordinates non-custodial sales of native Base USDC for USD, EUR, or GBP through ZKP2P smart contracts. Payment-provider eligibility and account policies still apply; technical route support is not permission to use an external account, and Wise currently prohibits P2P crypto-sale receipts.

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 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.