Концепции APTOS | Стэйкинг
Tags: aptos, blockchain, webdev, tutorial
Published: 2022-08-30 15:26:27

## Концепция

> **СОВЕТ**
> Мы настоятельно рекомендуем вам прочитать раздел "[Жизнь транзакции](https://aptos.dev/guides/basics-life-of-txn/#consensus)", посвященный консенсусу, прежде чем продолжить.

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

Валидатор может участвовать в процессе консенсуса. Однако право голоса валидатор может получить только тогда, когда он сделает стейк, т.е. передаст свои полезные coin в доверительное управление. Чтобы стимулировать валидаторов к участию в процессе консенсуса, вес голоса каждого валидатора делается пропорциональным размеру его стейка. В обмен на это валидатор получает вознаграждение, пропорциональное размеру его доли. Таким образом, производительность сети, т.е. консенсус, соответствует интересам валидатора, т.е. вознаграждению.

Однако, когда валидатор вносит очень большую сумму полезных coin в качестве условного депозита, это дает ему достаточно большой вес голоса, чтобы контролировать результаты консенсуса. Это дает право валидатору угрожать безопасности сети блокчейн, например, одобрив мошенническую транзакцию. В блокчейне Aptos существует ограничение на сумму, которую может поставить на кон любой валидатор, чтобы не дать возможности одному валидатору стать мошенником. Более того, ставка смягчает такие атаки на безопасность, поскольку недобросовестные валидаторы должны быть готовы отказаться от вознаграждения и даже от оценки своих активов, чтобы атаковать сеть.

Таким образом, стейкинг в блокчейне Aptos способствует достижению консенсуса и одновременно защищает сеть блокчейна.

В остальной части этого документа представлено, как стейкинг работает в блокчейне Aptos.

## Стейкинг в блокчейне Aptos

> **СТЕЙКИНГ И УПРАВЛЕНИЕ В АИТ-3**
> Для пошагового описания процесса создания стейкинга и голосования см. раздел "[Шаги в AIT-3](https://aptos.dev/concepts/staking#:~:text=and%20voting%2C%20see-,Steps%20in%20AIT%2D3,-.)".

**Как кастодиан может стейкать на Aptos?**
Модуль Aptos стейкинг определяет способность, которая представляет право собственности. См. https://github.com/aptos-labs/aptos-core/blob/0daade4f734d1ba29a896b00d7ddde2249e87970/aptos-move/framework/aptos-framework/sources/configs/stake.move#L85.

Этот ресурс `OwnerCapability` можно использовать для управления пулом колов. Поддерживаются три персоны: владелец, оператор и избиратель. Используя эту модель владелец-оператор-избиратель, кастодиан может взять на себя роль владельца и делать стейкинг на блокчейне Aptos, а также участвовать в управлении Aptos. Эта модель позволяет создавать сервисы делегирования и стейкинга, поскольку владелец может предоставлять средства персонам валидатора и избирателя.

В данном разделе описывается, как это работает, на примере Bob и Alice.

**Владелец**
Владелец - это владелец средств. Например, Bob создает учетную запись на блокчейне Aptos. Теперь у Bob есть ресурс `OwnerCapability`. Bob может присвоить адрес оператора своей учётной записи - учётной записи Alice, оператора доверенной ноды, чтобы назначить Alice в качестве валидатора.

Как владелец:

- Bob владеет средствами, которые будут использоваться для стейкинга.
- Только Bob может пополнять, разблокировать или выводить средства.
- Только Bob может продлить период блокировки.
- Bob может сменить оператора ноды Alice на другого оператора ноды в любое время, когда Bob этого захочет.
- Вознаграждение будет зачислено на учетную запись Bob'а (владельца).

**Оператор**
Оператор ноды назначается владельцем фонда для управления нодой валидатора. Две персоны, владелец и оператор, могут быть двумя разными структурами или одной и той же. Например, Alice (оператор) управляет нодой валидатора, действуя по указанию Bob, владельца фонда.

Как оператор:

