> For the complete documentation index, see [llms.txt](https://docs.aftermath.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aftermath.finance/ru/bessrochnye-fyuchersy/architecture/builder-codes-front-end-fee.md).

# Билдер-коды (комиссия фронтенда)

Создайте собственный фронтенд и зарабатывайте на комиссиях

Билдер-коды позволяют любому стороннему интегратору без каких-либо разрешений зарабатывать комиссии с ордеров, которые он отправляет от имени пользователей. Торговые платформы, реферальные программы и white-label-решения могут зарабатывать на потоке ордеров, который они направляют в Aftermath.

### Обзор

**Билдер-коды** — это механизм распределения комиссий для интеграторов, работающих с Aftermath Perpetuals:

1. **Регистрация интегратора**: интегратор регистрируется один раз, глобально, и получает числовой `integratorId`
2. **Авторизация пользователем**: пользователи одобряют конкретных интеграторов и задают максимальную комиссию, которую готовы платить
3. **Отправка ордеров**: интеграторы отправляют ордера от имени пользователей, указывая свою комиссию (не выше одобренного максимума)

В отличие от реферальных кодов, билдер-коды применяются в реальном времени как часть ончейн-логики комиссий.

{% hint style="info" %}
**Изменения:** теперь интеграторы идентифицируются по числовому `integratorId`, а не по адресу, а регистрация выполняется одним глобальным шагом. Прежняя модель с хранилищем комиссий для каждого рынка, при которой для каждого рынка создавалось хранилище и накопленные комиссии нужно было забирать, удалена.
{% endhint %}

### Как это работает

#### Для пользователей

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

* Одобряйте интеграторов с максимальным лимитом комиссии для каждого
* Отзывайте разрешения в любой момент
* Задавайте разные лимиты комиссии для разных интеграторов

#### Для интеграторов

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

1. Зарегистрируйтесь как интегратор один раз (глобально, а не для каждого рынка)
2. Получите одобрение пользователей — каждый пользователь задаёт максимальную комиссию
3. Отправляйте ордера с `integratorId` и комиссией, которую нужно взимать

Создавать хранилище и забирать комиссии не нужно. Регистрация — это глобальный адрес интегратора, записанный в реестре бессрочных фьючерсов; этот адрес можно изменить в любой момент, не теряя `integratorId`.

#### Структура комиссий

* Комиссия интегратора взимается **сверх** обычных торговых комиссий. Одобрение пользователя ограничивает только эту дополнительную комиссию
* Комиссии взимаются с исполненного номинального объёма и следуют за ордером: они применяются, когда ордер исполняется сразу как тейкер, **и** когда он стоит в стакане и позже исполняется как мейкер
* Комиссии выражаются десятичной дробью: `0.0005` — это комиссия 0.05%
* Комиссия ордера не должна превышать `maxIntegratorFee`, который пользователь одобрил для этого интегратора. Ордера с более высокой комиссией или с комиссией интегратора, которого пользователь не одобрил, отклоняются ончейн
* Протокол устанавливает жёсткий верхний предел комиссии любого интегратора — **1.00%**

{% hint style="warning" %}
**Исполнения в роли мейкера приносят комиссии билдерам.** Справочник API на [aftermath.finance/docs](https://aftermath.finance/docs) всё ещё описывает `integratorFee` как применяемый «только к объёму тейкера» и всё ещё утверждает, что интегратору нужно хранилище для каждого рынка. Оба утверждения устарели; актуальна эта страница. Это подтверждает развёрнутый Move ABI: `perpetuals::events::FilledMakerOrder` в [move-interfaces](https://github.com/AftermathFinance/move-interfaces) содержит `integrator_id` и `integrator_fee_paid_usd` — точно так же, как `FilledTakerOrder`.
{% endhint %}

### Для разработчиков

**TypeScript.** Наш TypeScript SDK включает функции одобрения билдер-кодов, описанные здесь. Однократная регистрация интегратора выполняется через нативный API.

{% embed url="<https://docs.aftermath.finance/for-developers/typescript-sdk/products/perpetuals/perpetuals#builder-code-integration-methods>" %}

**API.** Эндпоинты билдер-кодов описаны в нашем справочнике API.

{% embed url="<https://aftermath.finance/docs>" %}

#### Эндпоинты API

Все эндпоинты билдер-кодов принимают POST-запросы с телом JSON. Базовый URL: `https://aftermath.finance`

Чтение регистрации и одобрений для аккаунта:

* `/api/perpetuals/builder-codes/integrator-registration`: сопоставляет `integratorId` с зарегистрированным `integratorAddress`
* `/api/perpetuals/builder-codes/integrator-config`: принимает `accountId` и `integratorId`, возвращает `{ exists, maxIntegratorFee }`

Формирование транзакций для настройки и одобрения:

* `/api/perpetuals/builder-codes/transactions/create-integrator-registration`: однократная глобальная регистрация, подписывается интегратором
* `/api/perpetuals/builder-codes/transactions/create-integrator-config`: пользователь одобряет интегратора и задаёт лимит комиссии
* `/api/perpetuals/builder-codes/transactions/remove-integrator-config`: пользователь отзывает одобрение интегратора

Пример: регистрация в качестве интегратора

```
## Request
POST https://aftermath.finance/api/perpetuals/builder-codes/transactions/create-integrator-registration
Content-Type: application/json

{}

## Response
{
  "txKind": "<base64-encoded TransactionKind>",
  "sponsorSignature": null
}
```

Идентификатор интегратора берётся ончейн из отправителя транзакции, поэтому адрес в тело запроса не передаётся. И `txKind` (для расширения существующей транзакции), и `sponsor` (для спонсирования через GasPool) необязательны во всех маршрутах транзакций билдер-кодов. Объект sponsor содержит `walletAddress`, `bytes` и `signature`, а также необязательный `gasBudget` в MIST; `bytes` — это base64 многоразового сообщения `Aftermath Terms and Conditions`.

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

```
## Request
POST https://aftermath.finance/api/perpetuals/builder-codes/transactions/create-integrator-config
Content-Type: application/json

{
  "accountId": "123n",
  "integratorId": 1,
  "maxIntegratorFee": 0.0005
}
```

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

```json
{
  "builderCode": { "integratorId": 1, "integratorFee": 0.0005 }
}
```

Ордера SL/TP и стоп-ордера принимают собственный `builderCode`, независимый от билдер-кода родительского ордера.

#### Процесс транзакции

Все эндпоинты транзакций возвращают сериализованный вид транзакции (transaction kind). Чтобы выполнить её ончейн:

1. Вызовите эндпоинт транзакции со своими параметрами
2. Прочитайте `txKind` из JSON-ответа
3. Соберите `Transaction` из `txKind` с помощью Sui SDK
4. Подпишите транзакцию своим кошельком
5. Отправьте её в сеть Sui

Если вы передали `sponsor`, ответ также содержит `sponsorSignature`. В этом случае `txKind` содержит байты `Transaction` в кодировке base64 BCS с уже прикреплённой оплатой газа. Подпишите эти байты и отправьте их вместе с подписью спонсора.

#### Режимы интеграции

Интегрировать билдер-коды можно тремя способами:

* Нативный API (`/api/perpetuals/*`): рекомендуется. Полный набор возможностей, включая регистрацию, одобрение и формирование транзакций.
* TypeScript SDK (`aftermath-ts-sdk`): типизированные вспомогательные методы для одобрения билдер-кодов. Однократная регистрация выполняется через нативный API.
* CCXT-совместимый API (`/api/ccxt/*`): эндпоинты в стиле бирж для ботов, следующих стандарту CCXT.
