> For the complete documentation index, see [llms.txt](https://docs.iexexchanger.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.iexexchanger.com/guide/obmen/rezervy/rezervy-iz-faila.md).

# Резервы из файла

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

Путь в панели управления: **«Основное» — «Резервы для валют» — «Резервы из файла»**

<figure><img src="/files/hlm4XTLHHzEJhWQHiXNb" alt=""><figcaption></figcaption></figure>

Этот раздел работает вместе с обычными резервами: **«Основное» — «Резервы для валют» — «Список резервов»**

<figure><img src="/files/4kZqeY5WD6hUYxPyrXkK" alt=""><figcaption></figcaption></figure>

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

## Для чего нужны резервы из файла

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

Например, у вас есть файл:

```
MainReserve : 100000
BTCReserve : 2.5
USDT TRC20 : 45000
```

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

Это удобно, если:

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

## Как работает система

Логика работы простая:

1. Вы создаёте источник — ссылку на текстовый файл.
2. Система читает файл.
3. Каждая строка формата Название : сумма становится ключом файла.
4. В обычном резерве валюты вы выбираете нужный ключ.
5. После привязки обычный резерв получает сумму из файла.
6. При следующей синхронизации система снова читает файл и обновляет связанные резервы.

Пример: **USDT TRC20 : 45000**

Если обычный резерв USDT TRC20 привязан к этому ключу, его сумма станет: **45000**

Если позже в файле будет: **USDT TRC20 : 47000**

после синхронизации обычный резерв тоже обновится до: **47000**

***

## Основные понятия

{% stepper %}
{% step %}

### Источник

Источник — это внешний файл, из которого система получает резервы.

Пример источника:

```
Название: Основные резервы
Ссылка: https://example.com/reserves.txt
Статус: Включено
```

Один источник может содержать много строк резервов.
{% endstep %}

{% step %}

### Ключ файла

Ключ файла — это название строки внутри файла.

Пример файла:

```
Main Reserve : 100000
BTC Hot Wallet : 1.25
USDT TRC20 : 50000
```

Система создаст ключи:

```
Main Reserve
BTC Hot Wallet
USDT TRC20
```

Каждый ключ хранит свою сумму. Затем этот ключ можно привязать к обычному резерву валюты.
{% endstep %}
{% endstepper %}

## Формат файла

Файл должен быть обычным текстовым файлом.

Каждая рабочая строка должна быть в формате:

```
Название : сумма
```

Слева указывается название ключа, справа — сумма резерва.

Разделитель между названием и суммой — двоеточие:

```
:
```

### Пример правильного файла

```
Main Reserve : 100000
BTC Reserve : 1.25
ETH Reserve : 10.5
USDT TRC20 : 45000
USDT ERC20 : 12000.75
```

### Комментарии в файле

В файле можно оставлять комментарии.

Система пропускает пустые строки и строки, которые начинаются с:

```
#
;
//
```

Пример:

```
# Основные резервы
Main Reserve : 100000

; Криптовалюты
BTC Reserve : 1.25
ETH Reserve : 10.5

// Стейблкоины
USDT TRC20 : 45000
```

Комментарии не считаются резервами.

***

## Требования к файлу

Файл должен соответствовать требованиям:

* доступен по публичной HTTP или HTTPS-ссылке;
* сохранён в кодировке UTF-8;
* размер не больше 10 МБ;
* не пустой;
* содержит хотя бы одну корректную строку формата Название : сумма;
* сумма указана положительным числом или нулём;
* дробная часть указана через точку или запятую;
* отрицательные значения не используются;
* в строке обязательно есть разделитель :.

{% stepper %}
{% step %}

### Допустимые суммы

Можно указывать:

```
100
100.50
100,50
0
0.12345678
```

Система нормализует значение и хранит сумму с высокой точностью.
{% endstep %}

{% step %}

### Неправильные строки

Нет двоеточия:

```
Reserve 100000
```

Сумма не является числом:

```
Reserve : abc
```

Сумма пустая:

```
Reserve :
```

Название пустое:

```
: 100
```

Отрицательная сумма:

```
Reserve : -10
```

{% endstep %}
{% endstepper %}

***

## Как включить резервы из файла

Сначала нужно включить саму функцию.

Откройте: **«Основное» — «Резервы для валют» — «Список резервов»**

<figure><img src="/files/GmKoD4JDOi0GSKstiZbO" alt=""><figcaption></figcaption></figure>

Нажмите **«Настройки».**

Включите параметр: **Резерв из файла**

Нажмите **«Сохранить».**

После этого в карточке обычного резерва появится поле «Резерв из файла».

***

## Как создать источник

Откройте: **«Основное» — «Резервы для валют» — «Резервы из файла»**

Нажмите **«Источники».**

Создайте новый источник и заполните поля:

```
Название
Ссылка на файл
Статус
```

Пример:

```
Название: Основные резервы
Ссылка: https://example.com/reserves.txt
Статус: Включено
```

После сохранения источник появится в списке.

***

### Поля источника

{% stepper %}
{% step %}

### Название

Название нужно для удобства администратора.

Примеры:

```
Основные резервы
Резервы криптовалют
Резервы партнёра
```

{% endstep %}

{% step %}

#### Ссылка на файл

Укажите публичную ссылку на файл.

Пример:

```
https://example.com/reserves.txt
```

Не используйте закрытые локальные адреса, внутренние IP и файлы, которые требуют авторизацию.
{% endstep %}

{% step %}

#### Статус

Включено — источник участвует в ручной и автоматической синхронизации.

Выключено — источник сохранён, но не обновляется автоматически.
{% endstep %}
{% endstepper %}

***

## Синхронизация источника

У каждого источника есть действие синхронизации.

При синхронизации система:

1. Открывает файл по ссылке.
2. Проверяет доступность файла.
3. Проверяет размер.
4. Проверяет кодировку UTF-8.
5. Разбирает строки формата Название : сумма.
6. Создаёт новые ключи, если они появились в файле.
7. Обновляет суммы существующих ключей.
8. Отмечает ключи, которые исчезли из файла.
9. Обновляет обычные резервы, которые привязаны к активным ключам.

После успешной синхронизации система показывает результат:

* сколько ключей обновлено;
* сколько обычных резервов обновлено;
* сколько ключей отсутствует в файле.

***

## Что происходит при изменениях в файле

{% stepper %}
{% step %}

### Если появился новый ключ

Если в файле появилась строка:

```
DOGE Reserve : 50000
```

при следующей синхронизации система создаст новый ключ. После этого его можно будет выбрать в обычном резерве.
{% endstep %}

{% step %}

### Если ключ исчез из файла

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

Она оставит его в списке и покажет ошибку:

```
Ключ не найден в файле.
```

Это сделано специально, чтобы обычный резерв не потерял связь с источником без контроля администратора.
{% endstep %}

{% step %}

### Если сумма изменилась

Если было:

```
USDT TRC20 : 45000
```

а стало:

```
USDT TRC20 : 47000
```

система обновит сумму ключа. Если обычный резерв привязан к этому ключу, сумма обычного резерва тоже обновится.
{% endstep %}
{% endstepper %}

***

## Как привязать обычный резерв к файлу

Откройте: **«Основное» — «Резервы для валют» — «Список резервов»**

<figure><img src="/files/vnl2sfPc5N8u1jRpqB7Z" alt="" width="563"><figcaption></figcaption></figure>

Далее:

1. Откройте нужный резерв.
2. Найдите поле «Резерв из файла».
3. Выберите нужный ключ.
4. Нажмите «Сохранить».

Пример варианта в списке:

```
[Основные резервы] - USDT TRC20 (45000)
```

После сохранения текущая сумма обычного резерва сразу заменится суммой из выбранного ключа.

***

### Важное поведение при привязке

Если обычный резерв привязан к файловому ключу, ручная сумма перестаёт быть главным источником.

Пример:

```
В обычном резерве было: 1000
Ключ из файла: USDT TRC20 : 45000
```

После сохранения резерв станет:

```
45000
```

Если позже в файле будет:

```
USDT TRC20 : 47000
```

после синхронизации резерв станет:

```
47000
```

## Как отвязать резерв от файла

Откройте обычный резерв.

В поле **«Резерв из файла»** нажмите на крест.

<figure><img src="/files/f0aycC667bhOCAQPzYaM" alt=""><figcaption></figcaption></figure>

Сохраните изменения.

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

***

## Страница «Резервы из файла»

На основной странице раздела отображается список файловых ключей.

В таблице можно увидеть:

<table><thead><tr><th width="212.3984375">Колонка</th><th>Что означает</th></tr></thead><tbody><tr><td>Ключ файла</td><td>Название строки из файла</td></tr><tr><td>Источник</td><td>Файл, из которого пришёл ключ</td></tr><tr><td>Резерв</td><td>Текущая сумма из файла</td></tr><tr><td>Статус</td><td>Включён или выключен ключ</td></tr><tr><td>Привязки</td><td>Сколько обычных резервов используют этот ключ</td></tr><tr><td>Найден в файле</td><td>Когда ключ последний раз был найден</td></tr></tbody></table>

{% stepper %}
{% step %}

### Ключ файла

Показывает название строки из файла.

Пример:

```
USDT TRC20
```

Система нормализует ключи: убирает лишние пробелы и приводит название к единому виду.

Например, внутри одного источника эти варианты будут считаться одним ключом:

```
USDT TRC20
usdt trc20
USDT   TRC20
```

{% endstep %}

{% step %}

### Резерв

Показывает текущую сумму, прочитанную из файла.

Пример:

```
45000
```

Также может отображаться исходное значение из файла:

```
Исходное значение: 45 000
```

{% endstep %}

{% step %}

### Статус ключа

Включено — ключ может обновлять связанные обычные резервы.

Выключено — ключ остаётся в списке, но не переносит сумму в обычный резерв при синхронизации.

Это удобно, если нужно временно остановить обновление по конкретной строке.
{% endstep %}

{% step %}

### Привязки

Показывает, сколько обычных резервов используют этот ключ.

Пример: **2**

Это значит, что два обычных резерва получают сумму из этого ключа.
{% endstep %}

{% step %}

### Найден в файле

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

Пример:

```
5 минут назад
Строка: 12
```

Если ключ ещё не синхронизировался, будет отображаться:

```
Еще не синхронизирован
```

{% endstep %}
{% endstepper %}

***

## Добавление ключа вручную

Обычно ключи создаются автоматически при синхронизации источника.

Но ключ можно добавить вручную.

Для этого нажмите «Добавить» и укажите:

* источник;
* название ключа;
* количество знаков после запятой;
* статус.

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

Если строка найдена, система покажет:

* сумму из файла;
* номер строки;
* исходное значение.

Если ключ не найден, появится сообщение:

```
Ключ не найден в файле.
```

## Редактирование ключа

При редактировании ключа можно изменить:

* источник;
* название ключа;
* сумму;
* количество знаков после запятой;
* статус.

Важно: если вручную изменить сумму ключа, следующая успешная синхронизация снова запишет сумму из файла.

Ручное изменение суммы стоит использовать только как временную корректировку.

### Знаков после запятой

Поле **«Знаков после запятой»** задаёт количество знаков после запятой для значения ключа.

Допустимый диапазон:

```
0–18
```

По умолчанию:

```
10
```

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

## Удаление ключа

Файловый ключ можно удалить только если к нему не привязаны обычные резервы.

Если ключ используется обычным резервом, система не даст удалить его.

Чтобы удалить такой ключ:

1. Откройте обычные резервы, которые используют этот ключ.
2. Уберите привязку в поле «Резерв из файла».
3. Сохраните обычные резервы.
4. Вернитесь в «Резервы из файла».
5. Удалите ключ.

## Удаление источника

Источник можно удалить только если его ключи не используются обычными резервами.

Если хотя бы один ключ источника привязан к обычному резерву, удаление будет заблокировано.

Это защищает обычные резервы от потери источника суммы.

## Автоматическая синхронизация

Если функция резервов из файла включена, система обновляет активные источники по расписанию.

Команда синхронизации:

```bash
php artisan reserve:update
```

Обычно она запускается каждую минуту через Laravel Scheduler.

Если функция выключена в настройках, команда не будет обновлять данные и сообщит, что резервы из файла отключены.

Для корректной автоматической работы на сервере должен быть настроен CRON для Laravel Scheduler.

## Ручная проверка через консоль

Если есть доступ к серверу, можно запустить синхронизацию вручную:

{% content-ref url="/spaces/uyjsNtEAtO6Sby8CHWyD/pages/cCEoFDjTDIufy3NUEakd" %}
[Подключение к серверу по SSH](/help-center/upravlenie-serverom/podklyuchenie-k-serveru-po-ssh.md)
{% endcontent-ref %}

```bash
php artisan reserve:update
```

Синхронизация одного источника по ID:

```bash
php artisan reserve:update --group=1
```

***

## Возможные ошибки

###

<details>

<summary>У источника не указана ссылка на файл</summary>

Ссылка пустая.

Проверьте поле «Ссылка на файл» в источнике.

</details>

<details>

<summary>Ссылка на файл отклонена защитой</summary>

Система не разрешила использовать эту ссылку.

В production разрешены публичные HTTP/HTTPS-ссылки. Не используйте закрытые локальные адреса, внутренние IP и небезопасные ссылки.

</details>

<details>

<summary>Не удалось открыть файл резервов</summary>

Система не смогла получить файл.

Проверьте:

* доступна ли ссылка в браузере;
* нет ли авторизации;
* не блокирует ли сервер запросы;
* работает ли HTTPS;
* не возвращает ли сервер ошибку.

</details>

<details>

<summary>Файл вернул HTTP-ошибку</summary>

Например:

```
404
403
500
```

Проверьте ссылку и доступность файла.

</details>

<details>

<summary>Файл пустой</summary>

Файл открылся, но внутри нет содержимого.

Добавьте строки резервов.

</details>

<details>

<summary>Файл больше 10 МБ</summary>

Файл слишком большой.

Сократите его или используйте отдельный файл только с нужными резервами.

</details>

<details>

<summary>Файл должен быть в UTF-8</summary>

Файл сохранён в другой кодировке.

Сохраните файл в UTF-8.

</details>

<details>

<summary>Нет корректных строк</summary>

Система не нашла строк формата:

```
Название : сумма
```

Проверьте формат файла.

</details>

<details>

<summary>Некорректная сумма</summary>

Правильно:

```
Reserve : 100000
Reserve : 100.50
```

Неправильно:

```
Reserve : abc
Reserve : -100
Reserve :
```

</details>

***

## Как настроить всё с нуля

{% stepper %}
{% step %}

### Подготовьте файл

Создайте текстовый файл:

```
Main Reserve : 100000
BTC Reserve : 1.25
USDT TRC20 : 45000
```

Разместите его по публичной ссылке:

```
https://example.com/reserves.txt
```

{% endstep %}

{% step %}

### Включите функцию

Откройте:

**«Основное» — «Резервы для валют» — «Список резервов» — «Настройки»**

Включите:

```
Резерв из файла
```

Сохраните настройки.
{% endstep %}

{% step %}

### Создайте источник

Откройте: **«Основное» — «Резервы для валют» — «Резервы из файла»**

Нажмите «Источники» и создайте источник:

```
Название: Основные резервы
Ссылка: https://example.com/reserves.txt
Статус: Включено
```

Сохраните.
{% endstep %}

{% step %}

### Синхронизируйте источник

В списке источников нажмите синхронизацию.

После успешной синхронизации система создаст ключи из файла.
{% endstep %}

{% step %}

### Проверьте ключи

Вернитесь на страницу «Резервы из файла».

Убедитесь, что появились ключи:

```
Main Reserve
BTC Reserve
USDT TRC20
```

Проверьте суммы и статус.
{% endstep %}

{% step %}

### Привяжите ключ к обычному резерву

Откройте:

«Основное» — «Резервы для валют» — «Список резервов»

Откройте нужный резерв валюты.

В поле «Резерв из файла» выберите нужный ключ и сохраните.

После сохранения сумма обычного резерва станет равна сумме из файла.
{% endstep %}

{% step %}

### Проверьте обновление

Измените сумму в файле:

```
USDT TRC20 : 47000
```

Запустите синхронизацию вручную или дождитесь автоматического обновления.

Обычный резерв должен обновиться.
{% endstep %}
{% endstepper %}

***

## Рекомендации

Используйте понятные названия ключей.

Хорошо:

```
USDT TRC20 : 45000
BTC Main : 1.25
```

Плохо:

```
r1 : 45000
x2 : 1.25
```

Не меняйте названия ключей без необходимости. Если переименовать строку в файле, система воспримет её как новый ключ, а старый ключ покажет ошибку.

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

Перед удалением ключа сначала отвяжите его от обычного резерва.

Следите за статусом источника и ошибками последней синхронизации.

Для криптовалют используйте достаточное количество знаков после запятой.

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

***

## Коротко

Резерв из файла — это механизм, который читает суммы резервов из внешнего текстового файла и обновляет обычные резервы валют.

Файл должен содержать строки:

```
Название : сумма
```

Система создаёт ключи из строк файла. Затем вы вручную привязываете нужный ключ к обычному резерву.

После привязки обычный резерв обновляется из файла вручную через синхронизацию или автоматически по CRON.


---

# 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://docs.iexexchanger.com/guide/obmen/rezervy/rezervy-iz-faila.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.
