Take donations without publishing your donors
Supporters give in USDC. Their names stay off the public chain.
How a donor ends up listed
- your website
- Support our work
- Donate: 0x5d8e…
01 Your address is on your site.
- block explorer
- supporter.eth 50 USDC
- foundation.eth 25,000 USDC
02 Every gift is public.
- someone’s list
- Donors to this cause:
- supporter.eth
- foundation.eth
03 Donors get listed, and targeted.
What a donation address leaks
All of it is readable from one public address, by anyone, for as long as the chain exists.
-
Who gives
Donor wallets, often tied to names.
-
How much
Major donors, easy to spot.
-
Your runway
Income and balance, for anyone.
-
Donor safety
For some causes, being listed is a risk.
What your donor sees
Three screens. No account and no browser extension. The private part happens on your side.
-
your site
Donation
50.00 USDC
Pay by card Pay with USDC or USDT01 One more button at checkout
-
hosted checkout
Amount due
50.00 USDC
Pay from walletNetworkArbitrumPay withUSDC02 Pay from the wallet they have
-
confirmation
Payment received
gift #2291
03 Done. No account, no extension
An example of what your customer sees. Not a live checkout.
How it works
- Payment request Created
- ref
- gift #2291
- amount
- 50.00 USDC
01
Donor picks amount
Your page creates a request
- Payment request Paid
- ref
- gift #2291
- amount
- 50.00 USDC
- from
- customer wallet
02
Donor pays
From the wallet they have
- Payment request Shielded
- ref
- gift #2291
- amount
- 50.00 USDC
- from
- customer wallet
- to
- hidden
03
Shielded on arrival
Fresh address, every time
- Payment request Confirmed
- ref
- gift #2291
- amount
- 50.00 USDC
- from
- customer wallet
- to
- hidden
04
Recorded
Ready for receipts
- No customer account
- Hosted checkout
- USDC + USDT on Arbitrum
- From $0.50
Who sees what
The donor’s own transfer is always public.
| who | The donation | That they gave to you | Total raised |
|---|---|---|---|
| The public | Can see | Hidden | Hidden |
| Other donors | Can see | Hidden | Hidden |
| You | Can see | Can see | Can see |
Is it right for you?
Good fit if
- Your customers pay, or ask to pay, in USDC or USDT
- Your revenue or customer list is sensitive
- You’re happy to receive stablecoins, not fiat
- You can add a server-side call to checkout
Not yet if
- You need fiat paid into your bank automatically
- You need chains other than Arbitrum
- Your customers pay in Bitcoin or other coins
- You need a no-code store plugin today
But what about…
- Refunds
- A new payment back to the customer, from your own process.
- Tax and accounting
- Your accountant reads every payment with the viewing key.
- Compliance
- Incoming funds are screened before they’re shielded.
- Custody
- You hold the keys. Curvy can’t move your funds.
- Chargebacks
- None. Onchain payments are final.
- Customers without USDC
- Keep your other methods. This is one more option.
Built to be checked
- Audited by Ethernal Full report public on GitHub
- Open-source contracts github.com/0xCurvy
- Published research Stealth address protocols
- 10+ years together Two PhDs in ZK and cryptography
Questions
Can donors stay off a public list?
Yes. Donations land on fresh addresses that aren’t linked to you. You still see every one through your viewing key.
Can I issue receipts?
Yes. Each donation carries a reference, and your viewing key gives the full history. Receipts come from your own system.
Can I publish a total if I want?
Yes, by publishing it yourself. You decide what goes public.
Which stablecoins are supported?
USDC and USDT, settled on Arbitrum. The minimum payment is $0.50, and fees are taken from the payment.
Let supporters give without being listed.
Tell us how you take payments today, and we’ll show you where Curvy fits.
Watch the demo- Your payment flow, step by step
- What stays visible, and to whom
- How the SDK fits your stack
- Your compliance questions