> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Приватный кошелек

> Добавьте поддержку конфиденциальности в существующий кошелек Solana для общедоступного конфиденциального Ring. Создавайте приватные кошельки, получайте и отправляйте приватные транзакции.

Приватный кошелек состоит из пары ключей Solana для подписания, ключа нуллификатора и ключа просмотра для шифрования. Вместе эти ключи образуют экранированную пару ключей.
Ваша система управления ключами хранит экранированную пару ключей.
Код кошелька использует интерфейс конфиденциальности и SDK для создания приватных транзакций.

<img src="https://mintcdn.com/helius/nNv9k5eJvwuxAzBn/images/privacy/stack.svg?fit=max&auto=format&n=nNv9k5eJvwuxAzBn&q=85&s=0e4087582b1d03c3d29d6a21f33149bb" alt="Key management and the Privacy SDK connect through the Privacy Interface. The Privacy SDK calls the Privacy API. The Privacy API submits the transaction to Solana." width="2156" height="270" data-path="images/privacy/stack.svg" />

Интеграция позволяет вашим пользователям:

1. Создавать приватный кошелек с самостоятельным хранением средств
2. Получать приватные переводы по адресу Solana
3. Вносить токены на приватный баланс
4. Приватно отправлять средства на адрес Solana
5. Выводить средства на любой адрес Solana
6. Локально расшифровывать приватные балансы и историю транзакций

Интеграция включает:

