Creating UTXOs from Encrypted Balance
Deposit funds from an Encrypted Token Account (ETA) into Umbra's Unified Mixer Pool to gain transaction anonymity while keeping amounts confidential.
Depositing from an Encrypted Token Account (ETA) into the Unified Mixer Pool provides the highest level of privacy for entering the shielded pool. Unlike public deposits, the deposit amount remains hidden throughout the entire process.
Overview
When you deposit from an ETA, your funds enter the mixer pool as a UTXO while keeping the amount confidential. External observers can see that a deposit occurred, but they cannot determine how much was deposited.
Privacy Characteristics
| Aspect | Visibility |
|---|---|
| Deposit Amount | Hidden (encrypted) |
| Depositor Address | Visible (your L1 address) |
| UTXO After Deposit | Anonymous (indistinguishable in pool) |
| Withdrawal | Unlinkable to this deposit |
Comparison to Public Deposit
| Aspect | ATA Deposit | ETA Deposit |
|---|---|---|
| Deposit Amount | Visible | Hidden |
| Depositor | Visible | Visible |
| UTXO Privacy | Anonymous | Anonymous |
| Overall Privacy | Good | Better |
How It Works
Depositing from an ETA involves the Arcium MPC network to handle encrypted arithmetic:
MPC's Role
The MPC performs several critical operations:
- Balance Verification - Ensures your encrypted ETA balance covers the deposit
- Balance Update - Decrements your ETA balance (encrypted arithmetic)
- UTXO Creation - Helps construct the UTXO with the encrypted amount
- Commitment Computation - Computes the UTXO commitment for the Merkle tree
All of this happens without ever exposing the plaintext amount.
UTXO Structure
Same as public deposits, but the amount field handling differs:
| Field | Description | Visibility |
|---|---|---|
| Amount | The deposit value | Encrypted (only owner knows) |
| Random Secret | Entropy for unique commitment | Private |
| Unlocking Address | User Commitment of who can spend | Hidden in commitment |
| Destination Address | L1 address for burn output | Hidden in commitment |
| Nullifier Data | For deriving nullifier on spend | Private |
Setting the Unlocking Address
Just like public deposits, you have two strategies for the unlocking address:
Strategy 1: Registered Recipient (Maximum Anonymity)
| Aspect | Details |
|---|---|
| Privacy | Maximum-amount hidden, recipient in full anonymity set |
| Unlocking Address | Recipient's registered User Commitment |
| Who Burns | Recipient |
Strategy 2: Non-Registered Recipient (Ephemeral Keys)
| Aspect | Details |
|---|---|
| Privacy | Amount hidden, but sender knows link |
| Unlocking Address | Ephemeral commitment |
| Who Burns | Sender (on recipient's behalf) |
For detailed comparison, see Unlocking Address Strategies.
Deposit Flow
Step 1: Prepare Deposit Parameters
Step 2: Submit to MPC
The transaction is routed through the Arcium MPC network:
Step 3: MPC Processing
The MPC performs:
- Decrypt your encrypted balance (MPC can do this collectively)
- Verify balance ≥ deposit amount
- Compute new balance = old balance - deposit
- Re-encrypt new balance for your X25519 key
- Construct UTXO commitment
- Append commitment to Merkle tree
Step 4: On-Chain Updates
Step 5: Wait for Mixing Delay
Same as public deposits-the mixing delay must pass before the UTXO can be burned.
Privacy Advantages
Why ETA Deposits Are Better
| Advantage | Explanation |
|---|---|
| No Amount Correlation | Observers can't use deposit amounts to narrow candidates |
| No Pattern Analysis | Can't identify "round number" deposits |
| Uniform Deposits | All ETA deposits look identical (just "a deposit happened") |
| Preserved Confidentiality | Amount stays hidden from source to destination |
Privacy Flow Comparison
Public Deposit (ATA): The deposit amount is visible on-chain, creating a data point that could potentially be correlated with later burns.
Confidential Deposit (ETA): The deposit amount is hidden throughout the entire flow, leaving no public amount data to correlate with later burns.
Technical Details
Instruction: DepositFromETA
| Parameter | Description |
|---|---|
| depositor | Sender's L1 address (signer) |
| encrypted_amount | Deposit amount encrypted for MPC |
| utxo_params | Unlocking/destination addresses, random secret |
| merkle_tree | Target Merkle tree account |
On-Chain Effects
| Change | Description |
|---|---|
| ETA Balance | Decremented (encrypted arithmetic) |
| ETA Nonce | Updated for re-encryption |
| Merkle Tree | New leaf appended |
| Merkle Root | Updated |
MPC Verification
The MPC verifies several conditions:
| Check | Purpose |
|---|---|
| Balance Sufficiency | Sender has enough funds |
| Valid Amount | Amount is positive and valid |
| Correct Encryption | Parameters encrypted correctly |
Maximum Privacy: ETA → Mixer → ETA
For the ultimate privacy configuration, combine ETA deposit with ETA withdrawal:
| Stage | Privacy |
|---|---|
| Deposit | Amount hidden (ETA source) |
| In Pool | Identity hidden (mixer anonymity) |
| Withdrawal | Amount hidden (ETA destination) |
This provides:
- Full amount confidentiality - Never exposed
- Full anonymity - Unlinkable transactions
- End-to-end privacy - No public exposure at any point
Requirements
Sender Requirements
| Requirement | Description |
|---|---|
| X25519 Registered | Must have registered for ETA access |
| User Commitment Registered | Must be registered for mixer access |
| ETA with Balance | Must have existing ETA with sufficient encrypted balance |
| L1 Key | Must sign the transaction |
For Recipient (if sending to another)
| Requirement | Strategy |
|---|---|
| Registered Commitment | Use their commitment for max anonymity |
| Not Registered | Use ephemeral keys, sender burns |
Error Conditions
| Error | Cause | Resolution |
|---|---|---|
| Insufficient Balance | Encrypted balance < deposit | Verify balance first |
| MPC Rejection | Invalid encrypted parameters | Check encryption |
| Tree Full | Merkle tree at capacity | Use next tree |
| Invalid Commitment | Malformed unlocking address | Verify computation |
Summary
| Aspect | Details |
|---|---|
| Source | Encrypted Token Account (ETA) |
| Destination | Unified Mixer Pool (UTXO) |
| Deposit Visibility | Amount hidden, depositor visible |
| UTXO Privacy | Anonymous after mixing delay |
| MPC Required | Yes-for encrypted balance update |
| Privacy Level | Higher than public deposit |
| Best For | Maximum privacy-no public amount exposure |
Creating UTXOs from Public Balance
Deposit funds from a public Associated Token Account (ATA) into Umbra's Unified Mixer Pool to begin using anonymous UTXO-based transfers on Solana.
Burning UTXOs to Public Balance
Learn how to withdraw funds from Umbra's Unified Mixer Pool to a public Associated Token Account (ATA) after the mixing delay period completes.