Umbra Privacy LogoUmbra Privacy
Transaction Lifecycle

User Commitment Registration

Registering your User Commitment to enable mixer pool interactions and receive anonymous UTXOs

To interact with the Unified Mixer Pool-depositing funds, receiving UTXOs, or spending shielded assets-you must register your User Commitment on-chain. This commitment serves as your anonymous identity within the mixer ecosystem.


What is a User Commitment?

The User Commitment is a cryptographic hash that binds together three of your four keys:

  1. L1 Interaction Key - Your Solana address (Ed25519)
  2. Shielded Spending Key - BN254 scalar for ZK proofs
  3. Master Viewing Key - 252-bit key for auditability

The commitment is the root hash of a Poseidon Merkle tree constructed from these keys and their blinding factors. For full technical details, see User Commitment Tree.


Why Registration is Required

When someone creates a UTXO for you in the mixer pool, they set the unlocking address to your User Commitment. Without registration:

  • Senders cannot look up your commitment
  • You cannot receive UTXOs from others
  • You are limited to self-deposits only

Registration creates an on-chain mapping from your L1 address to your User Commitment, enabling others to send you anonymous transfers.


What Gets Registered

FieldDescription
User CommitmentThe root hash of your User Commitment Tree (single field element)
Associated L1 AddressThe Solana address this commitment is registered under

Note: The underlying keys (L1, Spending Key, MVK) and blinding factors are never revealed during registration. Only the final commitment hash is stored on-chain.


Registration Process

Step 1: Generate Your Keys

Ensure you have all three keys required for the commitment:

KeyGeneration
L1 Interaction KeyYour Solana wallet keypair
Shielded Spending KeyBN254 scalar (random or derived)
Master Viewing Key252-bit integer (random or derived)

Plus the blinding factors for the Spending Key and MVK.

Step 2: Compute Your User Commitment

Construct the Poseidon Merkle tree and compute the root:

For the complete algorithm, see User Commitment Tree.

Step 3: Submit Registration Transaction

Call the RegisterUserCommitment instruction:

Step 4: Verification

After registration, your User Commitment is stored on-chain and can be queried by anyone knowing your L1 address.


Capabilities Unlocked

Once your User Commitment is registered, you gain the following capabilities:

CapabilityDescription
Receive UTXOsOthers can create UTXOs with your commitment as the unlocking address
Deposit to MixerCreate UTXOs for yourself or others
Spend UTXOsBurn UTXOs that have your commitment as the unlocking address
Anonymous TransfersFull mixer functionality with unlinkable transactions

What You Still Need

User Commitment registration alone enables mixer interactions, but for full Umbra functionality you also need:

CapabilityRequired Registration
ETA visibilityX25519 Registration
Receive confidential transfersX25519 Registration
Decrypt ETA balancesX25519 Registration

Binding to L1 Address

The commitment itself contains a hash of your L1 address (Hash 1 in the tree structure). This creates a cryptographic binding:

  • The on-chain record links L1 → Commitment
  • The commitment internally links back to L1
  • This bidirectional binding prevents commitment substitution attacks

Security Considerations

Key Material Protection

ComponentSensitivityIf Compromised
User CommitmentPublicNo impact (it's meant to be public)
Spending KeyCriticalAttacker can spend your mixer UTXOs
MVKSensitiveAttacker can view your transaction history
Blinding FactorsCriticalRequired to reconstruct commitment for ZK proofs

Spending Key Security

The Shielded Spending Key is the most critical component. Unlike the L1 key (which only controls ETAs), the Spending Key controls all your mixer funds. Recommendations:

PracticeRationale
Hardware storageIsolate from network-connected devices
Independent generationConsider generating separately from other keys
Secure backupLoss means permanent loss of mixer funds

Immutability

Key rotation is not supported. Once a User Commitment is registered and UTXOs are associated with it, the underlying keys cannot be changed. To use new keys:

  1. Spend all existing UTXOs to a new commitment
  2. Generate fresh keys
  3. Compute and register a new User Commitment

Relationship to X25519 Registration

User Commitment registration is independent from X25519 registration:

Registration Order

There is no required order-you can register either one first, or both in the same transaction batch:

OrderUse Case
X25519 firstUser wants confidential transfers before mixer
Commitment firstUser wants mixer anonymity before ETAs
Both togetherUser wants full functionality immediately

The 1:1 Binding

Important: A single L1 address can only have one User Commitment. This is enforced at multiple levels:

LevelEnforcement
On-ChainOnly one commitment can be registered per L1 address
CryptographicL1 address is hashed into the commitment structure
ProtocolAttempting to register a second commitment will fail

To maintain multiple shielded identities, you need separate L1 addresses for each.


Summary

AspectDetails
PurposeEnable mixer pool interactions and receiving UTXOs
What's RegisteredUser Commitment hash (root of Poseidon tree)
Components BoundL1 Key + Spending Key + MVK + Blinding Factors
EnablesMixer deposits, receiving UTXOs, spending UTXOs
Does Not EnableETA visibility (requires X25519)
Key RotationNot supported-must migrate to new commitment
Multiple IdentitiesRequires separate L1 addresses