1. [**Экранированную пару ключей**](#интегрируйте-экранированную-пару-ключей) — в вашей системе управления ключами для шифрования
2. [**Интерфейс конфиденциальности и SDK**](#интегрируйте-интерфейс-конфиденциальности-и-sdk) — для создания приватных транзакций
3. [**Пользовательские сценарии**](#интегрируйте-пользовательские-сценарии) — для интеграции в ваш кошелек

## Контекст для вашего ИИ

<Prompt description="Add a Private Wallet to an existing Solana wallet" actions={["copy", "cursor"]}>
  {`---
    description: Добавьте приватный кошелек в существующий кошелек Solana
    allowed-tools: Bash, Read, Write, Edit, Glob, Grep, WebFetch, AskUserQuestion, Task, TaskCreate, TaskGet, TaskList, TaskUpdate, TaskOutput, mcp__deepwiki, mcp__helius-docs
    ---

    ## Добавьте приватный кошелек в существующий кошелек Solana

    Стиль:
    - Сначала тезис. Затем краткое, законченное объяснение полным предложением.
    - Без слов-паразитов.

    Текущая страница: https://www.helius.dev/docs/privacy/integration/wallet.md

    Реализуйте в указанной последовательности. Не пропускайте и не меняйте порядок:
    1. Получение защищенной пары ключей
    2. Интерфейс конфиденциальности в управлении ключами
    3. Пользовательские сценарии.

    Контекст:
    - Оглавление документации: https://www.helius.dev/docs/privacy.md
    - Спецификация: https://github.com/helius-labs/zolana/blob/main/docs/spec.md
    - MCP: https://www.helius.dev/docs/privacy/ai-tools.md
    - Пакеты: @heliuslabs/zolana, @solana/kit · zolana-client, zolana-interface, zolana-program, zolana-keypair, zolana-transaction
    - Примеры: https://github.com/helius-labs/zolana-examples/tree/main/typescript-client · https://github.com/helius-labs/zolana-examples/tree/main/rust-client

    Ключевые API: ShieldedKeypairLike, ViewingKeyLike, ShieldedKeypairTrait, ViewingKeyTrait, createZolanaClient. API сценариев: страницы, ссылки на которые приведены в оглавлении документации.

    ### 1. Проиндексируйте проект
    - Выполните Grep для \`ShieldedKeypairLike|ViewingKeyLike|createZolanaClient|@heliuslabs/zolana|zolana-keypair|TSPP/derive\` в src/
    - Выполните Glob для \`**/*.{ts,tsx,js,rs}\` · прочитайте package.json / Cargo.toml
    - Определите: существующее управление ключами Solana, сид-фраза или аппаратное устройство/MPC, индекс учетной записи, путь отправки, интерфейс баланса/истории
    - Поручите задачу субагенту, если пакетов несколько

    ### 2. Изучите справочные материалы
    - Получите текущую страницу через WebFetch — для обоих языков интерфейса и обеих вкладок получения ключей
    - Получите оглавление документации через WebFetch — перейдите по страницам для указанной выше последовательности. Добавляйте ввод/вывод средств, только если он выбран на шаге 3
    - Получите спецификацию через WebFetch, если поведение протокола неоднозначно (реестр, траты, шифрование)
    - Создайте через TaskCreate по одной задаче для каждой указанной ниже фазы

    ### 3. Уточните намерение
    - Спросите через AskUserQuestion: вы используете TypeScript или Rust?
    - Спросите через AskUserQuestion: ваш кошелек основан на сид-фразе, вы создаете тесты или используете кошелек без сид-фразы?
    - Кошелек на основе сид-фразы → получите ключи из сид-фразы
    - Тесты → получите ключи из фиксированного сообщения
    - Кошелек без сид-фразы → получите ключи из фиксированного сообщения
    - Спросите через AskUserQuestion: нужен ли вам ввод/вывод средств?
    - Спросите через AskUserQuestion: Localnet или devnet?
    - Подведите итог. Дождитесь подтверждения перед планированием

    ### 4. Создайте план
    - Не редактируйте несвязанные файлы. Не добавляйте неиспользуемый код.
    - Сохраняйте существующий код побайтово. Не придумывайте API, файлы или вспомогательные функции, которых нет на полученных страницах или в репозитории.
    - Каждый указанный путь, символ и номер строки должен быть получен на шаге 1 или 2. Если вы не прочитали источник, не указывайте их.
    - Создайте ASCII-дерево добавляемых или изменяемых файлов. Для каждого файла укажите отдельной строкой путь, а затем назначение файла.
    - Соблюдайте последовательность. Если что-то неясно, используйте AskUserQuestion. Представьте план. Дождитесь одобрения.

    ### 5. Реализуйте
    - TS: выполните Bash \`pnpm add @heliuslabs/zolana @solana/kit\`, если пакет отсутствует
    - Rust: добавьте крейты со страницы SDK, ссылка на которую приведена в оглавлении документации
    - Следуйте утвержденному плану. Используйте Write/Edit. Не заменяйте пару ключей Solana
    - Обновляйте каждый шаг через TaskUpdate

    ### 6. Проверьте
    - Реализован каждый метод интерфейса для выбранного языка
    - В журналах и сетевых полезных нагрузках нет секретов
    - TS: выполните Bash \`tsc --noEmit\` и существующие тесты
    - Rust: выполните Bash \`cargo check\` и \`cargo test\`, если тесты существуют
    - Отметьте задачу как завершенную через TaskUpdate

    ### Инструменты
    - mcp__helius-docs для страниц документации
    - mcp__deepwiki__ask_question("helius-labs/zolana", "<q>")
    - WebFetch \`https://www.helius.dev/docs/<path>.md\`
    - Субагент Task для параллельного выполнения Grep/Read/WebFetch
    - TaskList для оставшейся работы

    Инварианты:
    - Кошелек хранит защищенную пару ключей. Никогда не отправляйте ключевой материал в Privacy API.
    - Реализуйте каждый метод интерфейса выбранного языка. Не копируйте методы, предназначенные только для Rust (\`sign_hash\`, \`nullifier_key\`), в TypeScript.
    - Операции с ключом просмотра выполняются локально и синхронно. Хранитель, способный только подписывать, недопустим.
    - Используйте только API с текущей страницы, из оглавления документации и со страниц сценариев в указанной последовательности. Если API там отсутствует, остановитесь и используйте AskUserQuestion.
    - Не записывайте в журнал мнемоническую фразу, нуллификатор, ключ просмотра или подпись \`TSPP/derive/v1\`.
    - Используйте только один язык: TypeScript или Rust.
    - Поддерживаемые активы: SOL, SPL и Token-2022.
    - Для каждого открытого ключа Solana пользователя можно добавить приватный кошелек. Одному адресу Solana соответствует один защищенный адрес.
    - Если у получателя приватного перевода нет приватного кошелька, Privacy API может преобразовать перевод в вывод из приватного баланса на публичный.
    Рекомендуем запрашивать отдельную подпись пользователя в интерфейсе, чтобы пользователь случайно не вывел средства на публичный баланс.`}
</Prompt>

<Accordion title="View prompt">
  ```text theme={"system"}
  description: Add a Private Wallet to an existing Solana wallet
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep, WebFetch, AskUserQuestion, Task, TaskCreate, TaskGet, TaskList, TaskUpdate, TaskOutput, mcp__deepwiki, mcp__helius-docs
  ---

  ## Add a Private Wallet to an existing Solana wallet

  Voice:
  - Point. Then a short, self-contained explanation in a real sentence.
  - No fill words.

  Current Page: https://www.helius.dev/docs/privacy/integration/wallet.md

  Implement in this sequence. Do not skip or rearrange:
  1. Shielded keypair derivation
  2. Privacy Interface in key management
  3. User flows.

  Context:
  - Docs index: https://www.helius.dev/docs/privacy.md
  - Spec: https://github.com/helius-labs/zolana/blob/main/docs/spec.md
  - MCP: https://www.helius.dev/docs/privacy/ai-tools.md
  - Packages: @heliuslabs/zolana, @solana/kit · zolana-client, zolana-interface, zolana-program, zolana-keypair, zolana-transaction
  - Examples: https://github.com/helius-labs/zolana-examples/tree/main/typescript-client · https://github.com/helius-labs/zolana-examples/tree/main/rust-client

  Key APIs: ShieldedKeypairLike, ViewingKeyLike, ShieldedKeypairTrait, ViewingKeyTrait, createZolanaClient. Flow APIs: the pages linked from the docs index.

  ### 1. Index project
  - Grep \`ShieldedKeypairLike|ViewingKeyLike|createZolanaClient|@heliuslabs/zolana|zolana-keypair|TSPP/derive\` across src/
  - Glob \`**/*.{ts,tsx,js,rs}\` · read package.json / Cargo.toml
  - Identify: existing Solana key management, seed vs hardware/MPC, account index, send path, balance/history UI
  - Task subagent if multiple packages

  ### 2. Read references
  - WebFetch the current page — both interface languages, both derivation tabs
  - WebFetch the docs index — follow the pages for the sequence above. Add on-/off-ramp only if selected in step 3
  - WebFetch the spec when protocol behavior is ambiguous (registry, spends, encryption)
  - TaskCreate one todo per phase below

  ### 3. Clarify intention
  - AskUserQuestion: Are you using TypeScript or Rust?
  - AskUserQuestion: Are you a seed-based wallet, creating tests, or a non-seed-based wallet?
    - Seed-based wallet → derive from the seed phrase
    - Tests → derive from a fixed message
    - Non-seed-based wallet → derive from a fixed message
  - AskUserQuestion: Do you want on-/off-ramp?
  - AskUserQuestion: Localnet or devnet?
  - Summarize. Wait for confirmation before planning

  ### 4. Create plan
  - Do not edit unrelated files. Do not add dead code.
  - Take existing code byte for byte. Do not invent APIs, files, or helpers that are not on the fetched pages or in the repo.
  - Every claimed path, symbol, and line number comes from step 1 or 2. If it was not read, do not write it.
  - ASCII tree of files to add or change. One line per file: path, then what that file does.
  - Follow the sequence. If unclear, AskUserQuestion. Present the plan. Wait for approval.

  ### 5. Implement
  - TS: Bash \`pnpm add @heliuslabs/zolana @solana/kit\` if missing
  - Rust: add the crates from the SDK page linked from the docs index
  - Follow the approved plan. Write/Edit. Do not replace the Solana keypair
  - TaskUpdate each step

  ### 6. Verify
  - Every interface method for the chosen language is implemented
  - No secrets in logs or network payloads
  - TS: Bash \`tsc --noEmit\` + existing tests
  - Rust: Bash \`cargo check\` + \`cargo test\` if tests exist
  - TaskUpdate complete

  ### Tools
  - mcp__helius-docs for docs pages
  - mcp__deepwiki__ask_question("helius-labs/zolana", "<q>")
  - WebFetch \`https://www.helius.dev/docs/<path>.md\`
  - Task subagent for parallel Grep/Read/WebFetch
  - TaskList for remaining work

  Invariants:
  - Wallet holds the shielded keypair. Never send key material to the Privacy API.
  - Implement every method on the chosen language's interface. Do not copy Rust-only methods (\`sign_hash\`, \`nullifier_key\`) onto TypeScript.
  - Viewing-key operations are local and synchronous. A sign-only custodian is invalid.
  - Use only APIs from the current page, the docs index, and the flow pages in the sequence. If an API is not there, stop and AskUserQuestion.
  - Do not log mnemonic, nullifier, viewing key, or the \`TSPP/derive/v1\` signature.
  - Language is TypeScript or Rust, not both.
  - Assets are SOL, SPL, and Token-2022.
  - Every Solana public key of the user can add a Private Wallet. One Solana address maps to one Shielded Address.
  - When the recipient of a private transfer does not have a Private Wallet, the Privacy API can resolve the transfer to a private-to-public withdrawal.
  We recommend requesting a separate user signature in the UI to ensure the user does not withdraw to a public balance by accident.
  ```
</Accordion>

<Steps>
  <Step>
    ## Интегрируйте экранированную пару ключей

    При интеграции приватного кошелька в вашу систему управления ключами добавляется экранированная пара ключей.
    Экранированная пара ключей подписывает, шифрует и расшифровывает транзакции.

    Экранированная пара ключей представляет собой набор ключей подписания, нуллификатора и просмотра.

    * **Ключ подписания:** пара ключей Ed25519 Solana кошелька для подписания транзакций.
    * **Ключ просмотра:** пара ключей P-256, используемая для шифрования и расшифровки транзакций.
    * **Ключ нуллификатора:** <Tooltip tip="A nullifier ensures a private balance cannot be spent twice. A private balance is the sum of all UTXOs (unspent transaction outputs) owned by an address. Each transaction spends (nullifies) input UTXOs and creates new outputs.">Ключ, используемый для получения нуллификаторов.</Tooltip>

    Кошелек может получить экранированную пару ключей из подписи EdDSA фиксированного сообщения.

    Подписи EdDSA детерминированы, поэтому подпись одной и той же парой ключей Solana одного и того же сообщения всегда создает одну и ту же экранированную пару ключей.
    Мы используем подпись как начальное значение для получения экранированной пары ключей.

    Фиксированная полезная нагрузка сообщения — `"TSPP/derive/v1"`, закодированная как офчейн-сообщение Solana v0.

    Экранированный ключ подписания — это ключ EdDSA Solana кошелька.
    Ключи нуллификатора и просмотра — дополнительные ключи, полученные из подписи.

    <Warning>
      Подпись является начальным значением для получения ключей.
      Любой, у кого она есть, может получить ключи нуллификатора и просмотра, а также расшифровать транзакции пользователя.
      Отклоняйте любые запросы от третьих лиц на подписание сообщения `"TSPP/derive/v1"`.
    </Warning>

    Псевдокод для получения экранированной пары ключей из подписи Solana:

    ```jsx theme={"system"}
    function deriveShieldedKeypair(solanaKeypair):
          solanaPubkey = solanaKeypair.publicKeyBytes() // 32 bytes
    	
          payload = UTF8("TSPP/derive/v1")

          // Solana off-chain message v0 envelope
          derivationMessage =
              bytes("\xffsolana offchain")            // 16 bytes
              || u8(0)                                // version
              || SHA256(payload)                      // application domain
              || u8(0)                                // restricted ASCII format
              || u8(1)                                // one signer
              || solanaPubkey
              || u16LE(length(payload))
              || payload

          // Ed25519 signatures are deterministic, so the same wallet produces
          // the same 64-byte seed every time.
          derivationSeed = ED25519_SIGN(
              solanaKeypair.secretKey,
              derivationMessage
          )

          // HKDF-Extract with no salt
          prk = HKDF_SHA256_EXTRACT(
              salt = empty,
              ikm  = derivationSeed
          )

          nullifierSecret = HKDF_SHA256_EXPAND(
              prk,
              info   = UTF8("TSPP/nf_key/ed25519/v1"),
              length = 31
          )

          viewingKeyMaterial = HKDF_SHA256_EXPAND(
              prk,
              info   = UTF8("TSPP/view_key/ed25519/v1"),
              length = 48
          )

          // RFC hash-to-field reduction into a non-zero P-256 scalar
          viewingSecret = P256_SCALAR_FROM_OKM(viewingKeyMaterial)

          return ShieldedKeypair {
              signingKey:    solanaKeypair,
              nullifierKey:  NullifierKey(nullifierSecret),
              viewingKey:    P256Keypair(viewingSecret)
    }
    ```

    <Info>
      Пример реализации: [TypeScript](https://github.com/helius-labs/zolana/blob/cad0664e374f6a0e5c532169c5895203e366eb56/sdk-libs/ts/src/keypair/shielded.ts#L201) · [Rust](https://github.com/helius-labs/zolana/blob/cad0664e374f6a0e5c532169c5895203e366eb56/sdk-libs/keypair/src/shielded.rs#L126)
    </Info>
  </Step>

  <Step>
    ## Интегрируйте интерфейс конфиденциальности и SDK

    Интерфейс конфиденциальности позволяет вашему коду использовать SDK конфиденциальности для создания приватных транзакций без прямого доступа к ключевому материалу.
    Ваша система управления ключами реализует интерфейс конфиденциальности из двух частей.

    1. Интерфейс подписания для создания транзакций с помощью SDK конфиденциальности. Исходный код: [TypeScript](https://github.com/helius-labs/zolana/blob/236e6cd6cee4d07e567b316210e018f31dfa4d90/sdk-libs/ts/src/keypair/shielded.ts#L132)/ [Rust](https://github.com/helius-labs/zolana/blob/236e6cd6cee4d07e567b316210e018f31dfa4d90/sdk-libs/keypair/src/traits/shielded_keypair.rs)
    2. Интерфейс шифрования и расшифровки. Исходный код: [TypeScript](https://github.com/helius-labs/zolana/blob/236e6cd6cee4d07e567b316210e018f31dfa4d90/sdk-libs/ts/src/keypair/shielded.ts#L154)/ [Rust](https://github.com/helius-labs/zolana/blob/236e6cd6cee4d07e567b316210e018f31dfa4d90/sdk-libs/keypair/src/traits/view_key.rs)

    <Info>
      Интерфейс конфиденциальности не хранит состояние, а следовательно, балансы и историю транзакций.
      Для повышения производительности рекомендуем локально кэшировать балансы пользователей и историю транзакций.
    </Info>

    ### О создании доказательств

    Для создания доказательства с нулевым разглашением требуются входные данные с полными сведениями о пользовательской транзакции в открытом виде и ключи нуллификатора.

    В настоящее время создание доказательств на сервере доступно через стандартный RPC URL Helius.

    Локальное создание доказательств появится в ближайшее время.
    До запуска основной сети планируется реализовать создание серверных доказательств со сквозным шифрованием в AWS Nitro.
  </Step>

  <Step>
    ## Интегрируйте пользовательские сценарии

    ### Создание приватного кошелька

    Приватный кошелек создается в два этапа:

    1. Получите экранированную пару ключей
    2. Зарегистрируйте адрес Solana в ончейн-реестре.

    Для создания приватного кошелька не требуется вносить средства на приватный баланс.

    <Info>
      В приложении кошелька вы можете разрешить пользователям создавать приватные кошельки только для выделенного открытого ключа «Приватного кошелька»
      или для любого открытого ключа.
    </Info>

    Реестр связывает открытый ключ подписания с открытыми ключами нуллификатора и просмотра. Вместе эти открытые ключи образуют экранированный адрес.

    ```mermaid theme={"system"}
    %%{init: {
      'theme': 'base',
      'themeVariables': {
        'lineColor':           '#FF6B35',
        'primaryTextColor':    '#737373',
        'primaryBorderColor':  '#9CA3AF',
        'actorBkg':            '#FFFFFF',
        'actorBorder':         '#9CA3AF',
        'actorTextColor':      '#737373',
        'signalColor':         '#FF6B35',
        'signalTextColor':     '#737373',
        'labelBoxBkgColor':    '#FF6B351F',
        'labelBoxBorderColor': '#FF6B35',
        'noteBkgColor':        '#F5F5F5',
        'noteTextColor':       '#737373',
        'noteBorderColor':     '#9CA3AF'
      }
    }}%%
    sequenceDiagram
        participant User
        participant Privacy SDK
        participant Solana

        User->>Privacy SDK: Create Private Wallet
        Privacy SDK->>Solana: Register Solana address

    ```

    <Info>
      Каждая запись реестра представляет собой PDA, принадлежащий <Tooltip tip="regyS5rkAcw2YzDJCmTwCTHs2s246FXxbmuRZ42u2PD">[программе реестра](https://orbmarkets.io/address/regyS5rkAcw2YzDJCmTwCTHs2s246FXxbmuRZ42u2PD)</Tooltip>. Любой пользователь может проверить ее, чтобы узнать, может ли адрес Solana получать приватные переводы.
    </Info>

    <Tabs>
      <Tab title="TypeScript Client">
        ```typescript theme={"system"}
        import { buildRegistrationTransaction } from "@heliuslabs/zolana";
        import { isWalletRegistered } from "@heliuslabs/zolana/wallet";

        const registration = await buildRegistrationTransaction({
          client,
          owner: signer.address,
          address,
        });
        if (registration !== undefined) {
          await sendTransaction(registration);
        }

        const registered = await isWalletRegistered({
          rpc: client,
          owner: signer.address,
        });
        ```

        * `owner` — адрес Solana пользователя, используемый для получения PDA реестра.
        * `address` — экранированный адрес пользователя.
        * `buildRegistrationTransaction` возвращает скомпилированную транзакцию регистрации или обновления ключа. Если кошелек уже зарегистрирован, возвращается `undefined`.
        * `sendTransaction` подписывает и отправляет транзакцию.
        * `isWalletRegistered` считывает PDA реестра, чтобы проверить регистрацию.
      </Tab>

      <Tab title="Rust Client">
        ```rust theme={"system"}
        use solana_signer::Signer;
        use zolana_client::{sign_transaction, Rpc};
        use zolana_wallet::{
            build_registration_transaction_sync,
            is_wallet_registered_sync,
        };

        if let Some(registration) = build_registration_transaction_sync(
            &client,
            owner.pubkey(),
            &owner.shielded_address()?,
            None,
            None,
        )? {
            let registration = sign_transaction(registration, &[&owner])?;
            client.process_transaction(registration)?;
        }

        assert!(is_wallet_registered_sync(&client, owner.pubkey())?);
        ```

        * `owner` — пользовательский `ShieldedKeypair`. Его открытый ключ Solana идентифицирует запись реестра, а подпись разрешает регистрацию.
        * `owner.shielded_address()` возвращает экранированный адрес пользователя.
        * `build_registration_transaction_sync` возвращает неподписанное сообщение регистрации или обновления ключа. Если кошелек уже зарегистрирован, возвращается `None`.
        * Первый `None` не включает доказательство привязки ключа для кошельков Ed25519. Последний `None` использует владельца в качестве плательщика. Владелец по-прежнему подписывает сообщение.
        * `sign_transaction` подписывает сообщение. `process_transaction` отправляет и подтверждает транзакцию.
        * `is_wallet_registered_sync` считывает PDA реестра, чтобы проверить регистрацию.
      </Tab>
    </Tabs>

    <Info>
      Полные примеры регистрации: [TypeScript](https://github.com/helius-labs/zolana-examples/blob/7775438e0a290a4c28dccf919719bd640c3ec5e3/typescript-client/examples/register_private_wallet.ts) · [Rust](https://github.com/helius-labs/zolana-examples/blob/7775438e0a290a4c28dccf919719bd640c3ec5e3/rust-client/examples/register_private_wallet.rs)
    </Info>

    ### Синхронизация приватного баланса и истории транзакций

    При синхронизации баланса зашифрованное состояние извлекается через RPC и расшифровывается в кошельке.

    RPC не выполняет расшифровку. Только владелец может расшифровать приватный баланс с помощью ключа просмотра.

    <Info>
      Кошелек должен расшифровывать и обновлять балансы перед приватными транзакциями, а также при каждом ретроспективном заполнении данных: при разблокировке кошелька, открытии приватного кошелька, возобновлении работы приложения, повторном подключении к сети, пропуске в потоке или восстановлении кошелька.
    </Info>

    <CardGroup cols={2}>
      <Card title="Read a Private Balance" icon="wallet" href="/docs/ru/privacy/guides/read-balance" horizontal />

      <Card title="Read Private Transaction History" icon="clock-rotate-left" href="/docs/ru/privacy/guides/read-history" horizontal />
    </CardGroup>

    ### Внесение средств на приватный баланс

    Пользователи могут вносить средства на приватный баланс двумя способами:

    1. Конвертировать фиатный баланс в приватный криптовалютный баланс через онрамп
    2. Внести средства с публичного SPL-счета на приватный баланс

    Онрамп и внесение средств предоставляют разные гарантии конфиденциальности.
    Для повышения конфиденциальности рекомендуем использовать онрамп вместо внесения средств.

    | Поле | Онрамп из фиатной валюты | Внесение из SPL |
    | - | - | - |
    | Актив | Приватный | Публичный |
    | Сумма | Приватная | Публичная |
    | Источник | Не в ончейне | Публичный |
    | Адрес назначения | Публичный | Публичный |

    <CardGroup cols={2}>
      <Card title="On-/Off-Ramp" icon="circle-dollar-to-slot" href="/docs/ru/privacy/integration/on-off-ramp">
        Конвертируйте фиатную валюту напрямую в приватный баланс и обратно через онрамп и оффрамп.
      </Card>

      <Card title="Deposit" icon="arrow-down-to-bracket" href="/docs/ru/privacy/guides/deposit">
        Внесите средства с публичного криптовалютного баланса.
      </Card>
    </CardGroup>

    ### Приватные переводы

    Пользователи могут отправлять приватные переводы на любой адрес кошелька Solana.

    Для каждого приватного перевода SDK конфиденциальности находит адрес кошелька в ончейн-реестре и проверяет, есть ли у получателя приватный кошелек.

    SDK конфиденциальности может преобразовать приватный перевод в вывод с приватного баланса на публичный, если у получателя нет приватного кошелька.

    <Info>
      Рекомендуем обозначать транзакцию в пользовательском интерфейсе как вывод средств, чтобы пользователь случайно не вывел средства на публичный баланс.

      Рекомендуем запрашивать отдельную подпись пользователя в интерфейсе, чтобы пользователь случайно не вывел средства на публичный баланс.
    </Info>

    | Поле | Видимость | Причина |
    | - | - | - |
    | Актив | Приватный | Актив зашифрован в ончейне |
    | Сумма | Приватная | Переведенная сумма зашифрована в ончейне |
    | Исходный приватный кошелек | Публичный | В конфиденциальном Ring исходный приватный кошелек виден в ончейне. |
    | Получатель | Публичный | В конфиденциальном Ring получатель виден в ончейне. |

    <Card title="Private Transfer" icon="arrow-right-arrow-left" href="/docs/ru/privacy/guides/transfer">
      Приватно переведите средства на приватный баланс.
    </Card>

    ### Вывод на публичный баланс

    Вывод средств можно использовать двумя способами:

    1. В качестве резервного варианта для приватных переводов получателям, у которых нет приватного кошелька, или
    2. Для прямого вывода на публичный счет токенов SPL.

    При выводе средств рекомендуем четко указывать, что пользователь покидает приватный баланс, аналогично экспорту сид-фразы или закрытого ключа.

    | Поле | Видимость | Причина |
    | - | - | - |
    | Актив | Публичный | Актив виден в ончейне |
    | Сумма | Публичная | Выведенная сумма видна в ончейне |
    | Исходный приватный кошелек | Публичный | В конфиденциальном Ring исходный приватный кошелек виден в ончейне. |
    | Публичный кошелек назначения | Публичный | Адрес кошелька назначения виден в ончейне |
    | Публичный баланс назначения | Публичный | Итоговый публичный баланс виден в ончейне |
    | Оставшийся приватный баланс | Приватный | Оставшийся баланс зашифрован в ончейне |

    <Card title="Withdraw" icon="arrow-up-to-bracket" href="/docs/ru/privacy/guides/withdraw">
      Выведите средства на публичный криптовалютный баланс.
    </Card>
  </Step>
</Steps>

## Не нашли то, что искали?

<Callout type="info">
  Свяжитесь с нами! [Telegram](https://t.me/tilo_light) | [Электронная почта](mailto:sales@helius.xyz) | [Контакты](https://www.helius.dev/contact)
</Callout>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.