# Делегаты

Делегаты – это участники, которым другие участники ДАО VIZ доверили поддержание блокчейна: создание и подписание блоков, управление экономическими и другими параметрами, а также обновление кода блокчейна. Доверие к делегату выражается в количестве отданных за него голосов. При этом за один голос принимается один токен shares. То есть, чем больше доля аккаунта в ДАО, тем выше его влияние на выборы делегатов.

Деятельность делегатов разделена на раунды. За один раунд создается 21 блок с интервалом в 3 секунды, таким образом, продолжительность одного раунда составляет 63 секунды. В одном раунде могут принимать участие не более 21 делегата, которые в порядке очереди создают и подписывают новые блоки. За каждый созданный блок делегат получает награду в соответствии с моделью эмиссии.

Один раунд включает 11 топ-делегатов (которые набрали наибольшее количество голосов и сменяются только в том случае, если кто-то набрал больше голосов) и 10 делегатов поддержки, которые автоматически выбираются из всех остальных делегатов.

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

# Пенальти и исключение делегата из цепи

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

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

Кроме того, возможен иной вариант исключения делегата из цепочки: если делегат пропустит более 200 блоков подряд, то он будет исключён из цепи до тех пор, пока вручную не исправит проблему, и пока не истечёт срок действия всех штрафов, заработанных за пропуск этих двухсот блоков.

# Голосование за делегатов

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

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

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

Проголосовать можно максимум за 100 делегатов одновременно, при этом сила голоса распределяется равномерно между всеми ними (это и называется Fair DPOS). То есть, если участник проголосовал за 4 делегатов, то каждому достанется 25% от голосов аккаунта.

# Управление параметрами сети

Роль делегатов состоит в поддержании работоспособности сети, принятии обновления программного обеспечения и управлении параметрами блокчейна. Делегаты могут управлять следующими параметрами:

account_creation_fee – минимальная стоимость создания нового аккаунта в ликвидных токенах;

create_account_delegation_ratio – коэффициент, который показывает, во сколько раз больше токенов нужно затратить при создании аккаунта через делегирование долевых токенов, чем при создании за ликвидные токены (shares = account_creation_fee * create_account_delegation_ratio);

create_account_delegation_time – минимальный промежуток времени, по окончании которого пользователь может вернуть свои shares, затраченные на создание аккаунта с помощью делегирования (при обычном делегировании доля может быть возвращена через 1 день);

maximum_block_size – максимальный размер блока;

min_delegation – минимальное количество делегируемых shares;

bandwidth_reserve_below – максимальное количество shares аккаунта, при котором ему выделяется резервная пропускная способность;

bandwidth_reserve_percent – процент резервирования пропускной способности от всего канала для аккаунтов с количеством shares меньшим, чем bandwidth_reserve_below (может быть равен 0);

vote_accounting_min_rshares – минимальное количество rshares, при которых награда будет больше 0;

committee_request_approve_min_percent – минимальный процент от всех голосов, отданных за заявку в Комитете, при котором она считается подтвержденной;

inflation_witness_percent – процент от эмиссии, который распределяется между 21 делегатом, вошедшими в раунд подписи блоков;

inflation_ratio_committee_vs_reward_fund – процент оставшейся эмиссии, идущий в Комитет;

inflation_recalc_period – количество блоков, через которое блокчейн проверяет актуальность эмиссионных параметров;

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

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

witness_miss_penalty_duration - количество секунд, через которое делегату возвращается количество голосов на witness_miss_penalty_percent процентов, если они были уменьшены из-за пропуска блоков.

Для обновления программного обеспечения блокчейна требуется согласие 17 делегатов в раунде. Значения голосуемых параметров равны медиане значений, установленных 21 делегатом в раунде.

Подробное описание голосуемых параметров

Ниже представлена таблица типов, которые использует блокчейн:

Тип Пример Диапазон Описание
VIZ актив "1.000 VIZ" от 0.001 VIZ Количество ликвидных токенов. Строка с десятичным числом с не более чем 3 цифрами после точки и обязательной припиской VIZ через пробел.
Пример: "1.123 VIZ"
SHARES актив "1.000000 SHARES" от 0.000001 SHARES Количество долевых токенов. Строка с десятичным числом с не более чем 6 цифрами после точки и обязательной припиской SHARES через пробел.
Пример: "1.123456 SHARES"
µShares 1000000 от 0 Количество микродолевых токенов. 1 µShares = 0.000001 SHARES; 1000000 µShares = 1.000000 SHARES. Целое число.
Процент 1000 от 1 до 10000 Процент в целом числовом формате. 0.01% = 1; 1% = 100; 100% = 10000;
Целое 1 Целое число

