---
title: "Аттестации"
description: "Описание аттестаций в Ethereum на основе Proof-of-Stake."
lang: ru
---

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

## Что такое аттестация? {#what-is-an-attestation}

Каждую [эпоху](/glossary/#epoch) (6,4 минуты) валидатор предлагает аттестацию в сеть. Аттестация предназначена для определенного слота в эпохе. Цель аттестации — проголосовать за видение цепи валидатором, в частности за самый последний обоснованный блок и первый блок в текущей эпохе (известные как контрольные точки `source` и `target`). Эта информация объединяется для всех участвующих валидаторов, что позволяет сети достичь консенсуса о состоянии блокчейна.

Аттестация содержит следующие компоненты:

- `aggregation_bits`: битовый список валидаторов, где позиция соответствует индексу валидатора в их комитете; значение (0/1) указывает, подписал ли валидатор `data` (т. е. активен ли он и согласен ли с предлагающим блок)
- `data`: детали, относящиеся к аттестации, как определено ниже
- `signature`: BLS-подпись, которая агрегирует подписи отдельных валидаторов

Первая задача для аттестующего валидатора — создать `data`. `data` содержит следующую информацию:

- `slot`: номер слота, к которому относится аттестация
- `index`: число, идентифицирующее, к какому комитету принадлежит валидатор в данном слоте
- `beacon_block_root`: корневой хеш блока, который валидатор видит в начале цепи (результат применения алгоритма выбора форка)
- `source`: часть голоса за финальность, указывающая, что валидаторы видят как самый последний обоснованный блок
- `target`: часть голоса за финальность, указывающая, что валидаторы видят как первый блок в текущей эпохе

Как только `data` создана, валидатор может изменить бит в `aggregation_bits`, соответствующий его собственному индексу валидатора, с 0 на 1, чтобы показать, что он участвовал.

Наконец, валидатор подписывает аттестацию и транслирует ее в сеть.

### Агрегированная аттестация {#aggregated-attestation}

Существуют значительные накладные расходы, связанные с передачей этих данных по сети для каждого валидатора. Поэтому аттестации от отдельных валидаторов агрегируются внутри подсетей перед более широкой трансляцией. Это включает в себя совместное агрегирование подписей, так что транслируемая аттестация включает в себя `data` консенсуса и единую подпись, сформированную путем объединения подписей всех валидаторов, которые согласны с этой `data`. Это можно проверить с помощью `aggregation_bits`, поскольку он предоставляет индекс каждого валидатора в его комитете (чей ID указан в `data`), который можно использовать для запроса отдельных подписей.

В каждой эпохе 16 валидаторов в каждой подсети выбираются в качестве `aggregators`. Агрегаторы собирают все аттестации, о которых они узнают через gossip-сеть, имеющие эквивалентные `data` их собственным. Отправитель каждой совпадающей аттестации записывается в `aggregation_bits`. Затем агрегаторы транслируют агрегированную аттестацию в более широкую сеть.

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

### Жизненный цикл включения аттестации {#attestation-inclusion-lifecycle}

1. Генерация
2. Распространение
3. Агрегация
4. Распространение
5. Включение

Жизненный цикл аттестации представлен на схеме ниже:

![attestation lifecycle](./attestation_schematic.png)

## Вознаграждения {#rewards}

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

Каждый из флагов участия может быть истинным (true) или ложным (false), в зависимости от отправленной аттестации и задержки ее включения.

Наилучший сценарий возникает, когда все три флага истинны, и в этом случае валидатор заработает (за каждый правильный флаг):

`reward += base reward * flag weight * flag attesting rate / 64`

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

### Базовое вознаграждение {#base-reward}

Базовое вознаграждение рассчитывается в соответствии с количеством аттестующих валидаторов и их эффективными балансами застейканного эфира:

`base reward = validator effective balance x 2^6 / SQRT(Effective balance of all active validators)`

#### Задержка включения {#inclusion-delay}

В то время, когда валидаторы голосовали за начало цепи (`block n`), `block n+1` еще не был предложен. Поэтому аттестации естественным образом включаются **на один блок позже**, так что все аттестации, проголосовавшие за то, что `block n` является началом цепи, были включены в `block n+1`, и **задержка включения** равна 1. Если задержка включения удваивается до двух слотов, вознаграждение за аттестацию уменьшается вдвое, поскольку для расчета вознаграждения за аттестацию базовое вознаграждение умножается на обратную величину задержки включения.

### Сценарии аттестации {#attestation-scenarios}

#### Отсутствующий голосующий валидатор {#missing-voting-validator}

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

#### Отсутствующий агрегатор {#missing-aggregator}

Всего в каждой эпохе 16 агрегаторов. Кроме того, случайные валидаторы подписываются на **две подсети на 256 эпох** и служат резервом на случай отсутствия агрегаторов.

#### Отсутствующий предлагающий блок {#missing-block-proposer}

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

## Дополнительная литература {#further-reading}

- [Аттестации в аннотированной спецификации консенсуса Виталика](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#attestationdata)
- [Аттестации на eth2book.info](https://eth2book.info/capella/part3/containers/dependencies/#attestationdata)

_Знаете ресурс сообщества, который помог вам? Отредактируйте эту страницу и добавьте его!_