Don’t let billing map where projects run

Projects pay in USDC. Nobody can see which ones run on you.

Watch the demo
hosting billing address
inbound
visibility
protocol-x.eth
dedicated node
1,200.00 USDC
PUBLIC
treasury 0x41a…
RPC, enterprise
4,500.00 USDC
PUBLIC
protocol-x.eth
new region
1,200.00 USDC
PUBLIC
via Curvy
customer not linked
hidden
SHIELDED
Rows 1–3: anyone can read them. Row 4: nobody can.
On the public record

What a billing address leaks

All of it is readable from one public address, by anyone, for as long as the chain exists.

  • Who runs on you

    Named projects and their plans.

  • Where they run

    Narrows the search for attackers.

  • Expansion

    Upgrades show before announcements.

  • Biggest accounts

    Easy to find, easy to poach.

The problem

How an attacker maps targets

  1. block explorer
    • → hosting billing address
    • protocol-x.eth 1,200 USDC

    01 Follow the billing address.

  2. attacker’s notes
    • Protocol X → this provider
    • new region this week

    02 Now they know where it runs.

  3. target list
    • provider: known
    • regions: known
    • next: probe infra

    03 The search just got smaller.

Two women setting switches on the panels of the ENIAC computer
Operating ENIAC, about 1946. The machine everyone’s work ran on, in a single room. U.S. Army photo, public domain
Payment flow

How it works

  1. Payment request Created
    ref
    invoice H-118
    amount
    1,200.00 USDC

    01

    Invoice or top-up

    Billing creates a request

  2. Payment request Paid
    ref
    invoice H-118
    amount
    1,200.00 USDC
    from
    customer wallet

    02

    Project pays

    From its treasury

  3. Payment request Shielded
    ref
    invoice H-118
    amount
    1,200.00 USDC
    from
    customer wallet
    to
    hidden

    03

    Shielded on arrival

    Fresh address, every time

  4. Payment request Confirmed
    ref
    invoice H-118
    amount
    1,200.00 USDC
    from
    customer wallet
    to
    hidden

    04

    Service provisioned

    Matched by reference

  • No customer account
  • Hosted checkout
  • USDC + USDT on Arbitrum
  • From $0.50
Practicalities

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.

Visibility

Who sees what

The payer’s own transfer is always public.

who The payment That they use you Their plan
The public Can see Hidden Hidden
You Can see Can see Can see
Your accountant Can see Only if you share your viewing key Only if you share your viewing key
sees it hidden only if you share the key
Fit check

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
Trust

Built to be checked

Private, not unaccountable. How the compliance model works

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
Screened at the door Global Ledger checks incoming funds
Non-custodial You hold the keys. Always.
Viewing keys Your accountant sees everything
Settled onchain USDC and USDT on Arbitrum
Backed by Ethereum FoundationStarknet FoundationArbitrum FoundationLI.FI
FAQ

Questions

Can customers top up credit?

Yes. Create a payment request for each top-up. Your backend confirms it by reference and adds the credit.

How do renewals work?

Each renewal is its own payment request, created by your billing system when it’s due.

Is the customer’s payment hidden?

No. Their transfer is public. Nobody can tell it went to you.

Which stablecoins are supported?

USDC and USDT, settled on Arbitrum. Fees are taken from the payment.

Keep your customers’ setups private.

Watch the demo