> 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/likvidnyi-steiking-afsui/architecture/packages-and-modules.md).

# Пакеты и модули

## Пакет AftermathLSD

<figure><img src="https://797346336-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGVGhO2cwkqPkT0zhfNMz%2Fuploads%2Fgit-blob-0b5b6b38f634c85bc9200541758c819796bac22d%2FScreenshot%202024-02-22%20at%2011.54.14%20AM.png?alt=media" alt=""><figcaption><p>Схема пакета AftermathLSD</p></figcaption></figure>

Функциональность пакета распределена между несколькими модулями. Ключевые модули описаны ниже:

## Модуль staked\_sui\_vault

Этот модуль — интерфейс для взаимодействия с протоколом. Он предоставляет основные точки входа для пользователей протокола. Доступна следующая функциональность:

1. Запрос стейкинга: пользователь передаёт протоколу монету SUI и сразу получает соответствующую сумму AFSUI по текущему курсу SUI <-> AFSUI для эпохи.
2. Запрос вывода из стейкинга: пользователь передаёт AFSUI и получает соответствующую сумму SUI. Есть два варианта. Обычный вывод из стейкинга, при котором пользователь получает SUI в начале следующей эпохи. Атомарный вывод из стейкинга, при котором пользователь получает SUI немедленно. Также можно повторно застейкать объект StakedSui.
3. Обработка смены эпохи: рабочий процесс фреймворка стейкинга Sui тесно связан с обработкой смены эпохи. Между каждыми двумя эпохами фреймворк Sui выполняет ряд действий. Важнейшие из них — сбор наград и активация стейков. Чтобы отразить это в протоколе, нужно вызвать crank-функцию. Из-за ограничений фреймворка Sui эту функцию может потребоваться вызвать несколько раз. Пока смена эпохи не обработана, протокол находится в неопределённом состоянии и не работает. Тот, кто вызывает crank-функцию, получает стимулирующую выплату. Чтобы обработка смены эпохи проходила гладко, Aftermath запускал бота, который отслеживал состояние сети Sui и своевременно инициировал обработку эпохи.
4. Обновление комиссии валидатора: если протоколу известен валидатор, этот валидатор получает объект Operation Capability, который позволяет изменять комиссию конкретного валидатора. Комиссия валидатора взимается с каждого выпущенного AFSUI и отправляется напрямую на адрес валидатора.

<figure><img src="https://797346336-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FGVGhO2cwkqPkT0zhfNMz%2Fuploads%2Fgit-blob-0c6ad3bdb6ac626ea8ecb66b78025fcc7b4a6442%2FScreenshot%202024-02-22%20at%2011.55.57%20AM.png?alt=media" alt=""><figcaption><p>Схема модуля stake_sui_vault протокола Aftermath LSD</p></figcaption></figure>

## Модуль actions

Модуль реализует бизнес-логику протокола, описанную выше в разделе о модуле staked\_sui\_vault.

## Модуль staked\_sui\_vault\_state

Модуль содержит фактическую реализацию хранилища staked sui. Он уполномочен выпускать и сжигать AFSUI. Он также отвечает за конфигурацию протокола. Его основная задача — хранить все объекты StakedSui и балансы SUI. Для организации объектов StakedSui используется сущность Storage.

## Модуль storage

Storage — это абстракция, которая позволяет хранить объекты StakedSui и реализует логику вывода из стейкинга. Вывод из стейкинга — ключевая часть протокола LSD, так как он определяет его эффективность. Для этого в storage есть очередь вывода из стейкинга, отсортированная по эффективности валидаторов в порядке возрастания, поэтому стейки неактивных и малоэффективных валидаторов выводятся первыми. Чтобы избежать мгновенного опустошения валидаторов, каждый вывод из стейкинга распределяется между несколькими валидаторами.

## Модуль validator

Модуль реализует логику объекта Operation Capability. Этот объект позволяет изменять значение комиссии конкретного валидатора.

Протокол Aftermath LSD использует несколько дополнительных пакетов.

## Пакет Safe

Пакет содержит один модуль под названием Safe. Эта сущность позволяет хранить объект любого типа и предоставляет изменяемую ссылку на него авторизованному модулю. Авторизован может быть только один модуль. Протокол LSD использует эту сущность для хранения AFSUI Treasury и предоставления авторизованного доступа из модуля staked sui vault state.

## Пакет ReferralVault

Пользователи протокола Aftermath LSD могут пользоваться реферальной системой. Модуль реализует логику управления отношениями «реферер — реферал» и сбора роялти.

## Пакет Treasury

Протокол взимает несколько видов комиссий. Сущность Treasury позволяет собирать определённую часть комиссии и позже использовать её для разных целей.

## Пакет Utilities

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

## Пакет LinkedSet

LinkedSet основан на реализации LinkedTable из фреймворка Sui. Эта сущность используется для реализации очереди вывода из стейкинга.

## Пакет SuiSytemUtils

Набор методов для взаимодействия с Sui System.