# account_creation_fee

Добавлено: 1.0.0

Формат: VIZ актив

Чтобы стать держателем долевого токена, необходимо зарегистрировать аккаунт. Аккаунт – это именованный «кошелёк», на котором хранятся средства участника - как ликвидные, так и долевые. Регистрация аккаунта не бесплатна: чтобы создать новый аккаунт, кто-то из уже существующих участников ДАО VIZ должен отправить транзакцию регистрации аккаунта и заплатить ликвидные токены, которые затем будут конвертированы в долевые токены нового аккаунта. Минимальное количество токенов, которое должен заплатить создатель, указаны в параметре account_creation_fee.

# create_account_delegation_ratio

Добавлено: 1.0.0

Формат: Целое

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

Этот параметр отвечает за то, во сколько раз больше нужно потратить токенов при создании аккаунта через делегирование доли (shares = account_creation_fee * create_account_delegation_ratio).

# create_account_delegation_time

Добавлено: 1.0.0

Формат: Целое

При создании аккаунта регистратор не может вернуть свою долю сразу, для этого ему придется ждать столько секунд, сколько указано в create_account_delegation_time.

# maximum_block_size

Добавлено: 1.0.0

Формат: Целое

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

# min_delegation

Добавлено: 1.0.0

Формат: VIZ актив

Пользователь не может делегировать другому аккаунту количество shares меньшее, чем указано в min_delegation, в пересчёте на ликвидные токены.

# bandwidth_reserve_below

Добавлено: 1.0.0

Формат: SHARES актив

Если у аккаунта количество shares меньше, чем показатель bandwidth_reserve_below, то ему выделяется дополнительная пропускная способность. Это полезно для поддержания новичков в системе, иначе они не могли бы проводить операции при высокой загрузке пропускной способности блокчейна. С другой стороны, слишком щедрое выделение возможностей блокчейна микроаккаунтам может привести к спаму со стороны злоумышленников.

# bandwidth_reserve_percent

Добавлено: 1.0.0

Формат: Процент

Процент от всей пропускной способности сети, который зарезервирован для аккаунтов с количеством shares меньшим, чем bandwidth_reserve_below. Если bandwidth_reserve_percent равен 0, то аккаунты с количеством shares меньшим, чем bandwidth_reserve_below, не смогут проводить транзакции.

# vote_accounting_min_rshares

Добавлено: 1.0.0

Формат: µShares

Минимальное количество rshares, при которых награда будет больше 0.

Рассчитать rshares конкретного аккаунта можно по формуле

rshares = s * e%

где s – количество эффективных shares, e% – процент от эффективных shares и одновременно количество затрачиваемой энергии при награде.

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

# committee_request_approve_min_percent

Добавлено: 1.0.0

Формат: Процент

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

# inflation_witness_percent

Добавлено: 2.0.0

Формат: Процент

Процент от эмиссии, который распределяется между 21 делегатом, вошедшими в раунд подписи блоков.

# inflation_ratio_committee_vs_reward_fund

Добавлено: 2.0.0

Формат: Целое

Процент эмиссии, оставшейся после выделения средств делегатам, идущий в фонд Комитета (остальное направляется в фонд наград).

# inflation_recalc_period

Добавлено: 2.0.0

Формат: Целое

Количество блоков, через которое блокчейн проверяет актуальность эмиссионных параметров (inflation_witness_percent, inflation_ratio_committee_vs_reward_fund). Если делегаты изменили какой-то из этих параметров, то блокчейн будет учитывать их не раньше, чем через inflation_recalc_period с последней проверки.

# data_operations_cost_additional_bandwidth

Добавлено: 2.2.0

Формат: Целое

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

Это значит, что аккаунт затратит на отправку транзакции в data_operations_cost_additional_bandwidth раз больше байт, чем она весит на самом деле (размер транзакции * data_operations_cost_additional_bandwidth). Смотрите раздел "Наценка на безграничные транзакции".

# witness_miss_penalty_percent

Добавлено: 2.2.0

Формат: Процент

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

Смотрите раздел "Пенальти".

# witness_miss_penalty_duration

Количество секунд, через которое делегату возвращается количество голосов на witness_miss_penalty_percent процентов, если они были уменьшены из-за пропуска блоков. Смотрите раздел "Пенальти".