> ## 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.

# Архитектура

> Узнайте, как кошельки, RPC и программы Solana взаимодействуют с кольцами конфиденциальности Solana.

<a id="architecture" />

<Tabs sync={false}>
  <Tab title="Permissionless Confidential Ring">
    ```mermaid theme={"system"}
    %%{init: {
      'theme': 'base',
      'themeVariables': {
        'primaryColor': '#FFFFFF',
        'primaryTextColor': '#737373',
        'primaryBorderColor': '#9CA3AF',
        'lineColor': '#FF6B35',
        'secondaryColor': '#F5F5F5',
        'tertiaryColor': '#FFFFFF',
        'clusterBkg': '#FF6B350A',
        'clusterBorder': '#9CA3AF',
        'edgeLabelBackground': '#FFFFFF'
      }
    }}%%
    flowchart LR
        Users["Users"]

        subgraph RPC["RPC"]
            direction TB
            Indexer["Photon Indexer"]
            Prover["Prover"]
            TransactionRPC["Transaction RPC"]
        end

        subgraph Solana["Solana"]
            direction LR
            Swap["ZK Swap Program"]
            subgraph State[" "]
                direction TB
                SPP["SPP<br/>Solana Privacy Program"]
                Pools["SPL interface"]
                Trees["State Merkle tree account"]
            end
            Swap -->|CPI| SPP
        end

        Forester["Forester"]

        Users <-.->|Fetch encrypted UTXOs| Indexer
        Users <-.->|Fetch proofs| Prover
        Users -->|Send transaction| TransactionRPC
        TransactionRPC -->|Confidential transfer| SPP
        TransactionRPC --> Swap
        Forester --> Trees

        style State fill:none,stroke:none
    ```
  </Tab>

  <Tab title="Custom Confidential Ring">
    ```mermaid theme={"system"}
    %%{init: {
      'theme': 'base',
      'themeVariables': {
        'primaryColor': '#FFFFFF',
        'primaryTextColor': '#737373',
        'primaryBorderColor': '#9CA3AF',
        'lineColor': '#FF6B35',
        'secondaryColor': '#F5F5F5',
        'tertiaryColor': '#FFFFFF',
        'clusterBkg': '#FF6B350A',
        'clusterBorder': '#9CA3AF',
        'edgeLabelBackground': '#FFFFFF'
      }
    }}%%
    flowchart LR
        Users["Users"]

        subgraph RPC["RPC"]
            direction TB
            Indexer["Photon Indexer"]
            RingRPC["Ring RPC with auditor · optional"]
            Prover["Prover"]
            TransactionRPC["Transaction RPC"]
        end

        subgraph Solana["Solana"]
            direction LR
            Swap["ZK Swap Program"]
            Ring1["Custom Ring Program 1"]
            RingN["Custom Ring Program N"]
            subgraph State[" "]
                direction TB
                SPP["SPP<br/>Solana Privacy Program"]
                Pools["SPL interface"]
                Trees["State Merkle tree account"]
            end
            Swap -->|CPI| Ring1
            Ring1 -->|CPI| SPP
            RingN -->|CPI| SPP
        end

        Forester["Forester"]

        Users <-.->|Fetch encrypted UTXOs| Indexer
        Users <-.->|Fetch decrypted UTXOs| RingRPC
        Users <-.->|Fetch proofs| Prover
        Users -->|Send transaction| TransactionRPC
        TransactionRPC -->|Confidential transfer| Ring1
        TransactionRPC --> RingN
        TransactionRPC --> Swap
        Forester --> Trees

        style State fill:none,stroke:none
    ```
  </Tab>

  <Tab title="Custom Anonymous Ring">
    ```mermaid theme={"system"}
    %%{init: {
      'theme': 'base',
      'themeVariables': {
        'primaryColor': '#FFFFFF',
        'primaryTextColor': '#737373',
        'primaryBorderColor': '#9CA3AF',
        'lineColor': '#FF6B35',
        'secondaryColor': '#F5F5F5',
        'tertiaryColor': '#FFFFFF',
        'clusterBkg': '#FF6B350A',
        'clusterBorder': '#9CA3AF',
        'edgeLabelBackground': '#FFFFFF'
      }
    }}%%
    flowchart LR
        Users["Users"]

        subgraph RPC["RPC"]
            direction TB
            RingRPC["Ring RPC with auditor"]
            Prover["Prover"]
            TransactionRPC["Transaction RPC<br/>Relayer for anonymous transactions"]
        end

        subgraph Solana["Solana"]
            direction LR
            Swap["ZK Swap Program"]
            Ring1["Custom Ring Program 1"]
            RingN["Custom Ring Program N"]
            subgraph State[" "]
                direction TB
                SPP["SPP<br/>Solana Privacy Program"]
                Pools["SPL interface"]
                Trees["State Merkle tree account"]
            end
            Swap -->|CPI| Ring1
            Ring1 -->|CPI| SPP
            RingN -->|CPI| SPP
        end

        Forester["Forester"]

        Users <-.->|Fetch decrypted UTXOs| RingRPC
        Users <-.->|Fetch proofs| Prover
        Users -->|Send transaction| TransactionRPC
        TransactionRPC -->|Relayed anonymous transaction| Ring1
        TransactionRPC --> RingN
        TransactionRPC --> Swap
        Forester --> Trees

        style State fill:none,stroke:none
    ```
  </Tab>
