> ## Documentation Index
> Fetch the complete documentation index at: https://whalescorp.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Списания в Holders: rollups, clearings, refunds, reversals

> Этот документ объясняет, как в Holders происходит списание средств: от авторизации по карте и клиринга до формирования rollup, on-chain списаний в Treasure-кошельки, а также как работают возвраты и реверсалы.

# Схема процесса списания средств

<img src="https://mintcdn.com/whalescorp/fZaf6hO1IHJn1gBp/images/Untitled(6)(1).png?fit=max&auto=format&n=fZaf6hO1IHJn1gBp&q=85&s=a78531f305d89f5c1d320a240eef9171" alt="Untitled(6)(1)" width="5904" height="3036" data-path="images/Untitled(6)(1).png" />

1. Пользователь инициирует платежную операцию.
2. Карточный провайдер отправляет в webhook Holders запрос на авторизацию, содержащий сумму транзакции и информацию о мерчанте.
3. Эмитент проверяет, достаточно ли криптовалютных средств на счете клиента. Если нужная сумма доступна, она резервируется (`Hold`), после чего провайдеру отправляется подтверждение об одобрении операции. Виртуальный баланс счета уменьшается, а фактический баланс остается без изменений.
4. После получения clearing-транзакции от провайдера средства списываются с расчетного баланса.
5. Запускается формирование rollup batch, включающего список транзакций с указанными суммами и комиссиями.
6. Подготавливается агрегированное состояние для последующей записи в блокчейн.
7. После завершения формирования batch общая сумма rollup списывается с пользовательского контракта.
8. Агрегированная сумма переводится в Treasure-кошелек.
9. Batch получает статус `closed`, а включенные в него транзакции связываются с соответствующим rollup.

# Rollups

## Что такое rollup

Rollup - это механизм группировки нескольких транзакций в один batch для оптимизации обработки и снижения комиссий при взаимодействии с блокчейном. При каждом выводе криптовалюты со счета клиента платежный сервис должен платить комиссию за проведение транзакции в блокчейне (`gas`). Чтобы уменьшить затраты, в Holders реализована технология rollup, которая позволяет объединять несколько операций в один batch и платить `gas` один раз за весь сформированный блок операций.

## Что такое batch

Batch - это группа транзакций или операций, объединенных для совместной обработки с целью повышения эффективности и снижения затрат. В системе Holders batch используется для агрегирования нескольких операций в один блок перед их выполнением в блокчейне.

## Формирование rollup

Rollup формируется для каждого клиентского счета каждые 3 часа, это настраиваемый параметр, если за указанный период была хотя бы одна операция. Все операции, выполненные в течение этого интервала, агрегируются в один блок и затем исполняются в блокчейне.\
В rollup входят следующие типы операций:

* **Payments** — средства клиента блокируются на backend Holders в момент оплаты, а фактическая блокировка в блокчейне происходит во время формирования rollup
* **Clearings** — списание средств со счета клиента в Treasure-кошелек
* **Reversals** — операции по разблокировке ранее зарезервированных средств

Смарт-контракт накапливает изменения, а не пересчитывает текущий баланс. Это означает, что если в один rollup попадают две противоположные операции на одну и ту же сумму, например reversal и payment, то будут выполнены обе.

<Info>
  **Пример:** клиент совершает платеж в 13:00 на 100 EUR, в 14:00 делает второй платеж на 200 EUR. В 15:00 клиент получает reversal на 300 EUR и clearing на 400 EUR по ранее завершенным операциям, все действия происходят по одному и тому же счету.\
  В 16:00 формируется rollup, в котором:

  * 300 EUR блокируется на счете клиента и отображаемый баланс уменьшается, это соответствует платежам за период, при этом фактический баланс счета не меняется
  * 300 EUR разблокируется и отображаемый баланс клиента увеличивается, это reversal, фактический баланс счета также не меняется
  * 400 EUR списывается со счета клиента в treasure, отображаемый баланс не меняется, а фактический баланс уменьшается на 400 EUR

  *Все суммы указаны в EUR для упрощения расчета. На практике все операции в блокчейне выполняются только в криптовалюте.*
</Info>

# Clearings

## Что такое clearing

Clearing - это процесс сверки и взаиморасчетов, а также финального подтверждения операций между банком-эмитентом, эквайером, платежной системой и Holders на основе авторизаций. Обычно clearing по операции происходит в течение 24 часов.

## Роль clearing в платежном потоке

Clearing служит мостом между авторизацией и финальным settlement.\
Он отвечает за:

* **Сопоставление авторизаций и фактических операций**: подтверждает, какие именно авторизованные суммы нужно реально списать, с учетом возможных изменений, таких как partial clearing, отмены и возвраты.
* **Преобразование "обещания списать" в обязательство**: после clearing сумма перестает быть просто зарезервированной и становится подтвержденным требованием к счету клиента.
* **Обновление балансов в системе**: виртуальный баланс в интерфейсе и фактический баланс смарт-контракта или расчетного счета приводятся в соответствие с реальными данными из платежной системы и от банка-эмитента.

Иными словами, authorization говорит "эту операцию можно провести", clearing говорит "эту сумму нужно списать по данной операции", а settlement говорит "деньги окончательно перемещены и зафиксированы".

## Участники процесса

В clearing участвуют несколько сторон и компонентов:

* **Банк-эмитент карты** - отправляет clearing-события в Holders, то есть финальные данные транзакции после авторизации: суммы, комиссии, валюту и дату clearing.
* **Платежная система (Visa)** - задает правила и инфраструктуру обмена транзакциями между банком-эмитентом, эквайером и Holders, а также стандартизирует формат clearing-сообщений.
* **Holders Backend** - получает clearing-события, сопоставляет их с авторизациями, включает их в rollup и инициирует изменения в счете или контракте клиента.
* **Controller (on-chain компонент/сервис)** - на основе результатов clearing и rollup инициирует фактическое списание средств со смарт-контракта пользователя и перевод средств в соответствующий Treasure-контракт.
* **Клиентские смарт-контракты** - хранят средства пользователя; по итогам clearing и rollup с них списываются агрегированные суммы.
* **Treasure-кошельки** - получают агрегированные суммы после clearing, по токенам и сетям, и служат точкой накопления средств компании.

## Этапы clearing в Holders

Процесс clearing в Holders включает следующие этапы:

1. Банк-эмитент карты отправляет clearing-событие в систему Holders.
2. Backend Holders обрабатывает полученное событие и включает его в rollup транзакций, относящихся к соответствующему смарт-контракту.
3. После истечения заданного временного интервала информация передается в Controller.
4. Controller инициирует перевод средств со смарт-контракта в Treasure. Для каждой монеты используется отдельный Treasure-контракт.
5. Последующий вывод средств из Treasure возможен только на заранее авторизованные адреса, включенные в whitelist.

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

## Типы clearing

### Regular clearing

Стандартный процесс clearing, при котором сумма clearing совпадает или почти совпадает с исходной суммой транзакции.

### Partial clearing

Partial clearing происходит, когда исполняется только часть обязательств или транзакций. Это может происходить в следующих случаях:

* **Недостаточная ликвидность**: когда банк не может обработать все операции одновременно и закрывает только часть транзакций.
* **Постепенное исполнение**: когда договоры или транзакции предполагают выполнение в несколько этапов, а обязательства исполняются по мере появления средств.

### Over-clearing

Over-clearing означает ситуацию, когда итоговый settlement превышает первоначальные обязательства. Это может быть связано со следующими факторами:

* **Сложные финансовые операции**: например, при использовании производных финансовых инструментов или хеджирования, когда риски могут превышать первоначальные позиции.

# Returns и reversals

## Return

**Return** - это операция, инициированная мерчантом после завершения оплаты и clearing, в рамках которой средства по исходной транзакции возвращаются клиенту полностью или частично.\
**Характеристики return:**

* Выполняется после завершения clearing, когда средства уже были списаны
* Создает новую входящую операцию (`credit`) в выписке

## Returns в Holders

В Holders возвраты обрабатываются вручную после получения уведомления от банка-эмитента. Такой подход дает дополнительную защиту от мошеннических операций.\
**Особенности return:**

* Обычно возврат доходит до клиента в течение 30 дней после его инициации мерчантом
* Операцию выполняет авторизованный сотрудник Backoffice
* Возвращается только основная сумма платежа, комиссия не возвращается, так как покрывает операционные расходы Holders

<Info>
  **Важная особенность:** сумма возврата рассчитывается по курсу на момент возврата, а не на момент исходной оплаты.\
  **Пример:** клиент заплатил 100 TON. Мерчант инициировал возврат. Банк одобрил его и уведомил Holders. К этому моменту курс TON упал в два раза. Клиент получит 200 TON, за вычетом комиссии, то есть вдвое больше исходно потраченной суммы в криптовалюте.
</Info>

## Reversal

Reversal - это операция отмены авторизации до момента clearing. Во время reversal заблокированные средства освобождаются и снова становятся доступны на счете клиента без фактического движения денег между банком-эмитентом и эквайером.\
**Характеристики reversal:**

* Выполняется между стадиями authorization и clearing
* Отменяет резервирование суммы на счете
* Снимает блокировку средств без создания новой операции в выписке

## Reversals в Holders

В Holders reversals обрабатываются автоматически после получения уведомления от банка-эмитента.\
**Особенности reversal:**

* Возвращается полная сумма покупки, курс не пересчитывается
* Комиссия из reversal не удерживается


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