> For the complete documentation index, see [llms.txt](https://vayyl.gitbook.io/vayyl-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vayyl.gitbook.io/vayyl-docs/product/private-transfers.md).

# Private Transfers

Private transfers are the next core milestone because they turn the Vault from an entry/exit proof into a reusable private balance.

## Intended user flow

1. The recipient shares a Vayyl shielded address—not necessarily a public Stellar account.
2. The sender enters an amount and asset.
3. The wallet selects private notes, creates a recipient output and a change output, then proves conservation locally.
4. A relayer publishes nullifiers, commitments, encrypted outputs, and the proof.
5. The recipient wallet discovers and decrypts its output.

## What the proof enforces

* every input note exists in an accepted commitment root;
* the spender controls every input;
* no input nullifier has already appeared;
* input value equals recipient outputs, change, fees, and any public withdrawal;
* outputs are bound to the asset and recipient keys selected by the wallet;
* commitments and nullifiers use the same canonical Poseidon2 encoding as the contract.

## Integration work

The repository already contains payment-circuit work, but a user-ready transfer requires more than a circuit:

* audited two-input/two-output constraints;
* encrypted note payloads and recipient scanning;
* a recoverable shielded-address/key format;
* wallet note selection and concurrency handling;
* relayer fee accounting and retries;
* contract support for atomic nullifier consumption and output insertion;
* privacy-regression tests for amount and timing behavior.

This milestone becomes the common transaction primitive for the higher-order products that follow.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://vayyl.gitbook.io/vayyl-docs/product/private-transfers.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
