V1 Mainnet · Once per chain
Registration
Before your first private action, your address registers once on each chain: one transaction that publishes your userCommitment and your viewing public key. From then on, anyone can pay you privately at your normal address.
Sent by
Your wallet
Proof
None
Gas
Paid by you
Stores
userCommitment + ivkPub
Your wallet
signs the key message
no gas
Menoid app
derives your keys
checks registrationOf
Your wallet
sends register()
one transaction
NoidPool
stores your identity
once per address
In your browser
nothing leaves this tab
- 1The app asks your wallet to sign the key message — a signature, not a transaction.
- 2It derives your keys from the signature: sk, nk, ivk, ovk and your userCommitment.
- 3It calls
registrationOf(address). Already registered with this userCommitment? Then you’re signed in — nothing else to do.
Your wallet
- 4Sends
register(userCommitment, ivkPub)— ivkPub of epoch 0, 65 bytes.
Inside NoidPool
- 5Refuses an address that is already registered.
- 6Checks the userCommitment is non-zero, inside the field, and not already claimed by another address. An honest commitment contains its own address, so copying someone else’s is the only way to collide.
- 7Checks the viewing key is 65 bytes starting with 0x04 — an uncompressed secp256k1 key.
- 8Stores your registration (userCommitment, viewing key, key index 0, epoch 0) and emits
Registered(wallet, userCommitment, viewingPublicKey).
How a sender finds you
registrationOf(address) returns (userCommitment, viewingPublicKey, keyIndex, viewingEpoch). A sender needs the first two: the userCommitment to lock the note to you, the viewing key to encrypt it so only you can read it. Both come from one call to the chain — no server sits between a sender and the answer.
Paying someone who never registered
Changing keys later
| Function | What changes | When |
|---|---|---|
| updateViewingKey(ivkPub) | Viewing epoch + 1: new ivk and ovk for new notes. Same identity, same balance. | Fresh viewing keys — e.g. after sharing an epoch key. |
| rotateKeys(uc, ivkPub) | Key index + 1: a whole new identity (new sk, nk, ivk, ovk). | If your signature ever leaked. Notes locked to the old identity still need the old keys. |
On-chain, anyone can see
- That this address uses Menoid
- Its userCommitment and viewing public key
Stays private
- Your keys
- Your balance and activity — there is nothing to see yet
