Umbra Privacy LogoUmbra Privacy
Transaction Lifecycle

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.

Depositing from a public Associated Token Account (ATA) into the Unified Mixer Pool is the entry point for users seeking transaction anonymity. This operation converts visible, traceable funds into anonymous UTXOs within the shielded pool.


Overview

When you deposit from an ATA, your funds enter the mixer pool as a UTXO (Unspent Transaction Output). The deposit amount is visible on-chain (it's coming from a public account), but once inside the pool, the UTXO becomes indistinguishable from all other UTXOs.

Privacy Characteristics

AspectVisibility
Deposit AmountVisible (coming from public ATA)
Depositor AddressVisible (your L1 address)
UTXO After DepositAnonymous (indistinguishable in pool)
WithdrawalUnlinkable to this deposit (after mixing delay)

UTXO Structure

When creating a UTXO, you must specify several fields:

FieldDescription
AmountThe value being deposited
Random SecretEntropy making each UTXO commitment unique
Unlocking AddressUser Commitment of who can spend
Destination AddressL1 address where funds go when burned
Nullifier DataInformation for deriving the nullifier on spend

The Unlocking Address and Destination Address are particularly important-they determine who can spend the UTXO and where the funds ultimately go.


Setting the Unlocking Address

The unlocking address determines who can spend the UTXO. You have two strategies depending on whether the recipient is registered with Umbra.

Strategy 1: Registered Recipient (Maximum Anonymity)

If the recipient has registered their User Commitment:

AspectDetails
Unlocking AddressRecipient's registered User Commitment
Destination AddressRecipient's L1 address
Who BurnsRecipient (when they choose)
AnonymityMaximum-recipient is part of the full anonymity set

This is the preferred approach for maximum privacy. The recipient becomes part of the entire mixer's anonymity set.

Strategy 2: Non-Registered Recipient (Ephemeral Keys)

If the recipient hasn't registered with Umbra, you can still send them funds using ephemeral keys:

AspectDetails
Unlocking AddressEphemeral User Commitment (generated by sender)
Destination AddressRecipient's L1 address
Who BurnsSender (on recipient's behalf)
AnonymityReduced-sender knows the link

For a detailed comparison of these strategies, see Unlocking Address Strategies.


Deposit Flow

Step 1: Prepare UTXO Data

Gather all required fields for the UTXO:

Step 2: Compute UTXO Commitment

Hash all UTXO fields using Poseidon to create the commitment that will be stored in the Merkle tree. The commitment includes the amount, random secret, unlocking address, destination address, and other fields.

Step 3: Submit Deposit Transaction

Step 4: Wait for Mixing Delay

After deposit, a mixing delay must pass before the UTXO can be burned. This delay is critical for anonymity-it allows many deposits to accumulate, creating a larger anonymity set.


The Mixing Delay

Why It's Required

Without a delay, timing analysis could link deposits to withdrawals:

Without DelayWith Delay
Alice deposits 100Alice deposits 100
Alice withdraws 100 immediatelyBob deposits 100
Observer links Alice's deposit to withdrawalCarol deposits 100
(Time passes)
Someone withdraws 100
Observer cannot link to specific depositor

How Long to Wait

StrategyAnonymity Level
Minimum delayProtocol-enforced minimum
Longer waitLarger anonymity set (more deposits accumulated)
Variable timingAdds unpredictability

The longer you wait beyond the minimum, the more UTXOs enter the pool, increasing your anonymity set.


Technical Details

Instruction: DepositFromATA

ParameterDescription
depositorSender's L1 address (signer)
amountAmount to deposit (visible)
utxo_dataSerialized UTXO fields
merkle_treeTarget Merkle tree account

On-Chain Effects

ChangeDescription
ATA BalanceDecremented by deposit amount
Merkle TreeNew leaf appended (UTXO commitment)
Merkle RootUpdated to reflect new leaf
TimestampRecorded for mixing delay enforcement

Storage

DataLocation
UTXO CommitmentMerkle tree leaf (on-chain root, off-chain leaves)
Full UTXO DataOff-chain (indexed)
Deposit EventOn-chain event log

Privacy Considerations

What's Revealed at Deposit

InformationVisibilityMitigation
Depositor AddressPublicUse intermediate wallet
Deposit AmountPublicUse common amounts
Deposit TimePublicDeposit at random times
Token MintPublicInherent to token type

Improving Deposit Privacy

TechniqueDescription
Common AmountsDeposit round numbers (10, 100, 1000) that many others use
Intermediate WalletFund a fresh wallet, then deposit to break the chain
Random TimingDon't deposit immediately after receiving funds
Multiple DepositsSplit into smaller deposits over time

After Mixing Delay

Once the mixing delay passes and you burn the UTXO, no observer can determine:

  • Which depositor you were
  • When you originally deposited
  • The original source of your funds

The burn is completely unlinkable to any specific deposit.


Self-Deposit vs. Sending

Self-Deposit

Depositing for yourself:

FieldValue
Unlocking AddressYour User Commitment
Destination AddressYour L1 Address
Who BurnsYou

Sending to Another User

Depositing for someone else:

FieldValue
Unlocking AddressRecipient's Commitment (or ephemeral)
Destination AddressRecipient's L1 Address
Who BurnsRecipient (or you, if using ephemeral)

Error Conditions

ErrorCauseResolution
Insufficient BalanceATA balance < deposit amountEnsure sufficient funds
Invalid CommitmentMalformed unlocking addressVerify commitment computation
Tree FullCurrent Merkle tree at capacityUse next available tree
Invalid AmountAmount out of valid rangeUse valid amount

Summary

AspectDetails
SourceAssociated Token Account (ATA)
DestinationUnified Mixer Pool (UTXO)
Deposit VisibilityAmount and depositor visible on-chain
UTXO PrivacyAnonymous after mixing delay
Unlocking AddressRecipient's commitment or ephemeral
Destination AddressRecipient's L1 address
Mixing DelayRequired before burn
Best ForBreaking transaction links from public funds