- Alice имеет права только на то, чтобы присоединиться к набору валидаторов или покинуть его.
- Как валидатор, Alice будет выполнять функцию валидации.
- Alice имеет права на изменение ключа консенсуса и сетевых адресов. Ключ консенсуса используется Alice для участия в процессе консенсуса валидатора, т.е. для голосования и предложения блока. Alice разрешено менять ("вращать") этот ключ в случае его компрометации.
- Однако Alice не может перемещать средства (если только Alice не является владельцем, т.е. у Alice есть ресурс `OwnerCapability`.

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

> **УПРАВЛЕНИЕ**
> В этом документе описывается стейкинг. Как участвовать в управлении сети Aptos по модели "владелец-избиратель" смотрите в разделе "[Управление](https://aptos.dev/concepts/governance/)".

## Присоединение к группе валидаторов

Участие в качестве ноды-валидатора в сети Aptos происходит следующим образом:

1. Запустите ноду валидатора и соответствующим образом настройте параметры внутри сети.
2. Внесите свои средства в виде Aptos coins в качестве стейка или поручите это сервису стейкинга. Размер стейка должен быть не менее минимально необходимой суммы.
3. Пройдите валидацию и получите вознаграждение.
4. Ваш стейк автоматически блокируется на определенный срок (установленный управлением Aptos) и автоматически возобновляется по истечении срока действия. Вы не сможете снять ни одной из поставленных сумм до истечения срока блокировки. См. https://github.com/aptos-labs/aptos-core/blob/00a234cc233b01f1a7e1680f81b72214a7af91a9/aptos-move/framework/aptos-framework/sources/stake.move#L728.

> **ПРИСОЕДИНЕНИЕ К ГРУППЕ ВАЛИДАТОРОВ**
> Пошаговые инструкции по присоединению к набору валидаторов см. в разделе: [Присоединение к группе валидаторов](https://aptos.dev/nodes/ait/connect-to-testnet/#joining-validator-set).

## Минимальный и максимальный стейк
Чтобы стать участником валидатора, вы должны застекать на минимальную сумму. Более того, вы можете застейкать только до максимальной суммы стейка.

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

> **КОГДА СУММА СТЕЙКА ОПУСКАЕТСЯ НИЖЕ МИНИМАЛЬНОЙ**
> Если после присоединения к набору валидаторов в начале эпохи ваш стейк упадет ниже минимально необходимой суммы, то вы будете удалены из числа валидаторов. В текущей версии стакинга на блокчейне Aptos не существует возможности того, что ваш стейк упадет ниже требуемого минимума до истечения периода блокировки. В настоящее время слэшинг не поддерживается.

## Период автоматической блокировки

Когда вы присоединяетесь к группе валидаторов, ваша стейк автоматически блокируется на определенный срок, который устанавливается управлением Aptos.

## Автоматическое продление периода блокировки

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

## Разблокировка стейка

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

> **УСТАНАВЛИВАЕТСЯ УПРАВЛЕНИЕМ**
> Продолжительность блокировки определяется управлением Aptos, т.е. соглашениями, за которые голосуют члены сообщества Aptos, а не какой-либо специальной организацией, например, Aptos Labs.

## Эпоха
Эпоха в блокчейне Aptos определяется как период времени в секундах, в течение которого валидаторы голосуют за определенное количество блоков, обновляют набор валидаторов и распределяют вознаграждение между валидаторами.

> **ПОДСКАЗКА**
> В настоящее время эпоха в блокчейне Aptos определяется как 3600 секунд (один час).

## Триггеры в начале эпохи

> **ПОДСКАЗКА**
> Полный код см. на сайте https://github.com/aptos-labs/aptos-core/blob/0daade4f734d1ba29a896b00d7ddde2249e87970/aptos-move/framework/aptos-framework/sources/configs/stake.move#L862.

В начале каждой эпохи запускаются следующие ключевые события:

- Обновление набора валидаторов путем добавления ожидающих активных валидаторов в набор активных валидаторов и удаления ожидающих неактивных валидаторов из набора активных валидаторов.
- Переместите любой ожидающий активный стейк в активный стейк, а любой ожидающий неактивный стейк - в неактивный стейк.
- Голосующая сила пула стейкинга в этой новой эпохе обновляется до общей суммы активных стейков.
- Автоматически обновить блокировку валидатора для валидаторов, которые все еще будут в наборе валидаторов в следующей эпохе.
- Сила голоса каждого валидатора в наборе валидаторов обновляется до силы голоса соответствующего пула стейкинга.
- Вознаграждения распределяются между валидаторами, которые участвовали в предыдущей эпохе.

## Награды
Награды за стейкинг рассчитываются с помощью `rewards_rate`, годовой процентной доходности, используя два следующих числа:

- Ваша текущая общая застейканая сумма .
- Ваше оставшееся время блокировки.

Награды начисляются в виде сложного процента от текущей суммы стейка.

> **УСТАНАВЛИВАЕТСЯ УПРАВЛЕНИЕМ**
> Rewards_rate устанавливается управлением Aptos.

## Награды выплачиваются каждую эпоху

Награды выплачиваются каждую эпоху. Любая награда, которую вы заработали в конце текущей эпохи, добавляется к вашей сумме стейка. Вознаграждение в конце следующей эпохи рассчитывается на основе увеличенной суммы стейкинга (т.е. первоначальная сумма стейкинга плюс добавленная награда), и так далее.

## Формула наград
Ниже приведена формула, используемая для расчета наград:

```
Reward = Maximum possible reward * (Remaining lockup / Maximum lockup) * (Number of successful votes / Total number of blocks in the current epoch)

```
где:

```
rewards_rate = Maximum possible reward * (Remaining lockup / Maximum lockup)
```

Следовательно, коэффициент `reward_rate` будет увеличиваться, если вы увеличиваете оставшийся период блокировки, и в конечном итоге достигнет максимума, когда оставшийся период блокировки будет равен максимальному периоду блокировки.

## Награды используют оставшийся период блокировки
Как вы можете видеть выше, формула расчета `rewards_rate` основана на оставшемся периоде блокировки. Например, если вы начали с двухлетним периодом блокировки, то в начале ваш оставшийся период блокировки составляет два года. Через три дня (`3*24` эпохи) ваш оставшийся срок блокировки составит два года минус три дня.

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

## Награды, основанные на результатах голосования

При расчете вознаграждения также используются результаты вашего голосования. Как только вы попадаете в число валидаторов, вы можете голосовать в каждую эпоху. Чем стабильнее вы голосуете, т.е. голосуете в каждую эпоху, без пропусков, тем большее количество голосов вы получаете. Это право голоса используется для расчета вашего вознаграждения.

Для каждой эпохи эффективность вашего голосования определяется следующим образом:

- Ведется текущий подсчет ваших пропущенных голосов, `validator_missed_votes_counts`.
- Количество успешно отданных вами голосов рассчитывается следующим образом:

```
Total number of successful votes = Total number of blocks in the epoch - Total number of your missed votes in the current epoch
```
Следовательно:

```
Reward = rewards_rate * (Number of successful votes / Total number of blocks in the current epoch)
```

> **ПОДСКАЗКА**
> Количество пропущенных голосов валидатора не влияет на то, находится ли он в наборе валидаторов или нет. Количество пропущенных голосов используется только для расчета вознаграждения по приведенной выше формуле.

## Поддержание высоких вознаграждений
Вы можете предотвратить постепенное уменьшение вознаграждения, регулярно продлевая период блокировки. Вы можете продлить или возобновить период блокировки в любое время без каких-либо разрешений.

Например, если вы заблокировали активы на два года. Через месяц вы получите немного меньше вознаграждения, потому что оставшийся срок блокировки будет меньше (два года минус один месяц). Однако, если до истечения месяца вы продлите срок блокировки на один месяц, доведя его до двух лет, то ваше вознаграждение в конце месяца не уменьшится, поскольку оно будет рассчитано исходя из увеличенного срока блокировки в два года.

> **ПОДСКАЗКА**
> На все ваши вознаграждения также распространяется период блокировки, поскольку они добавляются к первоначальной сумме ставки. Следовательно, вы не сможете снять свои вознаграждения, пока не истечет срок блокировки.

## ВЫХОД ИЗ ЧИСЛА ВАЛИДАТОРОВ

> **ПОДСКАЗКА**
> Посмотрите модуль Aptos Stake на языке Move здесь: https://github.com/aptos-labs/aptos-core/blob/00a234cc233b01f1a7e1680f81b72214a7af91a9/aptos-move/framework/aptos-framework/sources/stake.move.

В любой момент вы можете вызвать следующую последовательность функций, чтобы оставить валидатор установленным:
Вызвать `Stake::unlock`, чтобы разблокировать застеканую сумму , и
либо вызвать `Stake::withdraw` для снятия застейканной суммы в следующую эпоху, либо вызвать `Stake::leave_validator_set`.

> **ВЫХОД ИЗ НАБОРА ВАЛИДАТОРА**
> Пошаговые инструкции о том, как покинуть набор валидаторов, см. в разделе: [Выход из набора валидаторов](https://aptos.dev/concepts/staking#:~:text=Leaving%20Validator%20Set).

## Повторное подключение к числу валидаторов

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