Protocol
Private payments on Aztec
How the private payments wallet works, what it hides, what it does not, and why it runs on a test network.
Test network only
The private payments wallet runs on the Aztec test network (version 6.0.0, settled on Ethereum Sepolia). Its tokens have no value. It will not be connected to a network with real value until our contracts have been reviewed by an independent auditor.
A normal blockchain payment is public: anyone can see who paid whom and how much. Aztec is an Ethereum layer 2 network with private state, where a payment can be valid without revealing those details. The private payments wallet in Ledger Chat uses it to hold private balances and to send them.
Your private wallet
Your wallet signs a statement
The first time you open the private wallet, your Ethereum wallet asks you to sign a typed message that names Humanity Ledger and the Aztec test network. Signing is free and sends no transaction.
Your browser derives the keys
The signature is turned into the secret of an Aztec account with HKDF-SHA256, inside your browser. The same wallet always produces the same account, so you can open it on any device, and nothing that can spend it is ever sent to us.
Your browser runs a private node
A Private eXecution Environment (PXE) runs in your browser, stores your notes in its local database, decrypts them and produces the proofs for your transactions.
The account is deployed
Your Aztec account contract is deployed on the test network the first time it is needed. Fees on the test network are covered by Aztec's sponsored fee contract, so you do not need any tokens to start.
The four actions
| Action | What it does | What is public |
|---|---|---|
| Shield | Moves tokens from your public Aztec balance into private notes. | Your Aztec address and the amount, because the tokens leave a public balance. |
| Send | Spends some of your notes and creates new ones that only the recipient can read. | That a transaction happened. Not the amount, the sender or the recipient. |
| Receive | Shows your Aztec address as a QR code, optionally with a token and an amount, so someone can send to you. | Nothing. Your address is shared only with the people you show it to. Our server never stores it. |
| Unshield | Moves tokens from your private notes back to a public Aztec balance. | The receiving address and the amount. |
Timing can still leak information. If you shield an amount and an identical amount is unshielded shortly afterwards, an observer may connect the two. Shield and unshield round amounts, and leave time in between.
How privacy is achieved
- Private notes
- A private balance is a set of encrypted notes that only the owner can read. Sending spends some notes and creates new ones for the recipient and, if there is change, for you.
- Proofs made on your device
- Your browser proves that the transaction follows the rules of the token contract, for example that you own the notes and are not creating tokens. The network checks the proof without learning the amounts. The first proof on a device downloads several megabytes of proving data and can take a minute or more.
- Nullifiers
- When a note is spent, a nullifier is published. It stops the same note being spent twice, without revealing which note it was.
History
Recent transactions and shielded notes are assembled in your browser. Payments you receive are found by the PXE, which decrypts the notes and events addressed to you, so they appear on any device you open the wallet on. Payments you send, and your own shield and unshield operations, are recorded by the device that sends them and appear there. Our server never sees any of it.
Each action is a real transaction: your browser makes the proof, then the network includes it in a block. On a recent laptop that takes about a minute from pressing the button to the balance changing. The list shows each step as it happens: proving on this device, waiting for the network, settled.
Agreements in a conversation
In a direct conversation, Private agreement in the attach menu opens an escrow or a payment stream to the other person. Each agreement is its own contract on the Aztec test network, with keys that only the two of you hold, so nobody else can read its balance.
Share Aztec addresses
Each of you shares your Aztec address in the chat. Ledger Chat saves the other person's address the first time it sees it, and warns you if a different one appears later instead of replacing it.
Open the agreement
Choose escrow (the other person can claim before a deadline; after it you can take the amount back) or stream (the amount is paid out second by second, and you can cancel at any time). Your browser creates the contract and funds it from your private balance.
Verify and accept
The invitation arrives as a card. Nothing is trusted until the recipient presses Verify and accept: the browser checks that the contract is ours, for an accepted token, from the address this person shared, and that the contract holds the amount and deadline the invitation says.
Settle
The card shows the agreement as the contract holds it and offers the actions that apply: claim, refund, withdraw or cancel. Each is a real transaction proven on your device.
- The invitation is an encrypted message in your conversation. It carries the agreement's secrets, so it is never shown as text, put in a notification or copied.
- Saving the other person's address on first sight is trust on first use: it proves the address came from this conversation, not that they control that Aztec account.
- The agreement contracts have no external audit. On the test network the tokens have no value.
Test tokens
The wallet shows three test tokens, zkUSDC, zkDAI and zkETH. They are instances of Aztec's standard token contract that we deployed on the test network, and they have no relation to the real USDC, DAI or ETH. A faucet in the wallet mints a small public amount so you can try shielding and sending. The faucet's key is published on purpose so that anyone can mint, which is one more reason the tokens have no value.
What is not built yet
Status of the Aztec network
Aztec describes its mainnet as alpha, where bugs, including critical ones, are expected. In August 2026 its contributors reported a critical vulnerability in the proving system of Alpha V5, fixed in version 6. Since 3 November 2026 (Tierra), both Alpha and the test network run version 6.0.0. See the Aztec network page for the current versions.