</Tabs>

## Приватный кошелёк и пользователь

Пользователи хранят зашифрованный баланс в приватном кошельке и подписывают приватные транзакции существующим ключом Solana Ed25519. Интеграция приватного кошелька добавляет защищённую пару ключей в вашу систему управления ключами. Вы можете [интегрировать её самостоятельно](/docs/ru/privacy/integration/wallet) или использовать [встроенный приватный кошелёк](/docs/ru/privacy/integration/embedded-wallet).

## Приватные транзакции

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

Типичный конфиденциальный перевод занимает около 927 байт, что значительно меньше ограничения v1 в 4096 байт.

<Accordion title="Example Confidential Transfer">
  | Компонент | Байты |
  | - | -: |
  | Доказательство Groth16 | 192 |
  | Прочие данные инструкции конфиденциальности: шифротексты, коммитменты, нуллификаторы, ключи и метаданные | 418 |
  | Шесть адресов аккаунтов × 32 байта | 192 |
  | Одна подпись Ed25519 | 64 |
  | Недавний хеш блока | 32 |
  | Версия, заголовок сообщения, маска конфигурации и счётчики | 10 |
  | Ограничения вычислительных единиц и объёма загружаемых данных аккаунтов | 8 |
  | Заголовок инструкции | 4 |
  | Семь индексов аккаунтов инструкции | 7 |
  | **Итого** | **927** |

  <Info>
    Для приведённого в спецификации примера конфиденциального перевода с 2 входами и 3 выходами.
    Исходный код: [спецификация](https://github.com/helius-labs/zolana/blob/680667f27cf9ba4203a0b69284f4c304b874092f/docs/spec.md#transact) · [xtask/src/main.rs](https://github.com/helius-labs/zolana/blob/680667f27cf9ba4203a0b69284f4c304b874092f/xtask/src/main.rs#L412)

    См. [структуру транзакции Solana v1](https://solana.com/docs/core/transactions/versioned-transactions#v1-wire-layout).
  </Info>
</Accordion>

## RPC

Один <Tooltip tip="https://devnet.helius-rpc.com/?api-key=<API_KEY> or https://mainnet.helius-rpc.com/?api-key=<API_KEY>">URL Helius RPC</Tooltip> предоставляет доступ к Solana RPC, индексатору и удалённому генератору доказательств.

* **Solana RPC** — возвращает публичный баланс и отправляет транзакции в сеть Solana.

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

* **Генератор доказательств** — доказательства с нулевым разглашением можно создать локально или на сервере генерации доказательств за миллисекунды в зависимости от транзакции и оборудования. Helius использует GPU для генерации доказательств.

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

## Конфиденциальность и программы Solana

Программа конфиденциальности Solana (SPP) — основная программа, которая проверяет и выполняет все переходы приватного состояния. Программы пользовательских колец и ZK-программы Solana добавляют логику соответствия требованиям или логику приложения, а затем вызывают SPP для обновления приватного состояния.

Другие программы Solana могут взаимодействовать с этими программами через CPI в рамках той же транзакции и с учётом ограничений транзакций Solana, например ограничения глубины CPI, равного 5.

<Accordion title="ZK Program Transaction Flow">
  <Tabs sync={false}>
    <Tab title="Permissionless Ring">
      <Tabs sync={false}>
        <Tab title="ZK Program alone">
          ```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
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant SPP as Solana Privacy Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              Note over ZK: Update Solana accounts (optional)

          ```
        </Tab>

        <Tab title="ZK Program and additional Solana Program">
          ```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
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant SPP as Solana Privacy Program
              participant Program as Solana Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              ZK->>Program: CPI
              Note over Program: Update Solana accounts

          ```
        </Tab>
      </Tabs>
    </Tab>

    <Tab title="Custom Rings">
      <Tabs sync={false}>
        <Tab title="ZK Program alone">
          ```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
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant Ring as Custom Ring Program
              participant SPP as Solana Privacy Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>Ring: CPI
              Note over Ring: Verify proof for custom compliance logic
              Ring->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              Note over ZK: Update Solana accounts (optional)

          ```
        </Tab>

        <Tab title="ZK Program and additional Solana Program">
          ```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
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant Ring as Custom Ring Program
              participant SPP as Solana Privacy Program
              participant Program as Solana Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>Ring: CPI
              Note over Ring: Verify proof for custom compliance logic
              Ring->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              ZK->>Program: CPI
              Note over Program: Update Solana accounts

          ```
        </Tab>
      </Tabs>
    </Tab>
  </Tabs>
</Accordion>

### Программа конфиденциальности Solana (SPP)

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

Другие программы вызывают SPP через CPI для выполнения переходов приватного состояния.

### Программа пользовательского кольца

Программа пользовательского кольца определяет разрешения на переводы и дополнительные полномочия аналогично Token-2022. Используйте её, чтобы настроить аудиторов, потребовать подпись дополнительного подписанта или разрешить уполномоченной стороне замораживать балансы.

Она проверяет ZK-доказательство для применения собственной логики соответствия требованиям, а затем вызывает SPP для обновления приватного состояния.

### ZK-программа Solana

ZK-программы Solana позволяют создавать в программах Solana приватные эскроу, которые применяют логику приложения к приватным балансам. С помощью ZK-программ Solana можно создавать приватные обмены, стейкинг, кредитование и многое другое. Например, конфиденциальный обмен может обеспечивать соблюдение согласованных сумм и цены, не раскрывая их.

Программа проверяет ZK-доказательство логики приложения, а затем вызывает SPP напрямую или через программу пользовательского кольца для обновления приватного состояния.

## Дерево Меркла состояния и Forester

Кольцо по умолчанию и все пользовательские кольца хранят приватное состояние в аккаунте дерева Меркла состояния, который обслуживает узел Forester.
Аккаунты деревьев фиксируют приватное состояние, не сохраняя его в отдельных аккаунтах Solana.

Поэтому для чтения балансов и истории транзакций используйте специальные методы RPC индексатора, например `getShieldedTransactionsByTags`, вместо методов аккаунтов Solana, таких как `getAccountInfo`. См. разделы [Чтение приватного баланса](/docs/ru/privacy/guides/read-balance) и [Чтение истории приватных транзакций](/docs/ru/privacy/guides/read-history).

### Пропускная способность

Дерево хранится в одном доступном для записи аккаунте Solana.
Приватные переводы, которые записывают данные в этот аккаунт, совместно используют установленное Solana ограничение блокировки записи для одного аккаунта в 12 миллионов CU на блок.
Различные UTXO можно расходовать независимо, но транзакции, записывающие данные в одно дерево, всё равно совместно используют блокировки аккаунта Solana и ограничения вычислений.

Конфиденциальный перевод потребляет приблизительно 140 000 CU согласно [тесту производительности инструкции](https://github.com/helius-labs/zolana/blob/a3ddedda42b40d4951ae8fcdde2500374c4f2125/program-tests/shielded-pool/CU_BENCHMARK.md#12-transfer-eddsa-2x3).
Таким образом, одно дерево поддерживает около 86 приватных переводов на блок, или около 215 транзакций в секунду при текущем времени блока Solana около 400 миллисекунд.

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

<a id="interface-pda-account" />

## Интерфейс SPL

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

* При внесении SOL и активов SPL на приватный баланс принадлежащий программе конфиденциальности Solana интерфейсный PDA помещает токены в эскроу и создаёт UTXO, принадлежащие пользователю.
* При выводе на публичный баланс существующие UTXO помечаются как потраченные, а токены переводятся на аккаунты токенов Solana.

Если у минта ещё нет интерфейсного PDA, первое внесение может включать инструкцию по созданию интерфейсного PDA в той же транзакции.

```mermaid theme={"system"}
%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryColor': '#FFFFFF',
    'primaryTextColor': '#737373',
    'primaryBorderColor': '#9CA3AF',
    'lineColor': '#FF6B35',
    'edgeLabelBackground': '#FFFFFF'
  }
}}%%
flowchart LR
    GetAccount["Get account"] --> Exists{"Interface PDA exists?"}
    Exists -->|Yes| Deposit["Deposit to private balance"]
    Exists -->|No| Create["Create interface PDA<br/>and token account"]
    Create --> Deposit
```

<span id="creation-of-a-private-wallet" />

<span id="decryption-modes-and-wallet-sync" />

<span id="delegated-decryption" />

<span id="encryption-and-shielded-keypair" />

<span id="integrating-a-shielded-keypair" />

<span id="latency-and-concurrency" />

<span id="local-decryption" />

<span id="on-concurrency" />

<span id="private-solana-token-accounts" />

<span id="private-solana-token-accounts-are-utxos" />

<span id="private-wallet" />

<span id="private-wallet-balance" />

<span id="shielded-keypair" />

<span id="spending-a-utxo" />

## Подробнее

<CardGroup cols={2}>
  <Card title="Overview" icon="book" href="/docs/ru/privacy/concepts/overview">
    Кольца, гарантии конфиденциальности и последовательность обработки транзакций.
  </Card>

  <Card title="Private State and UTXOs" icon="database" href="/docs/ru/privacy/concepts/utxo">
    Как хранятся и расходуются приватные балансы.
  </Card>

  <Card title="Encryption and Privacy Guarantees" icon="key" href="/docs/ru/privacy/concepts/encryption">
    Как шифруются активы и какую роль играет защищённая пара ключей.
  </Card>

  <Card title="Custom Enterprise Rings" icon="building" href="/docs/ru/privacy/integration/enterprise">
    Узнайте, как настроить пользовательское кольцо.
  </Card>
</CardGroup>

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

<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.