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

# API Solana Privacy Rings

> Запрашивайте зашифрованные UTXO, историю защищённых транзакций, доказательства Меркла и общедоступные записи реестра пользователей Solana Privacy Rings.

API Solana Privacy Rings отправляет запросы к индексатору конфиденциальности. Он возвращает зашифрованное состояние и общедоступные метаданные транзакций. Ваш кошелёк расшифровывает полезную нагрузку, чтобы получить приватные балансы и историю. Основные понятия описаны в [обзоре конфиденциальности](https://www.helius.dev/docs/ru/privacy.md), а процессы внесения, перевода и вывода средств — в [SDK](https://www.helius.dev/docs/ru/privacy/sdk.md).

## Публичные и приватные балансы

Приватный баланс хранится в UTXO (неизрасходованных выходах транзакций). UTXO не является аккаунтом Solana.

| | Публичный баланс | Приватный баланс |
| - | - | - |
| Баланс | Лампорты в аккаунте Solana или `amount` в аккаунте SPL Token | Сумма неизрасходованных UTXO для одного актива |
| Видимость | Публично в блокчейне | Зашифровано в блокчейне |
| Поиск аккаунтов токенов или выходов | [`getTokenAccountsByOwner`](https://solana.com/docs/rpc/http/gettokenaccountsbyowner) возвращает аккаунты SPL Token, принадлежащие адресу | `getEncryptedUtxosByTags` возвращает зашифрованные выходы, соответствующие тегам просмотра или кольцу |
| Получение баланса | [`getBalance`](https://solana.com/docs/rpc/http/getbalance) для SOL; [`getTokenAccountBalance`](https://solana.com/docs/rpc/http/gettokenaccountbalance) для аккаунта SPL Token | Ваш кошелёк расшифровывает выходы, проверяет, какие из них не израсходованы, и суммирует объёмы по каждому активу |

Описание хранения и расходования приватных балансов см. в разделе [Приватное состояние и UTXO](https://www.helius.dev/docs/ru/privacy/concepts/utxo.md).

## Конечная точка и аутентификация

Отправьте запрос JSON-RPC 2.0 по пути метода, указав ключ API Helius:

```bash theme={"system"}
curl --request POST \
  --url "https://devnet.helius-rpc.com/v1/spr/getUserRecords?api-key=YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "getUserRecords",
    "params": {
      "owners": ["11111111111111111111111111111111"]
    }
  }'
```

Значение `method` должно соответствовать последнему сегменту пути URL. Пути методов принимают один запрос. Пакетные запросы, повторяющиеся поля `method` и несоответствия между путём и телом запроса приводят к возврату HTTP 400 до выполнения.

Для локальной разработки используйте `http://127.0.0.1:8784/{method}` после запуска [локального стека](https://www.helius.dev/docs/ru/privacy/endpoints.md).

## Методы

> [card] [getEncryptedUtxosByTags](https://www.helius.dev/docs/ru/api-reference/privacy/getencryptedutxosbytags.md)
>
> Находите зашифрованные выходы по тегам просмотра или кольцу.

> [card] [getShieldedTransactionsByTags](https://www.helius.dev/docs/ru/api-reference/privacy/getshieldedtransactionsbytags.md)
>
> Запрашивайте историю защищённых транзакций по тегам просмотра или кольцу.

> [card] [getShieldedTransactionsBySignature](https://www.helius.dev/docs/ru/api-reference/privacy/getshieldedtransactionsbysignature.md)
>
> Получайте защищённые события для одной транзакции Solana.

> [card] [getShieldedTransactionsByNullifiers](https://www.helius.dev/docs/ru/api-reference/privacy/getshieldedtransactionsbynullifiers.md)
>
> Находите транзакции, в которых были израсходованы указанные нуллификаторы.

> [card] [getMerkleProofs](https://www.helius.dev/docs/ru/api-reference/privacy/getmerkleproofs.md)
>
> Получайте доказательства включения для обязательств дерева состояний.

> [card] [getNonInclusionProofs](https://www.helius.dev/docs/ru/api-reference/privacy/getnoninclusionproofs.md)
>
> Получайте доказательства невключения для значений нуллификаторов.

> [card] [getNullifierQueueElements](https://www.helius.dev/docs/ru/api-reference/privacy/getnullifierqueueelements.md)
>
> Читайте нуллификаторы из очереди в порядке последовательности.

> [card] [getUserRecords](https://www.helius.dev/docs/ru/api-reference/privacy/getuserrecords.md)
>
> Находите общедоступные регистрации защищённых адресов.

## Пагинация

`getEncryptedUtxosByTags`, `getShieldedTransactionsByTags` и `getShieldedTransactionsByNullifiers` возвращают страницу в `result`:

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "id": "1",
  "result": {
    "context": { "slot": 4242, "blockTime": 1730000000 },
    "data": [],
    "paginationToken": null
  }
}
```

* `data` группирует результаты по транзакциям Solana, упорядоченным по возрастанию слота и подписи. Метод зашифрованных UTXO использует массив `outputs` в каждой группе, а методы истории транзакций — массив `events`.
* `limit` задаёт количество транзакций Solana от 1 до 1 000. Значение по умолчанию — 1 000. Соответствующие одной транзакции выходы или события остаются вместе на одной странице.
* Передавайте ненулевое значение `paginationToken` обратно без изменений вместе с теми же тегами или нуллификаторами, кольцом и фильтрами слотов. Продолжайте, пока токен в ответе не станет равен `null`.
* `filters.slot` принимает границы `gt`, `gte`, `lt` и `lte`. Указанные границы объединяются логическим оператором AND. Когда чтение без верхнего ограничения достигает нулевого токена, сохраните значение `context.slot` этой страницы и возобновите чтение позже, задав для `filters.slot.gt` это значение. Чтение, ограниченное `lt` или `lte`, охватывает только слоты до указанной границы. Возобновляйте его с этой границы, а не с `context.slot`.
* Задайте `minContextSlot`, чтобы потребовать минимальный сохранённый слот индексатора. Индексатор также требует слот вашего `paginationToken` и любого фильтра `gt` или `gte`. Если индексатор отстаёт от любого из них, он возвращает ошибку `-32016` с `error.data.contextSlot`. Повторите попытку, когда индексатор синхронизируется.

Ответы с историей также могут включать `outputTreeId` — идентификатор новейшего неприостановленного дерева состояний. Если он недоступен, поле отсутствует. Отдельные выходы указывают собственное дерево с помощью `outputContext.treeId`.

`getNullifierQueueElements` использует пагинацию на основе последовательности. См. [страницу метода](https://www.helius.dev/docs/ru/api-reference/privacy/getnullifierqueueelements.md).

## Кодирование данных

| Значение | Кодирование |
| - | - |
| Публичные ключи, хеши, обязательства, теги просмотра, нуллификаторы | Строки Base58, представляющие 32 байта |
| Подписи транзакций Solana | Строки Base58, представляющие 64 байта |
| Зашифрованные полезные нагрузки, `txViewingPk`, `salt`, `viewingPubkey` реестра | Строки Base64 |
| `context.slot` | Наибольший слот Solana, сохранённый индексатором |
| `context.blockTime` | Время блока в виде временной метки Unix в секундах |

## Ошибки

Проверяйте поле `error` JSON-RPC перед чтением `result`, в том числе при статусе HTTP 200.

| Код | Значение |
| - | - |
| `-32600` | Проверка запроса завершилась ошибкой, запись не найдена, индексированный корень доказательства устарел или запрошенная история начинается раньше индексированной истории. Нечитаемое тело запроса также возвращает `-32600` с HTTP 400. Причина указана в `message`. |
| `-32601` | Неизвестный метод или путь метода отклонил запрос до выполнения. При отклонении из-за пути возвращается HTTP 400. |
| `-32602` | Не удалось разобрать параметры, например из-за недопустимого кодирования ключа или значения лимита за допустимыми пределами. |
| `-32603` | Внутренняя ошибка сервера. |
| `-32016` | Индексатор ещё не достиг `minContextSlot`, слота токена пагинации или фильтра слотов `gt`/`gte`. |

HTTP 429 указывает на ограничение частоты запросов. См. [ограничения частоты запросов](https://www.helius.dev/docs/ru/billing/rate-limits.md). Настройка ключа API описана в разделе [аутентификация](https://www.helius.dev/docs/ru/api-reference/authentication.md).


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