Zcash → Base → Venmo

Send shielded ZEC.
They get Venmo dollars.

Type their Venmo handle and send ZEC to one address. Your coins wait as USDC in an immutable escrow on Base until a taker pays that Venmo and proves it through zk-p2p's enclave. They never touch crypto. No exchange account on either end. No custodian holding the dollars.

non-custodial escrow 0.15% fee Base 8453 open source mainnet since 2026-09-01
contract 0xafc314Ea35Bb05AaDb254F5B4A8e05db8e7739A9 BaseScan ↗
quote live route via 1Click
ZEC
they receive on
type an amount to see what lands in their Venmo
Continue in the app

Quoted by 1Click, net of the 0.15% fee. A fresh quote is taken when you start.

rateUSDC per ZEC
fills completedpaid on Venmo, proven on chain
settledUSDC released from escrow
open orderswaiting for a taker
last fillfirst one on 2026-09-01
how it works

Two legs, one contract, one proof

The swap leg turns ZEC into USDC on Base. The payment leg turns that USDC into a Venmo transfer to the handle you typed. zpay's contract sits between them and only ever pays out against a proof. Cashing out to yourself is the same flow with your own handle.

01

Type their handle, get an address

Enter the recipient's Venmo username and a ZEC amount. zpay registers the handle with zk-p2p's curator and opens a session whose payee is fixed to that hash. One Zcash deposit address comes back, and that is where you send.

@handlepayee hashsession
02

Send ZEC, it lands as USDC

NEAR Intents' 1Click route swaps your ZEC to USDC on Base and delivers it to the zpay contract, which posts it as a sell order on zk-p2p's escrow. The order pays only the handle from step one; the contract reverts on any other payee.

ZECUSDCescrow
03

A taker pays them, then proves it

A taker stakes, sends the dollars from the taker's own Venmo account to the handle you typed, and asks zk-p2p's Nitro enclave to attest the payment. The on-chain verifier checks that signature and releases the USDC to the taker. By then the dollars are already in the recipient's Venmo.

Venmoenclave attestationrelease
ZEC leaves a shielded wallet, is swapped to USDC on Base by 1Click, is posted to zk-p2p escrow by the zpay contract with the payee fixed to the recipient's Venmo handle, and is released to the taker who paid that Venmo and presented an enclave attestation. you shielded wallet 1Click NEAR Intents swap zpay contract immutable, no admin zk-p2p escrow EscrowV2 on Base ZEC USDC sell order taker stakes, pays, proves their Venmo dollars arrive here enclave signs the attestation pays replayed attestation verified on chain; USDC released to taker
custody

Who holds what, and for how long

Three parties touch value between your wallet and their Venmo. What each one can and cannot do is read off the contract and the deploy, not off a promise.

The contract

Deployed once, no proxy, no upgrade path. The only privileged action its owner has is naming the keeper, and the keeper can only open sessions and post your credited USDC to escrow. It cannot change the payee, and it cannot pay itself.

Your own key can pull the USDC back at any point before a taker claims it. Nobody else's signature is needed. The recipient signs nothing and needs no wallet.

Holds: USDC between arrival and the escrow deposit. Escape hatch: rescue and withdraw, signed by you.

The swap

1Click custodies your ZEC from the moment it leaves your wallet until USDC lands on the contract. That window is not trustless. If the route fails, 1Click refunds to the transparent Zcash address you gave on the quote's deadline.

Holds: ZEC in flight, minutes. Escape hatch: the refund address on the quote.

The proof

A Venmo payment is not an on-chain event, so the escrow releases only against a signature from zk-p2p's Nitro enclave, which replays the taker's Venmo feed and attests the amount, the payee hash and the timestamp. The verifier contract checks that signature during release.

Holds: nothing. Trusted for: saying a payment happened. Without it, no release.
fees

What comes out of what they receive

The quote above already nets these. Nothing is added after you send.

lineamountwho takes it
zpay fee 0.15% Taken from the USDC as it is posted to escrow.
swap spread in the quote 1Click's rate for ZEC to USDC. Shown as the rate line before you start.Varies with the route; there is no separate charge.
taker margin set by you The floor rate your order is posted at. Default is one dollar per USDC. A lower floor fills faster because the taker keeps the difference.
gas $0 The coordinator pays for the session and the escrow deposit. Takers pay for their own claim and release.
limits

What zpay does not do yet

Better to read this here than to find it after sending.

Venmo only, for now

The coordinator registers Venmo payees. The enclave that signs proofs knows eleven platforms, and each one needs its own payee registration and payment driver before it turns on here.

VenmoCash AppPayPalZelleWiseRevolutMonzoChimeMonobankAlipayUPI

Base mainnet only

zk-p2p's Venmo verifier is deployed on Base and nowhere else, and the enclave binds every attestation to chain 8453. There is no testnet version of the payment leg.

Orders wait for a taker

Nothing bounds how long a sell order sits in escrow, and nothing reaches their Venmo until a taker fills it. Small orders wait longest, because a taker pays the same gas and locks their stake for fourteen days whether the order is $5 or $500. You can withdraw any time before a taker claims it.

Their handle is not private

The escrow stores a hash of the recipient's Venmo username, and zk-p2p's curator answers that hash to anyone who asks. Treat the handle, amount and time of a payment as public; if you pay your own handle, that is your handle. The Zcash side ends at a transparent deposit address, so spend from a shielded pool if you care about the input.

A floor, not a minimum that fills

1Click refuses anything under 0.00052 ZEC. Above that, whether an order fills is up to takers, and the smallest orders are the ones they skip.

One session at a time per contract

The contract keeps every session's USDC in one pot and credits arrivals to one open session, so the coordinator serves payments in series. If yours is queued, the app says so.

liquidity

Fill orders. Keep the spread.

Every open order is a USDC deposit on zk-p2p's escrow with a rate floor. Pay the Venmo, present the enclave's attestation, collect the USDC. The auto-taker daemon watches, claims, pays and proves from a browser you are already logged into, and stops before each money step unless you tell it not to.