> 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/farming/architecture/stake-position.md).

# Позиция стейкинга

## Пакет staked position

Этот пакет предоставляет интерфейс для работы с позициями стейкинга. Основная точка входа — структура StakedPosition.

## Открытие позиции

Пользователь может открыть позицию с помощью функции stake. При открытии позиции пользователь должен указать период блокировки в миллисекундах. Период блокировки должен находиться в границах, заданных при настройке хранилища Afterburner.

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

## Сбор наград

Сбор наград проходит в три этапа:

* пользователь вызывает функцию begin\_harvest\<STAKE>;
* для каждой награды пользователь вызывает функцию harvest\_rewards\<STAKE, REWARD>. Она позволяет получить награды, накопленные для типа \`Coin\<REWARD>\`;
* для завершения процесса пользователь вызывает функцию end\_harvest, которая генерирует соответствующее событие.

В реализации Strict пользователь может получить награды в любой момент.

В реализации Relaxed пользователь может получить награды только после разблокировки позиции.

## Увеличение стейка

В любой момент пользователь может увеличить застейканную сумму позиции с помощью функции deposit\_principal. После увеличения стейка заблокированной позиции период блокировки пересчитывается.

## Вывод стейка

Пользователь может вывести застейканную основную сумму с помощью функции withdraw\_principal\<STAKE>. Для вывода позиция должна быть разблокирована.

Позицию, застейканную в хранилище Afterburner типа Strict, нельзя разблокировать до окончания периода блокировки.

## Продление блокировки позиции

Пользователь может увеличить период блокировки с помощью функции renew\_lock.

## Объединение позиций

Пользователь может объединить две позиции с помощью функции join. У итоговой позиции будет самое позднее время начала блокировки и более длительный из двух периодов блокировки.

## Разделение позиций

Пользователь может разделить позицию на две с помощью функции split. Накопленные награды распределяются между двумя позициями пропорционально отделяемой сумме относительно общей застейканной суммы. Все остальные параметры остаются такими же, как у исходной позиции.

## Закрытие позиции

Пользователь может удалить неактивную позицию с помощью функции destroy. В удаляемой позиции не должно оставаться ни основной суммы, ни наград.
