Docs/Concepts/How @nyone works

How @nyone works

A plain-English walkthrough of @nyone: what it is, how a send works, how privacy is preserved, and what we ask you to trust us with.

01 — The idea

A send is just three things: to, amount, send.

Crypto today asks you for a 42-character string and hopes you didn't paste the wrong one. That's not how money works anywhere else. @nyone replaces that string with something a human can recognise — a social handle, an email, or, if you really want, a wallet address.

@handle
Send to a person

Type @sarah or @vitalik. We resolve the handle and route the funds. If they're already on @nyone, the money lands instantly. If not, we hold it until they sign in and claim it.

email
Send to an inbox

Email addresses work the same way. The recipient signs in with the same address and the funds appear in their account. No wallet setup required up front.

0x…
Send to a wallet

Plain wallet sends still work. Your transaction settles on-chain to that address through the same privacy layer everything else uses.

Underneath each of these flows is the same architecture: a handle layer that maps human identifiers to on-chain entities, and a shielded pool that keeps the link between sender and recipient unobservable.

02 — Anatomy of a send

From tap to settlement, in six beats.

Here's exactly what happens between the moment you press Send and the moment the money arrives. Most of these steps complete in under a second.

  1. 01
    You compose a send

    You pick a recipient — @handle, email, or wallet — and an amount. The app figures out which kind of recipient it is, what tokens you have available, and which balance to draw from (the privacy pool, or an external wallet you've linked).

  2. 02
    We turn the recipient into an anonymous reference

    Behind the scenes, the recipient's identifier is hashed into a stable, anonymous reference. Nobody on-chain ever sees "@sarah" — they see a number that only @nyone's directory can resolve back to a real person.

  3. 03
    The send becomes a sealed envelope

    Your funds are bundled into what we call a commitment — a cryptographic seal that locks together the amount, the recipient's public key, and a fresh random secret. From the outside it's just a hash. Only the recipient holds the key to open it.

  4. 04
    The envelope joins the pool

    That sealed envelope is added to the shielded pool — a tree of every envelope ever deposited. The chain records that something was added, but not what was added or who added it.

  5. 05
    The recipient picks it up

    If the recipient already has an account linked to that handle, they can spend the envelope right away. If not, the funds wait safely in escrow until they sign in with the same handle. From that moment they hold the keys to it — not us.

  6. 06
    They spend or withdraw

    Spending stays inside the pool — sender and recipient both invisible to outside observers. Withdrawing exits the pool to a regular wallet address, which is the only point where anything becomes externally observable.

Two recipient states

The flow above branches at step 5. If your recipient has already linked the handle you sent to, the funds drop straight into their pool balance. If not, they sit in a per-handle escrow inside the contract. The moment they sign in and prove they own that handle, the escrow is converted into a sealed envelope they can spend — no separate "deposit" step required from them.

03 — Handles

An identity layer the chain doesn't have.

Blockchains are very good at agreeing on numbers. They are very bad at agreeing on whether the person who logs in to X today is the same person who tweeted under that name a year ago. That's a problem someone has to solve outside the chain.

What a handle actually is

When you link an identity to your @nyone account — your X handle, your Gmail address, an external wallet — three things get recorded:

  • The provider — which authority vouches for this identity (X, Gmail, a wallet signature, and so on).
  • The subject — the stable identifier that provider gives you (your X user ID, your Gmail address, your wallet address). For X specifically we store the numeric user ID, not the visible handle, so renaming yourself on X doesn't break your link.
  • An attestation on-chain — a small record in our contract that says "this identifier belongs to this account," together with the public keys the privacy layer needs to send funds to it.

Who decides @sarah is really Sarah?

This is the question most crypto identity projects either dodge or answer with "nobody, and that's a feature." We answer it directly. The chain cannot reach out to X and ask "did this user log in?" — so somebody has to translate. Today, that somebody is us.

When you sign in with X or Gmail, you're proving ownership of that identity to its real authority — Twitter, Google. Our service relays that proof onto the chain by publishing the attestation. We do not invent or assign handles. We do not let users claim handles they didn't authenticate against the upstream provider. The provider is still the source of truth; we're a notary that writes that truth into a place the contract can read.

Why it works this way

Smart contracts can't speak OAuth. Until they can — and there are real efforts under way to change that — the choice is between a permissionless free-for-all (which would let anyone register @elonmusk first and collect everything sent to it) and a single trusted relay that only confirms what the upstream provider has already verified. We chose to take that role openly, with every attestation publicly visible on-chain, rather than leave it to whoever happens to grab it first.

After the attestation, you don't need us

Once a handle is attested, ordinary use is on-chain and trustless. Sending to a handle, claiming funds for a handle you own, transferring inside the pool — none of these require us to be in the loop. Our role ends at the door.

04 — Privacy

A pool of envelopes nobody can peek into.

Most blockchain transfers are public broadcasts. Sender, recipient, amount, timestamp — anyone with a block explorer can read the whole story. @nyone doesn't do transfers that way. It deposits sealed envelopes into a shared pool and lets recipients prove they own the right one without revealing which one.

The shielded pool, in one picture

Imagine a clear glass jar that anyone can drop a sealed envelope into. From the outside, you see envelopes piling up. You can count them. You cannot read them. Each envelope locks together: this much of this asset belongs to whoever holds this private key. The cryptography that does the sealing — Poseidon hashing inside an incremental tree — is the same family of primitives used by Zcash, Aztec and several identity layers running in production today.

Spending without uncovering

When you spend an envelope, you do not point at it. You stand outside the jar and prove, with a zero-knowledge proof, three things at once:

  1. I own one of the envelopes inside this jar.
  2. It contains exactly the amount and asset I'm spending.
  3. I am leaving behind a one-time marker that prevents anyone — including me — from spending it again.

The chain checks the proof, accepts it, and replaces your envelope with up to two new ones (one for the recipient, one for change). To any observer, two new envelopes appeared in the jar. They cannot tell which old one was spent, who spent it, or who got the new ones.

What's revealed, what isn't

Action
Public on-chain
Stays private
Deposit into the pool
That a deposit happened, and the gross amount.
Who the recipient is.
Send inside the pool
That a spend happened.
Sender, recipient, amount, which envelope was used.
Withdraw to a wallet
The destination address and amount.
Where in the pool it came from, the original sender.
Why proofs, not promises

We don't ask you to trust that we deleted your transaction details. The proofs are checked by the contract itself, not by us. If the maths doesn't add up, the chain rejects the spend. There is no version of this where we secretly hold the mapping — the system is engineered so we can't.

05 — The three layers

Where each piece of you lives.

@nyone is a stack of three layers, each with a job and a hard limit on what it can see. None of them holds the whole picture — that's the design.

App
What you touch
Sees
  • Your handles
  • Your balance
  • Your active transfers
Can't see
  • Other people's pool contents
  • Anyone else's keys
Display state and a session token. Nothing that moves money on its own.
Service
The translator
Sees
  • Your social-login proofs
  • Your encrypted private keys (managed wallets only)
  • On-chain events relevant to you
Can't see
  • Your password to X or Google
  • The contents of pool envelopes that aren't yours
Encrypted custody for managed wallets, plus the OAuth-to-on-chain attestation bridge.
Chain
The settlement layer
Sees
  • The tree of envelopes
  • Spent-marker tokens
  • Withdrawal addresses
Can't see
  • Who any envelope belongs to
  • Who sent what inside the pool
Funds. Permanently auditable, permanently un-linkable.

Compromising any one layer doesn't hand the whole system over. The app without the service can't move funds. The service without the chain can't. The chain without the keys can't. And the keys without proofs can't double-spend.

06 — Your account

One account, many doors.

Your @nyone account is the thing that owns your funds. Around it, you can attach as many ways to sign in as you like — your X handle, your Gmail, an external wallet, a wallet we manage for you. Any one of them lets you in. None of them is the canonical "you."

Linking

When you link a new sign-in, two things happen at once. The first is administrative — we record that this identity belongs to your account. The second is reconciliation — if anyone has ever sent funds to that handle while it was unclaimed, the escrow is unlocked and converted into envelopes you control, in the same step.

Merging

Sometimes you'll have started two accounts by accident — one with X, one with a wallet — and want to fold them into one. Merging is a real on-chain operation because both accounts may already hold pool balances. The app guides you through it; the contract verifies the maths; from then on, both identities point to the same account.

Losing one of your sign-ins

Because any linked method can sign you in, the practical recovery story is "use another one." We strongly recommend linking at least two. If you ever lose all of them at once — and only then — your funds are unreachable. There is no admin backdoor; the contract itself doesn't know how to reassign your handles to anyone else, and we don't hold a key that could do it.

07 — Custody options

Three ways to hold your keys.

We don't believe there is one correct custody answer for everyone. We give you three, side by side, and you pick the trade-off you're comfortable with.

Self-custody
Bring your own wallet

Connect MetaMask or any standard wallet. We never see your private key. We prepare transactions for you to sign and you approve them in your wallet — the same flow you already know.

Trade-offMaximum control. You're responsible for keeping your seed phrase safe.
We hold the key, encrypted
Managed wallet

If you don't want to manage a wallet at all, we'll create one for you. The private key is encrypted with strong, industry-standard cryptography before it ever lands on our database. The only thing that ever sees it in the clear is the signing process, for the moment it's signing your transaction.

Trade-offZero setup, instant onboarding. Convenience comes with trusting our key-management practices — see the security section for what those are.
In-browser
Local wallet

An option for users who want a fresh wallet without trusting our service to hold it. The key is generated in your browser and stays there. Treat it like cash in your pocket: convenient and fast, but if you clear your browser data without exporting it first, it's gone.

Trade-offSelf-custody without an extension. Always export your key once you've used it for anything you'd be sad to lose.

You can mix modes: use a managed wallet for everyday convenience and link an external wallet for larger amounts. They both belong to the same account.

08 — Security & trust

What's protected by maths, what's protected by us.

We split this section into two honest halves: the protections that don't require you to trust us at all, and the things you do, today, with a clear-eyed view of what they are and how they shrink over time.

Protected by cryptography

Encryption at rest

Managed-wallet keys are encrypted with AES-256 before being written to our database. The decryption key lives separately from the data, and we are migrating to a dedicated key-management service so that no single operator ever holds it in the clear.

Replay protection

Every spend produces a one-time spent-marker (a nullifier). The chain refuses to accept the same marker twice. There is no way to replay a transaction or spend the same envelope twice, even with valid keys.

Sender authentication

Every API call that moves funds is bound to the identity of the signed-in account. You cannot send from a balance that isn't yours, even by guessing IDs — the proof attached to the spend has to be produced with the right key.

Provider OAuth, not passwords

We never see your X or Google password. Sign-in is delegated to those providers, and the cryptographic handshake that finishes the round-trip is validated server-side, where it can't be tampered with from the browser.

Open, immutable verifier circuits

The zero-knowledge verifiers are baked into the contract and immutable after deployment. The proving keys come from a trusted setup whose ceremony artifacts are published; the contract has no special path that lets us approve a spend without a real proof.

TLS end-to-end

All traffic between your browser, our service, and the chain RPC is encrypted in transit. The service refuses to accept untrusted certificates in production deployments.

Protected by us — with intent to phase out

We attest handles

Until smart contracts can talk to OAuth providers natively, someone has to bridge social identity onto the chain. Today that's us. Every attestation is public on-chain and auditable, and we cannot use it to steal anyone's funds — only to confirm an identity that the upstream provider has already verified.

We can pause certain admin levers

We can disable a specific token in the pool, adjust fees within bounds, or — in the early operating period — recover stuck deposits if a recipient never registers. These powers exist deliberately for the launch phase and are scheduled to be removed or migrated behind a multi-signature timelock as the system matures.

We are still operating the relay

We run the service that watches the chain and submits transactions on behalf of managed-wallet users. If the service goes down, those users lose convenience features like instant claim flows. They never lose access to their funds — anyone with their key can spend their envelopes directly on the underlying contract.

A word on philosophy

Every payment system, traditional or crypto, has a trust surface. The question is whether you can see it, audit it, and watch it shrink over time. We chose to publish ours rather than pretend it doesn't exist.

09 — FAQ

Quick answers.

Do I need a crypto wallet to use @nyone?

No. Sign in with X or Gmail and we'll set up everything you need behind the scenes. You can attach a real wallet later, or never.

Where do my funds actually live?

On the blockchain, inside the shielded pool's smart contract. Not on our servers, not in a database we can access. We can't pause your withdrawal or seize your balance.

What chain does this run on?

We currently settle on Base, an Ethereum layer-2 chain known for low fees and fast confirmations. The architecture is portable to other EVM networks if needed.

What if I send to a handle nobody has registered?

The funds wait in escrow attached to that handle. The first time someone proves ownership of it — by signing in with the matching X or Gmail account — the escrow is converted into spendable balance for them.

Can you read my transactions?

We can show you your own transaction history — that's yours, of course. We cannot read other users' transactions, link them together, or unmask the recipients of pool transfers we didn't originate. That's a property of the cryptography, not a promise.

Is this anonymous like Tornado Cash?

It uses the same family of zero-knowledge constructions, but the goal is different. We aren't trying to obscure the fact that you sent money — your account knows, your tax software can know, your accountant can know. We're trying to keep your activity from being correlated by strangers on a public block explorer.

What happens to my money if you go away?

Your keys still control your funds in the contract. Whether you self-custody or use our managed mode, the contract is the source of truth. We publish documentation for spending directly against it, so no user is dependent on our service to recover what's theirs.

Can you freeze my funds?

No. The contract has no per-user freeze. We can pause a specific token across the entire pool in an emergency (a known exploit in the token, for example), but we cannot single you out.

Something missing? Reach out to the team — we'd rather answer questions in the docs than in a thousand individual replies.